From: Konrad Rzeszutek Wilk Date: Wed, 19 Jan 2011 01:17:10 +0000 (-0500) Subject: xen/mmu: WARN_ON when racing to swap middle leaf. X-Git-Tag: v2.6.39-rc1~521^2~5 X-Git-Url: https://openfabrics.org/gitweb/?a=commitdiff_plain;h=c7617798771ad588d585986d896197c04b737621;p=~emulex%2Finfiniband.git xen/mmu: WARN_ON when racing to swap middle leaf. The initial bootup code uses set_phys_to_machine quite a lot, and after bootup it would be used by the balloon driver. The balloon driver does have mutex lock so this should not be necessary - but just in case, add a WARN_ON if we do hit this scenario. If we do fail this, it is OK to continue as there is a backup mechanism (VM_IO) that can bypass the P2M and still set the _PAGE_IOMAP flags. [v2: Change from WARN to BUG_ON] [v3: Rebased on top of xen->p2m code split] [v4: Change from BUG_ON to WARN] Reviewed-by: Ian Campbell Signed-off-by: Konrad Rzeszutek Wilk --- diff --git a/arch/x86/xen/p2m.c b/arch/x86/xen/p2m.c index 809fe353630..4631cf99e71 100644 --- a/arch/x86/xen/p2m.c +++ b/arch/x86/xen/p2m.c @@ -605,7 +605,8 @@ bool __set_phys_to_machine(unsigned long pfn, unsigned long mfn) /* Swap over from MISSING to IDENTITY if needed. */ if (p2m_top[topidx][mididx] == p2m_missing) { - p2m_top[topidx][mididx] = p2m_identity; + WARN_ON(cmpxchg(&p2m_top[topidx][mididx], p2m_missing, + p2m_identity) != p2m_missing); return true; } }