lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20080620183916.e7be2cea.randy.dunlap@oracle.com>
Date:	Fri, 20 Jun 2008 18:39:16 -0700
From:	Randy Dunlap <randy.dunlap@...cle.com>
To:	paulmck@...ux.vnet.ibm.com
Cc:	Ingo Molnar <mingo@...e.hu>, linux-kernel@...r.kernel.org,
	josh@...edesktop.org, dvhltc@...ibm.com, niv@...ibm.com,
	dino@...ibm.com, akpm@...ux-foundation.org,
	torvalds@...ux-foundation.org, vegard.nossum@...il.com,
	adobriyan@...il.com, oleg@...sign.ru, bunk@...nel.org, rjw@...k.pl
Subject: Re: [PATCH] Make rcutorture more vicious: reinstate boot-time
 testing

On Thu, 19 Jun 2008 22:47:24 -0700 Paul E. McKenney wrote:

> On Thu, Jun 19, 2008 at 02:17:25PM -0700, Randy Dunlap wrote:
> > On Thu, 19 Jun 2008 08:58:54 -0700 Paul E. McKenney wrote:
> > 
> > > On Thu, Jun 19, 2008 at 11:29:14AM +0200, Ingo Molnar wrote:
> > > > 
> > > > * Paul E. McKenney <paulmck@...ux.vnet.ibm.com> wrote:
> > > > 
> > > > > Hello again!
> > > > > 
> > > 
> > >  Documentation/RCU/torture.txt      |   21 
> > >  Documentation/RCU/torture.txt.orig |    8 
> >                                 ~~~~~
> > 
> > >  kernel/rcutorture.c                |   14 
> > >  kernel/rcutorture.c.orig           |   59 
> >                        !!!!
> > 
> > >  kernel/sysctl.c                    |   13 
> > >  kernel/sysctl.c.orig               | 2851 +++++++++++++++++++++++++++++++++++++
> >                    ~~~~
> > 
> > >  lib/Kconfig.debug                  |   20 
> > >  lib/Kconfig.debug.orig             |  679 ++++++++
> >                      ~~~~
> > 
> > What's with all of these .orig files, eh??
> 
> Gah, typos generating the diffs.  :-/
> 
> > >  8 files changed, 3651 insertions(+), 14 deletions(-)
> 
> How about the following instead?  (I expect to be following up with
> a version that gets rid of the threads in response to writing a "0"
> to /proc/sys/kernel/rcutorture_runnable later on.)

Yes, much better.  Thanks.

