On 8/7/19 1:33 AM, tony.ngu...@bt.com wrote: > @@ -551,6 +551,7 @@ void virtio_address_space_write(VirtIOPCIProxy *proxy, > hwaddr addr, > /* As length is under guest control, handle illegal values. */ > return; > } > + /* FIXME: memory_region_dispatch_write ignores MO_BSWAP. */ > memory_region_dispatch_write(mr, addr, val, size_memop(len), > MEMTXATTRS_UNSPECIFIED); > }
Here is an example of where Paolo is quite right -- you cannot simply add MO_TE via size_memop(). In patch 22 we see > @@ -542,16 +542,15 @@ void virtio_address_space_write(VirtIOPCIProxy *proxy, > hwaddr addr, > val = pci_get_byte(buf); > break; > case 2: > - val = cpu_to_le16(pci_get_word(buf)); > + val = pci_get_word(buf); > break; > case 4: > - val = cpu_to_le32(pci_get_long(buf)); > + val = pci_get_long(buf); > break; > default: > /* As length is under guest control, handle illegal values. */ > return; > } > - /* FIXME: memory_region_dispatch_write ignores MO_BSWAP. */ > memory_region_dispatch_write(mr, addr, val, size_memop(len), > MEMTXATTRS_UNSPECIFIED); This is a little-endian store -- MO_LE not MO_TE. r~