diff options
| -rw-r--r-- | kernel/rcutorture.c | 11 | 
1 files changed, 7 insertions, 4 deletions
| diff --git a/kernel/rcutorture.c b/kernel/rcutorture.c index 729710273dcb..9d8e8fb2515f 100644 --- a/kernel/rcutorture.c +++ b/kernel/rcutorture.c @@ -120,7 +120,7 @@ struct rcu_torture {  };  static LIST_HEAD(rcu_torture_freelist); -static struct rcu_torture *rcu_torture_current; +static struct rcu_torture __rcu *rcu_torture_current;  static long rcu_torture_current_version;  static struct rcu_torture rcu_tortures[10 * RCU_TORTURE_PIPE_LEN];  static DEFINE_SPINLOCK(rcu_torture_lock); @@ -153,8 +153,10 @@ int rcutorture_runnable = RCUTORTURE_RUNNABLE_INIT;  #define FULLSTOP_SHUTDOWN 1	/* System shutdown with rcutorture running. */  #define FULLSTOP_RMMOD    2	/* Normal rmmod of rcutorture. */  static int fullstop = FULLSTOP_RMMOD; -DEFINE_MUTEX(fullstop_mutex);	/* Protect fullstop transitions and spawning */ -				/*  of kthreads. */ +/* + * Protect fullstop transitions and spawning of kthreads. + */ +static DEFINE_MUTEX(fullstop_mutex);  /*   * Detect and respond to a system shutdown. @@ -737,7 +739,8 @@ rcu_torture_writer(void *arg)  			continue;  		rp->rtort_pipe_count = 0;  		udelay(rcu_random(&rand) & 0x3ff); -		old_rp = rcu_torture_current; +		old_rp = rcu_dereference_check(rcu_torture_current, +					       current == writer_task);  		rp->rtort_mbtest = 1;  		rcu_assign_pointer(rcu_torture_current, rp);  		smp_wmb(); /* Mods to old_rp must follow rcu_assign_pointer() */ | 
