diff options
author | Ravikiran G Thirumalai <kiran@scalex86.org> | 2006-01-06 03:11:01 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-01-06 11:33:26 -0500 |
commit | 008857c1a49ccffc31a54c3ea7e182833bd61304 (patch) | |
tree | ba65452db097f57e05d2e3df550d55d45feabc94 /mm | |
parent | 085cc7d5de3cc662da7ea78296464a0d52f3f01f (diff) |
[PATCH] Cleanup bootmem allocator and fix alloc_bootmem_low
Patch cleans up the alloc_bootmem fix for swiotlb. Patch removes
alloc_bootmem_*_limit api and fixes alloc_boot_*low api to do the right
thing -- allocate from low32 memory.
Signed-off-by: Ravikiran Thirumalai <kiran@scalex86.org>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'mm')
-rw-r--r-- | mm/bootmem.c | 38 |
1 files changed, 31 insertions, 7 deletions
diff --git a/mm/bootmem.c b/mm/bootmem.c index 16b9465eb4eb..cbb82ee14fb5 100644 --- a/mm/bootmem.c +++ b/mm/bootmem.c | |||
@@ -393,15 +393,14 @@ unsigned long __init free_all_bootmem (void) | |||
393 | return(free_all_bootmem_core(NODE_DATA(0))); | 393 | return(free_all_bootmem_core(NODE_DATA(0))); |
394 | } | 394 | } |
395 | 395 | ||
396 | void * __init __alloc_bootmem_limit (unsigned long size, unsigned long align, unsigned long goal, | 396 | void * __init __alloc_bootmem(unsigned long size, unsigned long align, unsigned long goal) |
397 | unsigned long limit) | ||
398 | { | 397 | { |
399 | pg_data_t *pgdat = pgdat_list; | 398 | pg_data_t *pgdat = pgdat_list; |
400 | void *ptr; | 399 | void *ptr; |
401 | 400 | ||
402 | for_each_pgdat(pgdat) | 401 | for_each_pgdat(pgdat) |
403 | if ((ptr = __alloc_bootmem_core(pgdat->bdata, size, | 402 | if ((ptr = __alloc_bootmem_core(pgdat->bdata, size, |
404 | align, goal, limit))) | 403 | align, goal, 0))) |
405 | return(ptr); | 404 | return(ptr); |
406 | 405 | ||
407 | /* | 406 | /* |
@@ -413,15 +412,40 @@ void * __init __alloc_bootmem_limit (unsigned long size, unsigned long align, un | |||
413 | } | 412 | } |
414 | 413 | ||
415 | 414 | ||
416 | void * __init __alloc_bootmem_node_limit (pg_data_t *pgdat, unsigned long size, unsigned long align, | 415 | void * __init __alloc_bootmem_node(pg_data_t *pgdat, unsigned long size, unsigned long align, |
417 | unsigned long goal, unsigned long limit) | 416 | unsigned long goal) |
418 | { | 417 | { |
419 | void *ptr; | 418 | void *ptr; |
420 | 419 | ||
421 | ptr = __alloc_bootmem_core(pgdat->bdata, size, align, goal, limit); | 420 | ptr = __alloc_bootmem_core(pgdat->bdata, size, align, goal, 0); |
422 | if (ptr) | 421 | if (ptr) |
423 | return (ptr); | 422 | return (ptr); |
424 | 423 | ||
425 | return __alloc_bootmem_limit(size, align, goal, limit); | 424 | return __alloc_bootmem(size, align, goal); |
426 | } | 425 | } |
427 | 426 | ||
427 | #define LOW32LIMIT 0xffffffff | ||
428 | |||
429 | void * __init __alloc_bootmem_low(unsigned long size, unsigned long align, unsigned long goal) | ||
430 | { | ||
431 | pg_data_t *pgdat = pgdat_list; | ||
432 | void *ptr; | ||
433 | |||
434 | for_each_pgdat(pgdat) | ||
435 | if ((ptr = __alloc_bootmem_core(pgdat->bdata, size, | ||
436 | align, goal, LOW32LIMIT))) | ||
437 | return(ptr); | ||
438 | |||
439 | /* | ||
440 | * Whoops, we cannot satisfy the allocation request. | ||
441 | */ | ||
442 | printk(KERN_ALERT "low bootmem alloc of %lu bytes failed!\n", size); | ||
443 | panic("Out of low memory"); | ||
444 | return NULL; | ||
445 | } | ||
446 | |||
447 | void * __init __alloc_bootmem_low_node(pg_data_t *pgdat, unsigned long size, | ||
448 | unsigned long align, unsigned long goal) | ||
449 | { | ||
450 | return __alloc_bootmem_core(pgdat->bdata, size, align, goal, LOW32LIMIT); | ||
451 | } | ||