Re: [PATCH 2/8] accel/kvm: Use target_needs_bswap()

2025-04-18 Thread Richard Henderson

On 4/17/25 06:09, Philippe Mathieu-Daudé wrote:

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

Signed-off-by: Philippe Mathieu-Daudé
---
  accel/kvm/kvm-all.c | 29 +++--
  1 file changed, 15 insertions(+), 14 deletions(-)


Reviewed-by: Richard Henderson 

r~



[PATCH 2/8] accel/kvm: Use target_needs_bswap()

2025-04-17 Thread Philippe Mathieu-Daudé
Check whether we need to swap at runtime using
target_needs_bswap().

Signed-off-by: Philippe Mathieu-Daudé 
---
 accel/kvm/kvm-all.c | 29 +++--
 1 file changed, 15 insertions(+), 14 deletions(-)

diff --git a/accel/kvm/kvm-all.c b/accel/kvm/kvm-all.c
index 7c5d1a98bc4..28a32afb209 100644
--- a/accel/kvm/kvm-all.c
+++ b/accel/kvm/kvm-all.c
@@ -33,6 +33,7 @@
 #include "system/cpus.h"
 #include "system/accel-blocker.h"
 #include "qemu/bswap.h"
+#include "exec/tswap.h"
 #include "system/memory.h"
 #include "system/ram_addr.h"
 #include "qemu/event_notifier.h"
@@ -1319,21 +1320,21 @@ bool kvm_hwpoisoned_mem(void)
 
 static uint32_t adjust_ioeventfd_endianness(uint32_t val, uint32_t size)
 {
-#if HOST_BIG_ENDIAN != TARGET_BIG_ENDIAN
-/* The kernel expects ioeventfd values in HOST_BIG_ENDIAN
- * endianness, but the memory core hands them in target endianness.
- * For example, PPC is always treated as big-endian even if running
- * on KVM and on PPC64LE.  Correct here.
- */
-switch (size) {
-case 2:
-val = bswap16(val);
-break;
-case 4:
-val = bswap32(val);
-break;
+if (target_needs_bswap()) {
+/* The kernel expects ioeventfd values in HOST_BIG_ENDIAN
+ * endianness, but the memory core hands them in target endianness.
+ * 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:
+val = bswap16(val);
+break;
+case 4:
+val = bswap32(val);
+break;
+}
 }
-#endif
 return val;
 }
 
-- 
2.47.1