33
33
MODULE_LICENSE ("GPL" );
34
34
MODULE_AUTHOR (
"Paul E. McKenney <[email protected] >" );
35
35
36
- torture_param (int , nwriters_stress , -1 ,
37
- "Number of write-locking stress-test threads" );
38
- torture_param (int , nreaders_stress , -1 ,
39
- "Number of read-locking stress-test threads" );
36
+ torture_param (int , nwriters_stress , -1 , "Number of write-locking stress-test threads" );
37
+ torture_param (int , nreaders_stress , -1 , "Number of read-locking stress-test threads" );
38
+ torture_param (int , long_hold , 100 , "Do occasional long hold of lock (ms), 0=disable" );
40
39
torture_param (int , onoff_holdoff , 0 , "Time after boot before CPU hotplugs (s)" );
41
- torture_param (int , onoff_interval , 0 ,
42
- "Time between CPU hotplugs (s), 0=disable" );
43
- torture_param (int , shuffle_interval , 3 ,
44
- "Number of jiffies between shuffles, 0=disable" );
40
+ torture_param (int , onoff_interval , 0 , "Time between CPU hotplugs (s), 0=disable" );
41
+ torture_param (int , shuffle_interval , 3 , "Number of jiffies between shuffles, 0=disable" );
45
42
torture_param (int , shutdown_secs , 0 , "Shutdown time (j), <= zero to disable." );
46
- torture_param (int , stat_interval , 60 ,
47
- "Number of seconds between stats printk()s" );
43
+ torture_param (int , stat_interval , 60 , "Number of seconds between stats printk()s" );
48
44
torture_param (int , stutter , 5 , "Number of jiffies to run/halt test, 0=disable" );
49
45
torture_param (int , rt_boost , 2 ,
50
- "Do periodic rt-boost. 0=Disable, 1=Only for rt_mutex, 2=For all lock types." );
46
+ "Do periodic rt-boost. 0=Disable, 1=Only for rt_mutex, 2=For all lock types." );
51
47
torture_param (int , rt_boost_factor , 50 , "A factor determining how often rt-boost happens." );
52
- torture_param (int , verbose , 1 ,
53
- "Enable verbose debugging printk()s" );
48
+ torture_param (int , verbose , 1 , "Enable verbose debugging printk()s" );
54
49
torture_param (int , nested_locks , 0 , "Number of nested locks (max = 8)" );
55
50
/* Going much higher trips "BUG: MAX_LOCKDEP_CHAIN_HLOCKS too low!" errors */
56
51
#define MAX_NESTED_LOCKS 8
@@ -120,7 +115,7 @@ static int torture_lock_busted_write_lock(int tid __maybe_unused)
120
115
121
116
static void torture_lock_busted_write_delay (struct torture_random_state * trsp )
122
117
{
123
- const unsigned long longdelay_ms = 100 ;
118
+ const unsigned long longdelay_ms = long_hold ? long_hold : ULONG_MAX ;
124
119
125
120
/* We want a long delay occasionally to force massive contention. */
126
121
if (!(torture_random (trsp ) %
@@ -198,16 +193,18 @@ __acquires(torture_spinlock)
198
193
static void torture_spin_lock_write_delay (struct torture_random_state * trsp )
199
194
{
200
195
const unsigned long shortdelay_us = 2 ;
201
- const unsigned long longdelay_ms = 100 ;
196
+ const unsigned long longdelay_ms = long_hold ? long_hold : ULONG_MAX ;
197
+ unsigned long j ;
202
198
203
199
/* We want a short delay mostly to emulate likely code, and
204
200
* we want a long delay occasionally to force massive contention.
205
201
*/
206
- if (!(torture_random (trsp ) %
207
- ( cxt . nrealwriters_stress * 2000 * longdelay_ms )))
202
+ if (!(torture_random (trsp ) % ( cxt . nrealwriters_stress * 2000 * longdelay_ms ))) {
203
+ j = jiffies ;
208
204
mdelay (longdelay_ms );
209
- if (!(torture_random (trsp ) %
210
- (cxt .nrealwriters_stress * 2 * shortdelay_us )))
205
+ pr_alert ("%s: delay = %lu jiffies.\n" , __func__ , jiffies - j );
206
+ }
207
+ if (!(torture_random (trsp ) % (cxt .nrealwriters_stress * 200 * shortdelay_us )))
211
208
udelay (shortdelay_us );
212
209
if (!(torture_random (trsp ) % (cxt .nrealwriters_stress * 20000 )))
213
210
torture_preempt_schedule (); /* Allow test to be preempted. */
@@ -322,7 +319,7 @@ __acquires(torture_rwlock)
322
319
static void torture_rwlock_write_delay (struct torture_random_state * trsp )
323
320
{
324
321
const unsigned long shortdelay_us = 2 ;
325
- const unsigned long longdelay_ms = 100 ;
322
+ const unsigned long longdelay_ms = long_hold ? long_hold : ULONG_MAX ;
326
323
327
324
/* We want a short delay mostly to emulate likely code, and
328
325
* we want a long delay occasionally to force massive contention.
@@ -455,14 +452,12 @@ __acquires(torture_mutex)
455
452
456
453
static void torture_mutex_delay (struct torture_random_state * trsp )
457
454
{
458
- const unsigned long longdelay_ms = 100 ;
455
+ const unsigned long longdelay_ms = long_hold ? long_hold : ULONG_MAX ;
459
456
460
457
/* We want a long delay occasionally to force massive contention. */
461
458
if (!(torture_random (trsp ) %
462
459
(cxt .nrealwriters_stress * 2000 * longdelay_ms )))
463
460
mdelay (longdelay_ms * 5 );
464
- else
465
- mdelay (longdelay_ms / 5 );
466
461
if (!(torture_random (trsp ) % (cxt .nrealwriters_stress * 20000 )))
467
462
torture_preempt_schedule (); /* Allow test to be preempted. */
468
463
}
@@ -630,7 +625,7 @@ __acquires(torture_rtmutex)
630
625
static void torture_rtmutex_delay (struct torture_random_state * trsp )
631
626
{
632
627
const unsigned long shortdelay_us = 2 ;
633
- const unsigned long longdelay_ms = 100 ;
628
+ const unsigned long longdelay_ms = long_hold ? long_hold : ULONG_MAX ;
634
629
635
630
/*
636
631
* We want a short delay mostly to emulate likely code, and
@@ -640,7 +635,7 @@ static void torture_rtmutex_delay(struct torture_random_state *trsp)
640
635
(cxt .nrealwriters_stress * 2000 * longdelay_ms )))
641
636
mdelay (longdelay_ms );
642
637
if (!(torture_random (trsp ) %
643
- (cxt .nrealwriters_stress * 2 * shortdelay_us )))
638
+ (cxt .nrealwriters_stress * 200 * shortdelay_us )))
644
639
udelay (shortdelay_us );
645
640
if (!(torture_random (trsp ) % (cxt .nrealwriters_stress * 20000 )))
646
641
torture_preempt_schedule (); /* Allow test to be preempted. */
@@ -695,14 +690,12 @@ __acquires(torture_rwsem)
695
690
696
691
static void torture_rwsem_write_delay (struct torture_random_state * trsp )
697
692
{
698
- const unsigned long longdelay_ms = 100 ;
693
+ const unsigned long longdelay_ms = long_hold ? long_hold : ULONG_MAX ;
699
694
700
695
/* We want a long delay occasionally to force massive contention. */
701
696
if (!(torture_random (trsp ) %
702
697
(cxt .nrealwriters_stress * 2000 * longdelay_ms )))
703
698
mdelay (longdelay_ms * 10 );
704
- else
705
- mdelay (longdelay_ms / 10 );
706
699
if (!(torture_random (trsp ) % (cxt .nrealwriters_stress * 20000 )))
707
700
torture_preempt_schedule (); /* Allow test to be preempted. */
708
701
}
@@ -848,8 +841,8 @@ static int lock_torture_writer(void *arg)
848
841
849
842
lwsp -> n_lock_acquired ++ ;
850
843
}
851
- cxt .cur_ops -> write_delay (& rand );
852
844
if (!skip_main_lock ) {
845
+ cxt .cur_ops -> write_delay (& rand );
853
846
lock_is_write_held = false;
854
847
WRITE_ONCE (last_lock_release , jiffies );
855
848
cxt .cur_ops -> writeunlock (tid );
0 commit comments