Fix CONFIG_NOHIGHMEM for extended crashkernel command line
PATCH 1/1 Fix CONFIG_NOHIGHMEM for extended crashkernel command line
This patch fixes a build error with CONFIG_KEXEC=y and CONFIG_NOHIGHMEM=y.
linux-2.6-mm$ LANG=C make
CHK include/linux/version.h CHK include/linux/utsrelease.h CALL scripts/checksyscalls.sh CHK include/linux/compile.h CC arch/i386/kernel/setup.o
arch/i386/kernel/setup.c: In function 'reserve_crashkernel':arch/i386/kernel/setup.c:391: error: 'highend_pfn' undeclared (first use in this function) arch/i386/kernel/setup.c:391: error: (Each undeclared identifier is reported only once arch/i386/kernel/setup.c:391: error: for each function it appears in.) arch/i386/kernel/setup.c:391: error: 'highstart_pfn' undeclared (first use in this function) make[1]: *** [arch/i386/kernel/setup.o] Error 1
make: *** [arch/i386/kernel] Error 2
--- arch/i386/kernel/setup.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-)
arch/i386/kernel/setup.c +15 -1
@@ -381,6 +381,20 @@ extern unsigned long __init setup_memoryextern void zone_sizes_init (void );#endif /* !CONFIG_NEED_MULTIPLE_NODES */ + +#ifdef CONFIG_HIGHMEM +static inline unsigned long long get_total_mem (void ) +{ +return (max_low_pfn + highend_pfn - highstart_pfn) <<PAGE_SHIFT ; +} +#else +static inline unsigned long long get_total_mem (void ) +{ +return max_low_pfn <<PAGE_SHIFT ; +} +#endif + +#ifdef CONFIG_KEXEC static void __init reserve_crashkernel (void ) {
@@ -388,7 +402,7 @@ static void __init reserve_crashkernel(vunsigned long long crash_size, crash_base;int ret; - free_mem = (max_low_pfn + highend_pfn - highstart_pfn) <<PAGE_SHIFT ; + free_mem =get_total_mem (); ret =parse_crashkernel (boot_command_line, free_mem, &crash_size, &crash_base);
arch/i386/kernel/setup.c extern unsigned long __init setup_memory · line 384
Quoted 5 lines · On Tue, 25 Sep 2007 08:55:29 +0200 Bernhard Walle <[email protected]> wrote:
arch/i386/kernel/setup.c +1
-0@@ -381,6 +381,20 @@ extern unsigned long __init setup_memoryextern void zone_sizes_init (void );#endif /* !CONFIG_NEED_MULTIPLE_NODES */ +
Only one line is needed between functions, please.
arch/i386/kernel/setup.c extern unsigned long __init setup_memory · line 397
Quoted 13 lines
arch/i386/kernel/setup.c +13
-0+#ifdef CONFIG_HIGHMEM +static inline unsigned long long get_total_mem (void ) +{ +return (max_low_pfn + highend_pfn - highstart_pfn) <<PAGE_SHIFT ; +} +#else +static inline unsigned long long get_total_mem (void ) +{ +return max_low_pfn <<PAGE_SHIFT ; +} +#endif + +
Full of bugs. (unsigned long << foo) returns an unsigned long. With >4G there will be truncation.
Please review the full patchset for other occurrences of this.