diff options
author | Thomas Gleixner <tglx@linutronix.de> | 2016-11-19 08:47:33 -0500 |
---|---|---|
committer | Thomas Gleixner <tglx@linutronix.de> | 2016-11-29 13:23:15 -0500 |
commit | 7b3d2f6e08ed5eb6bcf6912938f7a542405f8e8e (patch) | |
tree | 0e6940350eeba63f102e93b8fb34b6f7e47df97c | |
parent | 984fecebda3b9c8e3d75f8492593da71c58972b3 (diff) |
x86/tsc: Use X86_FEATURE_TSC_ADJUST in detect_art()
The art detection uses rdmsrl_safe() to detect the availablity of the
TSC_ADJUST MSR.
That's pointless because we have a feature bit for this. Use it.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Reviewed-by: Ingo Molnar <mingo@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Yinghai Lu <yinghai@kernel.org>
Cc: Borislav Petkov <bp@alien8.de>
Link: http://lkml.kernel.org/r/20161119134017.483561692@linutronix.de
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
-rw-r--r-- | arch/x86/kernel/tsc.c | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/arch/x86/kernel/tsc.c b/arch/x86/kernel/tsc.c index 0ff1ec61d1e4..2b27c5ae9d1f 100644 --- a/arch/x86/kernel/tsc.c +++ b/arch/x86/kernel/tsc.c | |||
@@ -1057,18 +1057,20 @@ static void detect_art(void) | |||
1057 | if (boot_cpu_data.cpuid_level < ART_CPUID_LEAF) | 1057 | if (boot_cpu_data.cpuid_level < ART_CPUID_LEAF) |
1058 | return; | 1058 | return; |
1059 | 1059 | ||
1060 | cpuid(ART_CPUID_LEAF, &art_to_tsc_denominator, | 1060 | /* Don't enable ART in a VM, non-stop TSC and TSC_ADJUST required */ |
1061 | &art_to_tsc_numerator, unused, unused+1); | ||
1062 | |||
1063 | /* Don't enable ART in a VM, non-stop TSC required */ | ||
1064 | if (boot_cpu_has(X86_FEATURE_HYPERVISOR) || | 1061 | if (boot_cpu_has(X86_FEATURE_HYPERVISOR) || |
1065 | !boot_cpu_has(X86_FEATURE_NONSTOP_TSC) || | 1062 | !boot_cpu_has(X86_FEATURE_NONSTOP_TSC) || |
1066 | art_to_tsc_denominator < ART_MIN_DENOMINATOR) | 1063 | !boot_cpu_has(X86_FEATURE_TSC_ADJUST)) |
1067 | return; | 1064 | return; |
1068 | 1065 | ||
1069 | if (rdmsrl_safe(MSR_IA32_TSC_ADJUST, &art_to_tsc_offset)) | 1066 | cpuid(ART_CPUID_LEAF, &art_to_tsc_denominator, |
1067 | &art_to_tsc_numerator, unused, unused+1); | ||
1068 | |||
1069 | if (art_to_tsc_denominator < ART_MIN_DENOMINATOR) | ||
1070 | return; | 1070 | return; |
1071 | 1071 | ||
1072 | rdmsrl(MSR_IA32_TSC_ADJUST, art_to_tsc_offset); | ||
1073 | |||
1072 | /* Make this sticky over multiple CPU init calls */ | 1074 | /* Make this sticky over multiple CPU init calls */ |
1073 | setup_force_cpu_cap(X86_FEATURE_ART); | 1075 | setup_force_cpu_cap(X86_FEATURE_ART); |
1074 | } | 1076 | } |