aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/kvm/x86.c
diff options
context:
space:
mode:
authorAvi Kivity <avi@redhat.com>2010-05-10 05:34:53 -0400
committerAvi Kivity <avi@redhat.com>2010-08-01 03:47:05 -0400
commita8eeb04a44dd6dc4c8158953d9bae48849c9a188 (patch)
tree70274957d251afb17c8aaf660363795b44bf993f /arch/x86/kvm/x86.c
parent36633f32ba4c238403d19584754b30fe469d6dcb (diff)
KVM: Add mini-API for vcpu->requests
Makes it a little more readable and hackable. Signed-off-by: Avi Kivity <avi@redhat.com>
Diffstat (limited to 'arch/x86/kvm/x86.c')
-rw-r--r--arch/x86/kvm/x86.c27
1 files changed, 13 insertions, 14 deletions
diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
index 9be6e4e5e8ee..7ef44107a14a 100644
--- a/arch/x86/kvm/x86.c
+++ b/arch/x86/kvm/x86.c
@@ -296,7 +296,7 @@ static void kvm_multiple_exception(struct kvm_vcpu *vcpu,
296 prev_nr = vcpu->arch.exception.nr; 296 prev_nr = vcpu->arch.exception.nr;
297 if (prev_nr == DF_VECTOR) { 297 if (prev_nr == DF_VECTOR) {
298 /* triple fault -> shutdown */ 298 /* triple fault -> shutdown */
299 set_bit(KVM_REQ_TRIPLE_FAULT, &vcpu->requests); 299 kvm_make_request(KVM_REQ_TRIPLE_FAULT, vcpu);
300 return; 300 return;
301 } 301 }
302 class1 = exception_class(prev_nr); 302 class1 = exception_class(prev_nr);
@@ -948,7 +948,7 @@ static int kvm_request_guest_time_update(struct kvm_vcpu *v)
948 948
949 if (!vcpu->time_page) 949 if (!vcpu->time_page)
950 return 0; 950 return 0;
951 set_bit(KVM_REQ_KVMCLOCK_UPDATE, &v->requests); 951 kvm_make_request(KVM_REQ_KVMCLOCK_UPDATE, v);
952 return 1; 952 return 1;
953} 953}
954 954
@@ -2253,7 +2253,7 @@ static int kvm_vcpu_ioctl_x86_set_mce(struct kvm_vcpu *vcpu,
2253 printk(KERN_DEBUG "kvm: set_mce: " 2253 printk(KERN_DEBUG "kvm: set_mce: "
2254 "injects mce exception while " 2254 "injects mce exception while "
2255 "previous one is in progress!\n"); 2255 "previous one is in progress!\n");
2256 set_bit(KVM_REQ_TRIPLE_FAULT, &vcpu->requests); 2256 kvm_make_request(KVM_REQ_TRIPLE_FAULT, vcpu);
2257 return 0; 2257 return 0;
2258 } 2258 }
2259 if (banks[1] & MCI_STATUS_VAL) 2259 if (banks[1] & MCI_STATUS_VAL)
@@ -4617,7 +4617,7 @@ static int vcpu_enter_guest(struct kvm_vcpu *vcpu)
4617 vcpu->run->request_interrupt_window; 4617 vcpu->run->request_interrupt_window;
4618 4618
4619 if (vcpu->requests) 4619 if (vcpu->requests)
4620 if (test_and_clear_bit(KVM_REQ_MMU_RELOAD, &vcpu->requests)) 4620 if (kvm_check_request(KVM_REQ_MMU_RELOAD, vcpu))
4621 kvm_mmu_unload(vcpu); 4621 kvm_mmu_unload(vcpu);
4622 4622
4623 r = kvm_mmu_reload(vcpu); 4623 r = kvm_mmu_reload(vcpu);
@@ -4625,26 +4625,25 @@ static int vcpu_enter_guest(struct kvm_vcpu *vcpu)
4625 goto out; 4625 goto out;
4626 4626
4627 if (vcpu->requests) { 4627 if (vcpu->requests) {
4628 if (test_and_clear_bit(KVM_REQ_MIGRATE_TIMER, &vcpu->requests)) 4628 if (kvm_check_request(KVM_REQ_MIGRATE_TIMER, vcpu))
4629 __kvm_migrate_timers(vcpu); 4629 __kvm_migrate_timers(vcpu);
4630 if (test_and_clear_bit(KVM_REQ_KVMCLOCK_UPDATE, &vcpu->requests)) 4630 if (kvm_check_request(KVM_REQ_KVMCLOCK_UPDATE, vcpu))
4631 kvm_write_guest_time(vcpu); 4631 kvm_write_guest_time(vcpu);
4632 if (test_and_clear_bit(KVM_REQ_MMU_SYNC, &vcpu->requests)) 4632 if (kvm_check_request(KVM_REQ_MMU_SYNC, vcpu))
4633 kvm_mmu_sync_roots(vcpu); 4633 kvm_mmu_sync_roots(vcpu);
4634 if (test_and_clear_bit(KVM_REQ_TLB_FLUSH, &vcpu->requests)) 4634 if (kvm_check_request(KVM_REQ_TLB_FLUSH, vcpu))
4635 kvm_x86_ops->tlb_flush(vcpu); 4635 kvm_x86_ops->tlb_flush(vcpu);
4636 if (test_and_clear_bit(KVM_REQ_REPORT_TPR_ACCESS, 4636 if (kvm_check_request(KVM_REQ_REPORT_TPR_ACCESS, vcpu)) {
4637 &vcpu->requests)) {
4638 vcpu->run->exit_reason = KVM_EXIT_TPR_ACCESS; 4637 vcpu->run->exit_reason = KVM_EXIT_TPR_ACCESS;
4639 r = 0; 4638 r = 0;
4640 goto out; 4639 goto out;
4641 } 4640 }
4642 if (test_and_clear_bit(KVM_REQ_TRIPLE_FAULT, &vcpu->requests)) { 4641 if (kvm_check_request(KVM_REQ_TRIPLE_FAULT, vcpu)) {
4643 vcpu->run->exit_reason = KVM_EXIT_SHUTDOWN; 4642 vcpu->run->exit_reason = KVM_EXIT_SHUTDOWN;
4644 r = 0; 4643 r = 0;
4645 goto out; 4644 goto out;
4646 } 4645 }
4647 if (test_and_clear_bit(KVM_REQ_DEACTIVATE_FPU, &vcpu->requests)) { 4646 if (kvm_check_request(KVM_REQ_DEACTIVATE_FPU, vcpu)) {
4648 vcpu->fpu_active = 0; 4647 vcpu->fpu_active = 0;
4649 kvm_x86_ops->fpu_deactivate(vcpu); 4648 kvm_x86_ops->fpu_deactivate(vcpu);
4650 } 4649 }
@@ -4773,7 +4772,7 @@ static int __vcpu_run(struct kvm_vcpu *vcpu)
4773 srcu_read_unlock(&kvm->srcu, vcpu->srcu_idx); 4772 srcu_read_unlock(&kvm->srcu, vcpu->srcu_idx);
4774 kvm_vcpu_block(vcpu); 4773 kvm_vcpu_block(vcpu);
4775 vcpu->srcu_idx = srcu_read_lock(&kvm->srcu); 4774 vcpu->srcu_idx = srcu_read_lock(&kvm->srcu);
4776 if (test_and_clear_bit(KVM_REQ_UNHALT, &vcpu->requests)) 4775 if (kvm_check_request(KVM_REQ_UNHALT, vcpu))
4777 { 4776 {
4778 switch(vcpu->arch.mp_state) { 4777 switch(vcpu->arch.mp_state) {
4779 case KVM_MP_STATE_HALTED: 4778 case KVM_MP_STATE_HALTED:
@@ -5255,7 +5254,7 @@ void kvm_put_guest_fpu(struct kvm_vcpu *vcpu)
5255 vcpu->guest_fpu_loaded = 0; 5254 vcpu->guest_fpu_loaded = 0;
5256 fpu_save_init(&vcpu->arch.guest_fpu); 5255 fpu_save_init(&vcpu->arch.guest_fpu);
5257 ++vcpu->stat.fpu_reload; 5256 ++vcpu->stat.fpu_reload;
5258 set_bit(KVM_REQ_DEACTIVATE_FPU, &vcpu->requests); 5257 kvm_make_request(KVM_REQ_DEACTIVATE_FPU, vcpu);
5259 trace_kvm_fpu(0); 5258 trace_kvm_fpu(0);
5260} 5259}
5261 5260