|
@@ -785,6 +785,21 @@ static inline unsigned long get_debugctlmsr(void)
|
|
|
return debugctlmsr;
|
|
return debugctlmsr;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+static inline unsigned long get_debugctlmsr_on_cpu(int cpu)
|
|
|
|
|
+{
|
|
|
|
|
+ u64 debugctlmsr = 0;
|
|
|
|
|
+ u32 val1, val2;
|
|
|
|
|
+
|
|
|
|
|
+#ifndef CONFIG_X86_DEBUGCTLMSR
|
|
|
|
|
+ if (boot_cpu_data.x86 < 6)
|
|
|
|
|
+ return 0;
|
|
|
|
|
+#endif
|
|
|
|
|
+ rdmsr_on_cpu(cpu, MSR_IA32_DEBUGCTLMSR, &val1, &val2);
|
|
|
|
|
+ debugctlmsr = val1 | ((u64)val2 << 32);
|
|
|
|
|
+
|
|
|
|
|
+ return debugctlmsr;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
static inline void update_debugctlmsr(unsigned long debugctlmsr)
|
|
static inline void update_debugctlmsr(unsigned long debugctlmsr)
|
|
|
{
|
|
{
|
|
|
#ifndef CONFIG_X86_DEBUGCTLMSR
|
|
#ifndef CONFIG_X86_DEBUGCTLMSR
|
|
@@ -794,6 +809,18 @@ static inline void update_debugctlmsr(unsigned long debugctlmsr)
|
|
|
wrmsrl(MSR_IA32_DEBUGCTLMSR, debugctlmsr);
|
|
wrmsrl(MSR_IA32_DEBUGCTLMSR, debugctlmsr);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+static inline void update_debugctlmsr_on_cpu(int cpu,
|
|
|
|
|
+ unsigned long debugctlmsr)
|
|
|
|
|
+{
|
|
|
|
|
+#ifndef CONFIG_X86_DEBUGCTLMSR
|
|
|
|
|
+ if (boot_cpu_data.x86 < 6)
|
|
|
|
|
+ return;
|
|
|
|
|
+#endif
|
|
|
|
|
+ wrmsr_on_cpu(cpu, MSR_IA32_DEBUGCTLMSR,
|
|
|
|
|
+ (u32)((u64)debugctlmsr),
|
|
|
|
|
+ (u32)((u64)debugctlmsr >> 32));
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
/*
|
|
/*
|
|
|
* from system description table in BIOS. Mostly for MCA use, but
|
|
* from system description table in BIOS. Mostly for MCA use, but
|
|
|
* others may find it useful:
|
|
* others may find it useful:
|