accel/kvm: Use target_needs_bswap()

Check whether we need to swap at runtime using
target_needs_bswap().

Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Message-Id: <20250417131004.47205-3-philmd@linaro.org>
This commit is contained in:
Philippe Mathieu-Daudé 2025-04-17 10:37:53 +02:00
parent 4e442406fd
commit 56f8fb6886

View file

@ -33,6 +33,7 @@
#include "system/cpus.h" #include "system/cpus.h"
#include "system/accel-blocker.h" #include "system/accel-blocker.h"
#include "qemu/bswap.h" #include "qemu/bswap.h"
#include "exec/tswap.h"
#include "system/memory.h" #include "system/memory.h"
#include "system/ram_addr.h" #include "system/ram_addr.h"
#include "qemu/event_notifier.h" #include "qemu/event_notifier.h"
@ -1318,21 +1319,22 @@ bool kvm_hwpoisoned_mem(void)
static uint32_t adjust_ioeventfd_endianness(uint32_t val, uint32_t size) static uint32_t adjust_ioeventfd_endianness(uint32_t val, uint32_t size)
{ {
#if HOST_BIG_ENDIAN != TARGET_BIG_ENDIAN if (target_needs_bswap()) {
/* The kernel expects ioeventfd values in HOST_BIG_ENDIAN /*
* endianness, but the memory core hands them in target endianness. * The kernel expects ioeventfd values in HOST_BIG_ENDIAN
* For example, PPC is always treated as big-endian even if running * endianness, but the memory core hands them in target endianness.
* on KVM and on PPC64LE. Correct here. * For example, PPC is always treated as big-endian even if running
*/ * on KVM and on PPC64LE. Correct here, swapping back.
switch (size) { */
case 2: switch (size) {
val = bswap16(val); case 2:
break; val = bswap16(val);
case 4: break;
val = bswap32(val); case 4:
break; val = bswap32(val);
break;
}
} }
#endif
return val; return val;
} }