> Signed-off-by: Paul E. McKenney <paulmck@...ux.vnet.ibm.com>
> ---
> 
>  Documentation/RCU/torture.txt |   21 ++++++++++++++-------
>  kernel/rcutorture.c           |   14 ++++++++++++--
>  kernel/sysctl.c               |   13 +++++++++++++
>  lib/Kconfig.debug             |   20 +++++++++++++++++++-
>  4 files changed, 58 insertions(+), 10 deletions(-)
> 
> diff -urpNa -X dontdiff linux-2.6.26-rc4-rcut1-stutter/Documentation/RCU/torture.txt linux-2.6.26-rc4-rcut2-proc/Documentation/RCU/torture.txt
> --- linux-2.6.26-rc4-rcut1-stutter/Documentation/RCU/torture.txt	2008-06-18 05:15:43.000000000 -0700
> +++ linux-2.6.26-rc4-rcut2-proc/Documentation/RCU/torture.txt	2008-06-18 08:11:19.000000000 -0700
> @@ -10,13 +10,20 @@ status messages via printk(), which can 
>  command (perhaps grepping for "torture").  The test is started
>  when the module is loaded, and stops when the module is unloaded.
>  
> -However, actually setting this config option to "y" results in the system
> -running the test immediately upon boot, and ending only when the system
> -is taken down.  Normally, one will instead want to build the system
> -with CONFIG_RCU_TORTURE_TEST=m and to use modprobe and rmmod to control
> -the test, perhaps using a script similar to the one shown at the end of
> -this document.  Note that you will need CONFIG_MODULE_UNLOAD in order
> -to be able to end the test.
> +CONFIG_RCU_TORTURE_TEST_RUNNABLE
> +
> +It is also possible to specify CONFIG_RCU_TORTURE_TEST=y, which will
> +result in the tests being loaded into the base kernel.  In this case,
> +the CONFIG_RCU_TORTURE_TEST_RUNNABLE config option is used to specify
> +whether the RCU torture tests are to be started immediately during
> +boot or whether the /proc/sys/kernel/rcutorture_runnable file is used
> +to enable them.  This /proc file can be used to repeatedly pause and
> +restart the tests, regardless of the initial state specified by the
> +CONFIG_RCU_TORTURE_TEST_RUNNABLE config option.
> +
> +You will normally -not- want to start the RCU torture tests during boot
> +(and thus the default is CONFIG_RCU_TORTURE_TEST_RUNNABLE=n), but doing
> +this can sometimes be useful in finding boot-time bugs.
>  
>  
>  MODULE PARAMETERS
> diff -urpNa -X dontdiff linux-2.6.26-rc4-rcut1-stutter/kernel/rcutorture.c linux-2.6.26-rc4-rcut2-proc/kernel/rcutorture.c
> --- linux-2.6.26-rc4-rcut1-stutter/kernel/rcutorture.c	2008-06-18 04:54:41.000000000 -0700
> +++ linux-2.6.26-rc4-rcut2-proc/kernel/rcutorture.c	2008-06-19 04:48:56.000000000 -0700
> @@ -125,6 +125,13 @@ static struct list_head rcu_torture_remo
>  
>  static int stutter_pause_test = 0;
>  
> +#if defined(MODULE) || defined(CONFIG_RCU_TORTURE_TEST_RUNNABLE)
> +#define RCUTORTURE_RUNNABLE_INIT 1
> +#else
> +#define RCUTORTURE_RUNNABLE_INIT 0
> +#endif
> +int rcutorture_runnable = RCUTORTURE_RUNNABLE_INIT;
> +
>  /*
>   * Allocate an element from the rcu_tortures pool.
>   */
> @@ -188,8 +195,11 @@ rcu_random(struct rcu_random_state *rrsp
>  static void
>  rcu_stutter_wait(void)
>  {
> -	while (stutter_pause_test)
> -		schedule_timeout_interruptible(1);
> +	while (stutter_pause_test || !rcutorture_runnable)
> +		if (rcutorture_runnable)
> +			schedule_timeout_interruptible(1);
> +		else
> +			schedule_timeout_interruptible(HZ);
>  }
>  
>  /*
> diff -urpNa -X dontdiff linux-2.6.26-rc4-rcut1-stutter/kernel/sysctl.c linux-2.6.26-rc4-rcut2-proc/kernel/sysctl.c
> --- linux-2.6.26-rc4-rcut1-stutter/kernel/sysctl.c	2008-05-30 04:39:01.000000000 -0700
> +++ linux-2.6.26-rc4-rcut2-proc/kernel/sysctl.c	2008-06-18 07:35:26.000000000 -0700
> @@ -82,6 +82,9 @@ extern int maps_protect;
>  extern int sysctl_stat_interval;
>  extern int latencytop_enabled;
>  extern int sysctl_nr_open_min, sysctl_nr_open_max;
> +#ifdef CONFIG_RCU_TORTURE_TEST
> +extern int rcutorture_runnable;
> +#endif /* #ifdef CONFIG_RCU_TORTURE_TEST */
>  
>  /* Constants used for minimum and  maximum */
>  #if defined(CONFIG_DETECT_SOFTLOCKUP) || defined(CONFIG_HIGHMEM)
> @@ -813,6 +816,16 @@ static struct ctl_table kern_table[] = {
>  		.child		= key_sysctls,
>  	},
>  #endif
> +#ifdef CONFIG_RCU_TORTURE_TEST
> +	{
> +		.ctl_name       = CTL_UNNUMBERED,
> +		.procname       = "rcutorture_runnable",
> +		.data           = &rcutorture_runnable,
> +		.maxlen         = sizeof(int),
> +		.mode           = 0644,
> +		.proc_handler   = &proc_dointvec,
> +	},
> +#endif
>  /*
>   * NOTE: do not add new entries to this table unless you have read
>   * Documentation/sysctl/ctl_unnumbered.txt
> diff -urpNa -X dontdiff linux-2.6.26-rc4-rcut1-stutter/lib/Kconfig.debug linux-2.6.26-rc4-rcut2-proc/lib/Kconfig.debug
> --- linux-2.6.26-rc4-rcut1-stutter/lib/Kconfig.debug	2008-05-30 04:39:01.000000000 -0700
> +++ linux-2.6.26-rc4-rcut2-proc/lib/Kconfig.debug	2008-06-18 06:32:48.000000000 -0700
> @@ -531,16 +531,34 @@ config BOOT_PRINTK_DELAY
>  config RCU_TORTURE_TEST
>  	tristate "torture tests for RCU"
>  	depends on DEBUG_KERNEL
> -	depends on m
>  	default n
>  	help
>  	  This option provides a kernel module that runs torture tests
>  	  on the RCU infrastructure.  The kernel module may be built
>  	  after the fact on the running kernel to be tested, if desired.
>  
> +	  Say Y here if you want RCU torture tests to be built into
> +	  the kernel.
>  	  Say M if you want the RCU torture tests to build as a module.
>  	  Say N if you are unsure.
>  
> +config RCU_TORTURE_TEST_RUNNABLE
> +	bool "torture tests for RCU runnable by default"
> +	depends on RCU_TORTURE_TEST = y
> +	default n
> +	help
> +	  This option provides a way to build the RCU torture tests
> +	  directly into the kernel without them starting up at boot
> +	  time.  You can use /proc/sys/kernel/rcutorture_runnable
> +	  to manually override this setting.  This /proc file is
> +	  available only when the RCU torture tests have been built
> +	  into the kernel.
> +
> +	  Say Y here if you want the RCU torture tests to start during
> +	  boot (you probably don't).
> +	  Say N here if you want the RCU torture tests to start only
> +	  after being manually enabled via /proc.
> +
>  config KPROBES_SANITY_TEST
>  	bool "Kprobes sanity tests"
>  	depends on DEBUG_KERNEL
> --

---
~Randy
Linux Plumbers Conference, 17-19 September 2008, Portland, Oregon USA
http://linuxplumbersconf.org/
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