WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-devel

[Xen-devel] [PATCH 3/3] Check for m2p/compat m2p table for new added mem

To: Keir Fraser <keir.fraser@xxxxxxxxxxxxx>
Subject: [Xen-devel] [PATCH 3/3] Check for m2p/compat m2p table for new added memory
From: "Jiang, Yunhong" <yunhong.jiang@xxxxxxxxx>
Date: Mon, 21 Dec 2009 13:56:29 +0800
Accept-language: en-US
Acceptlanguage: en-US
Cc: "xen-devel@xxxxxxxxxxxxxxxxxxx" <xen-devel@xxxxxxxxxxxxxxxxxxx>
Delivery-date: Sun, 20 Dec 2009 22:00:05 -0800
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-devel-request@lists.xensource.com?subject=help>
List-id: Xen developer discussion <xen-devel.lists.xensource.com>
List-post: <mailto:xen-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
Thread-index: AcqCAlbOmUmMPARdRH22G2nkSJkyFw==
Thread-topic: [PATCH 3/3] Check for m2p/compat m2p table for new added memory
Check m2p/compat m2p table for new added memory.

As we allocate m2p/compat m2p/frametable page tables from new added memory, we 
want to make sure the new range can hold up the new page tables, this is 
because m2p/frametable need be aligned and cover more than the new-added range.

Signed-off-by: Jiang, Yunhong <yunhong.jiang@xxxxxxxxx>

diff -r 095f03b1a6a9 xen/arch/x86/x86_64/mm.c
--- a/xen/arch/x86/x86_64/mm.c  Sun Dec 20 23:00:51 2009 +0800
+++ b/xen/arch/x86/x86_64/mm.c  Sun Dec 20 23:15:41 2009 +0800
@@ -1332,6 +1332,8 @@ int transfer_pages_to_heap(struct mem_ho
 
 int mem_hotadd_check(unsigned long spfn, unsigned long epfn)
 {
+    unsigned long s, e, length;
+
     if ( (spfn >= epfn) || (spfn < max_page) )
         return 0;
 
@@ -1341,7 +1343,31 @@ int mem_hotadd_check(unsigned long spfn,
     if ( (spfn | epfn) & pfn_hole_mask )
         return 0;
 
-    /* TBD: Need make sure cover to m2p/ft page table */
+    /* Caculate at most required m2p/compat m2p/frametable pages */
+    s = (spfn & ~((1UL << (L2_PAGETABLE_SHIFT - 3)) - 1));
+    e = (epfn + (1UL << (L2_PAGETABLE_SHIFT - 3)) - 1) &
+            ~((1UL << (L2_PAGETABLE_SHIFT - 3)) - 1);
+
+    length = (e - s) * sizeof(unsigned long);
+
+    s = (spfn & ~((1UL << (L2_PAGETABLE_SHIFT - 2)) - 1));
+    e = (epfn + (1UL << (L2_PAGETABLE_SHIFT - 2)) - 1) &
+            ~((1UL << (L2_PAGETABLE_SHIFT - 2)) - 1);
+
+    e = min_t(unsigned long, e,
+            (RDWR_COMPAT_MPT_VIRT_END - RDWR_COMPAT_MPT_VIRT_START) >> 2);
+
+    if ( e > s )
+        length += (e -s) * sizeof(unsigned int);
+
+    s = pfn_to_pdx(spfn) & ~(PDX_GROUP_COUNT - 1);
+    e = ( pfn_to_pdx(epfn) + (PDX_GROUP_COUNT - 1) ) & ~(PDX_GROUP_COUNT - 1);
+
+    length += (e - s) * sizeof(struct page_info);
+
+    if ((length >> PAGE_SHIFT) > (epfn - spfn))
+        return 0;
+
     return 1;
 }
 


Attachment: mem_check.patch
Description: mem_check.patch

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-devel] [PATCH 3/3] Check for m2p/compat m2p table for new added memory, Jiang, Yunhong <=