Eric W. Biederman ebiederm at xmission.com
Mon Apr 23 01:15:48 EDT 2007

Now that the vmlinux is marked as relocatable there is no reason to
retain the CONFIG_PHYSICAL_START option, as we can put the binary we
have at any 2MB aligned address in memory.

With CONFIG_PHYSICAL_START gone the handful of code lines that depend
on CONFIG_RELOCATABLE no longer make sense to be conditional and can
be removed.

The big win of this patch (besides Kconfig simplicity) is that the
nasty BUILD_BUG_ON test for people misaligning their kernel when using
CONFIG_PHYSICAL_START can be removed as this case can only happen with

Signed-off-by: Eric W. Biederman <ebiederm at xmission.com>
 arch/x86_64/Kconfig                |   55 +-----------------------------------
 arch/x86_64/Makefile               |    2 -
 arch/x86_64/boot/compressed/head.S |   13 +--------
 arch/x86_64/boot/setup.S           |    4 --
 arch/x86_64/defconfig              |    2 -
 arch/x86_64/kernel/head64.c        |    7 ----
 include/asm-x86_64/page.h          |    2 +-
 7 files changed, 3 insertions(+), 82 deletions(-)

diff --git a/arch/x86_64/Kconfig b/arch/x86_64/Kconfig
index 773b487..713c1ad 100644
--- a/arch/x86_64/Kconfig
+++ b/arch/x86_64/Kconfig
@@ -565,62 +565,9 @@ config CRASH_DUMP
           which are loaded in the main kernel with kexec-tools into
           a specially reserved region and then later executed after
           a crash by kdump/kexec. The crash dump kernel must be compiled
-	  to a memory address not used by the main kernel or BIOS using
+	  to a memory address not used by the main kernel or BIOS
           For more details see Documentation/kdump/kdump.txt
-	bool "Build a relocatable kernel(EXPERIMENTAL)"
-	depends on EXPERIMENTAL
-	help
-	  Builds a relocatable kernel. This enables loading and running
-	  a kernel binary from a different physical address than it has
-	  been compiled for.
-	  One use is for the kexec on panic case where the recovery kernel
-	  must live at a different physical address than the primary
-	  kernel.
-	  Note: If CONFIG_RELOCATABLE=y, then kernel run from the address
-	  it has been loaded at and compile time physical address
-	  (CONFIG_PHYSICAL_START) is ignored.
-	hex "Physical address where the kernel is loaded" if (EMBEDDED || CRASH_DUMP)
-	default "0x200000"
-	help
-	  This gives the physical address where the kernel is loaded. It
-	  should be aligned to 2MB boundary.
-	  If kernel is a not relocatable (CONFIG_RELOCATABLE=n) then
-	  bzImage will decompress itself to above physical address and
-	  run from there. Otherwise, bzImage will run from the address where
-	  it has been loaded by the boot loader and will ignore above physical
-	  address.
-	  In normal kdump cases one does not have to set/change this option
-	  as now bzImage can be compiled as a completely relocatable image
-	  (CONFIG_RELOCATABLE=y) and be used to load and run from a different
-	  address. This option is mainly useful for the folks who don't want
-	  to use a bzImage for capturing the crash dump and want to use a
-	  vmlinux instead.
-	  So if you are using bzImage for capturing the crash dump, leave
-	  the value here unchanged to 0x200000 and set CONFIG_RELOCATABLE=y.
-	  Otherwise if you plan to use vmlinux for capturing the crash dump
-	  change this value to start of the reserved region (Typically 16MB
-	  0x1000000). In other words, it can be set based on the "X" value as
-	  specified in the "crashkernel=YM at XM" command line boot parameter
-	  passed to the panic-ed kernel. Typically this parameter is set as
-	  crashkernel=64M at 16M. Please take a look at
-	  Documentation/kdump/kdump.txt for more details about crash dumps.
-	  Usage of bzImage for capturing the crash dump is advantageous as
-	  one does not have to build two kernels. Same kernel can be used
-	  as production kernel and capture kernel.
-	  Don't change this unless you know what you are doing.
 config SECCOMP
 	bool "Enable seccomp to safely compute untrusted bytecode"
 	depends on PROC_FS
