diff options
author | kaf24@firebug.cl.cam.ac.uk <kaf24@firebug.cl.cam.ac.uk> | 2005-06-01 15:50:02 +0000 |
---|---|---|
committer | kaf24@firebug.cl.cam.ac.uk <kaf24@firebug.cl.cam.ac.uk> | 2005-06-01 15:50:02 +0000 |
commit | a1e357903c931ed4a566e655c5d3e9a4f31d344e (patch) | |
tree | 18c9ef9d084fe9b2c2195e49770b6addea9db3e8 | |
parent | 03249160f664e35ddef7b71c76617decc5dce789 (diff) | |
download | xen-a1e357903c931ed4a566e655c5d3e9a4f31d344e.tar.gz xen-a1e357903c931ed4a566e655c5d3e9a4f31d344e.tar.bz2 xen-a1e357903c931ed4a566e655c5d3e9a4f31d344e.zip |
bitkeeper revision 1.1628.1.1 (429dd92aYeqV9tl4b0g_F_deORFVAQ)
Fix sync_lazy_execstate functions to correctly sync the local cpu.
Signed-off-by: Keir Fraser <keir@xensource.com>
-rw-r--r-- | xen/arch/x86/domain.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/xen/arch/x86/domain.c b/xen/arch/x86/domain.c index 4d49724c4e..25f0125609 100644 --- a/xen/arch/x86/domain.c +++ b/xen/arch/x86/domain.c @@ -819,12 +819,17 @@ int __sync_lazy_execstate(void) void sync_lazy_execstate_cpuset(unsigned long cpuset) { - flush_tlb_mask(cpuset); + if ( cpuset & (1 << smp_processor_id()) ) + (void)__sync_lazy_execstate(); + /* Other cpus call __sync_lazy_execstate from flush ipi handler. */ + flush_tlb_mask(cpuset & ~(1 << smp_processor_id())); } void sync_lazy_execstate_all(void) { - flush_tlb_all(); + __sync_lazy_execstate(); + /* Other cpus call __sync_lazy_execstate from flush ipi handler. */ + flush_tlb_mask(((1<<num_online_cpus())-1) & ~(1 << smp_processor_id())); } unsigned long __hypercall_create_continuation( |