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] [day] [month] [year] [list]
Date:   Thu, 30 Nov 2017 16:45:57 -0800
From:   "Paul E. McKenney" <>
To:     Thomas Gleixner <>
Cc:     kernel test robot <>,
        LKML <>,,
Subject: Re: [lkp-robot] [torture] b151f93a71:

On Wed, Nov 29, 2017 at 02:38:06PM -0800, Paul E. McKenney wrote:
> On Wed, Nov 29, 2017 at 02:07:03PM -0800, Paul E. McKenney wrote:

[ . . . ]

> > And it converged to 5c4991e24c69 ("sched/isolation: Split out new
> > CONFIG_CPU_ISOLATION=y config from CONFIG_NO_HZ_FULL"), which is a bit
> > hard to believe.  Please see below for the log.  I will be retesting
> > some of the allegedly good commits, just in case.
> And the bisection really did converge here.  It appears that splitting
> CONFIG_CPU_ISOLATION from CONFIG_NO_HZ_FULL isn't fully cooked.
> Adding CONFIG_CPU_ISOLATION=y to my tests causes them to pass, but I
> get the eternal wait for a three-jiffy timeout given CONFIG_NO_HZ_FULL=y
> Adding Frederic for his perspective.

And the next layer of this onion is 6f1982fedd59 ("sched/isolation:
Handle the nohz_full= parameter").  This one seems to have broken
don't supply the nohz_full= boot parameter, it is supposed to put all
but the boot CPU into nohz_full mode.  But the code doesn't do that.
The tick_nohz_init_all() function simply creates the tick_nohz_full_mask
and sets tick_nohz_full_running, but doesn't do any of the housekeeping
initialization that now appears to be required.

My path of least resistance is to just remove CONFIG_NO_HZ_FULL_ALL,
as in the following patch.  And the lack of bug reports leads me to believe
that I am the only one using this Kconfig option.

If someone else is using CONFIG_NO_HZ_FULL_ALL, I of course have no
problem with them putting forward an alternative patch that makes it
work correctly.  ;-)

With both patches applied, things appear to work much better.

							Thanx, Paul


commit cf3b2149af558fb4e09f486bf937256e5c7947fe
Author: Paul E. McKenney <>
Date:   Thu Nov 30 15:36:35 2017 -0800

    sched/isolation: Eliminate NO_HZ_FULL_ALL
    Commit 6f1982fedd59 ("sched/isolation: Handle the nohz_full= parameter")
    broke CONFIG_NO_HZ_FULL_ALL=y kernels.  This breakage is due to the code
    under CONFIG_NO_HZ_FULL_ALL failing to invoke the shiny new housekeeping
    functions.  This means that rcutorture scenario TREE04 now emits RCU CPU
    stall warnings due to the RCU grace-period kthreads not being awakened
    at a time of their choosing, or perhaps even not at all:
    [   27.731422] rcu_bh kthread starved for 21001 jiffies! g18446744073709551369 c18446744073709551368 f0x0 RCU_GP_WAIT_FQS(3) ->state=0x402 ->cpu=3
    [   27.731423] rcu_bh          I14936     9      2 0x80080000
    [   27.731435] Call Trace:
    [   27.731440]  __schedule+0x31a/0x6d0
    [   27.731442]  schedule+0x31/0x80
    [   27.731446]  schedule_timeout+0x15a/0x320
    [   27.731453]  ? call_timer_fn+0x130/0x130
    [   27.731457]  rcu_gp_kthread+0x66c/0xea0
    [   27.731458]  ? rcu_gp_kthread+0x66c/0xea0
    Because no one has complained about CONFIG_NO_HZ_FULL_ALL=y being broken,
    I hypothesize that no one is in fact using it, other than rcutorture.
    This commit therefore eliminates CONFIG_NO_HZ_FULL_ALL and updates
    rcutorture's config files to instead use the nohz_full= kernel parameter
    to put the desired CPUs into nohz_full mode.
    Fixes: 6f1982fedd59 ("sched/isolation: Handle the nohz_full= parameter")
    Reported-by: kernel test robot <>
    Signed-off-by: Paul E. McKenney <>
    Cc: Frederic Weisbecker <>
    Cc: Thomas Gleixner <>
    Cc: Chris Metcalf <>
    Cc: Christoph Lameter <>
    Cc: Linus Torvalds <>
    Cc: Luiz Capitulino <>
    Cc: Mike Galbraith <>
    Cc: Peter Zijlstra <>
    Cc: Rik van Riel <>
    Cc: Wanpeng Li <>
    Cc: Ingo Molnar <>
    Cc: John Stultz <>
    Cc: Jonathan Corbet <>

diff --git a/Documentation/timers/NO_HZ.txt b/Documentation/timers/NO_HZ.txt
index 2dcaf9adb7a7..9591092da5e0 100644
--- a/Documentation/timers/NO_HZ.txt
+++ b/Documentation/timers/NO_HZ.txt
@@ -131,13 +131,6 @@ error message, and the boot CPU will be removed from the mask.  Note that
 this means that your system must have at least two CPUs in order for
 CONFIG_NO_HZ_FULL=y to do anything for you.
-Alternatively, the CONFIG_NO_HZ_FULL_ALL=y Kconfig parameter specifies
-that all CPUs other than the boot CPU are adaptive-ticks CPUs.  This
-Kconfig parameter will be overridden by the "nohz_full=" boot parameter,
-so that if both the CONFIG_NO_HZ_FULL_ALL=y Kconfig parameter and
-the "nohz_full=1" boot parameter is specified, the boot parameter will
-prevail so that only CPU 1 will be an adaptive-ticks CPU.
 Finally, adaptive-ticks CPUs must have their RCU callbacks offloaded.
 This is covered in the "RCU IMPLICATIONS" section below.
diff --git a/kernel/time/Kconfig b/kernel/time/Kconfig
index f6b5f19223d6..78eabc41eaa6 100644
--- a/kernel/time/Kconfig
+++ b/kernel/time/Kconfig
@@ -113,16 +113,6 @@ config NO_HZ_FULL
-config NO_HZ_FULL_ALL
-       bool "Full dynticks system on all CPUs by default (except CPU 0)"
-       depends on NO_HZ_FULL
-       help
-         If the user doesn't pass the nohz_full boot option to
-	 define the range of full dynticks CPUs, consider that all
-	 CPUs in the system are full dynticks by default.
-	 Note the boot CPU will still be kept outside the range to
-	 handle the timekeeping duty.
 config NO_HZ
 	bool "Old Idle dynticks config"
diff --git a/kernel/time/tick-sched.c b/kernel/time/tick-sched.c
index 99578f06c8d4..ee10208148d5 100644
--- a/kernel/time/tick-sched.c
+++ b/kernel/time/tick-sched.c
@@ -405,30 +405,12 @@ static int tick_nohz_cpu_down(unsigned int cpu)
 	return 0;
-static int tick_nohz_init_all(void)
-	int err = -1;
-	if (!alloc_cpumask_var(&tick_nohz_full_mask, GFP_KERNEL)) {
-		WARN(1, "NO_HZ: Can't allocate full dynticks cpumask\n");
-		return err;
-	}
-	err = 0;
-	cpumask_setall(tick_nohz_full_mask);
-	tick_nohz_full_running = true;
-	return err;
 void __init tick_nohz_init(void)
 	int cpu, ret;
-	if (!tick_nohz_full_running) {
-		if (tick_nohz_init_all() < 0)
-			return;
-	}
+	if (!tick_nohz_full_running)
+		return;
 	 * Full dynticks uses irq work to drive the tick rescheduling on safe
diff --git a/tools/testing/selftests/rcutorture/configs/rcu/TASKS03 b/tools/testing/selftests/rcutorture/configs/rcu/TASKS03
index c70c51d5ded1..28568b72a31b 100644
--- a/tools/testing/selftests/rcutorture/configs/rcu/TASKS03
+++ b/tools/testing/selftests/rcutorture/configs/rcu/TASKS03
@@ -9,5 +9,4 @@ CONFIG_PREEMPT=y
diff --git a/tools/testing/selftests/rcutorture/configs/rcu/TASKS03.boot b/tools/testing/selftests/rcutorture/configs/rcu/TASKS03.boot
index cd2a188eeb6d..838297c58318 100644
--- a/tools/testing/selftests/rcutorture/configs/rcu/TASKS03.boot
+++ b/tools/testing/selftests/rcutorture/configs/rcu/TASKS03.boot
@@ -1 +1 @@
+rcutorture.torture_type=tasks nohz_full=1
diff --git a/tools/testing/selftests/rcutorture/configs/rcu/TREE04 b/tools/testing/selftests/rcutorture/configs/rcu/TREE04
index 27d22695d64c..24c9f6012e35 100644
--- a/tools/testing/selftests/rcutorture/configs/rcu/TREE04
+++ b/tools/testing/selftests/rcutorture/configs/rcu/TREE04
@@ -7,7 +7,6 @@ CONFIG_PREEMPT=n
diff --git a/tools/testing/selftests/rcutorture/configs/rcu/TREE04.boot b/tools/testing/selftests/rcutorture/configs/rcu/TREE04.boot
index e34c33430447..e6071bb96c7d 100644
--- a/tools/testing/selftests/rcutorture/configs/rcu/TREE04.boot
+++ b/tools/testing/selftests/rcutorture/configs/rcu/TREE04.boot
@@ -1 +1 @@
-rcutorture.torture_type=rcu_bh rcutree.rcu_fanout_leaf=4
+rcutorture.torture_type=rcu_bh rcutree.rcu_fanout_leaf=4 nohz_full=1-7
diff --git a/tools/testing/selftests/rcutorture/configs/rcu/TREE07 b/tools/testing/selftests/rcutorture/configs/rcu/TREE07
index 0f4759f4232e..d7afb271a586 100644
--- a/tools/testing/selftests/rcutorture/configs/rcu/TREE07
+++ b/tools/testing/selftests/rcutorture/configs/rcu/TREE07
@@ -7,7 +7,6 @@ CONFIG_PREEMPT=n

Powered by blists - more mailing lists