| # SPDX-License-Identifier: GPL-2.0-only | |
| # | |
| # 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 init called from registration | |
| config ARCH_CLOCKSOURCE_INIT | |
| bool | |
| config ARCH_WANTS_CLOCKSOURCE_READ_INLINE | |
| bool | |
| # The generic clock events infrastructure | |
| config GENERIC_CLOCKEVENTS | |
| def_bool !LEGACY_TIMER_TICK | |
| # 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 | |
| # Handle broadcast in default_idle_call() | |
| config GENERIC_CLOCKEVENTS_BROADCAST_IDLE | |
| bool | |
| depends on GENERIC_CLOCKEVENTS_BROADCAST | |
| # Automatically adjust the min. reprogramming time for | |
| # clock event device | |
| config GENERIC_CLOCKEVENTS_MIN_ADJUST | |
| bool | |
| config GENERIC_CLOCKEVENTS_COUPLED | |
| bool | |
| config GENERIC_CLOCKEVENTS_COUPLED_INLINE | |
| select GENERIC_CLOCKEVENTS_COUPLED | |
| bool | |
| # Generic update of CMOS clock | |
| config GENERIC_CMOS_UPDATE | |
| bool | |
| # Deferred rearming of the hrtimer interrupt | |
| config HRTIMER_REARM_DEFERRED | |
| def_bool y | |
| depends on GENERIC_ENTRY && HAVE_GENERIC_TIF_BITS | |
| depends on HIGH_RES_TIMERS && SCHED_HRTICK | |
| # Select to handle posix CPU timers from task_work | |
| # and not from the timer interrupt context | |
| config HAVE_POSIX_CPU_TIMERS_TASK_WORK | |
| bool | |
| config POSIX_CPU_TIMERS_TASK_WORK | |
| bool | |
| default y if POSIX_TIMERS && HAVE_POSIX_CPU_TIMERS_TASK_WORK | |
| config LEGACY_TIMER_TICK | |
| bool | |
| help | |
| The legacy timer tick helper is used by platforms that | |
| lack support for the generic clockevent framework. | |
| New platforms should use generic clockevents instead. | |
| config TIME_KUNIT_TEST | |
| tristate "KUnit test for kernel/time functions" if !KUNIT_ALL_TESTS | |
| depends on KUNIT | |
| default KUNIT_ALL_TESTS | |
| help | |
| Enable this option to test RTC library functions. | |
| If unsure, say N. | |
| config CONTEXT_TRACKING | |
| bool | |
| config CONTEXT_TRACKING_IDLE | |
| bool | |
| select CONTEXT_TRACKING | |
| help | |
| Tracks idle state on behalf of RCU. | |
| menu "Timers subsystem" | |
| if GENERIC_CLOCKEVENTS | |
| # 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 | |
| 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)" | |
| 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 | |
| # We need at least one periodic CPU for timekeeping | |
| depends on SMP | |
| depends on HAVE_CONTEXT_TRACKING_USER | |
| # VIRT_CPU_ACCOUNTING_GEN dependency | |
| depends on HAVE_VIRT_CPU_ACCOUNTING_GEN | |
| select NO_HZ_COMMON | |
| select RCU_NOCB_CPU | |
| 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 to use it. This is implemented at | |
| the expense of some overhead in user <-> kernel transitions: | |
| syscalls, exceptions and interrupts. | |
| By default, without passing the nohz_full parameter, this behaves just | |
| like NO_HZ_IDLE. | |
| If you're a distro say Y. | |
| endchoice | |
| config CONTEXT_TRACKING_USER | |
| bool | |
| depends on HAVE_CONTEXT_TRACKING_USER | |
| select CONTEXT_TRACKING | |
| help | |
| Track transitions between kernel and user on behalf of RCU and | |
| tickless cputime accounting. The former case relies on context | |
| tracking to enter/exit RCU extended quiescent states. | |
| config CONTEXT_TRACKING_USER_FORCE | |
| bool "Force user context tracking" | |
| depends on CONTEXT_TRACKING_USER | |
| default y if !NO_HZ_FULL | |
| help | |
| The major pre-requirement for full dynticks to work is to | |
| support the user context tracking subsystem. But there are also | |
| other dependencies to provide in order to make the full | |
| dynticks working. | |
| This option stands for testing when an arch implements the | |
| user context tracking backend but doesn't yet fulfill all the | |
| requirements to make the full dynticks feature working. | |
| Without the full dynticks, there is no way to test the support | |
| for user context tracking and the subsystems that rely on it: RCU | |
| userspace extended quiescent state and tickless cputime | |
| accounting. This option copes with the absence of the full | |
| dynticks subsystem by forcing the user context tracking on all | |
| CPUs in the system. | |
| Say Y only if you're working on the development of an | |
| architecture backend for the user context tracking. | |
| Say N otherwise, this option brings an overhead that you | |
| don't want in production. | |
| config NO_HZ | |
| bool "Old Idle dynticks config" | |
| 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" | |
| 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. | |
| endif | |
| config POSIX_AUX_CLOCKS | |
| bool "Enable auxiliary POSIX clocks" | |
| depends on POSIX_TIMERS | |
| help | |
| Auxiliary POSIX clocks are clocks which can be steered | |
| independently of the core timekeeper, which controls the | |
| MONOTONIC, REALTIME, BOOTTIME and TAI clocks. They are useful to | |
| provide e.g. lockless time accessors to independent PTP clocks | |
| and other clock domains, which are not correlated to the TAI/NTP | |
| notion of time. | |
| endmenu |