[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-3.2-testing] x86: Fix mod_l3_entry() for PAE-on-64 guests. The adjustment of
# HG changeset patch # User Keir Fraser <keir.fraser@xxxxxxxxxx> # Date 1203344317 0 # Node ID 9dfaec830ed21efab8b29c2d054c2057045ab4d9 # Parent b15b81f186a805e7584840a244140916fc8223bf x86: Fix mod_l3_entry() for PAE-on-64 guests. The adjustment of _PAGE_RW and _PAGE_USER cannot happen before get_page_from_l3e(). Original patch by Manuel Bouyer <bouyer@xxxxxxxxxx>. Signed-off-by: Christoph Egger <Christoph.Egger@xxxxxxx> Signed-off-by: Keir Fraser <keir.fraser@xxxxxxxxxx> xen-unstable changeset: 17061:9d29141a5e527d13c10b592c5b7807af73750a19 xen-unstable date: Mon Feb 18 13:50:25 2008 +0000 --- xen/arch/x86/mm.c | 30 +++++++++++++++++++----------- 1 files changed, 19 insertions(+), 11 deletions(-) diff -r b15b81f186a8 -r 9dfaec830ed2 xen/arch/x86/mm.c --- a/xen/arch/x86/mm.c Mon Feb 18 14:16:01 2008 +0000 +++ b/xen/arch/x86/mm.c Mon Feb 18 14:18:37 2008 +0000 @@ -1411,15 +1411,17 @@ static int mod_l1_entry(l1_pgentry_t *pl return 0; } - adjust_guest_l1e(nl1e, d); - /* Fast path for identical mapping, r/w and presence. */ if ( !l1e_has_changed(ol1e, nl1e, _PAGE_RW | _PAGE_PRESENT) ) + { + adjust_guest_l1e(nl1e, d); return UPDATE_ENTRY(l1, pl1e, ol1e, nl1e, gl1mfn, curr); + } if ( unlikely(!get_page_from_l1e(nl1e, FOREIGNDOM)) ) return 0; + adjust_guest_l1e(nl1e, d); if ( unlikely(!UPDATE_ENTRY(l1, pl1e, ol1e, nl1e, gl1mfn, curr)) ) { put_page_from_l1e(nl1e, d); @@ -1465,15 +1467,17 @@ static int mod_l2_entry(l2_pgentry_t *pl return 0; } - adjust_guest_l2e(nl2e, d); - /* Fast path for identical mapping and presence. */ - if ( !l2e_has_changed(ol2e, nl2e, _PAGE_PRESENT)) + if ( !l2e_has_changed(ol2e, nl2e, _PAGE_PRESENT) ) + { + adjust_guest_l2e(nl2e, d); return UPDATE_ENTRY(l2, pl2e, ol2e, nl2e, pfn, curr); + } if ( unlikely(!get_page_from_l2e(nl2e, pfn, d)) ) return 0; + adjust_guest_l2e(nl2e, d); if ( unlikely(!UPDATE_ENTRY(l2, pl2e, ol2e, nl2e, pfn, curr)) ) { put_page_from_l2e(nl2e, pfn); @@ -1528,15 +1532,17 @@ static int mod_l3_entry(l3_pgentry_t *pl return 0; } - adjust_guest_l3e(nl3e, d); - /* Fast path for identical mapping and presence. */ - if (!l3e_has_changed(ol3e, nl3e, _PAGE_PRESENT)) + if ( !l3e_has_changed(ol3e, nl3e, _PAGE_PRESENT) ) + { + adjust_guest_l3e(nl3e, d); return UPDATE_ENTRY(l3, pl3e, ol3e, nl3e, pfn, curr); + } if ( unlikely(!get_page_from_l3e(nl3e, pfn, d)) ) return 0; + adjust_guest_l3e(nl3e, d); if ( unlikely(!UPDATE_ENTRY(l3, pl3e, ol3e, nl3e, pfn, curr)) ) { put_page_from_l3e(nl3e, pfn); @@ -1588,15 +1594,17 @@ static int mod_l4_entry(l4_pgentry_t *pl return 0; } - adjust_guest_l4e(nl4e, d); - /* Fast path for identical mapping and presence. */ - if (!l4e_has_changed(ol4e, nl4e, _PAGE_PRESENT)) + if ( !l4e_has_changed(ol4e, nl4e, _PAGE_PRESENT) ) + { + adjust_guest_l4e(nl4e, d); return UPDATE_ENTRY(l4, pl4e, ol4e, nl4e, pfn, curr); + } if ( unlikely(!get_page_from_l4e(nl4e, pfn, d)) ) return 0; + adjust_guest_l4e(nl4e, d); if ( unlikely(!UPDATE_ENTRY(l4, pl4e, ol4e, nl4e, pfn, curr)) ) { put_page_from_l4e(nl4e, pfn); _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |