diff options
author | Glauber de Oliveira Costa <gcosta@redhat.com> | 2008-01-17 16:14:46 -0500 |
---|---|---|
committer | Rusty Russell <rusty@rustcorp.com.au> | 2008-01-30 06:50:17 -0500 |
commit | ae3749dcd8c31dcfbab14ea28c68a944c93f418f (patch) | |
tree | bdbbe9207bb7c50e9aeb7afc5b5653b79501c03f /drivers/lguest/x86 | |
parent | f34f8c5fea079065671163c37d98328cff31980b (diff) |
lguest: move changed bitmap to lg_cpu
events represented in the 'changed' bitmap are per-cpu, not per-guest.
move it to the lg_cpu structure
Signed-off-by: Glauber de Oliveira Costa <gcosta@redhat.com>
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
Diffstat (limited to 'drivers/lguest/x86')
-rw-r--r-- | drivers/lguest/x86/core.c | 11 |
1 files changed, 5 insertions, 6 deletions
diff --git a/drivers/lguest/x86/core.c b/drivers/lguest/x86/core.c index f8dfdc9a3e5b..fd6a8512443c 100644 --- a/drivers/lguest/x86/core.c +++ b/drivers/lguest/x86/core.c | |||
@@ -75,7 +75,6 @@ static DEFINE_PER_CPU(struct lg_cpu *, last_cpu); | |||
75 | */ | 75 | */ |
76 | static void copy_in_guest_info(struct lg_cpu *cpu, struct lguest_pages *pages) | 76 | static void copy_in_guest_info(struct lg_cpu *cpu, struct lguest_pages *pages) |
77 | { | 77 | { |
78 | struct lguest *lg = cpu->lg; | ||
79 | /* Copying all this data can be quite expensive. We usually run the | 78 | /* Copying all this data can be quite expensive. We usually run the |
80 | * same Guest we ran last time (and that Guest hasn't run anywhere else | 79 | * same Guest we ran last time (and that Guest hasn't run anywhere else |
81 | * meanwhile). If that's not the case, we pretend everything in the | 80 | * meanwhile). If that's not the case, we pretend everything in the |
@@ -83,7 +82,7 @@ static void copy_in_guest_info(struct lg_cpu *cpu, struct lguest_pages *pages) | |||
83 | if (__get_cpu_var(last_cpu) != cpu || cpu->last_pages != pages) { | 82 | if (__get_cpu_var(last_cpu) != cpu || cpu->last_pages != pages) { |
84 | __get_cpu_var(last_cpu) = cpu; | 83 | __get_cpu_var(last_cpu) = cpu; |
85 | cpu->last_pages = pages; | 84 | cpu->last_pages = pages; |
86 | lg->changed = CHANGED_ALL; | 85 | cpu->changed = CHANGED_ALL; |
87 | } | 86 | } |
88 | 87 | ||
89 | /* These copies are pretty cheap, so we do them unconditionally: */ | 88 | /* These copies are pretty cheap, so we do them unconditionally: */ |
@@ -99,18 +98,18 @@ static void copy_in_guest_info(struct lg_cpu *cpu, struct lguest_pages *pages) | |||
99 | pages->state.guest_tss.ss1 = cpu->ss1; | 98 | pages->state.guest_tss.ss1 = cpu->ss1; |
100 | 99 | ||
101 | /* Copy direct-to-Guest trap entries. */ | 100 | /* Copy direct-to-Guest trap entries. */ |
102 | if (lg->changed & CHANGED_IDT) | 101 | if (cpu->changed & CHANGED_IDT) |
103 | copy_traps(cpu, pages->state.guest_idt, default_idt_entries); | 102 | copy_traps(cpu, pages->state.guest_idt, default_idt_entries); |
104 | 103 | ||
105 | /* Copy all GDT entries which the Guest can change. */ | 104 | /* Copy all GDT entries which the Guest can change. */ |
106 | if (lg->changed & CHANGED_GDT) | 105 | if (cpu->changed & CHANGED_GDT) |
107 | copy_gdt(cpu, pages->state.guest_gdt); | 106 | copy_gdt(cpu, pages->state.guest_gdt); |
108 | /* If only the TLS entries have changed, copy them. */ | 107 | /* If only the TLS entries have changed, copy them. */ |
109 | else if (lg->changed & CHANGED_GDT_TLS) | 108 | else if (cpu->changed & CHANGED_GDT_TLS) |
110 | copy_gdt_tls(cpu, pages->state.guest_gdt); | 109 | copy_gdt_tls(cpu, pages->state.guest_gdt); |
111 | 110 | ||
112 | /* Mark the Guest as unchanged for next time. */ | 111 | /* Mark the Guest as unchanged for next time. */ |
113 | lg->changed = 0; | 112 | cpu->changed = 0; |
114 | } | 113 | } |
115 | 114 | ||
116 | /* Finally: the code to actually call into the Switcher to run the Guest. */ | 115 | /* Finally: the code to actually call into the Switcher to run the Guest. */ |