diff --git a/xen/arch/x86/mm/hap/p2m-ept.c b/xen/arch/x86/mm/hap/p2m-ept.c index 3172fa4dcd..72d6f5b6e8 100644 --- a/xen/arch/x86/mm/hap/p2m-ept.c +++ b/xen/arch/x86/mm/hap/p2m-ept.c @@ -431,6 +431,10 @@ static mfn_t ept_get_entry(struct p2m_domain *p2m, int i; int ret = 0; mfn_t mfn = _mfn(INVALID_MFN); + int do_locking = !p2m_locked_by_me(p2m); + + if ( do_locking ) + p2m_lock(p2m); *t = p2m_mmio_dm; @@ -507,6 +511,8 @@ static mfn_t ept_get_entry(struct p2m_domain *p2m, } out: + if ( do_locking ) + p2m_unlock(p2m); unmap_domain_page(table); return mfn; }