From 5dc5389f4ed26f64417f76e19ddf7d6d4c18566b Mon Sep 17 00:00:00 2001 From: Julian Stecklina Date: Wed, 23 Nov 2011 13:54:30 +0100 Subject: [PATCH] --- yaml --- r: 282027 b: refs/heads/master c: d77fe6354d5b67f4d4eb62a47621da2b3ee3539e h: refs/heads/master i: 282025: 7555a77c867c7d44e3566ab1b8f36bdd5c423587 282023: 6bd597b0829d017946466c612cb9db7060a784b8 v: v3 --- [refs] | 2 +- trunk/virt/kvm/ioapic.c | 15 ++++++++++++--- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/[refs] b/[refs] index d64c29cc31b9..012a12984fc5 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 60f9a9ef5492cae66aca2ad9873360161320d5af +refs/heads/master: d77fe6354d5b67f4d4eb62a47621da2b3ee3539e diff --git a/trunk/virt/kvm/ioapic.c b/trunk/virt/kvm/ioapic.c index 3eed61eb4867..71e2253edee7 100644 --- a/trunk/virt/kvm/ioapic.c +++ b/trunk/virt/kvm/ioapic.c @@ -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: