aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/lguest/boot.c
diff options
context:
space:
mode:
authorRusty Russell <rusty@rustcorp.com.au>2007-10-21 21:29:44 -0400
committerRusty Russell <rusty@rustcorp.com.au>2007-10-23 01:49:57 -0400
commit814a0e5cdfbd384f4bf7a8443f9c3b885f413d58 (patch)
tree4cb82a6ec1db54ce00fbc3700762cd3dc46a0b4e /arch/x86/lguest/boot.c
parent1f5a29022ac66bc90cbe2a2162f56e9cd7b393ef (diff)
Revert lguest magic and use hook in head.S
Version 2.07 of the boot protocol uses 0x23C for the hardware_subarch field, that for lguest is "1". This allows us to use the standard boot entry point rather than the "GenuineLguest" string hack. The standard entry point also clears the BSS and copies the boot parameters and commandline for us, saving more code. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
Diffstat (limited to 'arch/x86/lguest/boot.c')
-rw-r--r--arch/x86/lguest/boot.c17
1 files changed, 1 insertions, 16 deletions
diff --git a/arch/x86/lguest/boot.c b/arch/x86/lguest/boot.c
index 495e46a1f111..d2235db4085f 100644
--- a/arch/x86/lguest/boot.c
+++ b/arch/x86/lguest/boot.c
@@ -928,18 +928,8 @@ static unsigned lguest_patch(u8 type, u16 clobber, void *ibuf,
928/*G:030 Once we get to lguest_init(), we know we're a Guest. The pv_ops 928/*G:030 Once we get to lguest_init(), we know we're a Guest. The pv_ops
929 * structures in the kernel provide points for (almost) every routine we have 929 * structures in the kernel provide points for (almost) every routine we have
930 * to override to avoid privileged instructions. */ 930 * to override to avoid privileged instructions. */
931__init void lguest_init(void *boot) 931__init void lguest_init(void)
932{ 932{
933 /* Copy boot parameters first: the Launcher put the physical location
934 * in %esi, and head.S converted that to a virtual address and handed
935 * it to us. We use "__memcpy" because "memcpy" sometimes tries to do
936 * tricky things to go faster, and we're not ready for that. */
937 __memcpy(&boot_params, boot, PARAM_SIZE);
938 /* The boot parameters also tell us where the command-line is: save
939 * that, too. */
940 __memcpy(boot_command_line, __va(boot_params.hdr.cmd_line_ptr),
941 COMMAND_LINE_SIZE);
942
943 /* We're under lguest, paravirt is enabled, and we're running at 933 /* We're under lguest, paravirt is enabled, and we're running at
944 * privilege level 1, not 0 as normal. */ 934 * privilege level 1, not 0 as normal. */
945 pv_info.name = "lguest"; 935 pv_info.name = "lguest";
@@ -1024,11 +1014,6 @@ __init void lguest_init(void *boot)
1024 * the normal data segment to get through booting. */ 1014 * the normal data segment to get through booting. */
1025 asm volatile ("mov %0, %%fs" : : "r" (__KERNEL_DS) : "memory"); 1015 asm volatile ("mov %0, %%fs" : : "r" (__KERNEL_DS) : "memory");
1026 1016
1027 /* Clear the part of the kernel data which is expected to be zero.
1028 * Normally it will be anyway, but if we're loading from a bzImage with
1029 * CONFIG_RELOCATALE=y, the relocations will be sitting here. */
1030 memset(__bss_start, 0, __bss_stop - __bss_start);
1031
1032 /* The Host uses the top of the Guest's virtual address space for the 1017 /* The Host uses the top of the Guest's virtual address space for the
1033 * Host<->Guest Switcher, and it tells us how much it needs in 1018 * Host<->Guest Switcher, and it tells us how much it needs in
1034 * lguest_data.reserve_mem, set up on the LGUEST_INIT hypercall. */ 1019 * lguest_data.reserve_mem, set up on the LGUEST_INIT hypercall. */