diff options
author | Glauber de Oliveira Costa <gcosta@redhat.com> | 2008-01-07 08:05:35 -0500 |
---|---|---|
committer | Rusty Russell <rusty@rustcorp.com.au> | 2008-01-30 06:50:13 -0500 |
commit | 4665ac8e28c30c2a015c617c55783c0bf3a49c05 (patch) | |
tree | 15992d7e693126be7f758e694c8a544306576dfd /drivers/lguest/page_tables.c | |
parent | 66686c2ab08feb721ca4d98285fba64acdf6017f (diff) |
lguest: makes special fields be per-vcpu
lguest struct have room for some fields, namely, cr2, ts, esp1
and ss1, that are not really guest-wide, but rather, vcpu-wide.
This patch puts it in the vcpu struct
Signed-off-by: Glauber de Oliveira Costa <gcosta@redhat.com>
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
Diffstat (limited to 'drivers/lguest/page_tables.c')
-rw-r--r-- | drivers/lguest/page_tables.c | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/drivers/lguest/page_tables.c b/drivers/lguest/page_tables.c index f19add469944..e34c81636a8c 100644 --- a/drivers/lguest/page_tables.c +++ b/drivers/lguest/page_tables.c | |||
@@ -432,9 +432,10 @@ static unsigned int new_pgdir(struct lguest *lg, | |||
432 | * Now we've seen all the page table setting and manipulation, let's see what | 432 | * Now we've seen all the page table setting and manipulation, let's see what |
433 | * what happens when the Guest changes page tables (ie. changes the top-level | 433 | * what happens when the Guest changes page tables (ie. changes the top-level |
434 | * pgdir). This occurs on almost every context switch. */ | 434 | * pgdir). This occurs on almost every context switch. */ |
435 | void guest_new_pagetable(struct lguest *lg, unsigned long pgtable) | 435 | void guest_new_pagetable(struct lg_cpu *cpu, unsigned long pgtable) |
436 | { | 436 | { |
437 | int newpgdir, repin = 0; | 437 | int newpgdir, repin = 0; |
438 | struct lguest *lg = cpu->lg; | ||
438 | 439 | ||
439 | /* Look to see if we have this one already. */ | 440 | /* Look to see if we have this one already. */ |
440 | newpgdir = find_pgdir(lg, pgtable); | 441 | newpgdir = find_pgdir(lg, pgtable); |
@@ -446,7 +447,7 @@ void guest_new_pagetable(struct lguest *lg, unsigned long pgtable) | |||
446 | lg->pgdidx = newpgdir; | 447 | lg->pgdidx = newpgdir; |
447 | /* If it was completely blank, we map in the Guest kernel stack */ | 448 | /* If it was completely blank, we map in the Guest kernel stack */ |
448 | if (repin) | 449 | if (repin) |
449 | pin_stack_pages(lg); | 450 | pin_stack_pages(cpu); |
450 | } | 451 | } |
451 | 452 | ||
452 | /*H:470 Finally, a routine which throws away everything: all PGD entries in all | 453 | /*H:470 Finally, a routine which throws away everything: all PGD entries in all |
@@ -468,11 +469,11 @@ static void release_all_pagetables(struct lguest *lg) | |||
468 | * mapping. Since kernel mappings are in every page table, it's easiest to | 469 | * mapping. Since kernel mappings are in every page table, it's easiest to |
469 | * throw them all away. This traps the Guest in amber for a while as | 470 | * throw them all away. This traps the Guest in amber for a while as |
470 | * everything faults back in, but it's rare. */ | 471 | * everything faults back in, but it's rare. */ |
471 | void guest_pagetable_clear_all(struct lguest *lg) | 472 | void guest_pagetable_clear_all(struct lg_cpu *cpu) |
472 | { | 473 | { |
473 | release_all_pagetables(lg); | 474 | release_all_pagetables(cpu->lg); |
474 | /* We need the Guest kernel stack mapped again. */ | 475 | /* We need the Guest kernel stack mapped again. */ |
475 | pin_stack_pages(lg); | 476 | pin_stack_pages(cpu); |
476 | } | 477 | } |
477 | /*:*/ | 478 | /*:*/ |
478 | /*M:009 Since we throw away all mappings when a kernel mapping changes, our | 479 | /*M:009 Since we throw away all mappings when a kernel mapping changes, our |