From: Stefan Weil Date: Wed, 23 Nov 2011 21:20:30 +0000 (+0100) Subject: eepro100: Fix alignment requirement for statistical counters X-Git-Tag: qemu-xen-4.2.0~87 X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=c16ada980f439c414eac83d184ac9fb66ed60cc0;p=qemu-upstream-4.2-testing.git eepro100: Fix alignment requirement for statistical counters According to Intel's Open Source Software Developer Manual, the dump counters address must be Dword aligned. The new code enforces this alignment, so s->statsaddr may now be used with stw_le_pci_dma() and stl_le_pci_dma(). Signed-off-by: Stefan Weil Signed-off-by: Anthony Liguori --- diff --git a/hw/eepro100.c b/hw/eepro100.c index 7d59e7136..29ec5b44f 100644 --- a/hw/eepro100.c +++ b/hw/eepro100.c @@ -976,7 +976,15 @@ static void eepro100_cu_command(EEPRO100State * s, uint8_t val) case CU_STATSADDR: /* Load dump counters address. */ s->statsaddr = e100_read_reg4(s, SCBPointer); - TRACE(OTHER, logout("val=0x%02x (status address)\n", val)); + TRACE(OTHER, logout("val=0x%02x (dump counters address)\n", val)); + if (s->statsaddr & 3) { + /* Memory must be Dword aligned. */ + logout("unaligned dump counters address\n"); + /* Handling of misaligned addresses is undefined. + * Here we align the address by ignoring the lower bits. */ + /* TODO: Test unaligned dump counter address on real hardware. */ + s->statsaddr &= ~3; + } break; case CU_SHOWSTATS: /* Dump statistical counters. */