Rusty Russell
2007-Apr-29 06:36 UTC
[PATCH 1/2] lguest: fix up after pda->percpu conversion
Andrew Morton commented out some stuff to make lguest compile. This
should actually make it work (in the latest -mm).
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
---
drivers/lguest/lguest.c | 11 ++---------
1 file changed, 2 insertions(+), 9 deletions(-)
==================================================================---
a/drivers/lguest/lguest.c
+++ b/drivers/lguest/lguest.c
@@ -34,7 +34,6 @@
#include <asm/desc.h>
#include <asm/setup.h>
#include <asm/e820.h>
-//#include <asm/pda.h>
#include <asm/mce.h>
/* Declarations for definitions in lguest_guest.S */
@@ -406,10 +409,6 @@ static unsigned lguest_patch(u8 type, u1
memcpy(insns, lguest_insns[type].start, insn_len);
return insn_len;
}
-
-/* From head.S */
-//extern void setup_pda(void);
-extern struct Xgt_desc_struct early_gdt_descr;
__init void lguest_init(void)
{
@@ -466,10 +465,8 @@ __init void lguest_init(void)
/* We use top of mem for initial pagetables. */
init_pg_tables_end = __pa(pg0);
- /* set up PDA descriptor */
-// setup_pda();
- load_gdt(&early_gdt_descr);
-// asm volatile ("mov %0, %%fs" : : "r" (__KERNEL_PDA) :
"memory");
+ /* Set up per-cpu descriptor (pointing to master area) */
+ asm volatile ("mov %0, %%fs" : : "r" (__KERNEL_DS) :
"memory");
reserve_top_address(lguest_data.reserve_mem);
Rusty Russell
2007-Apr-29 06:38 UTC
[PATCH 2/2] lguest: handle new paravirt lazy mode (fix userspace segfaults)
There's a new paravirt_lazy_mode mode in town.
Well, it's spelled "mode", but it's pronounced
"hack".
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
---
drivers/lguest/lguest.c | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
==================================================================---
a/drivers/lguest/lguest.c
+++ b/drivers/lguest/lguest.c
@@ -59,9 +59,13 @@ static enum paravirt_lazy_mode lazy_mode
static enum paravirt_lazy_mode lazy_mode;
static void lguest_lazy_mode(enum paravirt_lazy_mode mode)
{
- lazy_mode = mode;
- if (mode == PARAVIRT_LAZY_NONE)
+ if (mode == PARAVIRT_LAZY_FLUSH)
hcall(LHCALL_FLUSH_ASYNC, 0, 0, 0);
+ else {
+ lazy_mode = mode;
+ if (mode == PARAVIRT_LAZY_NONE)
+ hcall(LHCALL_FLUSH_ASYNC, 0, 0, 0);
+ }
}
static void lazy_hcall(unsigned long call,