# HG changeset patch
# User Keir Fraser <keir.fraser@xxxxxxxxxx>
# Date 1284533125 -3600
# Node ID 14ce571d157e060fdb390e70fa8d0c95b2fd9b76
# Parent 5393151a737b023476f4e571effc547e758cf8c8
svm: simplify MSR handling
Machine check MSRs are not special to long mode. Thus move them into
svm_msr_write_intercept(). Remove empty long mode msr function and
simplify the logic.
Signed-off-by: Christoph Egger <Christoph.Egger@xxxxxxx>
---
xen/arch/x86/hvm/svm/svm.c | 46 +++++++++------------------------------------
1 files changed, 10 insertions(+), 36 deletions(-)
diff -r 5393151a737b -r 14ce571d157e xen/arch/x86/hvm/svm/svm.c
--- a/xen/arch/x86/hvm/svm/svm.c Tue Sep 14 18:26:10 2010 +0100
+++ b/xen/arch/x86/hvm/svm/svm.c Wed Sep 15 07:45:25 2010 +0100
@@ -67,8 +67,6 @@ bool_t cpu_has_lmsl;
static struct hvm_function_table svm_function_table;
-enum handler_return { HNDL_done, HNDL_unhandled, HNDL_exception_raised };
-
/* va of hardware host save area */
static DEFINE_PER_CPU_READ_MOSTLY(void *, hsa);
@@ -106,30 +104,6 @@ static void svm_cpu_down(void)
static void svm_cpu_down(void)
{
write_efer(read_efer() & ~EFER_SVME);
-}
-
-static enum handler_return
-long_mode_do_msr_write(unsigned int msr, uint64_t msr_content)
-{
- HVM_DBG_LOG(DBG_LEVEL_0, "msr %x msr_content %"PRIx64,
- msr, msr_content);
-
- switch ( msr )
- {
- case MSR_IA32_MC4_MISC: /* Threshold register */
- case MSR_F10_MC4_MISC1 ... MSR_F10_MC4_MISC3:
- /*
- * MCA/MCE: Threshold register is reported to be locked, so we ignore
- * all write accesses. This behaviour matches real HW, so guests should
- * have no problem with this.
- */
- break;
-
- default:
- return HNDL_unhandled;
- }
-
- return HNDL_done;
}
static void svm_save_dr(struct vcpu *v)
@@ -1179,20 +1153,20 @@ static int svm_msr_write_intercept(unsig
vpmu_do_wrmsr(msr, msr_content);
break;
+ case MSR_IA32_MC4_MISC: /* Threshold register */
+ case MSR_F10_MC4_MISC1 ... MSR_F10_MC4_MISC3:
+ /*
+ * MCA/MCE: Threshold register is reported to be locked, so we ignore
+ * all write accesses. This behaviour matches real HW, so guests should
+ * have no problem with this.
+ */
+ break;
+
default:
if ( wrmsr_viridian_regs(msr, msr_content) )
break;
- switch ( long_mode_do_msr_write(msr, msr_content) )
- {
- case HNDL_unhandled:
- wrmsr_hypervisor_regs(msr, msr_content);
- break;
- case HNDL_exception_raised:
- return X86EMUL_EXCEPTION;
- case HNDL_done:
- break;
- }
+ wrmsr_hypervisor_regs(msr, msr_content);
break;
}
return X86EMUL_OKAY;
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|