diff -ru xen-3.0.1-orig/xen/common/page_alloc.c xen-3.0.1-range/xen/common/page_alloc.c --- xen-3.0.1-orig/xen/common/page_alloc.c 2006-03-14 12:17:06.000000000 +0100 +++ xen-3.0.1-range/xen/common/page_alloc.c 2006-04-03 00:29:35.000000000 +0200 @@ -155,7 +155,7 @@ void init_boot_pages(physaddr_t ps, physaddr_t pe) { - unsigned long bad_pfn; + unsigned long bad_psfn, bad_pefn, i; char *p; ps = round_pgup(ps); @@ -169,18 +169,31 @@ p = opt_badpage; while ( *p != '\0' ) { - bad_pfn = simple_strtoul(p, &p, 0); + bad_psfn = simple_strtoul(p, &p, 0); + bad_pefn = bad_psfn; + + if ( *p == '-' ) + { + p++; + bad_pefn = simple_strtoul(p, &p, 0); + if ( bad_pefn < bad_psfn ) + bad_pefn = bad_psfn; + } if ( *p == ',' ) p++; else if ( *p != '\0' ) break; - if ( (bad_pfn < max_page) && !allocated_in_map(bad_pfn) ) - { - printk("Marking page %lx as bad\n", bad_pfn); - map_alloc(bad_pfn, 1); - } + if (bad_pefn == bad_psfn) + printk("Marking page %lx as bad\n", bad_psfn); + else + printk("Marking pages %lx through %lx as bad\n", + bad_psfn, bad_pefn); + + for ( i = bad_psfn; i <= bad_pefn; i++ ) + if ( (i < max_page) && !allocated_in_map(i) ) + map_alloc(i, 1); } }