All of lore.kernel.org
 help / color / mirror / Atom feed
From: Josh Triplett <josh@joshtriplett.org>
To: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
Cc: linux-kernel@vger.kernel.org, mingo@kernel.org,
	laijs@cn.fujitsu.com, dipankar@in.ibm.com,
	akpm@linux-foundation.org, mathieu.desnoyers@efficios.com,
	niv@us.ibm.com, tglx@linutronix.de, peterz@infradead.org,
	rostedt@goodmis.org, dhowells@redhat.com, edumazet@google.com,
	darren@dvhart.com, fweisbec@gmail.com, oleg@redhat.com,
	sbw@mit.edu
Subject: Re: [PATCH tip/core/rcu 37/55] rcutorture: Abstract torture_create_kthread()
Date: Mon, 17 Feb 2014 16:34:02 -0800	[thread overview]
Message-ID: <20140218003402.GI19929@thin> (raw)
In-Reply-To: <1392675179-11560-37-git-send-email-paulmck@linux.vnet.ibm.com>

On Mon, Feb 17, 2014 at 02:12:41PM -0800, Paul E. McKenney wrote:
> From: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
> 
> Creation of kthreads is not RCU-specific, so this commit abstracts
> out torture_create_kthread(), saving a few tens of lines of code in
> the process.
> 
> Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>

One comment below.

>  include/linux/torture.h |  8 +++-
>  kernel/rcu/rcutorture.c | 98 ++++++++++---------------------------------------
>  kernel/torture.c        | 80 +++++++++++++++++-----------------------
>  3 files changed, 60 insertions(+), 126 deletions(-)
> 
> diff --git a/include/linux/torture.h b/include/linux/torture.h
> index db9bc7756a32..e5264c6ecfeb 100644
> --- a/include/linux/torture.h
> +++ b/include/linux/torture.h
> @@ -47,7 +47,7 @@
>  #define VERBOSE_TOROUT_STRING(s) \
>  	do { if (verbose) pr_alert("%s" TORTURE_FLAG " %s\n", torture_type, s); } while (0)
>  #define VERBOSE_TOROUT_ERRSTRING(s) \
> -	do { if (verbose) pr_alert("%s" TORTURE_FLAG "!!! " s "\n", torture_type); } while (0)
> +	do { if (verbose) pr_alert("%s" TORTURE_FLAG "!!! %s\n", torture_type, s); } while (0)

This change is also unrelated, and should not occur in this commit.

- Josh Triplett

