Commit6f1982fedd("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:6f1982fedd("sched/isolation: Handle the nohz_full= parameter") Reported-by: kernel test robot <xiaolong.ye@intel.com> Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com> Cc: Frederic Weisbecker <frederic@kernel.org> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: Chris Metcalf <cmetcalf@mellanox.com> Cc: Christoph Lameter <cl@linux.com> Cc: Linus Torvalds <torvalds@linux-foundation.org> Cc: Luiz Capitulino <lcapitulino@redhat.com> Cc: Mike Galbraith <efault@gmx.de> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Rik van Riel <riel@redhat.com> Cc: Wanpeng Li <kernellwp@gmail.com> Cc: Ingo Molnar <mingo@kernel.org> Cc: John Stultz <john.stultz@linaro.org> Cc: Jonathan Corbet <corbet@lwn.net>
		
			
				
	
	
		
			135 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			135 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
#
 | 
						|
# Timer subsystem related configuration options
 | 
						|
#
 | 
						|
 | 
						|
# Options selectable by arch Kconfig
 | 
						|
 | 
						|
# Watchdog function for clocksources to detect instabilities
 | 
						|
config CLOCKSOURCE_WATCHDOG
 | 
						|
	bool
 | 
						|
 | 
						|
# Architecture has extra clocksource data
 | 
						|
config ARCH_CLOCKSOURCE_DATA
 | 
						|
	bool
 | 
						|
 | 
						|
# Clocksources require validation of the clocksource against the last
 | 
						|
# cycle update - x86/TSC misfeature
 | 
						|
config CLOCKSOURCE_VALIDATE_LAST_CYCLE
 | 
						|
	bool
 | 
						|
 | 
						|
# Timekeeping vsyscall support
 | 
						|
config GENERIC_TIME_VSYSCALL
 | 
						|
	bool
 | 
						|
 | 
						|
# Old style timekeeping
 | 
						|
config ARCH_USES_GETTIMEOFFSET
 | 
						|
	bool
 | 
						|
 | 
						|
# The generic clock events infrastructure
 | 
						|
config GENERIC_CLOCKEVENTS
 | 
						|
	bool
 | 
						|
 | 
						|
# Architecture can handle broadcast in a driver-agnostic way
 | 
						|
config ARCH_HAS_TICK_BROADCAST
 | 
						|
	bool
 | 
						|
 | 
						|
# Clockevents broadcasting infrastructure
 | 
						|
config GENERIC_CLOCKEVENTS_BROADCAST
 | 
						|
	bool
 | 
						|
	depends on GENERIC_CLOCKEVENTS
 | 
						|
 | 
						|
# Automatically adjust the min. reprogramming time for
 | 
						|
# clock event device
 | 
						|
config GENERIC_CLOCKEVENTS_MIN_ADJUST
 | 
						|
	bool
 | 
						|
 | 
						|
# Generic update of CMOS clock
 | 
						|
config GENERIC_CMOS_UPDATE
 | 
						|
	bool
 | 
						|
 | 
						|
if GENERIC_CLOCKEVENTS
 | 
						|
menu "Timers subsystem"
 | 
						|
 | 
						|
# Core internal switch. Selected by NO_HZ_COMMON / HIGH_RES_TIMERS. This is
 | 
						|
# only related to the tick functionality. Oneshot clockevent devices
 | 
						|
# are supported independent of this.
 | 
						|
config TICK_ONESHOT
 | 
						|
	bool
 | 
						|
 | 
						|
config NO_HZ_COMMON
 | 
						|
	bool
 | 
						|
	depends on !ARCH_USES_GETTIMEOFFSET && GENERIC_CLOCKEVENTS
 | 
						|
	select TICK_ONESHOT
 | 
						|
 | 
						|
choice
 | 
						|
	prompt "Timer tick handling"
 | 
						|
	default NO_HZ_IDLE if NO_HZ
 | 
						|
 | 
						|
config HZ_PERIODIC
 | 
						|
	bool "Periodic timer ticks (constant rate, no dynticks)"
 | 
						|
	help
 | 
						|
	  This option keeps the tick running periodically at a constant
 | 
						|
	  rate, even when the CPU doesn't need it.
 | 
						|
 | 
						|
config NO_HZ_IDLE
 | 
						|
	bool "Idle dynticks system (tickless idle)"
 | 
						|
	depends on !ARCH_USES_GETTIMEOFFSET && GENERIC_CLOCKEVENTS
 | 
						|
	select NO_HZ_COMMON
 | 
						|
	help
 | 
						|
	  This option enables a tickless idle system: timer interrupts
 | 
						|
	  will only trigger on an as-needed basis when the system is idle.
 | 
						|
	  This is usually interesting for energy saving.
 | 
						|
 | 
						|
	  Most of the time you want to say Y here.
 | 
						|
 | 
						|
config NO_HZ_FULL
 | 
						|
	bool "Full dynticks system (tickless)"
 | 
						|
	# NO_HZ_COMMON dependency
 | 
						|
	depends on !ARCH_USES_GETTIMEOFFSET && GENERIC_CLOCKEVENTS
 | 
						|
	# We need at least one periodic CPU for timekeeping
 | 
						|
	depends on SMP
 | 
						|
	depends on HAVE_CONTEXT_TRACKING
 | 
						|
	# VIRT_CPU_ACCOUNTING_GEN dependency
 | 
						|
	depends on HAVE_VIRT_CPU_ACCOUNTING_GEN
 | 
						|
	select NO_HZ_COMMON
 | 
						|
	select RCU_NOCB_CPU
 | 
						|
	select VIRT_CPU_ACCOUNTING_GEN
 | 
						|
	select IRQ_WORK
 | 
						|
	select CPU_ISOLATION
 | 
						|
	help
 | 
						|
	 Adaptively try to shutdown the tick whenever possible, even when
 | 
						|
	 the CPU is running tasks. Typically this requires running a single
 | 
						|
	 task on the CPU. Chances for running tickless are maximized when
 | 
						|
	 the task mostly runs in userspace and has few kernel activity.
 | 
						|
 | 
						|
	 You need to fill up the nohz_full boot parameter with the
 | 
						|
	 desired range of dynticks CPUs.
 | 
						|
 | 
						|
	 This is implemented at the expense of some overhead in user <-> kernel
 | 
						|
	 transitions: syscalls, exceptions and interrupts. Even when it's
 | 
						|
	 dynamically off.
 | 
						|
 | 
						|
	 Say N.
 | 
						|
 | 
						|
endchoice
 | 
						|
 | 
						|
config NO_HZ
 | 
						|
	bool "Old Idle dynticks config"
 | 
						|
	depends on !ARCH_USES_GETTIMEOFFSET && GENERIC_CLOCKEVENTS
 | 
						|
	help
 | 
						|
	  This is the old config entry that enables dynticks idle.
 | 
						|
	  We keep it around for a little while to enforce backward
 | 
						|
	  compatibility with older config files.
 | 
						|
 | 
						|
config HIGH_RES_TIMERS
 | 
						|
	bool "High Resolution Timer Support"
 | 
						|
	depends on !ARCH_USES_GETTIMEOFFSET && GENERIC_CLOCKEVENTS
 | 
						|
	select TICK_ONESHOT
 | 
						|
	help
 | 
						|
	  This option enables high resolution timer support. If your
 | 
						|
	  hardware is not capable then this option only increases
 | 
						|
	  the size of the kernel image.
 | 
						|
 | 
						|
endmenu
 | 
						|
endif
 |