aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorRusty Russell <rusty@rustcorp.com.au>2007-10-21 21:03:36 -0400
committerRusty Russell <rusty@rustcorp.com.au>2007-10-23 01:49:54 -0400
commit47436aa4ad054c1c7c8231618e86ebd9305308dc (patch)
treea9ba6e0521f9116442144a86e781a3164ec86094 /include
parentc18acd73ffc209def08003a1927473096f66c5ad (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.h7
-rw-r--r--include/linux/lguest.h5
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
39static inline unsigned long 40static inline unsigned long
40hcall(unsigned long call, 41hcall(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};