[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 009/102] ivshmem.c: change endianness to LITTLE_ENDIAN
From: |
Cédric Le Goater |
Subject: |
[PULL 009/102] ivshmem.c: change endianness to LITTLE_ENDIAN |
Date: |
Wed, 15 Dec 2021 17:57:14 +0100 |
From: Daniel Henrique Barboza <danielhb413@gmail.com>
The ivshmem device, as with most PCI devices, uses little endian byte
order. However, the endianness of its mmio_ops is marked as
DEVICE_NATIVE_ENDIAN. This presents not only the usual problems with big
endian hosts but also with PowerPC little endian hosts as well, since
the Power architecture in QEMU uses big endian hardware (XIVE controller,
PCI Host Bridges, etc) even if the host is in little endian byte order.
As it is today, the IVPosition of the device will be byte swapped when
running in Power BE and LE. This can be seen by changing the existing
qtest 'ivshmem-test' to run in ppc64 hosts and printing the IVPOSITION
regs in test_ivshmem_server() right after the VM ids assert. For x86_64
the VM id values read are '0' and '1', for ppc64 (tested in a Power8
RHEL 7.9 BE server) and ppc64le (tested in a Power9 RHEL 8.6 LE server)
the ids will be '0' and '0x1000000'.
Change this device to LITTLE_ENDIAN fixes the issue for Power hosts of
both endianness, and every other big-endian architecture that might use
this device, without impacting x86 users.
Fixes: cb06608e17f8 ("ivshmem: convert to memory API")
Resolves: https://gitlab.com/qemu-project/qemu/-/issues/168
Signed-off-by: Daniel Henrique Barboza <danielhb413@gmail.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Message-Id: <20211124092948.335389-2-danielhb413@gmail.com>
Signed-off-by: Cédric Le Goater <clg@kaod.org>
---
hw/misc/ivshmem.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/hw/misc/ivshmem.c b/hw/misc/ivshmem.c
index 1ba4a98377c6..299837e5c13f 100644
--- a/hw/misc/ivshmem.c
+++ b/hw/misc/ivshmem.c
@@ -243,7 +243,7 @@ static uint64_t ivshmem_io_read(void *opaque, hwaddr addr,
static const MemoryRegionOps ivshmem_mmio_ops = {
.read = ivshmem_io_read,
.write = ivshmem_io_write,
- .endianness = DEVICE_NATIVE_ENDIAN,
+ .endianness = DEVICE_LITTLE_ENDIAN,
.impl = {
.min_access_size = 4,
.max_access_size = 4,
--
2.31.1
- [PULL 000/102] ppc queue, Cédric Le Goater, 2021/12/15
- [PULL 005/102] target/ppc: ppc_store_fpscr doesn't update bits 0 to 28 and 52, Cédric Le Goater, 2021/12/15
- [PULL 001/102] pseries: Update SLOF firmware image, Cédric Le Goater, 2021/12/15
- [PULL 002/102] hw/ppc/mac.h: Remove MAX_CPUS macro, Cédric Le Goater, 2021/12/15
- [PULL 003/102] target/ppc: Fixed call to deferred exception, Cédric Le Goater, 2021/12/15
- [PULL 006/102] target/ppc: Implement Vector Expand Mask, Cédric Le Goater, 2021/12/15
- [PULL 007/102] target/ppc: Implement Vector Extract Mask, Cédric Le Goater, 2021/12/15
- [PULL 009/102] ivshmem.c: change endianness to LITTLE_ENDIAN,
Cédric Le Goater <=
- [PULL 004/102] test/tcg/ppc64le: test mtfsf, Cédric Le Goater, 2021/12/15
- [PULL 008/102] target/ppc: Implement Vector Mask Move insns, Cédric Le Goater, 2021/12/15
- [PULL 010/102] ivshmem-test.c: enable test_ivshmem_server for ppc64 arch, Cédric Le Goater, 2021/12/15
- [PULL 011/102] pci-host: Allow extended config space access for PowerNV PHB4 model, Cédric Le Goater, 2021/12/15
- [PULL 012/102] docs: Minor updates on the powernv documentation., Cédric Le Goater, 2021/12/15
- [PULL 013/102] ppc/pnv.c: add a friendly warning when accel=kvm is used, Cédric Le Goater, 2021/12/15
- [PULL 013/102] ppc/pnv.c: add a friendly warning when accel=kvm is used, Cédric Le Goater, 2021/12/15