From: Andreas Herrmann Date: Tue, 27 Apr 2010 10:13:48 +0000 (+0200) Subject: x86, amd: Check X86_FEATURE_OSVW bit before accessing OSVW MSRs X-Git-Tag: v2.6.32.14~14 X-Git-Url: https://git.fsl.cs.sunysb.edu/?a=commitdiff_plain;h=f46c7299a930469f51e30b7be281c33630917244;p=unionfs-2.6.25.y.git x86, amd: Check X86_FEATURE_OSVW bit before accessing OSVW MSRs commit f01487119dda3d9f58c9729c7361ecc50a61c188 upstream. If host CPU is exposed to a guest the OSVW MSRs are not guaranteed to be present and a GP fault occurs. Thus checking the feature flag is essential. Signed-off-by: Andreas Herrmann LKML-Reference: <20100427101348.GC4489@alberich.amd.com> Signed-off-by: H. Peter Anvin Signed-off-by: Greg Kroah-Hartman --- diff --git a/arch/x86/kernel/process.c b/arch/x86/kernel/process.c index d0ba10778e9..5fd5b07bf3a 100644 --- a/arch/x86/kernel/process.c +++ b/arch/x86/kernel/process.c @@ -459,11 +459,13 @@ static int __cpuinit check_c1e_idle(const struct cpuinfo_x86 *c) * check OSVW bit for CPUs that are not affected * by erratum #400 */ - rdmsrl(MSR_AMD64_OSVW_ID_LENGTH, val); - if (val >= 2) { - rdmsrl(MSR_AMD64_OSVW_STATUS, val); - if (!(val & BIT(1))) - goto no_c1e_idle; + if (cpu_has(c, X86_FEATURE_OSVW)) { + rdmsrl(MSR_AMD64_OSVW_ID_LENGTH, val); + if (val >= 2) { + rdmsrl(MSR_AMD64_OSVW_STATUS, val); + if (!(val & BIT(1))) + goto no_c1e_idle; + } } return 1; }