KVM: drop bsp_vcpu pointer from kvm struct
Gleb Natapov [Thu, 15 Dec 2011 10:38:40 +0000 (12:38 +0200)]
Drop bsp_vcpu pointer from kvm struct since its only use is incorrect
anyway.

Signed-off-by: Gleb Natapov <gleb@redhat.com>
Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>

arch/x86/kvm/i8259.c
include/linux/kvm_host.h
virt/kvm/ioapic.c
virt/kvm/kvm_main.c

index cac4746..b6a7353 100644 (file)
@@ -262,9 +262,10 @@ int kvm_pic_read_irq(struct kvm *kvm)
 
 void kvm_pic_reset(struct kvm_kpic_state *s)
 {
-       int irq;
-       struct kvm_vcpu *vcpu0 = s->pics_state->kvm->bsp_vcpu;
+       int irq, i;
+       struct kvm_vcpu *vcpu;
        u8 irr = s->irr, isr = s->imr;
+       bool found = false;
 
        s->last_irr = 0;
        s->irr = 0;
@@ -281,12 +282,19 @@ void kvm_pic_reset(struct kvm_kpic_state *s)
        s->special_fully_nested_mode = 0;
        s->init4 = 0;
 
-       for (irq = 0; irq < PIC_NUM_PINS/2; irq++) {
-               if (vcpu0 && kvm_apic_accept_pic_intr(vcpu0))
-                       if (irr & (1 << irq) || isr & (1 << irq)) {
-                               pic_clear_isr(s, irq);
-                       }
-       }
+       kvm_for_each_vcpu(i, vcpu, s->pics_state->kvm)
+               if (kvm_apic_accept_pic_intr(vcpu)) {
+                       found = true;
+                       break;
+               }
+
+
+       if (!found)
+               return;
+
+       for (irq = 0; irq < PIC_NUM_PINS/2; irq++)
+               if (irr & (1 << irq) || isr & (1 << irq))
+                       pic_clear_isr(s, irq);
 }
 
 static void pic_ioport_write(void *opaque, u32 addr, u32 val)
index 8c5c303..7a08038 100644 (file)
@@ -251,7 +251,6 @@ struct kvm {
        struct srcu_struct srcu;
 #ifdef CONFIG_KVM_APIC_ARCHITECTURE
        u32 bsp_vcpu_id;
-       struct kvm_vcpu *bsp_vcpu;
 #endif
        struct kvm_vcpu *vcpus[KVM_MAX_VCPUS];
        atomic_t online_vcpus;
index 71e2253..dcaf272 100644 (file)
@@ -185,7 +185,7 @@ static int ioapic_deliver(struct kvm_ioapic *ioapic, int irq)
                irqe.dest_mode = 0; /* Physical mode. */
                /* need to read apic_id from apic regiest since
                 * it can be rewritten */
-               irqe.dest_id = ioapic->kvm->bsp_vcpu->vcpu_id;
+               irqe.dest_id = ioapic->kvm->bsp_vcpu_id;
        }
 #endif
        return kvm_irq_delivery_to_apic(ioapic->kvm, NULL, &irqe);
index d8bac07..0835c4b 100644 (file)
@@ -1743,10 +1743,6 @@ static int kvm_vm_ioctl_create_vcpu(struct kvm *kvm, u32 id)
        smp_wmb();
        atomic_inc(&kvm->online_vcpus);
 
-#ifdef CONFIG_KVM_APIC_ARCHITECTURE
-       if (kvm->bsp_vcpu_id == id)
-               kvm->bsp_vcpu = vcpu;
-#endif
        mutex_unlock(&kvm->lock);
        return r;