diff options
author | Ingo Molnar <mingo@elte.hu> | 2009-05-08 04:50:00 -0400 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2009-05-08 04:50:00 -0400 |
commit | f066a155334642b8a206eec625b1925d88c48aeb (patch) | |
tree | cb12975e60b70d1dae3b7397bab955de78a4d01e /arch/x86/lguest/boot.c | |
parent | e7c064889606aab3569669078c69b87b2c527e72 (diff) | |
parent | 33df4db04a79660150e1948e3296eeb451ac121b (diff) |
Merge branch 'x86/urgent' into x86/xen
Conflicts:
arch/frv/include/asm/pgtable.h
arch/x86/include/asm/required-features.h
arch/x86/xen/mmu.c
Merge reason: x86/xen was on a .29 base still, move it to a fresher
branch and pick up Xen fixes as well, plus resolve
conflicts
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'arch/x86/lguest/boot.c')
-rw-r--r-- | arch/x86/lguest/boot.c | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/arch/x86/lguest/boot.c b/arch/x86/lguest/boot.c index cfb2d68dc795..8f935c6d5512 100644 --- a/arch/x86/lguest/boot.c +++ b/arch/x86/lguest/boot.c | |||
@@ -279,15 +279,15 @@ static void lguest_load_idt(const struct desc_ptr *desc) | |||
279 | * controls the entire thing and the Guest asks it to make changes using the | 279 | * controls the entire thing and the Guest asks it to make changes using the |
280 | * LOAD_GDT hypercall. | 280 | * LOAD_GDT hypercall. |
281 | * | 281 | * |
282 | * This is the opposite of the IDT code where we have a LOAD_IDT_ENTRY | 282 | * This is the exactly like the IDT code. |
283 | * hypercall and use that repeatedly to load a new IDT. I don't think it | ||
284 | * really matters, but wouldn't it be nice if they were the same? Wouldn't | ||
285 | * it be even better if you were the one to send the patch to fix it? | ||
286 | */ | 283 | */ |
287 | static void lguest_load_gdt(const struct desc_ptr *desc) | 284 | static void lguest_load_gdt(const struct desc_ptr *desc) |
288 | { | 285 | { |
289 | BUG_ON((desc->size + 1) / 8 != GDT_ENTRIES); | 286 | unsigned int i; |
290 | kvm_hypercall2(LHCALL_LOAD_GDT, __pa(desc->address), GDT_ENTRIES); | 287 | struct desc_struct *gdt = (void *)desc->address; |
288 | |||
289 | for (i = 0; i < (desc->size+1)/8; i++) | ||
290 | kvm_hypercall3(LHCALL_LOAD_GDT_ENTRY, i, gdt[i].a, gdt[i].b); | ||
291 | } | 291 | } |
292 | 292 | ||
293 | /* For a single GDT entry which changes, we do the lazy thing: alter our GDT, | 293 | /* For a single GDT entry which changes, we do the lazy thing: alter our GDT, |
@@ -297,7 +297,9 @@ static void lguest_write_gdt_entry(struct desc_struct *dt, int entrynum, | |||
297 | const void *desc, int type) | 297 | const void *desc, int type) |
298 | { | 298 | { |
299 | native_write_gdt_entry(dt, entrynum, desc, type); | 299 | native_write_gdt_entry(dt, entrynum, desc, type); |
300 | kvm_hypercall2(LHCALL_LOAD_GDT, __pa(dt), GDT_ENTRIES); | 300 | /* Tell Host about this new entry. */ |
301 | kvm_hypercall3(LHCALL_LOAD_GDT_ENTRY, entrynum, | ||
302 | dt[entrynum].a, dt[entrynum].b); | ||
301 | } | 303 | } |
302 | 304 | ||
303 | /* OK, I lied. There are three "thread local storage" GDT entries which change | 305 | /* OK, I lied. There are three "thread local storage" GDT entries which change |
@@ -667,7 +669,7 @@ static unsigned long lguest_tsc_khz(void) | |||
667 | 669 | ||
668 | /* If we can't use the TSC, the kernel falls back to our lower-priority | 670 | /* If we can't use the TSC, the kernel falls back to our lower-priority |
669 | * "lguest_clock", where we read the time value given to us by the Host. */ | 671 | * "lguest_clock", where we read the time value given to us by the Host. */ |
670 | static cycle_t lguest_clock_read(void) | 672 | static cycle_t lguest_clock_read(struct clocksource *cs) |
671 | { | 673 | { |
672 | unsigned long sec, nsec; | 674 | unsigned long sec, nsec; |
673 | 675 | ||