locktorture: Make statistics generic
The statistics structure can serve well for both reader and writer locks, thus simply rename some fields that mention 'write' and leave the declaration of lwsa. Signed-off-by: Davidlohr Bueso <dbueso@suse.de> Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
This commit is contained in:
parent
f095bfc0ea
commit
1e6757a921
|
@ -78,11 +78,11 @@ static struct task_struct **writer_tasks;
|
||||||
static int nrealwriters_stress;
|
static int nrealwriters_stress;
|
||||||
static bool lock_is_write_held;
|
static bool lock_is_write_held;
|
||||||
|
|
||||||
struct lock_writer_stress_stats {
|
struct lock_stress_stats {
|
||||||
long n_write_lock_fail;
|
long n_lock_fail;
|
||||||
long n_write_lock_acquired;
|
long n_lock_acquired;
|
||||||
};
|
};
|
||||||
static struct lock_writer_stress_stats *lwsa;
|
static struct lock_stress_stats *lwsa; /* writer statistics */
|
||||||
|
|
||||||
#if defined(MODULE)
|
#if defined(MODULE)
|
||||||
#define LOCKTORTURE_RUNNABLE_INIT 1
|
#define LOCKTORTURE_RUNNABLE_INIT 1
|
||||||
|
@ -250,7 +250,7 @@ static struct lock_torture_ops mutex_lock_ops = {
|
||||||
*/
|
*/
|
||||||
static int lock_torture_writer(void *arg)
|
static int lock_torture_writer(void *arg)
|
||||||
{
|
{
|
||||||
struct lock_writer_stress_stats *lwsp = arg;
|
struct lock_stress_stats *lwsp = arg;
|
||||||
static DEFINE_TORTURE_RANDOM(rand);
|
static DEFINE_TORTURE_RANDOM(rand);
|
||||||
|
|
||||||
VERBOSE_TOROUT_STRING("lock_torture_writer task started");
|
VERBOSE_TOROUT_STRING("lock_torture_writer task started");
|
||||||
|
@ -261,9 +261,9 @@ static int lock_torture_writer(void *arg)
|
||||||
schedule_timeout_uninterruptible(1);
|
schedule_timeout_uninterruptible(1);
|
||||||
cur_ops->writelock();
|
cur_ops->writelock();
|
||||||
if (WARN_ON_ONCE(lock_is_write_held))
|
if (WARN_ON_ONCE(lock_is_write_held))
|
||||||
lwsp->n_write_lock_fail++;
|
lwsp->n_lock_fail++;
|
||||||
lock_is_write_held = 1;
|
lock_is_write_held = 1;
|
||||||
lwsp->n_write_lock_acquired++;
|
lwsp->n_lock_acquired++;
|
||||||
cur_ops->write_delay(&rand);
|
cur_ops->write_delay(&rand);
|
||||||
lock_is_write_held = 0;
|
lock_is_write_held = 0;
|
||||||
cur_ops->writeunlock();
|
cur_ops->writeunlock();
|
||||||
|
@ -281,17 +281,17 @@ static void lock_torture_printk(char *page)
|
||||||
bool fail = 0;
|
bool fail = 0;
|
||||||
int i;
|
int i;
|
||||||
long max = 0;
|
long max = 0;
|
||||||
long min = lwsa[0].n_write_lock_acquired;
|
long min = lwsa[0].n_lock_acquired;
|
||||||
long long sum = 0;
|
long long sum = 0;
|
||||||
|
|
||||||
for (i = 0; i < nrealwriters_stress; i++) {
|
for (i = 0; i < nrealwriters_stress; i++) {
|
||||||
if (lwsa[i].n_write_lock_fail)
|
if (lwsa[i].n_lock_fail)
|
||||||
fail = true;
|
fail = true;
|
||||||
sum += lwsa[i].n_write_lock_acquired;
|
sum += lwsa[i].n_lock_acquired;
|
||||||
if (max < lwsa[i].n_write_lock_fail)
|
if (max < lwsa[i].n_lock_fail)
|
||||||
max = lwsa[i].n_write_lock_fail;
|
max = lwsa[i].n_lock_fail;
|
||||||
if (min > lwsa[i].n_write_lock_fail)
|
if (min > lwsa[i].n_lock_fail)
|
||||||
min = lwsa[i].n_write_lock_fail;
|
min = lwsa[i].n_lock_fail;
|
||||||
}
|
}
|
||||||
page += sprintf(page, "%s%s ", torture_type, TORTURE_FLAG);
|
page += sprintf(page, "%s%s ", torture_type, TORTURE_FLAG);
|
||||||
page += sprintf(page,
|
page += sprintf(page,
|
||||||
|
@ -441,8 +441,8 @@ static int __init lock_torture_init(void)
|
||||||
goto unwind;
|
goto unwind;
|
||||||
}
|
}
|
||||||
for (i = 0; i < nrealwriters_stress; i++) {
|
for (i = 0; i < nrealwriters_stress; i++) {
|
||||||
lwsa[i].n_write_lock_fail = 0;
|
lwsa[i].n_lock_fail = 0;
|
||||||
lwsa[i].n_write_lock_acquired = 0;
|
lwsa[i].n_lock_acquired = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Start up the kthreads. */
|
/* Start up the kthreads. */
|
||||||
|
|
Loading…
Reference in New Issue