diff options
author | Rusty Russell <rusty@rustcorp.com.au> | 2007-10-21 21:03:36 -0400 |
---|---|---|
committer | Rusty Russell <rusty@rustcorp.com.au> | 2007-10-23 01:49:54 -0400 |
commit | 47436aa4ad054c1c7c8231618e86ebd9305308dc (patch) | |
tree | a9ba6e0521f9116442144a86e781a3164ec86094 /include | |
parent | c18acd73ffc209def08003a1927473096f66c5ad (diff) |
Boot with virtual == physical to get closer to native Linux.
1) This allows us to get alot closer to booting bzImages.
2) It means we don't have to know page_offset.
3) The Guest needs to modify the boot pagetables to create the
PAGE_OFFSET mapping before jumping to C code.
4) guest_pa() walks the page tables rather than using page_offset.
5) We don't use page_offset to figure out whether to emulate: it was
always kinda quesationable, and won't work for instructions done
before remapping (bzImage unpacking in particular).
6) We still want the kernel address for tlb flushing: have the initial
hypercall give us that, too.
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
Diffstat (limited to 'include')
-rw-r--r-- | include/asm-x86/lguest_hcall.h | 7 | ||||
-rw-r--r-- | include/linux/lguest.h | 5 |
2 files changed, 9 insertions, 3 deletions
diff --git a/include/asm-x86/lguest_hcall.h b/include/asm-x86/lguest_hcall.h index 8f2a1edc4fe2..0c553ef36240 100644 --- a/include/asm-x86/lguest_hcall.h +++ b/include/asm-x86/lguest_hcall.h | |||
@@ -2,8 +2,6 @@ | |||
2 | #ifndef _X86_LGUEST_HCALL_H | 2 | #ifndef _X86_LGUEST_HCALL_H |
3 | #define _X86_LGUEST_HCALL_H | 3 | #define _X86_LGUEST_HCALL_H |
4 | 4 | ||
5 | #include <asm/hw_irq.h> | ||
6 | |||
7 | #define LHCALL_FLUSH_ASYNC 0 | 5 | #define LHCALL_FLUSH_ASYNC 0 |
8 | #define LHCALL_LGUEST_INIT 1 | 6 | #define LHCALL_LGUEST_INIT 1 |
9 | #define LHCALL_CRASH 2 | 7 | #define LHCALL_CRASH 2 |
@@ -36,6 +34,9 @@ | |||
36 | * definition of a gentleman: "someone who is only rude intentionally". */ | 34 | * definition of a gentleman: "someone who is only rude intentionally". */ |
37 | #define LGUEST_TRAP_ENTRY 0x1F | 35 | #define LGUEST_TRAP_ENTRY 0x1F |
38 | 36 | ||
37 | #ifndef __ASSEMBLY__ | ||
38 | #include <asm/hw_irq.h> | ||
39 | |||
39 | static inline unsigned long | 40 | static inline unsigned long |
40 | hcall(unsigned long call, | 41 | hcall(unsigned long call, |
41 | unsigned long arg1, unsigned long arg2, unsigned long arg3) | 42 | unsigned long arg1, unsigned long arg2, unsigned long arg3) |
@@ -66,4 +67,6 @@ struct hcall_args | |||
66 | /* These map directly onto eax, ebx, ecx, edx in struct lguest_regs */ | 67 | /* These map directly onto eax, ebx, ecx, edx in struct lguest_regs */ |
67 | unsigned long arg0, arg2, arg3, arg1; | 68 | unsigned long arg0, arg2, arg3, arg1; |
68 | }; | 69 | }; |
70 | |||
71 | #endif /* !__ASSEMBLY__ */ | ||
69 | #endif /* _I386_LGUEST_HCALL_H */ | 72 | #endif /* _I386_LGUEST_HCALL_H */ |
diff --git a/include/linux/lguest.h b/include/linux/lguest.h index 083052236db9..8beb29134626 100644 --- a/include/linux/lguest.h +++ b/include/linux/lguest.h | |||
@@ -44,11 +44,14 @@ struct lguest_data | |||
44 | unsigned long reserve_mem; | 44 | unsigned long reserve_mem; |
45 | /* KHz for the TSC clock. */ | 45 | /* KHz for the TSC clock. */ |
46 | u32 tsc_khz; | 46 | u32 tsc_khz; |
47 | /* Page where the top-level pagetable is */ | ||
48 | unsigned long pgdir; | ||
47 | 49 | ||
48 | /* Fields initialized by the Guest at boot: */ | 50 | /* Fields initialized by the Guest at boot: */ |
49 | /* Instruction range to suppress interrupts even if enabled */ | 51 | /* Instruction range to suppress interrupts even if enabled */ |
50 | unsigned long noirq_start, noirq_end; | 52 | unsigned long noirq_start, noirq_end; |
51 | 53 | /* Address above which page tables are all identical. */ | |
54 | unsigned long kernel_address; | ||
52 | /* The vector to try to use for system calls (0x40 or 0x80). */ | 55 | /* The vector to try to use for system calls (0x40 or 0x80). */ |
53 | unsigned int syscall_vec; | 56 | unsigned int syscall_vec; |
54 | }; | 57 | }; |