diff options
Diffstat (limited to 'arch')
-rw-r--r-- | arch/x86/lguest/boot.c | 17 | ||||
-rw-r--r-- | arch/x86/lguest/i386_head.S | 17 |
2 files changed, 5 insertions, 29 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. */ |
diff --git a/arch/x86/lguest/i386_head.S b/arch/x86/lguest/i386_head.S index ba4282eba5bf..ebc6ac733899 100644 --- a/arch/x86/lguest/i386_head.S +++ b/arch/x86/lguest/i386_head.S | |||
@@ -5,11 +5,8 @@ | |||
5 | #include <asm/thread_info.h> | 5 | #include <asm/thread_info.h> |
6 | #include <asm/processor-flags.h> | 6 | #include <asm/processor-flags.h> |
7 | 7 | ||
8 | /*G:020 This is where we begin: we have a magic signature which the launcher | 8 | /*G:020 This is where we begin: head.S notes that the boot header's platform |
9 | * looks for. The plan is that the Linux boot protocol will be extended with a | 9 | * type field is "1" (lguest), so calls us here. The boot header is in %esi. |
10 | * "platform type" field which will guide us here from the normal entry point, | ||
11 | * but for the moment this suffices. The normal boot code uses %esi for the | ||
12 | * boot header, so we do too. | ||
13 | * | 10 | * |
14 | * WARNING: be very careful here! We're running at addresses equal to physical | 11 | * WARNING: be very careful here! We're running at addresses equal to physical |
15 | * addesses (around 0), not above PAGE_OFFSET as most code expectes | 12 | * addesses (around 0), not above PAGE_OFFSET as most code expectes |
@@ -19,19 +16,14 @@ | |||
19 | * The .section line puts this code in .init.text so it will be discarded after | 16 | * The .section line puts this code in .init.text so it will be discarded after |
20 | * boot. */ | 17 | * boot. */ |
21 | .section .init.text, "ax", @progbits | 18 | .section .init.text, "ax", @progbits |
22 | .ascii "GenuineLguest" | 19 | ENTRY(lguest_entry) |
23 | /* Make initial hypercall now, so we can set up the pagetables. */ | 20 | /* Make initial hypercall now, so we can set up the pagetables. */ |
24 | movl $LHCALL_LGUEST_INIT, %eax | 21 | movl $LHCALL_LGUEST_INIT, %eax |
25 | movl $lguest_data - __PAGE_OFFSET, %edx | 22 | movl $lguest_data - __PAGE_OFFSET, %edx |
26 | int $LGUEST_TRAP_ENTRY | 23 | int $LGUEST_TRAP_ENTRY |
27 | 24 | ||
28 | /* Set up boot information pointer to hand to lguest_init(): it wants | ||
29 | * a virtual address. */ | ||
30 | movl %esi, %eax | ||
31 | addl $__PAGE_OFFSET, %eax | ||
32 | |||
33 | /* The Host put the toplevel pagetable in lguest_data.pgdir. The movsl | 25 | /* The Host put the toplevel pagetable in lguest_data.pgdir. The movsl |
34 | * instruction uses %esi, so we needed to save it above. */ | 26 | * instruction uses %esi implicitly. */ |
35 | movl lguest_data - __PAGE_OFFSET + LGUEST_DATA_pgdir, %esi | 27 | movl lguest_data - __PAGE_OFFSET + LGUEST_DATA_pgdir, %esi |
36 | 28 | ||
37 | /* Copy first 32 entries of page directory to __PAGE_OFFSET entries. | 29 | /* Copy first 32 entries of page directory to __PAGE_OFFSET entries. |
@@ -47,7 +39,6 @@ | |||
47 | /* Set up the initial stack so we can run C code. */ | 39 | /* Set up the initial stack so we can run C code. */ |
48 | movl $(init_thread_union+THREAD_SIZE),%esp | 40 | movl $(init_thread_union+THREAD_SIZE),%esp |
49 | 41 | ||
50 | |||
51 | /* Jumps are relative, and we're running __PAGE_OFFSET too low at the | 42 | /* Jumps are relative, and we're running __PAGE_OFFSET too low at the |
52 | * moment. */ | 43 | * moment. */ |
53 | jmp lguest_init+__PAGE_OFFSET | 44 | jmp lguest_init+__PAGE_OFFSET |