]> xenbits.xen.org Git - xenclient/xen.git/commitdiff
Import changeset 18788 from xen-unstable.
authorJean Guyader <jean.guyader@eu.citrix.com>
Mon, 9 Mar 2009 14:31:32 +0000 (14:31 +0000)
committerJean Guyader <jean.guyader@eu.citrix.com>
Mon, 9 Mar 2009 14:31:32 +0000 (14:31 +0000)
x86, hvm: Fix domain restore bug with Intel VLAPIC acceleration.

r18383 mark video memory as ram, and make all valid pages migrated,
including vlapic page (0xFEE00), and share page(0xFFFFF).
An extra memory population for lapic page would override previous
mapping then cause HVM guest with vlapic acceleration hang.

Signed-off-by: Keir Fraser <keir.fraser@citrix.com>
xen/arch/x86/mm.c

index 4e8dd2d2390d0aa1db7c9d57c2e73b0fddd675c0..04325341fe9e7c7b430bfdedc0c715db156ee4e7 100644 (file)
@@ -1549,6 +1549,7 @@ static int mod_l1_entry(l1_pgentry_t *pl1e, l1_pgentry_t nl1e,
     unsigned long mfn;
     struct page_info *l1pg = mfn_to_page(gl1mfn);
     int rc = 1;
+    p2m_type_t p2mt;
 
     page_lock(l1pg);
 
@@ -1565,9 +1566,9 @@ static int mod_l1_entry(l1_pgentry_t *pl1e, l1_pgentry_t nl1e,
     if ( l1e_get_flags(nl1e) & _PAGE_PRESENT )
     {
         /* Translate foreign guest addresses. */
-        mfn = gmfn_to_mfn(FOREIGNDOM, l1e_get_pfn(nl1e));
-        if ( unlikely(mfn == INVALID_MFN) )
-            return page_unlock(l1pg), 0;
+       mfn = mfn_x(gfn_to_mfn(FOREIGNDOM, l1e_get_pfn(nl1e), &p2mt));
+       if ( (mfn > 0xff && !p2m_is_ram(p2mt)) || unlikely(mfn == INVALID_MFN) )
+           return page_unlock(l1pg), 0;
         ASSERT((mfn & ~(PADDR_MASK >> PAGE_SHIFT)) == 0);
         nl1e = l1e_from_pfn(mfn, l1e_get_flags(nl1e));