[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-4.1-testing] p2m: query/modify p2mt with p2m_lock held
# HG changeset patch # User Olaf Hering <olaf@xxxxxxxxx> # Date 1331107198 0 # Node ID 637eaa1421d1ae9808f1cc56c39b2d9e1fe64eb9 # Parent 7ee4016eeb9fb1c05f033e2b9da78cf5564c3e54 p2m: query/modify p2mt with p2m_lock held Query and update the p2mt in set_mmio_p2m_entry, clear_mmio_p2m_entry and set_shared_p2m_entry with the p2m_lock held. Signed-off-by: Olaf Hering <olaf@xxxxxxxxx> Acked-by: Tim Deegan <tim@xxxxxxx> Committed-by: Tim Deegan <tim@xxxxxxx> xen-unstable changeset: 23908:88b6e08b8aa8 xen-unstable date: Thu Oct 06 14:15:43 2011 +0100 --- diff -r 7ee4016eeb9f -r 637eaa1421d1 xen/arch/x86/mm/p2m.c --- a/xen/arch/x86/mm/p2m.c Wed Mar 07 07:55:10 2012 +0000 +++ b/xen/arch/x86/mm/p2m.c Wed Mar 07 07:59:58 2012 +0000 @@ -2752,9 +2752,11 @@ if ( !paging_mode_translate(p2m->domain) ) return 0; + p2m_lock(p2m); omfn = gfn_to_mfn_query(p2m, gfn, &ot); if ( p2m_is_grant(ot) ) { + p2m_unlock(p2m); domain_crash(p2m->domain); return 0; } @@ -2765,7 +2767,6 @@ } P2M_DEBUG("set mmio %lx %lx\n", gfn, mfn_x(mfn)); - p2m_lock(p2m); rc = set_p2m_entry(p2m, gfn, mfn, 0, p2m_mmio_direct, p2m->default_access); audit_p2m(p2m, 1); p2m_unlock(p2m); @@ -2786,18 +2787,20 @@ if ( !paging_mode_translate(p2m->domain) ) return 0; - mfn = gfn_to_mfn(p2m, gfn, &t); + p2m_lock(p2m); + mfn = gfn_to_mfn_query(p2m, gfn, &t); /* Do not use mfn_valid() here as it will usually fail for MMIO pages. */ if ( (INVALID_MFN == mfn_x(mfn)) || (t != p2m_mmio_direct) ) { gdprintk(XENLOG_ERR, "clear_mmio_p2m_entry: gfn_to_mfn failed! gfn=%08lx\n", gfn); - return 0; + goto out; } - p2m_lock(p2m); rc = set_p2m_entry(p2m, gfn, _mfn(INVALID_MFN), 0, p2m_invalid, p2m->default_access); audit_p2m(p2m, 1); + +out: p2m_unlock(p2m); return rc; @@ -2814,6 +2817,8 @@ if ( !paging_mode_translate(p2m->domain) ) return 0; + if ( need_lock ) + p2m_lock(p2m); omfn = gfn_to_mfn_query(p2m, gfn, &ot); /* At the moment we only allow p2m change if gfn has already been made * sharable first */ @@ -2823,8 +2828,6 @@ set_gpfn_from_mfn(mfn_x(omfn), INVALID_M2P_ENTRY); P2M_DEBUG("set shared %lx %lx\n", gfn, mfn_x(mfn)); - if ( need_lock ) - p2m_lock(p2m); rc = set_p2m_entry(p2m, gfn, mfn, 0, p2m_ram_shared, p2m->default_access); if ( need_lock ) p2m_unlock(p2m); _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |