123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209 |
- # 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 data
- config ARCH_CLOCKSOURCE_DATA
- bool
- # Architecture has extra clocksource init called from registration
- config ARCH_CLOCKSOURCE_INIT
- 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
- # 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
- # 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
- # 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.
- 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
- 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 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 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.
- config CLOCKSOURCE_WATCHDOG_MAX_SKEW_US
- int "Clocksource watchdog maximum allowable skew (in μs)"
- depends on CLOCKSOURCE_WATCHDOG
- range 50 1000
- default 100
- help
- Specify the maximum amount of allowable watchdog skew in
- microseconds before reporting the clocksource to be unstable.
- endmenu
- endif
|