From: Vivek Goyal <[EMAIL PROTECTED]> Date: Mon, Apr 02, 2007 at 01:11:59PM +0530 > > How about attached patch? > > o X86_64 kernel should run from 2MB aligned address for two reasons. > - Performance. > - For relocatable kernels, page tables are updated based on difference > between compile time address and load time physical address. > This difference should be multiple of 2MB as kernel text and data > is mapped using 2MB pages and PMD should be pointing to a 2MB > aligned address. Life is simpler if both compile time and load time > kernel addresses are 2MB aligned. > > o Flag the error at compile time if one is trying to build a kernel which > does not meet alignment restrictions. > > Signed-off-by: Vivek Goyal <[EMAIL PROTECTED]> > --- > > arch/x86_64/kernel/head64.c | 8 ++++++++ > include/asm-x86_64/page.h | 1 + > 2 files changed, 9 insertions(+) > > diff -puN > arch/x86_64/kernel/head64.c~x86_64-check-for-config-physical-start-aligned-2M > arch/x86_64/kernel/head64.c > --- > linux-2.6.21-rc5-mm3-vanilla/arch/x86_64/kernel/head64.c~x86_64-check-for-config-physical-start-aligned-2M > 2007-04-02 20:46:43.000000000 +0530 > +++ linux-2.6.21-rc5-mm3-vanilla-root/arch/x86_64/kernel/head64.c > 2007-04-02 21:20:45.000000000 +0530 > @@ -62,6 +62,14 @@ void __init x86_64_start_kernel(char * r > { > int i; > > + /* > + * Make sure kernel is aligned to 2MB address. Catching it at compile > + * time is better. Change your config file and compile the kernel > + * for a 2MB aligned address (CONFIG_PHYSICAL_START) > + */ > + BUILD_BUG_ON(ALIGN(CONFIG_PHYSICAL_START, __KERNEL_ALIGN) > + != CONFIG_PHYSICAL_START); > + > /* clear bss before set_intr_gate with early_idt_handler */ > clear_bss(); > > diff -puN > include/asm-x86_64/page.h~x86_64-check-for-config-physical-start-aligned-2M > include/asm-x86_64/page.h > --- > linux-2.6.21-rc5-mm3-vanilla/include/asm-x86_64/page.h~x86_64-check-for-config-physical-start-aligned-2M > 2007-04-02 20:50:55.000000000 +0530 > +++ linux-2.6.21-rc5-mm3-vanilla-root/include/asm-x86_64/page.h > 2007-04-02 20:51:34.000000000 +0530 > @@ -79,6 +79,7 @@ extern unsigned long phys_base; > #endif /* !__ASSEMBLY__ */ > > #define __PHYSICAL_START CONFIG_PHYSICAL_START > +#define __KERNEL_ALIGN 0x200000 > #define __START_KERNEL (__START_KERNEL_map + __PHYSICAL_START) > #define __START_KERNEL_map 0xffffffff80000000 > #define __PAGE_OFFSET 0xffff810000000000 > _
I'm only a user, so I'm not uptodate on these addresses and how they work. However, how does this solve the problem that running make oldconfig on a working 2.6.21-rc3-mm2 .config gives an unbootable 2.6.21-rc5-mm3 kernel? If I read things correctly, you now get a BUG, but the kernel still won't boot. If that is correct, than I, as a user, don't think that this is the solution that I feel comfortable with. If the kernel only boots CONFIG_PHYSICAL_START is aligned on a 2MB address, then we should align it, not BUG out when it's not, and especially not when it's unaligned through no fault of the user. Kind regards, Jurriaan -- Debian (Unstable) GNU/Linux 2.6.21-rc5-mm3 2x2010 bogomips load 0.89 the Jack Vance Integral Edition: http://www.integralarchive.org - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/