diff options
Diffstat (limited to 'mm/bootmem.c')
| -rw-r--r-- | mm/bootmem.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/mm/bootmem.c b/mm/bootmem.c index ec4fcb7a56c8..bcb63ac48cc5 100644 --- a/mm/bootmem.c +++ b/mm/bootmem.c | |||
| @@ -698,7 +698,7 @@ void * __init __alloc_bootmem(unsigned long size, unsigned long align, | |||
| 698 | return ___alloc_bootmem(size, align, goal, limit); | 698 | return ___alloc_bootmem(size, align, goal, limit); |
| 699 | } | 699 | } |
| 700 | 700 | ||
| 701 | static void * __init ___alloc_bootmem_node_nopanic(pg_data_t *pgdat, | 701 | void * __init ___alloc_bootmem_node_nopanic(pg_data_t *pgdat, |
| 702 | unsigned long size, unsigned long align, | 702 | unsigned long size, unsigned long align, |
| 703 | unsigned long goal, unsigned long limit) | 703 | unsigned long goal, unsigned long limit) |
| 704 | { | 704 | { |
| @@ -710,6 +710,10 @@ again: | |||
| 710 | if (ptr) | 710 | if (ptr) |
| 711 | return ptr; | 711 | return ptr; |
| 712 | 712 | ||
| 713 | /* do not panic in alloc_bootmem_bdata() */ | ||
| 714 | if (limit && goal + size > limit) | ||
| 715 | limit = 0; | ||
| 716 | |||
| 713 | ptr = alloc_bootmem_bdata(pgdat->bdata, size, align, goal, limit); | 717 | ptr = alloc_bootmem_bdata(pgdat->bdata, size, align, goal, limit); |
| 714 | if (ptr) | 718 | if (ptr) |
| 715 | return ptr; | 719 | return ptr; |