>  /* Definitions for a non-string torture-test module parameter. */
>  #define torture_parm(type, name, init, msg) \
> @@ -89,5 +89,11 @@ bool torture_cleanup(void);
>  bool torture_must_stop(void);
>  bool torture_must_stop_irq(void);
>  void torture_kthread_stopping(char *title);
> +int _torture_create_kthread(int (*fn)(void *arg), void *arg, char *s, char *m,
> +			     char *f, struct task_struct **tp);
> +
> +#define torture_create_kthread(n, arg, tp) \
> +	_torture_create_kthread(n, (arg), #n, "Creating " #n " task", \
> +				"Failed to create " #n, &(tp))
>  
>  #endif /* __LINUX_TORTURE_H */
> diff --git a/kernel/rcu/rcutorture.c b/kernel/rcu/rcutorture.c
> index cf365160b44f..951a5559d9fa 100644
> --- a/kernel/rcu/rcutorture.c
> +++ b/kernel/rcu/rcutorture.c
> @@ -1104,19 +1104,9 @@ static int rcu_torture_stall(void *args)
>  /* Spawn CPU-stall kthread, if stall_cpu specified. */
>  static int __init rcu_torture_stall_init(void)
>  {
> -	int ret;
> -
>  	if (stall_cpu <= 0)
>  		return 0;
> -	VERBOSE_TOROUT_STRING("Creating rcu_torture_stall task");
> -	stall_task = kthread_run(rcu_torture_stall, NULL, "rcu_torture_stall");
> -	if (IS_ERR(stall_task)) {
> -		ret = PTR_ERR(stall_task);
> -		stall_task = NULL;
> -		return ret;
> -	}
> -	torture_shuffle_task_register(stall_task);
> -	return 0;
> +	return torture_create_kthread(rcu_torture_stall, NULL, stall_task);
>  }
>  
>  /* Clean up after the CPU-stall kthread, if one was spawned. */
> @@ -1225,29 +1215,13 @@ static int rcu_torture_barrier_init(void)
>  		return -ENOMEM;
>  	for (i = 0; i < n_barrier_cbs; i++) {
>  		init_waitqueue_head(&barrier_cbs_wq[i]);
> -		VERBOSE_TOROUT_STRING("Creating rcu_torture_barrier_cbs task");
> -		barrier_cbs_tasks[i] = kthread_run(rcu_torture_barrier_cbs,
> -						   (void *)(long)i,
> -						   "rcu_torture_barrier_cbs");
> -		if (IS_ERR(barrier_cbs_tasks[i])) {
> -			ret = PTR_ERR(barrier_cbs_tasks[i]);
> -			VERBOSE_TOROUT_ERRSTRING("Failed to create rcu_torture_barrier_cbs");
> -			barrier_cbs_tasks[i] = NULL;
> +		ret = torture_create_kthread(rcu_torture_barrier_cbs,
> +					     (void *)(long)i,
> +					     barrier_cbs_tasks[i]);
> +		if (ret)
>  			return ret;
> -		}
> -		torture_shuffle_task_register(barrier_cbs_tasks[i]);
>  	}
> -	VERBOSE_TOROUT_STRING("Creating rcu_torture_barrier task");
> -	barrier_task = kthread_run(rcu_torture_barrier, NULL,
> -				   "rcu_torture_barrier");
> -	if (IS_ERR(barrier_task)) {
> -		ret = PTR_ERR(barrier_task);
> -		VERBOSE_TOROUT_ERRSTRING("Failed to create rcu_torture_barrier");
> -		barrier_task = NULL;
> -		return ret;
> -	}
> -	torture_shuffle_task_register(barrier_task);
> -	return 0;
> +	return torture_create_kthread(rcu_torture_barrier, NULL, barrier_task);
>  }
>  
>  /* Clean up after RCU barrier testing. */
> @@ -1515,17 +1489,10 @@ rcu_torture_init(void)
>  
>  	/* Start up the kthreads. */
>  
> -	VERBOSE_TOROUT_STRING("Creating rcu_torture_writer task");
> -	writer_task = kthread_create(rcu_torture_writer, NULL,
> -				     "rcu_torture_writer");
> -	if (IS_ERR(writer_task)) {
> -		firsterr = PTR_ERR(writer_task);
> -		VERBOSE_TOROUT_ERRSTRING("Failed to create writer");
> -		writer_task = NULL;
> +	firsterr = torture_create_kthread(rcu_torture_writer, NULL,
> +					  writer_task);
> +	if (firsterr)
>  		goto unwind;
> -	}
> -	torture_shuffle_task_register(writer_task);
> -	wake_up_process(writer_task);
>  	fakewriter_tasks = kzalloc(nfakewriters * sizeof(fakewriter_tasks[0]),
>  				   GFP_KERNEL);
>  	if (fakewriter_tasks == NULL) {
> @@ -1534,16 +1501,10 @@ rcu_torture_init(void)
>  		goto unwind;
>  	}
>  	for (i = 0; i < nfakewriters; i++) {
> -		VERBOSE_TOROUT_STRING("Creating rcu_torture_fakewriter task");
> -		fakewriter_tasks[i] = kthread_run(rcu_torture_fakewriter, NULL,
> -						  "rcu_torture_fakewriter");
> -		if (IS_ERR(fakewriter_tasks[i])) {
> -			firsterr = PTR_ERR(fakewriter_tasks[i]);
> -			VERBOSE_TOROUT_ERRSTRING("Failed to create fakewriter");
> -			fakewriter_tasks[i] = NULL;
> +		firsterr = torture_create_kthread(rcu_torture_fakewriter,
> +						  NULL, fakewriter_tasks[i]);
> +		if (firsterr)
>  			goto unwind;
> -		}
> -		torture_shuffle_task_register(fakewriter_tasks[i]);
>  	}
>  	reader_tasks = kzalloc(nrealreaders * sizeof(reader_tasks[0]),
>  			       GFP_KERNEL);
> @@ -1553,28 +1514,16 @@ rcu_torture_init(void)
>  		goto unwind;
>  	}
>  	for (i = 0; i < nrealreaders; i++) {
> -		VERBOSE_TOROUT_STRING("Creating rcu_torture_reader task");
> -		reader_tasks[i] = kthread_run(rcu_torture_reader, NULL,
> -					      "rcu_torture_reader");
> -		if (IS_ERR(reader_tasks[i])) {
> -			firsterr = PTR_ERR(reader_tasks[i]);
> -			VERBOSE_TOROUT_ERRSTRING("Failed to create reader");
> -			reader_tasks[i] = NULL;
> +		firsterr = torture_create_kthread(rcu_torture_reader, NULL,
> +						  reader_tasks[i]);
> +		if (firsterr)
>  			goto unwind;
> -		}
> -		torture_shuffle_task_register(reader_tasks[i]);
>  	}
>  	if (stat_interval > 0) {
> -		VERBOSE_TOROUT_STRING("Creating rcu_torture_stats task");
> -		stats_task = kthread_run(rcu_torture_stats, NULL,
> -					"rcu_torture_stats");
> -		if (IS_ERR(stats_task)) {
> -			firsterr = PTR_ERR(stats_task);
> -			VERBOSE_TOROUT_ERRSTRING("Failed to create stats");
> -			stats_task = NULL;
> +		firsterr = torture_create_kthread(rcu_torture_stats, NULL,
> +						  stats_task);
> +		if (firsterr)
>  			goto unwind;
> -		}
> -		torture_shuffle_task_register(stats_task);
>  	}
>  	if (test_no_idle_hz) {
>  		firsterr = torture_shuffle_init(shuffle_interval * HZ);
> @@ -1592,16 +1541,9 @@ rcu_torture_init(void)
>  		fqs_duration = 0;
>  	if (fqs_duration) {
>  		/* Create the fqs thread */
> -		VERBOSE_TOROUT_STRING("Creating rcu_torture_fqs task");
> -		fqs_task = kthread_run(rcu_torture_fqs, NULL,
> -				       "rcu_torture_fqs");
> -		if (IS_ERR(fqs_task)) {
> -			firsterr = PTR_ERR(fqs_task);
> -			VERBOSE_TOROUT_ERRSTRING("Failed to create fqs");
> -			fqs_task = NULL;
> +		torture_create_kthread(rcu_torture_fqs, NULL, fqs_task);
> +		if (firsterr)
>  			goto unwind;
> -		}
> -		torture_shuffle_task_register(fqs_task);
>  	}
>  	if (test_boost_interval < 1)
>  		test_boost_interval = 1;
> diff --git a/kernel/torture.c b/kernel/torture.c
> index 6f1c6600d183..94760f0f2923 100644
> --- a/kernel/torture.c
> +++ b/kernel/torture.c
> @@ -180,23 +180,16 @@ torture_onoff(void *arg)
>   */
>  int torture_onoff_init(long ooholdoff, long oointerval)
>  {
> -#ifdef CONFIG_HOTPLUG_CPU
> -	int ret;
> +	int ret = 0;
>  
> +#ifdef CONFIG_HOTPLUG_CPU
>  	onoff_holdoff = ooholdoff;
>  	onoff_interval = oointerval;
>  	if (onoff_interval <= 0)
>  		return 0;
> -	VERBOSE_TOROUT_STRING("Creating torture_onoff task");
> -	onoff_task = kthread_run(torture_onoff, NULL, "torture_onoff");
> -	if (IS_ERR(onoff_task)) {
> -		ret = PTR_ERR(onoff_task);
> -		onoff_task = NULL;
> -		return ret;
> -	}
> -	torture_shuffle_task_register(onoff_task);
> +	ret = torture_create_kthread(torture_onoff, NULL, onoff_task);
>  #endif /* #ifdef CONFIG_HOTPLUG_CPU */
> -	return 0;
> +	return ret;
>  }
>  EXPORT_SYMBOL_GPL(torture_onoff_init);
>  
> @@ -379,8 +372,6 @@ static int torture_shuffle(void *arg)
>   */
>  int torture_shuffle_init(long shuffint)
>  {
> -	int ret;
> -
>  	shuffle_interval = shuffint;
>  
>  	shuffle_idle_cpu = -1;
> @@ -391,17 +382,7 @@ int torture_shuffle_init(long shuffint)
>  	}
>  
>  	/* Create the shuffler thread */
> -	VERBOSE_TOROUT_STRING("Creating torture_shuffle task");
> -	shuffler_task = kthread_run(torture_shuffle, NULL, "torture_shuffle");
> -	if (IS_ERR(shuffler_task)) {
> -		ret = PTR_ERR(shuffler_task);
> -		free_cpumask_var(shuffle_tmp_mask);
> -		VERBOSE_TOROUT_ERRSTRING("Failed to create shuffler");
> -		shuffler_task = NULL;
> -		return ret;
> -	}
> -	torture_shuffle_task_register(shuffler_task);
> -	return 0;
> +	return torture_create_kthread(torture_shuffle, NULL, shuffler_task);
>  }
>  EXPORT_SYMBOL_GPL(torture_shuffle_init);
>  
> @@ -483,25 +464,16 @@ static int torture_shutdown(void *arg)
>   */
>  int torture_shutdown_init(int ssecs, void (*cleanup)(void))
>  {
> -	int ret;
> +	int ret = 0;
>  
>  	shutdown_secs = ssecs;
>  	torture_shutdown_hook = cleanup;
>  	if (shutdown_secs > 0) {
> -		VERBOSE_TOROUT_STRING("Creating torture_shutdown task");
>  		shutdown_time = jiffies + shutdown_secs * HZ;
> -		shutdown_task = kthread_create(torture_shutdown, NULL,
> -					       "torture_shutdown");
> -		if (IS_ERR(shutdown_task)) {
> -			ret = PTR_ERR(shutdown_task);
> -			VERBOSE_TOROUT_ERRSTRING("Failed to create shutdown");
> -			shutdown_task = NULL;
> -			return ret;
> -		}
> -		torture_shuffle_task_register(shutdown_task);
> -		wake_up_process(shutdown_task);
> +		ret = torture_create_kthread(torture_shutdown, NULL,
> +					     shutdown_task);
>  	}
> -	return 0;
> +	return ret;
>  }
>  EXPORT_SYMBOL_GPL(torture_shutdown_init);
>  
> @@ -595,16 +567,8 @@ int torture_stutter_init(int s)
>  	int ret;
>  
>  	stutter = s;
> -	VERBOSE_TOROUT_STRING("Creating torture_stutter task");
> -	stutter_task = kthread_run(torture_stutter, NULL, "torture_stutter");
> -	if (IS_ERR(stutter_task)) {
> -		ret = PTR_ERR(stutter_task);
> -		VERBOSE_TOROUT_ERRSTRING("Failed to create stutter");
> -		stutter_task = NULL;
> -		return ret;
> -	}
> -	torture_shuffle_task_register(stutter_task);
> -	return 0;
> +	ret = torture_create_kthread(torture_stutter, NULL, stutter_task);
> +	return ret;
>  }
>  EXPORT_SYMBOL_GPL(torture_stutter_init);
>  
> @@ -714,3 +678,25 @@ void torture_kthread_stopping(char *title)
>  	}
>  }
>  EXPORT_SYMBOL_GPL(torture_kthread_stopping);
> +
> +/*
> + * Create a generic torture kthread that is immediately runnable.  If you
> + * need the kthread to be stopped so that you can do something to it before
> + * it starts, you will need to open-code your own.
> + */
> +int _torture_create_kthread(int (*fn)(void *arg), void *arg, char *s, char *m,
> +			    char *f, struct task_struct **tp)
> +{
> +	int ret = 0;
> +
> +	VERBOSE_TOROUT_STRING(m);
> +	*tp = kthread_run(fn, arg, s);
> +	if (IS_ERR(*tp)) {
> +		ret = PTR_ERR(*tp);
> +		VERBOSE_TOROUT_ERRSTRING(f);
> +		*tp = NULL;
> +	}
> +	torture_shuffle_task_register(*tp);
> +	return ret;
> +}
> +EXPORT_SYMBOL_GPL(_torture_create_kthread);
> -- 
> 1.8.1.5
> 

  reply	other threads:[~2014-02-18  0:34 UTC|newest]

