On Tue, Jul 13, 2021 at 07:43:59AM +0200, Klaus Jensen wrote: >From: Klaus Jensen > >The new PMR test unearthed a long-standing issue with MMIO reads on >big-endian hosts. > >Fix by using the ldn_he_p helper instead of memcpy. > >Cc: Gollu Appalanaidu >Reported-by: Peter Maydell >Signed-off-by: Klaus Jensen >--- > hw/nvme/ctrl.c | 14 +++++++------- > 1 file changed, 7 insertions(+), 7 deletions(-) > >diff --git a/hw/nvme/ctrl.c b/hw/nvme/ctrl.c >index 2f0524e12a36..dd81c3b19c7e 100644 >--- a/hw/nvme/ctrl.c >+++ b/hw/nvme/ctrl.c >@@ -5951,7 +5951,6 @@ static uint64_t nvme_mmio_read(void *opaque, hwaddr addr, unsigned size) > { > NvmeCtrl *n = (NvmeCtrl *)opaque; > uint8_t *ptr = (uint8_t *)&n->bar; >- uint64_t val = 0; > > trace_pci_nvme_mmio_read(addr, size); > >@@ -5977,14 +5976,15 @@ static uint64_t nvme_mmio_read(void *opaque, hwaddr addr, unsigned size) > (NVME_PMRCAP_PMRWBM(n->bar.pmrcap) & 0x02)) { > memory_region_msync(&n->pmr.dev->mr, 0, n->pmr.dev->size); > } >- memcpy(&val, ptr + addr, size); >- } else { >- NVME_GUEST_ERR(pci_nvme_ub_mmiord_invalid_ofs, >- "MMIO read beyond last register," >- " offset=0x%"PRIx64", returning 0", addr); >+ >+ return ldn_he_p(ptr + addr, size); > } > >- return val; >+ NVME_GUEST_ERR(pci_nvme_ub_mmiord_invalid_ofs, >+ "MMIO read beyond last register," >+ " offset=0x%"PRIx64", returning 0", addr); >+ >+ return 0; > } > > static void nvme_process_db(NvmeCtrl *n, hwaddr addr, int val) >-- >2.32.0 > > LGTM. Reviewed-by: Gollu Appalanaidu