]> xenbits.xen.org Git - xenclient/xen.git/commitdiff
Import CS 18788 from xen-unstable.
authorStefano Stabellini <stefano.stabellini@eu.citrix.com>
Wed, 11 Feb 2009 15:47:52 +0000 (15:47 +0000)
committerStefano Stabellini <stefano.stabellini@eu.citrix.com>
Wed, 11 Feb 2009 15:47:52 +0000 (15:47 +0000)
Fix domain restore bug with Intel VLAPIC acceleration.

xen/arch/x86/mm.c

index b0762825d2d050e7ee6921fd97951c9dec6f957e..986af904195cbd1379f73e371ea58586f836165a 100644 (file)
@@ -1533,6 +1533,7 @@ static int mod_l1_entry(l1_pgentry_t *pl1e, l1_pgentry_t nl1e,
     struct domain *d = curr->domain;
     unsigned long mfn;
     struct page_info *l1pg = mfn_to_page(gl1mfn);
+    p2m_type_t p2mt;
     int rc = 1;
 
     page_lock(l1pg);
@@ -1550,8 +1551,8 @@ 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) )
+        mfn = mfn_x(gfn_to_mfn(FOREIGNDOM, l1e_get_pfn(nl1e), &p2mt));
+        if ( !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));