diff -r 6472342c8ab0 xen/arch/x86/mm/p2m.c --- a/xen/arch/x86/mm/p2m.c Wed Sep 30 08:51:21 2009 +0100 +++ b/xen/arch/x86/mm/p2m.c Wed Sep 30 10:04:23 2009 +0100 @@ -2216,10 +2216,12 @@ if ( !paging_mode_translate(d) ) return 0; + p2m_lock(d->arch.p2m); omfn = gfn_to_mfn_query(d, gfn, &ot); if ( p2m_is_grant(ot) ) { domain_crash(d); + p2m_unlock(d->arch.p2m); return 0; } else if ( p2m_is_ram(ot) ) @@ -2234,6 +2236,8 @@ gdprintk(XENLOG_ERR, "set_mmio_p2m_entry: set_p2m_entry failed! mfn=%08lx\n", gmfn_to_mfn(d, gfn)); + + p2m_unlock(d->arch.p2m); return rc; } @@ -2246,14 +2250,17 @@ if ( !paging_mode_translate(d) ) return 0; + p2m_lock(d->arch.p2m); mfn = gmfn_to_mfn(d, gfn); if ( INVALID_MFN == mfn ) { gdprintk(XENLOG_ERR, "clear_mmio_p2m_entry: gfn_to_mfn failed! gfn=%08lx\n", gfn); + p2m_unlock(d->arch.p2m); return 0; } rc = set_p2m_entry(d, gfn, _mfn(INVALID_MFN), 0, 0); + p2m_unlock(d->arch.p2m); return rc; }