aboutsummaryrefslogtreecommitdiffstats
path: root/virt/kvm
diff options
context:
space:
mode:
authorXiao Guangrong <xiaoguangrong@cn.fujitsu.com>2011-01-12 02:40:31 -0500
committerMarcelo Tosatti <mtosatti@redhat.com>2011-03-17 12:08:26 -0400
commit6b7e2d0991489559a1df4500d77f7b76c4607ed0 (patch)
treeb82e941c3ca4d519c71577ad21807af4d02b0679 /virt/kvm
parentd48ead8b0b48862a87138d04efb7580a1a25beb5 (diff)
KVM: Add "exiting guest mode" state
Currently we keep track of only two states: guest mode and host mode. This patch adds an "exiting guest mode" state that tells us that an IPI will happen soon, so unless we need to wait for the IPI, we can avoid it completely. Also 1: No need atomically to read/write ->mode in vcpu's thread 2: reorganize struct kvm_vcpu to make ->mode and ->requests in the same cache line explicitly Signed-off-by: Xiao Guangrong <xiaoguangrong@cn.fujitsu.com> Signed-off-by: Avi Kivity <avi@redhat.com>
Diffstat (limited to 'virt/kvm')
-rw-r--r--virt/kvm/kvm_main.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c
index fd67bcde9980..19209f849cf7 100644
--- a/virt/kvm/kvm_main.c
+++ b/virt/kvm/kvm_main.c
@@ -171,7 +171,12 @@ static bool make_all_cpus_request(struct kvm *kvm, unsigned int req)
171 if (kvm_make_check_request(req, vcpu)) 171 if (kvm_make_check_request(req, vcpu))
172 continue; 172 continue;
173 cpu = vcpu->cpu; 173 cpu = vcpu->cpu;
174 if (cpus != NULL && cpu != -1 && cpu != me) 174
175 /* Set ->requests bit before we read ->mode */
176 smp_mb();
177
178 if (cpus != NULL && cpu != -1 && cpu != me &&
179 kvm_vcpu_exiting_guest_mode(vcpu) != OUTSIDE_GUEST_MODE)
175 cpumask_set_cpu(cpu, cpus); 180 cpumask_set_cpu(cpu, cpus);
176 } 181 }
177 if (unlikely(cpus == NULL)) 182 if (unlikely(cpus == NULL))