]> git.karo-electronics.de Git - mv-sheeva.git/blobdiff - virt/kvm/ioapic.c
Merge tag 'stable/for-linus-3.4-tag-two' of git://git.kernel.org/pub/scm/linux/kernel...
[mv-sheeva.git] / virt / kvm / ioapic.c
index 3eed61eb48675a63dd1f31b0095217ab6bc5f646..dcaf272c26c0e232d01b265e652488642e7cc496 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);
@@ -332,9 +332,18 @@ static int ioapic_mmio_write(struct kvm_io_device *this, gpa_t addr, int len,
                     (void*)addr, len, val);
        ASSERT(!(addr & 0xf));  /* check alignment */
 
-       if (len == 4 || len == 8)
+       switch (len) {
+       case 8:
+       case 4:
                data = *(u32 *) val;
-       else {
+               break;
+       case 2:
+               data = *(u16 *) val;
+               break;
+       case 1:
+               data = *(u8  *) val;
+               break;
+       default:
                printk(KERN_WARNING "ioapic: Unsupported size %d\n", len);
                return 0;
        }
@@ -343,7 +352,7 @@ static int ioapic_mmio_write(struct kvm_io_device *this, gpa_t addr, int len,
        spin_lock(&ioapic->lock);
        switch (addr) {
        case IOAPIC_REG_SELECT:
-               ioapic->ioregsel = data;
+               ioapic->ioregsel = data & 0xFF; /* 8-bit register */
                break;
 
        case IOAPIC_REG_WINDOW: