#
# 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

# Timekeeping vsyscall support
config GENERIC_TIME_VSYSCALL
	bool

# Timekeeping vsyscall support
config GENERIC_TIME_VSYSCALL_OLD
	bool

# ktime_t scalar 64bit nsec representation
config KTIME_SCALAR
	bool

# Old style timekeeping
config ARCH_USES_GETTIMEOFFSET
	bool

# The generic clock events infrastructure
config GENERIC_CLOCKEVENTS
	bool

# Migration helper. Builds, but does not invoke
config GENERIC_CLOCKEVENTS_BUILD
	bool
	default y
	depends on GENERIC_CLOCKEVENTS

# 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 independ 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
	# RCU_USER_QS dependency
	depends on HAVE_CONTEXT_TRACKING
	# VIRT_CPU_ACCOUNTING_GEN dependency
	depends on HAVE_VIRT_CPU_ACCOUNTING_GEN
	select NO_HZ_COMMON
	select RCU_USER_QS
	select RCU_NOCB_CPU
	select VIRT_CPU_ACCOUNTING_GEN
	select IRQ_WORK
	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_FULL_ALL
       bool "Full dynticks system on all CPUs by default"
       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_FULL_SYSIDLE
	bool "Detect full-system idle state for full dynticks system"
	depends on NO_HZ_FULL
	default n
	help
	 At least one CPU must keep the scheduling-clock tick running for
	 timekeeping purposes whenever there is a non-idle CPU, where
	 "non-idle" also includes dynticks CPUs as long as they are
	 running non-idle tasks.  Because the underlying adaptive-tick
	 support cannot distinguish between all CPUs being idle and
	 all CPUs each running a single task in dynticks mode, the
	 underlying support simply ensures that there is always a CPU
	 handling the scheduling-clock tick, whether or not all CPUs
	 are idle.  This Kconfig option enables scalable detection of
	 the all-CPUs-idle state, thus allowing the scheduling-clock
	 tick to be disabled when all CPUs are idle.  Note that scalable
	 detection of the all-CPUs-idle state means that larger systems
	 will be slower to declare the all-CPUs-idle state.

	 Say Y if you would like to help debug all-CPUs-idle detection.

	 Say N if you are unsure.

config NO_HZ_FULL_SYSIDLE_SMALL
	int "Number of CPUs above which large-system approach is used"
	depends on NO_HZ_FULL_SYSIDLE
	range 1 NR_CPUS
	default 8
	help
	 The full-system idle detection mechanism takes a lazy approach
	 on large systems, as is required to attain decent scalability.
	 However, on smaller systems, scalability is not anywhere near as
	 large a concern as is energy efficiency.  The sysidle subsystem
	 therefore uses a fast but non-scalable algorithm for small
	 systems and a lazier but scalable algorithm for large systems.
	 This Kconfig parameter defines the number of CPUs in the largest
	 system that will be considered to be "small".

	 The default value will be fine in most cases.	Battery-powered
	 systems that (1) enable NO_HZ_FULL_SYSIDLE, (2) have larger
	 numbers of CPUs, and (3) are suffering from battery-lifetime
	 problems due to long sysidle latencies might wish to experiment
	 with larger values for this Kconfig parameter.  On the other
	 hand, they might be even better served by disabling NO_HZ_FULL
	 entirely, given that NO_HZ_FULL is intended for HPC and
	 real-time workloads that at present do not tend to be run on
	 battery-powered systems.

	 Take the default if you are unsure.

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
