x86: vMCE emulation
authorLiu, Jinsong <jinsong.liu@intel.com>
Wed, 26 Sep 2012 10:04:00 +0000 (12:04 +0200)
committerLiu, Jinsong <jinsong.liu@intel.com>
Wed, 26 Sep 2012 10:04:00 +0000 (12:04 +0200)
commit975b5bdf27031adef6587bb5c92b7a5800e051f1
treee69cf436778fc15c19764cca89c0e164f228fc43
parent8e804aec451a072022eece0980481ab545b5cd75
x86: vMCE emulation

This patch provides virtual MCE support to guest. It emulates a simple
and clean MCE MSRs interface to guest by faking caps to guest if needed
and masking caps if unnecessary:
1. Providing a well-defined MCG_CAP to guest, filter out un-necessary
   caps and provide only guest needed caps;
2. Disabling MCG_CTL to avoid model specific;
3. Sticking all 1's to MCi_CTL to guest to avoid model specific;
4. Enabling CMCI cap but never really inject to guest to prevent
   polling periodically;
5. Masking MSCOD field of MCi_STATUS to avoid model specific;
6. Keeping natural semantics by per-vcpu instead of per-domain
   variables;
7. Using bank1 and reserving bank0 to work around 'bank0 quirk' of some
   very old processors;
8. Cleaning some vMCE# injection logic which shared by Intel and AMD
   but useless under new vMCE implement;
9. Keeping compatilbe w/ old xen version which has been backported to
   SLES11 SP2, so that old vMCE would not blocked when migrate to new
   vMCE;

Signed-off-by: Liu, Jinsong <jinsong.liu@intel.com>
- make printing consistent (and non-exploitable)
- fix return values of intel_mce_{rd,wr}msr() for out of range banks
- miscellaneous cleanup

Signed-off-by: Jan Beulich <jbeulich@suse.com>
Committed-by: Jan Beulich <jbeulich@suse.com>
xen/arch/x86/cpu/mcheck/mce.h
xen/arch/x86/cpu/mcheck/mce_intel.c
xen/arch/x86/cpu/mcheck/vmce.c
xen/arch/x86/domain.c
xen/arch/x86/domctl.c
xen/arch/x86/traps.c
xen/include/asm-x86/domain.h
xen/include/asm-x86/mce.h