Thread overview: 81+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-02-17 22:12 [PATCH tip/core/rcu 0/55] Torture-test changes for 3.15 Paul E. McKenney
2014-02-17 22:12 ` [PATCH tip/core/rcu 01/55] rcutorture: Print grace-period performance statistics Paul E. McKenney
2014-02-17 22:12   ` [PATCH tip/core/rcu 02/55] rcutorture: Print script and arguments to standard output Paul E. McKenney
2014-02-17 22:12   ` [PATCH tip/core/rcu 03/55] rcutorture: Move common boot flags to kvm-test-1-rcu.sh Paul E. McKenney
2014-02-17 22:12   ` [PATCH tip/core/rcu 04/55] rcutorture: Allow kvm-test-1-rcu.sh to pause after build Paul E. McKenney
2014-02-17 22:12   ` [PATCH tip/core/rcu 05/55] rcutorture: Move common qemu flags to kvm-test-1.sh Paul E. McKenney
2014-02-17 22:12   ` [PATCH tip/core/rcu 06/55] rcutorture: Reduce SRCU-N number of CPUs Paul E. McKenney
2014-02-17 22:12   ` [PATCH tip/core/rcu 07/55] rcutorture: Enable concurrent rcutorture runs Paul E. McKenney
2014-02-17 22:12   ` [PATCH tip/core/rcu 08/55] rcutorture: Fix results-directory error message Paul E. McKenney
2014-02-17 22:12   ` [PATCH tip/core/rcu 09/55] rcutorture: Add dryrun capability Paul E. McKenney
2014-02-17 22:12   ` [PATCH tip/core/rcu 10/55] rcutorture: Handle multiple runs of the same test Paul E. McKenney
2014-02-17 22:12   ` [PATCH tip/core/rcu 11/55] rcutorture: Do better bin packing Paul E. McKenney
2014-02-17 22:12   ` [PATCH tip/core/rcu 12/55] rcutorture: Add comments, especially on " Paul E. McKenney
2014-02-17 22:12   ` [PATCH tip/core/rcu 13/55] rcutorture: Flag tests requiring more CPUs than are available Paul E. McKenney
2014-02-17 22:12   ` [PATCH tip/core/rcu 14/55] rcutorture: Print results directory when dumping results Paul E. McKenney
2014-02-17 22:12   ` [PATCH tip/core/rcu 15/55] rcutorture: Abstract rcu_torture_random() Paul E. McKenney
2014-02-18  0:11     ` Josh Triplett
2014-02-18  0:22       ` Paul E. McKenney
2014-02-18  0:27         ` Josh Triplett
2014-02-18 21:33           ` Paul E. McKenney
2014-02-19  2:52           ` George Spelvin
2014-02-17 22:12   ` [PATCH tip/core/rcu 16/55] rcutorture: Don't create results directory for dryruns Paul E. McKenney
2014-02-17 22:12   ` [PATCH tip/core/rcu 17/55] rcutorture: Abstract torture_param() Paul E. McKenney
2014-02-18  0:23     ` Josh Triplett
2014-02-18 21:31       ` Paul E. McKenney
2014-02-18 23:53         ` josh
2014-02-23 16:48           ` Paul E. McKenney
2014-02-17 22:12   ` [PATCH tip/core/rcu 18/55] rcutorture: Rename PRINTK to TOROUT Paul E. McKenney
2014-02-17 22:12   ` [PATCH tip/core/rcu 19/55] rcutorture: Abstract TOROUT_STRING() and friends Paul E. McKenney
2014-02-18  0:26     ` Josh Triplett
2014-02-18  0:58       ` Paul E. McKenney
2014-02-18  1:23         ` Josh Triplett
2014-02-18  1:43           ` Paul E. McKenney
2014-02-18  3:36             ` Josh Triplett
2014-02-17 22:12   ` [PATCH tip/core/rcu 20/55] rcutorture: Abstract torture_shutdown_absorb() Paul E. McKenney
2014-02-17 22:12   ` [PATCH tip/core/rcu 21/55] rcutorture: Export torture_type and verbose module parameters Paul E. McKenney
2014-02-18  0:29     ` Josh Triplett
2014-02-18  1:01       ` Paul E. McKenney
2014-02-17 22:12   ` [PATCH tip/core/rcu 22/55] rcutorture: Abstract torture_shuffle() Paul E. McKenney
2014-02-17 22:12   ` [PATCH tip/core/rcu 23/55] rcutorture: Abstract torture_onoff() Paul E. McKenney
2014-02-17 22:12   ` [PATCH tip/core/rcu 24/55] rcutorture: Abstract torture-test initialization Paul E. McKenney
2014-02-17 22:12   ` [PATCH tip/core/rcu 25/55] rcutorture: Abstract torture-test cleanup Paul E. McKenney
2014-02-17 22:12   ` [PATCH tip/core/rcu 26/55] rcutorture: Print dates when doing parallel rcutorture runs Paul E. McKenney
2014-02-17 22:12   ` [PATCH tip/core/rcu 27/55] rcutorture: Abstract torture_shutdown_notify() Paul E. McKenney
2014-02-17 22:12   ` [PATCH tip/core/rcu 28/55] rcutorture: Privatize fullstop Paul E. McKenney
2014-02-17 22:12   ` [PATCH tip/core/rcu 29/55] rcutorture: Add diagnostic for unscheduled system shutdown Paul E. McKenney
2014-02-17 22:12   ` [PATCH tip/core/rcu 30/55] rcutorture: Abstract stutter_wait() Paul E. McKenney
2014-02-17 22:12   ` [PATCH tip/core/rcu 31/55] rcutorture: Apply ACCESS_ONCE() to racy fullstop accesses Paul E. McKenney
2014-02-17 22:12   ` [PATCH tip/core/rcu 32/55] rcutorture: Abstract torture_shutdown() Paul E. McKenney
2014-02-17 22:12   ` [PATCH tip/core/rcu 33/55] rcutorture: Clean up rcu_torture_init() error checking Paul E. McKenney
2014-02-17 22:12   ` [PATCH tip/core/rcu 34/55] rcutorture: Announce task creation Paul E. McKenney
2014-02-17 22:12   ` [PATCH tip/core/rcu 35/55] rcutorture: Fix rcutorture shutdown races Paul E. McKenney
2014-02-18  0:32     ` Josh Triplett
2014-02-18 21:35       ` Paul E. McKenney
2014-02-17 22:12   ` [PATCH tip/core/rcu 36/55] rcutorture: Fix missing-return bug in rcu_torture_barrier_init() Paul E. McKenney
2014-02-17 22:12   ` [PATCH tip/core/rcu 37/55] rcutorture: Abstract torture_create_kthread() Paul E. McKenney
2014-02-18  0:34     ` Josh Triplett [this message]
2014-02-18 21:36       ` Paul E. McKenney
2014-02-19  0:02         ` josh
2014-02-17 22:12   ` [PATCH tip/core/rcu 38/55] rcutorture: Abstract torture_stop_kthread() Paul E. McKenney
2014-02-17 22:12   ` [PATCH tip/core/rcu 39/55] rcutorture: Stop generic kthreads in torture_cleanup() Paul E. McKenney
2014-02-17 22:12   ` [PATCH tip/core/rcu 40/55] rcutorture: Remove redundant module-alias directives Paul E. McKenney
2014-02-17 22:12   ` [PATCH tip/core/rcu 41/55] rcutorture: Abstract kvm-recheck.sh Paul E. McKenney
2014-02-17 22:12   ` [PATCH tip/core/rcu 42/55] locktorture: Add a lock-torture kernel module Paul E. McKenney
2014-02-17 22:12   ` [PATCH tip/core/rcu 43/55] rcutorture: Add an rcu_busted to test the test Paul E. McKenney
2014-02-17 22:12   ` [PATCH tip/core/rcu 44/55] rcutorture: Create config files for scripted test-the-test testing Paul E. McKenney
2014-02-17 22:12   ` [PATCH tip/core/rcu 45/55] rcutorture: Create CFcommon file for common Kconfig parameters Paul E. McKenney
2014-02-17 22:12   ` [PATCH tip/core/rcu 46/55] rcutorture: Remove RCU dependencies from ver_functions.sh API Paul E. McKenney
2014-02-17 22:12   ` [PATCH tip/core/rcu 47/55] rcutorture: Rename kvm-test-1-rcu.sh Paul E. McKenney
2014-02-17 22:12   ` [PATCH tip/core/rcu 48/55] rcutorture: Introduce "rcu" directory level underneath configs Paul E. McKenney
2014-02-17 22:12   ` [PATCH tip/core/rcu 49/55] locktorture: Add vestigial locktorture configuration Paul E. McKenney
2014-02-17 22:12   ` [PATCH tip/core/rcu 50/55] rcutorture: Gracefully handle NULL cleanup hooks Paul E. McKenney
2014-02-17 22:12   ` [PATCH tip/core/rcu 51/55] locktorture: Add kvm-recheck.sh plug-in for locktorture Paul E. McKenney
2014-02-17 22:12   ` [PATCH tip/core/rcu 52/55] rcutorture: Rename TREE_RCU-Kconfig.txt Paul E. McKenney
2014-02-17 22:12   ` [PATCH tip/core/rcu 53/55] rcutorture: Place kvm-test-1-run.sh output into res directory Paul E. McKenney
2014-02-17 22:12   ` [PATCH tip/core/rcu 54/55] rcutorture: Add a lock_busted to test the test Paul E. McKenney
2014-02-17 22:12   ` [PATCH tip/core/rcu 55/55] rcutorture: Save kvm.sh output to log Paul E. McKenney
2014-02-18  0:41 ` [PATCH tip/core/rcu 0/55] Torture-test changes for 3.15 Josh Triplett
2014-02-18  0:48   ` Josh Triplett
2014-02-18  1:18     ` Paul E. McKenney
2014-02-18  1:18   ` Paul E. McKenney

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20140218003402.GI19929@thin \
    --to=josh@joshtriplett.org \
    --cc=akpm@linux-foundation.org \
    --cc=darren@dvhart.com \
    --cc=dhowells@redhat.com \
    --cc=dipankar@in.ibm.com \
    --cc=edumazet@google.com \
    --cc=fweisbec@gmail.com \
    --cc=laijs@cn.fujitsu.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mathieu.desnoyers@efficios.com \
    --cc=mingo@kernel.org \
    --cc=niv@us.ibm.com \
    --cc=oleg@redhat.com \
    --cc=paulmck@linux.vnet.ibm.com \
    --cc=peterz@infradead.org \
    --cc=rostedt@goodmis.org \
    --cc=sbw@mit.edu \
    --cc=tglx@linutronix.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.