x86/mm: Use l1e_get_pfn() in destroy_grant_pte_mapping().
authorKeir Fraser <keir.fraser@citrix.com>
Thu, 9 Oct 2008 09:15:30 +0000 (10:15 +0100)
committerKeir Fraser <keir.fraser@citrix.com>
Thu, 9 Oct 2008 09:15:30 +0000 (10:15 +0100)
On x86_64 system, (pte >> PAGE_SHIFT) is not always equal to page
frame number because high bits (63:52) of pte may be used as
flags. This patch corrects the conversion and errors as below
disappear when applied.
    (XEN) mm.c:3074:d0 PTE entry 200000a2ec6167 for address a1f09958
    doesn't match frame a2ec6

Signed-off-by: Yosuke Iwamatsu <y-iwamatsu@ab.jp.nec.com>
xen/arch/x86/mm.c

index 51b3537ea4c348dd3b839476e9f97ad3e8a8707c..f3082eeedd64fc246acc836fef49503e02f3ef1f 100644 (file)
@@ -3067,7 +3067,7 @@ static int destroy_grant_pte_mapping(
     ol1e = *(l1_pgentry_t *)va;
     
     /* Check that the virtual address supplied is actually mapped to frame. */
-    if ( unlikely((l1e_get_intpte(ol1e) >> PAGE_SHIFT) != frame) )
+    if ( unlikely(l1e_get_pfn(ol1e) != frame) )
     {
         page_unlock(page);
         MEM_LOG("PTE entry %lx for address %"PRIx64" doesn't match frame %lx",