diff options
| -rw-r--r-- | arch/x86/kernel/setup.c | 57 |
1 files changed, 29 insertions, 28 deletions
diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c index e6b742d2a3f5..b8329029c150 100644 --- a/arch/x86/kernel/setup.c +++ b/arch/x86/kernel/setup.c | |||
| @@ -272,6 +272,35 @@ static inline void copy_edd(void) | |||
| 272 | } | 272 | } |
| 273 | #endif | 273 | #endif |
| 274 | 274 | ||
| 275 | void * __init extend_brk(size_t size, size_t align) | ||
| 276 | { | ||
| 277 | size_t mask = align - 1; | ||
| 278 | void *ret; | ||
| 279 | |||
| 280 | BUG_ON(_brk_start == 0); | ||
| 281 | BUG_ON(align & mask); | ||
| 282 | |||
| 283 | _brk_end = (_brk_end + mask) & ~mask; | ||
| 284 | BUG_ON((char *)(_brk_end + size) > __brk_limit); | ||
| 285 | |||
| 286 | ret = (void *)_brk_end; | ||
| 287 | _brk_end += size; | ||
| 288 | |||
| 289 | memset(ret, 0, size); | ||
| 290 | |||
| 291 | return ret; | ||
| 292 | } | ||
| 293 | |||
| 294 | static void __init reserve_brk(void) | ||
| 295 | { | ||
| 296 | if (_brk_end > _brk_start) | ||
| 297 | reserve_early(__pa(_brk_start), __pa(_brk_end), "BRK"); | ||
| 298 | |||
| 299 | /* Mark brk area as locked down and no longer taking any | ||
| 300 | new allocations */ | ||
| 301 | _brk_start = 0; | ||
| 302 | } | ||
| 303 | |||
| 275 | #ifdef CONFIG_BLK_DEV_INITRD | 304 | #ifdef CONFIG_BLK_DEV_INITRD |
| 276 | 305 | ||
| 277 | #ifdef CONFIG_X86_32 | 306 | #ifdef CONFIG_X86_32 |
| @@ -340,34 +369,6 @@ static void __init relocate_initrd(void) | |||
| 340 | } | 369 | } |
| 341 | #endif | 370 | #endif |
| 342 | 371 | ||
| 343 | void * __init extend_brk(size_t size, size_t align) | ||
| 344 | { | ||
| 345 | size_t mask = align - 1; | ||
| 346 | void *ret; | ||
| 347 | |||
| 348 | BUG_ON(_brk_start == 0); | ||
| 349 | BUG_ON(align & mask); | ||
| 350 | |||
| 351 | _brk_end = (_brk_end + mask) & ~mask; | ||
| 352 | BUG_ON((char *)(_brk_end + size) > __brk_limit); | ||
| 353 | |||
| 354 | ret = (void *)_brk_end; | ||
| 355 | _brk_end += size; | ||
| 356 | |||
| 357 | memset(ret, 0, size); | ||
| 358 | |||
| 359 | return ret; | ||
| 360 | } | ||
| 361 | |||
| 362 | static void __init reserve_brk(void) | ||
| 363 | { | ||
| 364 | if (_brk_end > _brk_start) | ||
| 365 | reserve_early(__pa(_brk_start), __pa(_brk_end), "BRK"); | ||
| 366 | |||
| 367 | /* Mark brk area as locked down and no longer taking any new allocations */ | ||
| 368 | _brk_start = 0; | ||
| 369 | } | ||
| 370 | |||
| 371 | static void __init reserve_initrd(void) | 372 | static void __init reserve_initrd(void) |
| 372 | { | 373 | { |
| 373 | u64 ramdisk_image = boot_params.hdr.ramdisk_image; | 374 | u64 ramdisk_image = boot_params.hdr.ramdisk_image; |
