[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH 4] MCA physical address check when calculate domain
MCA physical address check when calculate domain Bank addr maybe invalid, or Bank addr maybe physical/memory/linear address or segment offset. This patch add mca MCi_STATUS_MISCV/MCi_STATUS_ADDRV check, and add physical address verify, so that it work safe when calculate domain. Signed-off-by: Liu, Jinsong <jinsong.liu@xxxxxxxxx> diff -r e4e1efda200f xen/arch/x86/cpu/mcheck/mce.c --- a/xen/arch/x86/cpu/mcheck/mce.c Thu May 05 13:54:29 2011 +0800 +++ b/xen/arch/x86/cpu/mcheck/mce.c Fri May 06 13:56:21 2011 +0800 @@ -151,7 +151,6 @@ static struct mcinfo_bank *mca_init_bank struct mc_info *mi, int bank) { struct mcinfo_bank *mib; - uint64_t addr=0, misc = 0; if (!mi) return NULL; @@ -170,22 +169,23 @@ static struct mcinfo_bank *mca_init_bank mib->common.size = sizeof (struct mcinfo_bank); mib->mc_bank = bank; - addr = misc = 0; if (mib->mc_status & MCi_STATUS_MISCV) mib->mc_misc = mca_rdmsr(MSR_IA32_MCx_MISC(bank)); if (mib->mc_status & MCi_STATUS_ADDRV) - { mib->mc_addr = mca_rdmsr(MSR_IA32_MCx_ADDR(bank)); - if (mfn_valid(paddr_to_pfn(mib->mc_addr))) { - struct domain *d; + if ((mib->mc_status & MCi_STATUS_MISCV) && + (mib->mc_status & MCi_STATUS_ADDRV) && + ((mib->mc_misc & MCi_MISC_ADDRMOD_MASK) == MCi_MISC_PHYSMOD) && + mfn_valid(paddr_to_pfn(mib->mc_addr))) + { + struct domain *d; - d = maddr_get_owner(mib->mc_addr); - if (d != NULL && (who == MCA_POLLER || - who == MCA_CMCI_HANDLER)) - mib->mc_domid = d->domain_id; - } + d = maddr_get_owner(mib->mc_addr); + if (d != NULL && (who == MCA_POLLER || + who == MCA_CMCI_HANDLER)) + mib->mc_domid = d->domain_id; } if (who == MCA_CMCI_HANDLER) { Attachment:
mca-cleanup-4.patch _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |