From: Paolo Bonzini Date: Thu, 22 Nov 2018 18:23:35 +0000 (+0100) Subject: nvme: fix CMB endianness confusion X-Git-Url: http://git.maquefel.me/?a=commitdiff_plain;h=71a86ddece548860f040d565204cf1bf59d74663;p=qemu.git nvme: fix CMB endianness confusion The CMB is marked as DEVICE_LITTLE_ENDIAN, so the data must be read/written as if it was little-endian output (in the case of big endian, we get two swaps, one in the memory core and one in nvme.c). Signed-off-by: Paolo Bonzini Tested-by: Peter Maydell Signed-off-by: Kevin Wolf --- diff --git a/hw/block/nvme.c b/hw/block/nvme.c index 84062d388f..01f3e853cf 100644 --- a/hw/block/nvme.c +++ b/hw/block/nvme.c @@ -1177,16 +1177,13 @@ static void nvme_cmb_write(void *opaque, hwaddr addr, uint64_t data, unsigned size) { NvmeCtrl *n = (NvmeCtrl *)opaque; - memcpy(&n->cmbuf[addr], &data, size); + stn_le_p(&n->cmbuf[addr], size, data); } static uint64_t nvme_cmb_read(void *opaque, hwaddr addr, unsigned size) { - uint64_t val; NvmeCtrl *n = (NvmeCtrl *)opaque; - - memcpy(&val, &n->cmbuf[addr], size); - return val; + return ldn_le_p(&n->cmbuf[addr], size); } static const MemoryRegionOps nvme_cmb_ops = {