diff options
author | Vivek Goyal <vgoyal@in.ibm.com> | 2006-12-06 20:14:04 -0500 |
---|---|---|
committer | Andi Kleen <andi@basil.nowhere.org> | 2006-12-06 20:14:04 -0500 |
commit | e69f202d0a1419219198566e1c22218a5c71a9a6 (patch) | |
tree | 16bb59505500797e1ea7e09ee9c3b495ce65b76a /arch/i386/Kconfig | |
parent | 6a044b3a0a1829ef19bb29548ffe553f48e8d80c (diff) |
[PATCH] i386: Implement CONFIG_PHYSICAL_ALIGN
o Now CONFIG_PHYSICAL_START is being replaced with CONFIG_PHYSICAL_ALIGN.
Hardcoding the kernel physical start value creates a problem in relocatable
kernel context due to boot loader limitations. For ex, if somebody
compiles a relocatable kernel to be run from address 4MB, but this kernel
will run from location 1MB as grub loads the kernel at physical address
1MB. Kernel thinks that I am a relocatable kernel and I should run from
the address I have been loaded at. So somebody wanting to run kernel
from 4MB alignment location (for improved performance regions) can't do
that.
o Hence, Eric proposed that probably CONFIG_PHYSICAL_ALIGN will make
more sense in relocatable kernel context. At run time kernel will move
itself to a physical addr location which meets user specified alignment
restrictions.
Signed-off-by: Vivek Goyal <vgoyal@in.ibm.com>
Signed-off-by: Andi Kleen <ak@suse.de>
Diffstat (limited to 'arch/i386/Kconfig')
-rw-r--r-- | arch/i386/Kconfig | 33 |
1 files changed, 18 insertions, 15 deletions
diff --git a/arch/i386/Kconfig b/arch/i386/Kconfig index d588ca874bb4..fd2fa7a7ec52 100644 --- a/arch/i386/Kconfig +++ b/arch/i386/Kconfig | |||
@@ -785,23 +785,26 @@ config RELOCATABLE | |||
785 | must live at a different physical address than the primary | 785 | must live at a different physical address than the primary |
786 | kernel. | 786 | kernel. |
787 | 787 | ||
788 | config PHYSICAL_START | 788 | config PHYSICAL_ALIGN |
789 | hex "Physical address where the kernel is loaded" if (EMBEDDED || CRASH_DUMP) | 789 | hex "Alignment value to which kernel should be aligned" |
790 | |||
791 | default "0x1000000" if CRASH_DUMP | ||
792 | default "0x100000" | 790 | default "0x100000" |
791 | range 0x2000 0x400000 | ||
793 | help | 792 | help |
794 | This gives the physical address where the kernel is loaded. Normally | 793 | This value puts the alignment restrictions on physical address |
795 | for regular kernels this value is 0x100000 (1MB). But in the case | 794 | where kernel is loaded and run from. Kernel is compiled for an |
796 | of kexec on panic the fail safe kernel needs to run at a different | 795 | address which meets above alignment restriction. |
797 | address than the panic-ed kernel. This option is used to set the load | 796 | |
798 | address for kernels used to capture crash dump on being kexec'ed | 797 | If bootloader loads the kernel at a non-aligned address and |
799 | after panic. The default value for crash dump kernels is | 798 | CONFIG_RELOCATABLE is set, kernel will move itself to nearest |
800 | 0x1000000 (16MB). This can also be set based on the "X" value as | 799 | address aligned to above value and run from there. |
801 | specified in the "crashkernel=YM@XM" command line boot parameter | 800 | |
802 | passed to the panic-ed kernel. Typically this parameter is set as | 801 | If bootloader loads the kernel at a non-aligned address and |
803 | crashkernel=64M@16M. Please take a look at | 802 | CONFIG_RELOCATABLE is not set, kernel will ignore the run time |
804 | Documentation/kdump/kdump.txt for more details about crash dumps. | 803 | load address and decompress itself to the address it has been |
804 | compiled for and run from there. The address for which kernel is | ||
805 | compiled already meets above alignment restrictions. Hence the | ||
806 | end result is that kernel runs from a physical address meeting | ||
807 | above alignment restrictions. | ||
805 | 808 | ||
806 | Don't change this unless you know what you are doing. | 809 | Don't change this unless you know what you are doing. |
807 | 810 | ||