1# SPDX-License-Identifier: GPL-2.0-only 2# 3# Timer subsystem related configuration options 4# 5 6# Options selectable by arch Kconfig 7 8# Watchdog function for clocksources to detect instabilities 9config CLOCKSOURCE_WATCHDOG 10 bool 11 12# Architecture has extra clocksource data 13config ARCH_CLOCKSOURCE_DATA 14 bool 15 16# Architecture has extra clocksource init called from registration 17config ARCH_CLOCKSOURCE_INIT 18 bool 19 20# Timekeeping vsyscall support 21config GENERIC_TIME_VSYSCALL 22 bool 23 24# The generic clock events infrastructure 25config GENERIC_CLOCKEVENTS 26 def_bool !LEGACY_TIMER_TICK 27 28# Architecture can handle broadcast in a driver-agnostic way 29config ARCH_HAS_TICK_BROADCAST 30 bool 31 32# Clockevents broadcasting infrastructure 33config GENERIC_CLOCKEVENTS_BROADCAST 34 bool 35 depends on GENERIC_CLOCKEVENTS 36 37# Handle broadcast in default_idle_call() 38config GENERIC_CLOCKEVENTS_BROADCAST_IDLE 39 bool 40 depends on GENERIC_CLOCKEVENTS_BROADCAST 41 42# Automatically adjust the min. reprogramming time for 43# clock event device 44config GENERIC_CLOCKEVENTS_MIN_ADJUST 45 bool 46 47# Generic update of CMOS clock 48config GENERIC_CMOS_UPDATE 49 bool 50 51# Select to handle posix CPU timers from task_work 52# and not from the timer interrupt context 53config HAVE_POSIX_CPU_TIMERS_TASK_WORK 54 bool 55 56config POSIX_CPU_TIMERS_TASK_WORK 57 bool 58 default y if POSIX_TIMERS && HAVE_POSIX_CPU_TIMERS_TASK_WORK 59 60config LEGACY_TIMER_TICK 61 bool 62 help 63 The legacy timer tick helper is used by platforms that 64 lack support for the generic clockevent framework. 65 New platforms should use generic clockevents instead. 66 67config TIME_KUNIT_TEST 68 tristate "KUnit test for kernel/time functions" if !KUNIT_ALL_TESTS 69 depends on KUNIT 70 default KUNIT_ALL_TESTS 71 help 72 Enable this option to test RTC library functions. 73 74 If unsure, say N. 75 76config CONTEXT_TRACKING 77 bool 78 79config CONTEXT_TRACKING_IDLE 80 bool 81 select CONTEXT_TRACKING 82 help 83 Tracks idle state on behalf of RCU. 84 85if GENERIC_CLOCKEVENTS 86menu "Timers subsystem" 87 88# Core internal switch. Selected by NO_HZ_COMMON / HIGH_RES_TIMERS. This is 89# only related to the tick functionality. Oneshot clockevent devices 90# are supported independent of this. 91config TICK_ONESHOT 92 bool 93 94config NO_HZ_COMMON 95 bool 96 select TICK_ONESHOT 97 98choice 99 prompt "Timer tick handling" 100 default NO_HZ_IDLE if NO_HZ 101 102config HZ_PERIODIC 103 bool "Periodic timer ticks (constant rate, no dynticks)" 104 help 105 This option keeps the tick running periodically at a constant 106 rate, even when the CPU doesn't need it. 107 108config NO_HZ_IDLE 109 bool "Idle dynticks system (tickless idle)" 110 select NO_HZ_COMMON 111 help 112 This option enables a tickless idle system: timer interrupts 113 will only trigger on an as-needed basis when the system is idle. 114 This is usually interesting for energy saving. 115 116 Most of the time you want to say Y here. 117 118config NO_HZ_FULL 119 bool "Full dynticks system (tickless)" 120 # NO_HZ_COMMON dependency 121 # We need at least one periodic CPU for timekeeping 122 depends on SMP 123 depends on HAVE_CONTEXT_TRACKING_USER 124 # VIRT_CPU_ACCOUNTING_GEN dependency 125 depends on HAVE_VIRT_CPU_ACCOUNTING_GEN 126 select NO_HZ_COMMON 127 select RCU_NOCB_CPU 128 select VIRT_CPU_ACCOUNTING_GEN 129 select IRQ_WORK 130 select CPU_ISOLATION 131 help 132 Adaptively try to shutdown the tick whenever possible, even when 133 the CPU is running tasks. Typically this requires running a single 134 task on the CPU. Chances for running tickless are maximized when 135 the task mostly runs in userspace and has few kernel activity. 136 137 You need to fill up the nohz_full boot parameter with the 138 desired range of dynticks CPUs to use it. This is implemented at 139 the expense of some overhead in user <-> kernel transitions: 140 syscalls, exceptions and interrupts. 141 142 By default, without passing the nohz_full parameter, this behaves just 143 like NO_HZ_IDLE. 144 145 If you're a distro say Y. 146 147endchoice 148 149config CONTEXT_TRACKING_USER 150 bool 151 depends on HAVE_CONTEXT_TRACKING_USER 152 select CONTEXT_TRACKING 153 help 154 Track transitions between kernel and user on behalf of RCU and 155 tickless cputime accounting. The former case relies on context 156 tracking to enter/exit RCU extended quiescent states. 157 158config CONTEXT_TRACKING_USER_FORCE 159 bool "Force user context tracking" 160 depends on CONTEXT_TRACKING_USER 161 default y if !NO_HZ_FULL 162 help 163 The major pre-requirement for full dynticks to work is to 164 support the user context tracking subsystem. But there are also 165 other dependencies to provide in order to make the full 166 dynticks working. 167 168 This option stands for testing when an arch implements the 169 user context tracking backend but doesn't yet fulfill all the 170 requirements to make the full dynticks feature working. 171 Without the full dynticks, there is no way to test the support 172 for user context tracking and the subsystems that rely on it: RCU 173 userspace extended quiescent state and tickless cputime 174 accounting. This option copes with the absence of the full 175 dynticks subsystem by forcing the user context tracking on all 176 CPUs in the system. 177 178 Say Y only if you're working on the development of an 179 architecture backend for the user context tracking. 180 181 Say N otherwise, this option brings an overhead that you 182 don't want in production. 183 184config NO_HZ 185 bool "Old Idle dynticks config" 186 help 187 This is the old config entry that enables dynticks idle. 188 We keep it around for a little while to enforce backward 189 compatibility with older config files. 190 191config HIGH_RES_TIMERS 192 bool "High Resolution Timer Support" 193 select TICK_ONESHOT 194 help 195 This option enables high resolution timer support. If your 196 hardware is not capable then this option only increases 197 the size of the kernel image. 198 199config CLOCKSOURCE_WATCHDOG_MAX_SKEW_US 200 int "Clocksource watchdog maximum allowable skew (in microseconds)" 201 depends on CLOCKSOURCE_WATCHDOG 202 range 50 1000 203 default 125 204 help 205 Specify the maximum amount of allowable watchdog skew in 206 microseconds before reporting the clocksource to be unstable. 207 The default is based on a half-second clocksource watchdog 208 interval and NTP's maximum frequency drift of 500 parts 209 per million. If the clocksource is good enough for NTP, 210 it is good enough for the clocksource watchdog! 211 212endmenu 213endif 214