diff --git a/arch/x86_64/Makefile b/arch/x86_64/Makefile
index 5ae79ab..5d96f4f 100644
--- a/arch/x86_64/Makefile
+++ b/arch/x86_64/Makefile
@@ -124,7 +124,6 @@ define archhelp
   echo  '  isoimage     - Create a boot CD-ROM image'
 define cmd_vmlinux__
       $(LD) $(LDFLAGS) $(LDFLAGS_vmlinux) -o $@ \
       -T $(vmlinux-lds) $(vmlinux-init)		\
@@ -132,7 +131,6 @@ define cmd_vmlinux__
       $(filter-out $(vmlinux-lds) $(vmlinux-init) $(vmlinux-main) FORCE ,$^) \
       && scripts/mketrel $@
 CLEAN_FILES += arch/$(ARCH)/boot/fdimage \
 	       arch/$(ARCH)/boot/image.iso \
diff --git a/arch/x86_64/boot/compressed/head.S b/arch/x86_64/boot/compressed/head.S
index f9d5692..493723e 100644
--- a/arch/x86_64/boot/compressed/head.S
+++ b/arch/x86_64/boot/compressed/head.S
@@ -71,13 +71,9 @@ startup_32:
  * for safe in-place decompression.
 	movl	%ebp, %ebx
 	addl	$(LARGE_PAGE_SIZE -1), %ebx
 	andl	$LARGE_PAGE_MASK, %ebx
 	/* Replace the compressed data size with the uncompressed size */
 	subl	input_len(%ebp), %ebx
@@ -200,21 +196,14 @@ ENTRY(startup_64)
 	 * we were loaded at aligned to a 2M boundary. %rbp contains the
 	 * decompressed kernel start address.
-	 * If it is a relocatable kernel then decompress and run the kernel
-	 * from load address aligned to 2MB addr, otherwise decompress and
-	 * run the kernel from CONFIG_PHYSICAL_START
+	 * Decompress and run the kernel from load address aligned to 2MB addr
 	/* Start with the delta to where the kernel will run at. */
 	leaq	startup_32(%rip) /* - $startup_32 */, %rbp
 	addq	$(LARGE_PAGE_SIZE - 1), %rbp
 	andq	$LARGE_PAGE_MASK, %rbp
 	movq	%rbp, %rbx
-	movq	%rbp, %rbx
 	/* Replace the compressed data size with the uncompressed size */
 	movl	input_len(%rip), %eax
diff --git a/arch/x86_64/boot/setup.S b/arch/x86_64/boot/setup.S
index 4f88510..8a70c92 100644
--- a/arch/x86_64/boot/setup.S
+++ b/arch/x86_64/boot/setup.S
@@ -158,11 +158,7 @@ cmd_line_ptr:	.long 0			# (Header version 0x0202 or later)
 ramdisk_max:	.long 0xffffffff
 kernel_alignment:  .long 0x200000       # physical addr alignment required for
 					# protected mode relocatable kernel
 relocatable_kernel:    .byte 1
-relocatable_kernel:    .byte 0
 pad2:                  .byte 0
 pad3:                  .word 0
diff --git a/arch/x86_64/defconfig b/arch/x86_64/defconfig
index 90c5a9d..d977bcb 100644
--- a/arch/x86_64/defconfig
+++ b/arch/x86_64/defconfig
@@ -174,8 +174,6 @@ CONFIG_X86_MCE_INTEL=y
 # CONFIG_KEXEC is not set
 # CONFIG_CRASH_DUMP is not set
 # CONFIG_HZ_100 is not set
diff --git a/arch/x86_64/kernel/head64.c b/arch/x86_64/kernel/head64.c
index 213d90e..6c34bdd 100644
--- a/arch/x86_64/kernel/head64.c
+++ b/arch/x86_64/kernel/head64.c
@@ -62,13 +62,6 @@ void __init x86_64_start_kernel(char * real_mode_data)
 	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)
-	 */
 	/* clear bss before set_intr_gate with early_idt_handler */
diff --git a/include/asm-x86_64/page.h b/include/asm-x86_64/page.h
index 7bb725f..20662ab 100644
--- a/include/asm-x86_64/page.h
+++ b/include/asm-x86_64/page.h
@@ -78,7 +78,7 @@ extern unsigned long phys_base;
 #endif /* !__ASSEMBLY__ */
+#define __PHYSICAL_START	0x200000
 #define __KERNEL_ALIGN		0x200000
 #define __START_KERNEL_map	0xffffffff80000000

More information about the kexec mailing list