[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] Add padding to allocation bitmap. Should fix page fault
# 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
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |