Commit 0f0b7e1c authored by Juri Lelli's avatar Juri Lelli Committed by Thomas Gleixner

x86/tsc: Add option to disable tsc clocksource watchdog

Clocksource watchdog has been found responsible for generating latency
spikes (in the 10-20 us range) when woken up to check for TSC stability.

Add an option to disable it at boot.
Signed-off-by: default avatarJuri Lelli <juri.lelli@redhat.com>
Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
Cc: bigeasy@linutronix.de
Cc: linux-rt-users@vger.kernel.org
Cc: peterz@infradead.org
Cc: bristot@redhat.com
Cc: williams@redhat.com
Link: https://lkml.kernel.org/r/20190307120913.13168-1-juri.lelli@redhat.com
parent 9e98c678
...@@ -4703,6 +4703,10 @@ ...@@ -4703,6 +4703,10 @@
[x86] unstable: mark the TSC clocksource as unstable, this [x86] unstable: mark the TSC clocksource as unstable, this
marks the TSC unconditionally unstable at bootup and marks the TSC unconditionally unstable at bootup and
avoids any further wobbles once the TSC watchdog notices. avoids any further wobbles once the TSC watchdog notices.
[x86] nowatchdog: disable clocksource watchdog. Used
in situations with strict latency requirements (where
interruptions from clocksource watchdog are not
acceptable).
turbografx.map[2|3]= [HW,JOY] turbografx.map[2|3]= [HW,JOY]
TurboGraFX parallel port interface TurboGraFX parallel port interface
......
...@@ -283,6 +283,7 @@ int __init notsc_setup(char *str) ...@@ -283,6 +283,7 @@ int __init notsc_setup(char *str)
__setup("notsc", notsc_setup); __setup("notsc", notsc_setup);
static int no_sched_irq_time; static int no_sched_irq_time;
static int no_tsc_watchdog;
static int __init tsc_setup(char *str) static int __init tsc_setup(char *str)
{ {
...@@ -292,6 +293,8 @@ static int __init tsc_setup(char *str) ...@@ -292,6 +293,8 @@ static int __init tsc_setup(char *str)
no_sched_irq_time = 1; no_sched_irq_time = 1;
if (!strcmp(str, "unstable")) if (!strcmp(str, "unstable"))
mark_tsc_unstable("boot parameter"); mark_tsc_unstable("boot parameter");
if (!strcmp(str, "nowatchdog"))
no_tsc_watchdog = 1;
return 1; return 1;
} }
...@@ -1349,7 +1352,7 @@ static int __init init_tsc_clocksource(void) ...@@ -1349,7 +1352,7 @@ static int __init init_tsc_clocksource(void)
if (tsc_unstable) if (tsc_unstable)
goto unreg; goto unreg;
if (tsc_clocksource_reliable) if (tsc_clocksource_reliable || no_tsc_watchdog)
clocksource_tsc.flags &= ~CLOCK_SOURCE_MUST_VERIFY; clocksource_tsc.flags &= ~CLOCK_SOURCE_MUST_VERIFY;
if (boot_cpu_has(X86_FEATURE_NONSTOP_TSC_S3)) if (boot_cpu_has(X86_FEATURE_NONSTOP_TSC_S3))
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment