]> err.no Git - linux-2.6/blobdiff - arch/x86/kvm/lapic.c
KVM: x86 emulator: simplify r/m decoding
[linux-2.6] / arch / x86 / kvm / lapic.c
index e48d19394031ebfe48657ca1e84cf9a6af7d008c..73f43de69f676b9a784de04b4a7b5dbd43ecc3b1 100644 (file)
@@ -785,7 +785,8 @@ static void apic_mmio_write(struct kvm_io_device *this,
 
 }
 
-static int apic_mmio_range(struct kvm_io_device *this, gpa_t addr)
+static int apic_mmio_range(struct kvm_io_device *this, gpa_t addr,
+                          int len, int size)
 {
        struct kvm_lapic *apic = (struct kvm_lapic *)this->private;
        int ret = 0;
@@ -944,8 +945,8 @@ static int __apic_timer_fn(struct kvm_lapic *apic)
        int result = 0;
        wait_queue_head_t *q = &apic->vcpu->wq;
 
-       atomic_inc(&apic->timer.pending);
-       set_bit(KVM_REQ_PENDING_TIMER, &apic->vcpu->requests);
+       if(!atomic_inc_and_test(&apic->timer.pending))
+               set_bit(KVM_REQ_PENDING_TIMER, &apic->vcpu->requests);
        if (waitqueue_active(q)) {
                apic->vcpu->arch.mp_state = KVM_MP_STATE_RUNNABLE;
                wake_up_interruptible(q);