aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKeir Fraser <keir.fraser@citrix.com>2010-02-08 10:18:51 +0000
committerKeir Fraser <keir.fraser@citrix.com>2010-02-08 10:18:51 +0000
commitcfc536c55a7daec2bd095135755ce0b65146ce99 (patch)
treec6772e1a8a044d951aa446a46c060c41e0c07c3c
parent407b049aebf00b916e2b196c444a6a79ea064fd5 (diff)
downloadxen-cfc536c55a7daec2bd095135755ce0b65146ce99.tar.gz
xen-cfc536c55a7daec2bd095135755ce0b65146ce99.tar.bz2
xen-cfc536c55a7daec2bd095135755ce0b65146ce99.zip
Dump machine check context for fatal machine check
This small patches enable Xen hypervisor to always dump machine check ontext, previously it will not print anything if fatal MCE happens. It also add checking for NULL pointer. It also change the address passing to guest to always use guest mfn. It should benifit non-translated guest. Signed-off-by: Jiang, Yunhong <yunhong.jiang@intel.com>
-rw-r--r--xen/arch/x86/cpu/mcheck/mce_intel.c9
1 files changed, 5 insertions, 4 deletions
diff --git a/xen/arch/x86/cpu/mcheck/mce_intel.c b/xen/arch/x86/cpu/mcheck/mce_intel.c
index e2cd0012dc..310bae12c1 100644
--- a/xen/arch/x86/cpu/mcheck/mce_intel.c
+++ b/xen/arch/x86/cpu/mcheck/mce_intel.c
@@ -370,7 +370,7 @@ static void intel_UCR_handler(struct mcinfo_bank *bank,
}
gfn =
- mfn_to_gmfn(d, ((bank->mc_addr) >> PAGE_SHIFT));
+ get_gpfn_from_mfn((bank->mc_addr) >> PAGE_SHIFT);
bank->mc_addr = gfn << PAGE_SHIFT |
(bank->mc_addr & (PAGE_SIZE -1 ));
if (fill_vmsr_data(bank, global->mc_gstatus) == -1)
@@ -663,6 +663,10 @@ static void intel_machine_check(struct cpu_user_regs * regs, long error_code)
mctc = mcheck_mca_logout(MCA_MCE_SCAN, mca_allbanks, &bs, &clear_bank);
if (bs.errcnt) {
+ /* dump MCE error */
+ if (mctc != NULL)
+ x86_mcinfo_dump(mctelem_dataptr(mctc));
+
/*
* Uncorrected errors must be dealth with in softirq context.
*/
@@ -690,9 +694,6 @@ static void intel_machine_check(struct cpu_user_regs * regs, long error_code)
mce_printk(MCE_CRITICAL, "MCE: clear_bank map %lx on CPU%d\n",
*((unsigned long*)clear_bank), smp_processor_id());
mcheck_mca_clearbanks(clear_bank);
- /* Print MCE error */
- x86_mcinfo_dump(mctelem_dataptr(mctc));
-
} else {
if (mctc != NULL)
mctelem_dismiss(mctc);