Skip to content

Commit

Permalink
KVM: Allow aligned byte and word writes to IOAPIC registers.
Browse files Browse the repository at this point in the history
This fixes byte accesses to IOAPIC_REG_SELECT as mandated by at least the
ICH10 and Intel Series 5 chipset specs. It also makes ioapic_mmio_write
consistent with ioapic_mmio_read, which also allows byte and word accesses.

Signed-off-by: Julian Stecklina <[email protected]>
Signed-off-by: Avi Kivity <[email protected]>
  • Loading branch information
blitz authored and avikivity committed Dec 27, 2011
1 parent 60f9a9e commit d77fe63
Showing 1 changed file with 12 additions and 3 deletions.
15 changes: 12 additions & 3 deletions virt/kvm/ioapic.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
Expand All @@ -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:
Expand Down

0 comments on commit d77fe63

Please sign in to comment.