aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/lguest/lg.h
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 /drivers/lguest/lg.h
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 'drivers/lguest/lg.h')
-rw-r--r--drivers/lguest/lg.h8
1 files changed, 3 insertions, 5 deletions
diff --git a/drivers/lguest/lg.h b/drivers/lguest/lg.h
index 7408cebe995..e4845d7f068 100644
--- a/drivers/lguest/lg.h
+++ b/drivers/lguest/lg.h
@@ -63,7 +63,7 @@ struct lguest
63 /* This provides the offset to the base of guest-physical 63 /* This provides the offset to the base of guest-physical
64 * memory in the Launcher. */ 64 * memory in the Launcher. */
65 void __user *mem_base; 65 void __user *mem_base;
66 u32 page_offset; 66 unsigned long kernel_address;
67 u32 cr2; 67 u32 cr2;
68 int halted; 68 int halted;
69 int ts; 69 int ts;
@@ -165,6 +165,8 @@ void guest_set_pte(struct lguest *lg, unsigned long gpgdir,
165void map_switcher_in_guest(struct lguest *lg, struct lguest_pages *pages); 165void map_switcher_in_guest(struct lguest *lg, struct lguest_pages *pages);
166int demand_page(struct lguest *info, unsigned long cr2, int errcode); 166int demand_page(struct lguest *info, unsigned long cr2, int errcode);
167void pin_page(struct lguest *lg, unsigned long vaddr); 167void pin_page(struct lguest *lg, unsigned long vaddr);
168unsigned long guest_pa(struct lguest *lg, unsigned long vaddr);
169void page_table_guest_data_init(struct lguest *lg);
168 170
169/* <arch>/core.c: */ 171/* <arch>/core.c: */
170void lguest_arch_host_init(void); 172void lguest_arch_host_init(void);
@@ -229,9 +231,5 @@ do { \
229} while(0) 231} while(0)
230/* (End of aside) :*/ 232/* (End of aside) :*/
231 233
232static inline unsigned long guest_pa(struct lguest *lg, unsigned long vaddr)
233{
234 return vaddr - lg->page_offset;
235}
236#endif /* __ASSEMBLY__ */ 234#endif /* __ASSEMBLY__ */
237#endif /* _LGUEST_H */ 235#endif /* _LGUEST_H */