Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

bootmem: replace node_boot_start in struct bootmem_data

Almost all users of this field need a PFN instead of a physical address,
so replace node_boot_start with node_min_pfn.

[Lee.Schermerhorn@hp.com: fix spurious BUG_ON() in mark_bootmem()]
Signed-off-by: Johannes Weiner <hannes@saeureba.de>
Cc: <linux-arch@vger.kernel.org>
Signed-off-by: Lee Schermerhorn <lee.schermerhorn@hp.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

authored by

Johannes Weiner and committed by
Linus Torvalds
3560e249 75a56cfe

+41 -44
+1 -1
arch/alpha/mm/numa.c
··· 304 304 305 305 for_each_online_node(nid) { 306 306 bootmem_data_t *bdata = &bootmem_node_data[nid]; 307 - unsigned long start_pfn = bdata->node_boot_start >> PAGE_SHIFT; 307 + unsigned long start_pfn = bdata->node_min_pfn; 308 308 unsigned long end_pfn = bdata->node_low_pfn; 309 309 310 310 if (dma_local_pfn >= end_pfn - start_pfn)
+1 -3
arch/arm/plat-omap/fb.c
··· 182 182 return; 183 183 184 184 bdata = NODE_DATA(0)->bdata; 185 - sdram_start = bdata->node_boot_start; 185 + sdram_start = bdata->node_min_pfn << PAGE_SHIFT; 186 186 sdram_size = (bdata->node_low_pfn << PAGE_SHIFT) - sdram_start; 187 187 reserved = 0; 188 188 for (i = 0; ; i++) { ··· 340 340 341 341 342 342 #endif 343 - 344 -
+1 -2
arch/avr32/mm/init.c
··· 119 119 unsigned long zones_size[MAX_NR_ZONES]; 120 120 unsigned long low, start_pfn; 121 121 122 - start_pfn = pgdat->bdata->node_boot_start; 123 - start_pfn >>= PAGE_SHIFT; 122 + start_pfn = pgdat->bdata->node_min_pfn; 124 123 low = pgdat->bdata->node_low_pfn; 125 124 126 125 memset(zones_size, 0, sizeof(zones_size));
+10 -9
arch/ia64/mm/discontig.c
··· 74 74 static int __init build_node_maps(unsigned long start, unsigned long len, 75 75 int node) 76 76 { 77 - unsigned long cstart, epfn, end = start + len; 77 + unsigned long spfn, epfn, end = start + len; 78 78 struct bootmem_data *bdp = &bootmem_node_data[node]; 79 79 80 80 epfn = GRANULEROUNDUP(end) >> PAGE_SHIFT; 81 - cstart = GRANULEROUNDDOWN(start); 81 + spfn = GRANULEROUNDDOWN(start) >> PAGE_SHIFT; 82 82 83 83 if (!bdp->node_low_pfn) { 84 - bdp->node_boot_start = cstart; 84 + bdp->node_min_pfn = spfn; 85 85 bdp->node_low_pfn = epfn; 86 86 } else { 87 - bdp->node_boot_start = min(cstart, bdp->node_boot_start); 87 + bdp->node_min_pfn = min(spfn, bdp->node_min_pfn); 88 88 bdp->node_low_pfn = max(epfn, bdp->node_low_pfn); 89 89 } 90 90 ··· 221 221 static int __init find_pernode_space(unsigned long start, unsigned long len, 222 222 int node) 223 223 { 224 - unsigned long epfn; 224 + unsigned long spfn, epfn; 225 225 unsigned long pernodesize = 0, pernode, pages, mapsize; 226 226 struct bootmem_data *bdp = &bootmem_node_data[node]; 227 227 228 + spfn = start >> PAGE_SHIFT; 228 229 epfn = (start + len) >> PAGE_SHIFT; 229 230 230 - pages = bdp->node_low_pfn - (bdp->node_boot_start >> PAGE_SHIFT); 231 + pages = bdp->node_low_pfn - bdp->node_min_pfn; 231 232 mapsize = bootmem_bootmap_pages(pages) << PAGE_SHIFT; 232 233 233 234 /* 234 235 * Make sure this memory falls within this node's usable memory 235 236 * since we may have thrown some away in build_maps(). 236 237 */ 237 - if (start < bdp->node_boot_start || epfn > bdp->node_low_pfn) 238 + if (spfn < bdp->node_min_pfn || epfn > bdp->node_low_pfn) 238 239 return 0; 239 240 240 241 /* Don't setup this node's local space twice... */ ··· 297 296 bdp = pdp->bdata; 298 297 299 298 /* First the bootmem_map itself */ 300 - pages = bdp->node_low_pfn - (bdp->node_boot_start>>PAGE_SHIFT); 299 + pages = bdp->node_low_pfn - bdp->node_min_pfn; 301 300 size = bootmem_bootmap_pages(pages) << PAGE_SHIFT; 302 301 base = __pa(bdp->node_bootmem_map); 303 302 reserve_bootmem_node(pdp, base, size, BOOTMEM_DEFAULT); ··· 467 466 468 467 init_bootmem_node(pgdat_list[node], 469 468 map>>PAGE_SHIFT, 470 - bdp->node_boot_start>>PAGE_SHIFT, 469 + bdp->node_min_pfn, 471 470 bdp->node_low_pfn); 472 471 } 473 472
+1 -2
arch/m32r/mm/discontig.c
··· 123 123 return max_low_pfn; 124 124 } 125 125 126 - #define START_PFN(nid) \ 127 - (NODE_DATA(nid)->bdata->node_boot_start >> PAGE_SHIFT) 126 + #define START_PFN(nid) (NODE_DATA(nid)->bdata->node_min_pfn) 128 127 #define MAX_LOW_PFN(nid) (NODE_DATA(nid)->bdata->node_low_pfn) 129 128 130 129 unsigned long __init zone_sizes_init(void)
+1 -3
arch/m32r/mm/init.c
··· 93 93 #endif 94 94 95 95 /* It'd be good if these lines were in the standard header file. */ 96 - #define START_PFN(nid) \ 97 - (NODE_DATA(nid)->bdata->node_boot_start >> PAGE_SHIFT) 96 + #define START_PFN(nid) (NODE_DATA(nid)->bdata->node_min_pfn) 98 97 #define MAX_LOW_PFN(nid) (NODE_DATA(nid)->bdata->node_low_pfn) 99 98 100 99 #ifndef CONFIG_DISCONTIGMEM ··· 251 252 printk (KERN_INFO "Freeing initrd memory: %ldk freed\n", (end - start) >> 10); 252 253 } 253 254 #endif 254 -
+3 -3
arch/mn10300/mm/init.c
··· 67 67 68 68 /* declare the sizes of the RAM zones (only use the normal zone) */ 69 69 zones_size[ZONE_NORMAL] = 70 - (contig_page_data.bdata->node_low_pfn) - 71 - (contig_page_data.bdata->node_boot_start >> PAGE_SHIFT); 70 + contig_page_data.bdata->node_low_pfn - 71 + contig_page_data.bdata->node_min_pfn; 72 72 73 73 /* pass the memory from the bootmem allocator to the main allocator */ 74 74 free_area_init(zones_size); ··· 87 87 if (!mem_map) 88 88 BUG(); 89 89 90 - #define START_PFN (contig_page_data.bdata->node_boot_start >> PAGE_SHIFT) 90 + #define START_PFN (contig_page_data.bdata->node_min_pfn) 91 91 #define MAX_LOW_PFN (contig_page_data.bdata->node_low_pfn) 92 92 93 93 max_mapnr = num_physpages = MAX_LOW_PFN - START_PFN;
+1 -1
arch/sh/mm/init.c
··· 191 191 pg_data_t *pgdat = NODE_DATA(nid); 192 192 unsigned long low, start_pfn; 193 193 194 - start_pfn = pgdat->bdata->node_boot_start >> PAGE_SHIFT; 194 + start_pfn = pgdat->bdata->node_min_pfn; 195 195 low = pgdat->bdata->node_low_pfn; 196 196 197 197 if (max_zone_pfns[ZONE_NORMAL] < low)
+1 -1
include/linux/bootmem.h
··· 28 28 * memory pages (including holes) on the node. 29 29 */ 30 30 typedef struct bootmem_data { 31 - unsigned long node_boot_start; 31 + unsigned long node_min_pfn; 32 32 unsigned long node_low_pfn; 33 33 void *node_bootmem_map; 34 34 unsigned long last_end_off;
+21 -19
mm/bootmem.c
··· 80 80 bootmem_data_t *ent; 81 81 82 82 ent = list_entry(iter, bootmem_data_t, list); 83 - if (bdata->node_boot_start < ent->node_boot_start) 83 + if (bdata->node_min_pfn < ent->node_min_pfn) 84 84 break; 85 85 } 86 86 list_add_tail(&bdata->list, iter); ··· 96 96 97 97 mminit_validate_memmodel_limits(&start, &end); 98 98 bdata->node_bootmem_map = phys_to_virt(PFN_PHYS(mapstart)); 99 - bdata->node_boot_start = PFN_PHYS(start); 99 + bdata->node_min_pfn = start; 100 100 bdata->node_low_pfn = end; 101 101 link_bootmem(bdata); 102 102 ··· 151 151 if (!bdata->node_bootmem_map) 152 152 return 0; 153 153 154 - start = PFN_DOWN(bdata->node_boot_start); 154 + start = bdata->node_min_pfn; 155 155 end = bdata->node_low_pfn; 156 156 157 157 /* ··· 167 167 unsigned long *map, idx, vec; 168 168 169 169 map = bdata->node_bootmem_map; 170 - idx = start - PFN_DOWN(bdata->node_boot_start); 170 + idx = start - bdata->node_min_pfn; 171 171 vec = ~map[idx / BITS_PER_LONG]; 172 172 173 173 if (aligned && vec == ~0UL && start + BITS_PER_LONG < end) { ··· 192 192 } 193 193 194 194 page = virt_to_page(bdata->node_bootmem_map); 195 - pages = bdata->node_low_pfn - PFN_DOWN(bdata->node_boot_start); 195 + pages = bdata->node_low_pfn - bdata->node_min_pfn; 196 196 pages = bootmem_bootmap_pages(pages); 197 197 count += pages; 198 198 while (pages--) ··· 231 231 unsigned long idx; 232 232 233 233 bdebug("nid=%td start=%lx end=%lx\n", bdata - bootmem_node_data, 234 - sidx + PFN_DOWN(bdata->node_boot_start), 235 - eidx + PFN_DOWN(bdata->node_boot_start)); 234 + sidx + bdata->node_min_pfn, 235 + eidx + bdata->node_min_pfn); 236 236 237 237 if (bdata->hint_idx > sidx) 238 238 bdata->hint_idx = sidx; ··· 250 250 251 251 bdebug("nid=%td start=%lx end=%lx flags=%x\n", 252 252 bdata - bootmem_node_data, 253 - sidx + PFN_DOWN(bdata->node_boot_start), 254 - eidx + PFN_DOWN(bdata->node_boot_start), 253 + sidx + bdata->node_min_pfn, 254 + eidx + bdata->node_min_pfn, 255 255 flags); 256 256 257 257 for (idx = sidx; idx < eidx; idx++) ··· 261 261 return -EBUSY; 262 262 } 263 263 bdebug("silent double reserve of PFN %lx\n", 264 - idx + PFN_DOWN(bdata->node_boot_start)); 264 + idx + bdata->node_min_pfn); 265 265 } 266 266 return 0; 267 267 } ··· 275 275 bdebug("nid=%td start=%lx end=%lx reserve=%d flags=%x\n", 276 276 bdata - bootmem_node_data, start, end, reserve, flags); 277 277 278 - BUG_ON(start < PFN_DOWN(bdata->node_boot_start)); 278 + BUG_ON(start < bdata->node_min_pfn); 279 279 BUG_ON(end > bdata->node_low_pfn); 280 280 281 - sidx = start - PFN_DOWN(bdata->node_boot_start); 282 - eidx = end - PFN_DOWN(bdata->node_boot_start); 281 + sidx = start - bdata->node_min_pfn; 282 + eidx = end - bdata->node_min_pfn; 283 283 284 284 if (reserve) 285 285 return __reserve(bdata, sidx, eidx, flags); ··· 299 299 int err; 300 300 unsigned long max; 301 301 302 - if (pos < PFN_DOWN(bdata->node_boot_start)) { 302 + if (pos < bdata->node_min_pfn || 303 + pos >= bdata->node_low_pfn) { 303 304 BUG_ON(pos != start); 304 305 continue; 305 306 } ··· 423 422 bdata - bootmem_node_data, size, PAGE_ALIGN(size) >> PAGE_SHIFT, 424 423 align, goal, limit); 425 424 426 - min = PFN_DOWN(bdata->node_boot_start); 425 + min = bdata->node_min_pfn; 427 426 max = bdata->node_low_pfn; 428 427 429 428 goal >>= PAGE_SHIFT; ··· 441 440 else 442 441 start = ALIGN(min, step); 443 442 444 - sidx = start - PFN_DOWN(bdata->node_boot_start); 445 - midx = max - PFN_DOWN(bdata->node_boot_start); 443 + sidx = start - bdata->node_min_pfn;; 444 + midx = max - bdata->node_min_pfn; 446 445 447 446 if (bdata->hint_idx > sidx) { 448 447 /* ··· 492 491 PFN_UP(end_off), BOOTMEM_EXCLUSIVE)) 493 492 BUG(); 494 493 495 - region = phys_to_virt(bdata->node_boot_start + start_off); 494 + region = phys_to_virt(PFN_PHYS(bdata->node_min_pfn) + 495 + start_off); 496 496 memset(region, 0, size); 497 497 return region; 498 498 } ··· 520 518 521 519 if (goal && bdata->node_low_pfn <= PFN_DOWN(goal)) 522 520 continue; 523 - if (limit && bdata->node_boot_start >= limit) 521 + if (limit && bdata->node_min_pfn >= PFN_DOWN(limit)) 524 522 break; 525 523 526 524 region = alloc_bootmem_core(bdata, size, align, goal, limit);