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-changelog

[Xen-changelog] Add padding to allocation bitmap. Should fix page fault

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] Add padding to allocation bitmap. Should fix page fault
From: Xen patchbot -unstable <patchbot-unstable@xxxxxxxxxxxxxxxxxxx>
Date: Wed, 10 Aug 2005 05:44:10 -0400
Delivery-date: Wed, 10 Aug 2005 09:44:39 +0000
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-changelog-request@lists.xensource.com?subject=help>
List-id: BK change log <xen-changelog.lists.xensource.com>
List-post: <mailto:xen-changelog@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=unsubscribe>
Reply-to: xen-devel@xxxxxxxxxxxxxxxxxxx
Sender: xen-changelog-bounces@xxxxxxxxxxxxxxxxxxx
# HG changeset patch
# User kaf24@xxxxxxxxxxxxxxxxxxxx
# Node ID 878ba6d3954ee783549c2014c997116ff1e1194f
# Parent  d772083619294538d6fd60b2edb97b440a973291
Add padding to allocation bitmap. Should fix page fault
on x86/64 debug builds on some systems.
Signed-off-by: Keir Fraser <keir@xxxxxxxxxxxxx>

diff -r d77208361929 -r 878ba6d3954e xen/common/page_alloc.c
--- a/xen/common/page_alloc.c   Wed Aug 10 09:09:15 2005
+++ b/xen/common/page_alloc.c   Wed Aug 10 09:45:06 2005
@@ -52,7 +52,6 @@
  *  One bit per page of memory. Bit set => page is allocated.
  */
 
-static unsigned long  bitmap_size; /* in bytes */
 static unsigned long *alloc_bitmap;
 #define PAGES_PER_MAPWORD (sizeof(unsigned long) * 8)
 
@@ -135,10 +134,16 @@
 /* Initialise allocator to handle up to @max_page pages. */
 physaddr_t init_boot_allocator(physaddr_t bitmap_start)
 {
+    unsigned long bitmap_size;
+
     bitmap_start = round_pgup(bitmap_start);
 
-    /* Allocate space for the allocation bitmap. */
+    /*
+     * Allocate space for the allocation bitmap. Include an extra longword
+     * of padding for possible overrun in map_alloc and map_free.
+     */
     bitmap_size  = max_page / 8;
+    bitmap_size += sizeof(unsigned long);
     bitmap_size  = round_pgup(bitmap_size);
     alloc_bitmap = (unsigned long *)phys_to_virt(bitmap_start);
 
@@ -171,7 +176,7 @@
         else if ( *p != '\0' )
             break;
 
-        if ( (bad_pfn < (bitmap_size*8)) && !allocated_in_map(bad_pfn) )
+        if ( (bad_pfn < max_page) && !allocated_in_map(bad_pfn) )
         {
             printk("Marking page %lx as bad\n", bad_pfn);
             map_alloc(bad_pfn, 1);
@@ -183,7 +188,7 @@
 {
     unsigned long pg, i;
 
-    for ( pg = 0; (pg + nr_pfns) < (bitmap_size*8); pg += pfn_align )
+    for ( pg = 0; (pg + nr_pfns) < max_page; pg += pfn_align )
     {
         for ( i = 0; i < nr_pfns; i++ )
             if ( allocated_in_map(pg + i) )
@@ -362,7 +367,7 @@
 
     printk("Scrubbing Free RAM: ");
 
-    for ( pfn = 0; pfn < (bitmap_size * 8); pfn++ )
+    for ( pfn = 0; pfn < max_page; pfn++ )
     {
         /* Every 100MB, print a progress dot. */
         if ( (pfn % ((100*1024*1024)/PAGE_SIZE)) == 0 )

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-changelog] Add padding to allocation bitmap. Should fix page fault, Xen patchbot -unstable <=