diff -uNr linux-2.6.8.1/MAINTAINERS linux-2.6.8.1-2.6.8.1-kexec3/MAINTAINERS --- linux-2.6.8.1/MAINTAINERS Sat Aug 14 11:54:51 2004 +++ linux-2.6.8.1-2.6.8.1-kexec3/MAINTAINERS Thu Aug 19 23:42:49 2004 @@ -1226,6 +1226,17 @@ W: http://www.cse.unsw.edu.au/~neilb/patches/linux-devel/ S: Maintained +KEXEC +P: Eric Biederman +P: Randy Dunlap +M: ebiederm@xmission.com +M: rddunlap@osdl.org +W: http://www.xmission.com/~ebiederm/files/kexec/ +W: http://developer.osdl.org/rddunlap/kexec/ +L: linux-kernel@vger.kernel.org +L: fastboot@osdl.org +S: Maintained + LANMEDIA WAN CARD DRIVER P: Andrew Stanley-Jones M: asj@lanmedia.com diff -uNr linux-2.6.8.1/arch/i386/Kconfig linux-2.6.8.1-2.6.8.1-kexec3/arch/i386/Kconfig --- linux-2.6.8.1/arch/i386/Kconfig Sat Aug 14 11:54:53 2004 +++ linux-2.6.8.1-2.6.8.1-kexec3/arch/i386/Kconfig Thu Aug 19 23:42:50 2004 @@ -865,6 +865,34 @@ generate incorrect output with certain kernel constructs when -mregparm=3 is used. +config LOAD_ADDRESS_MB + int "Physical address where the kernel expects to be loaded (1-112)MB" + range 1 112 + default "1" + help + This option specifies the physical address where the kernel + expects to be loaded, in terms of MB.. + + Note for kexec on panic the recovery kernel must be run at + a different physical address then the kernel that called panic. + +config KEXEC + bool "kexec system call (EXPERIMENTAL)" + depends on EXPERIMENTAL + help + kexec is a system call that implements the ability to shutdown your + current kernel, and to start another kernel. It is like a reboot + but it is indepedent of the system firmware. And like a reboot + you can start any kernel with it, not just Linux. + + The name comes from the similiarity to the exec system call. + + It is an ongoing process to be certain the hardware in a machine + is properly shutdown, so do not be surprised if this code does not + initially work for you. It may help to enable device hotplugging + support. As of this writing the exact hardware interface is + strongly in flux, so no good recommendation can be made. + endmenu diff -uNr linux-2.6.8.1/arch/i386/boot/compressed/head.S linux-2.6.8.1-2.6.8.1-kexec3/arch/i386/boot/compressed/head.S --- linux-2.6.8.1/arch/i386/boot/compressed/head.S Thu Aug 19 12:53:01 2004 +++ linux-2.6.8.1-2.6.8.1-kexec3/arch/i386/boot/compressed/head.S Thu Aug 19 23:42:50 2004 @@ -74,7 +74,7 @@ popl %esi # discard address popl %esi # real mode pointer xorl %ebx,%ebx - ljmp $(__BOOT_CS), $0x100000 + ljmp $(__BOOT_CS), $LOAD_ADDRESS /* * We come here, if we were loaded high. @@ -99,7 +99,7 @@ popl %ecx # lcount popl %edx # high_buffer_start popl %eax # hcount - movl $0x100000,%edi + movl $LOAD_ADDRESS,%edi cli # make sure we don't get interrupted ljmp $(__BOOT_CS), $0x1000 # and jump to the move routine @@ -124,5 +124,5 @@ movsl movl %ebx,%esi # Restore setup pointer xorl %ebx,%ebx - ljmp $(__BOOT_CS), $0x100000 + ljmp $(__BOOT_CS), $LOAD_ADDRESS move_routine_end: diff -uNr linux-2.6.8.1/arch/i386/boot/compressed/misc.c linux-2.6.8.1-2.6.8.1-kexec3/arch/i386/boot/compressed/misc.c --- linux-2.6.8.1/arch/i386/boot/compressed/misc.c Sat Aug 14 11:54:53 2004 +++ linux-2.6.8.1-2.6.8.1-kexec3/arch/i386/boot/compressed/misc.c Thu Aug 19 23:42:50 2004 @@ -14,6 +14,7 @@ #include #include