summaryrefslogtreecommitdiff
path: root/arch/x86/kernel/cpu/perf_event.c
diff options
context:
space:
mode:
authorOlof Johansson <olof@lixom.net>2012-11-06 06:48:05 -0800
committerOlof Johansson <olof@lixom.net>2012-11-06 06:48:05 -0800
commit3b19119b95a52200c8ae3df3aa89c21c9a1a8894 (patch)
tree3ae74b8a35b3d1f639a68c1690af1c06e14a1571 /arch/x86/kernel/cpu/perf_event.c
parentccb1cfcb964fa8a8acd58b7783b2e82d7ad7975b (diff)
parente095c0d122c09efabe7d4136ce77f72c636c4879 (diff)
Merge tag 'calxeda-ecx-2000' of git://sources.calxeda.com/kernel/linux into next/soc
Support for Calxeda ECX-2000 SOC from Rob Herring * tag 'calxeda-ecx-2000' of git://sources.calxeda.com/kernel/linux: ARM: highbank: Add initial ECX-2000 support ARM: highbank: abstract out SCU usage ARM: smp_twd: don't warn on no DT node ARM: dts: Add Calxeda ECX-2000 support ARM: highbank: enable coherent DMA for xgmac in dts ARM: highbank: disable unused sdhci and gpio in dts + sync to Linux 3.7-rc3
Diffstat (limited to 'arch/x86/kernel/cpu/perf_event.c')
-rw-r--r--arch/x86/kernel/cpu/perf_event.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/arch/x86/kernel/cpu/perf_event.c b/arch/x86/kernel/cpu/perf_event.c
index 3373f84d1397..4a3374e61a93 100644
--- a/arch/x86/kernel/cpu/perf_event.c
+++ b/arch/x86/kernel/cpu/perf_event.c
@@ -208,12 +208,14 @@ static bool check_hw_exists(void)
}
/*
- * Now write a value and read it back to see if it matches,
- * this is needed to detect certain hardware emulators (qemu/kvm)
- * that don't trap on the MSR access and always return 0s.
+ * Read the current value, change it and read it back to see if it
+ * matches, this is needed to detect certain hardware emulators
+ * (qemu/kvm) that don't trap on the MSR access and always return 0s.
*/
- val = 0xabcdUL;
reg = x86_pmu_event_addr(0);
+ if (rdmsrl_safe(reg, &val))
+ goto msr_fail;
+ val ^= 0xffffUL;
ret = wrmsrl_safe(reg, val);
ret |= rdmsrl_safe(reg, &val_new);
if (ret || val != val_new)