diff options
author | Bernhard Walle <bwalle@suse.de> | 2008-02-07 03:15:17 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2008-02-07 11:42:25 -0500 |
commit | 72a7fe3967dbf86cb34e24fbf1d957fe24d2f246 (patch) | |
tree | c19f7d0b530577359840e959cce204939caf0649 /arch/m32r/kernel/setup.c | |
parent | 25fad945a7f7ff2cf06e437381c6a1121784dbd9 (diff) |
Introduce flags for reserve_bootmem()
This patchset adds a flags variable to reserve_bootmem() and uses the
BOOTMEM_EXCLUSIVE flag in crashkernel reservation code to detect collisions
between crashkernel area and already used memory.
This patch:
Change the reserve_bootmem() function to accept a new flag BOOTMEM_EXCLUSIVE.
If that flag is set, the function returns with -EBUSY if the memory already
has been reserved in the past. This is to avoid conflicts.
Because that code runs before SMP initialisation, there's no race condition
inside reserve_bootmem_core().
[akpm@linux-foundation.org: coding-style fixes]
[akpm@linux-foundation.org: fix powerpc build]
Signed-off-by: Bernhard Walle <bwalle@suse.de>
Cc: <linux-arch@vger.kernel.org>
Cc: "Eric W. Biederman" <ebiederm@xmission.com>
Cc: Vivek Goyal <vgoyal@in.ibm.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'arch/m32r/kernel/setup.c')
-rw-r--r-- | arch/m32r/kernel/setup.c | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/arch/m32r/kernel/setup.c b/arch/m32r/kernel/setup.c index d64814385d70..f1f5db0c4084 100644 --- a/arch/m32r/kernel/setup.c +++ b/arch/m32r/kernel/setup.c | |||
@@ -177,25 +177,28 @@ static unsigned long __init setup_memory(void) | |||
177 | */ | 177 | */ |
178 | reserve_bootmem(CONFIG_MEMORY_START + PAGE_SIZE, | 178 | reserve_bootmem(CONFIG_MEMORY_START + PAGE_SIZE, |
179 | (PFN_PHYS(start_pfn) + bootmap_size + PAGE_SIZE - 1) | 179 | (PFN_PHYS(start_pfn) + bootmap_size + PAGE_SIZE - 1) |
180 | - CONFIG_MEMORY_START); | 180 | - CONFIG_MEMORY_START, |
181 | BOOTMEM_DEFAULT); | ||
181 | 182 | ||
182 | /* | 183 | /* |
183 | * reserve physical page 0 - it's a special BIOS page on many boxes, | 184 | * reserve physical page 0 - it's a special BIOS page on many boxes, |
184 | * enabling clean reboots, SMP operation, laptop functions. | 185 | * enabling clean reboots, SMP operation, laptop functions. |
185 | */ | 186 | */ |
186 | reserve_bootmem(CONFIG_MEMORY_START, PAGE_SIZE); | 187 | reserve_bootmem(CONFIG_MEMORY_START, PAGE_SIZE, BOOTMEM_DEFAULT); |
187 | 188 | ||
188 | /* | 189 | /* |
189 | * reserve memory hole | 190 | * reserve memory hole |
190 | */ | 191 | */ |
191 | #ifdef CONFIG_MEMHOLE | 192 | #ifdef CONFIG_MEMHOLE |
192 | reserve_bootmem(CONFIG_MEMHOLE_START, CONFIG_MEMHOLE_SIZE); | 193 | reserve_bootmem(CONFIG_MEMHOLE_START, CONFIG_MEMHOLE_SIZE, |
194 | BOOTMEM_DEFAULT); | ||
193 | #endif | 195 | #endif |
194 | 196 | ||
195 | #ifdef CONFIG_BLK_DEV_INITRD | 197 | #ifdef CONFIG_BLK_DEV_INITRD |
196 | if (LOADER_TYPE && INITRD_START) { | 198 | if (LOADER_TYPE && INITRD_START) { |
197 | if (INITRD_START + INITRD_SIZE <= (max_low_pfn << PAGE_SHIFT)) { | 199 | if (INITRD_START + INITRD_SIZE <= (max_low_pfn << PAGE_SHIFT)) { |
198 | reserve_bootmem(INITRD_START, INITRD_SIZE); | 200 | reserve_bootmem(INITRD_START, INITRD_SIZE, |
201 | BOOTMEM_DEFAULT); | ||
199 | initrd_start = INITRD_START + PAGE_OFFSET; | 202 | initrd_start = INITRD_START + PAGE_OFFSET; |
200 | initrd_end = initrd_start + INITRD_SIZE; | 203 | initrd_end = initrd_start + INITRD_SIZE; |
201 | printk("initrd:start[%08lx],size[%08lx]\n", | 204 | printk("initrd:start[%08lx],size[%08lx]\n", |