Re: [PATCH-for-10.1 v7 5/8] qemu: Convert target_words_bigendian() to TargetInfo API
On 8/7/25 22:51, Philippe Mathieu-Daudé wrote: On 8/7/25 19:39, Richard Henderson wrote: On 7/8/25 11:19, Philippe Mathieu-Daudé wrote: -/** - * target_big_endian: - * Returns true if the (default) endianness of the target is big endian, - * false otherwise. Common code should normally never need to know about the - * endianness of the target, so please do *not* use this function unless you - * know very well what you are doing! - */ ... +/** + * target_big_endian: + * + * Returns: %true if the (default) endianness of the target is big endian, + * %false otherwise. + */ +bool target_big_endian(void); Perhaps retain the warning about not using this unless necessary. This is what I did in a previous version, but Thomas (or Pierrick?) said something about this method now being safe, so the comment obsolete. Bah I'm mixing various conversations, what Pierrick said is different: https://lore.kernel.org/qemu-devel/[email protected]/ I told Pierrick this method doesn't make sense to me in a heterogeneous context, he said to not make change with the current behavior, when run on a vCPU we'll eventually infer via TargetInfo on the vCPU TLS area, and otherwise (I/O thread) this method shouldn't be called so we should abort. Such change LGTM. I can start updating the documentation mentioning "the (default) endianness of the current vCPU." Currently on I/O thread this is the endianness of the binary. Reviewed-by: Richard Henderson r~
Re: [PATCH-for-10.1 v7 5/8] qemu: Convert target_words_bigendian() to TargetInfo API
On 8/7/25 19:39, Richard Henderson wrote: On 7/8/25 11:19, Philippe Mathieu-Daudé wrote: -/** - * target_big_endian: - * Returns true if the (default) endianness of the target is big endian, - * false otherwise. Common code should normally never need to know about the - * endianness of the target, so please do *not* use this function unless you - * know very well what you are doing! - */ ... +/** + * target_big_endian: + * + * Returns: %true if the (default) endianness of the target is big endian, + * %false otherwise. + */ +bool target_big_endian(void); Perhaps retain the warning about not using this unless necessary. This is what I did in a previous version, but Thomas (or Pierrick?) said something about this method now being safe, so the comment obsolete. I told Pierrick this method doesn't make sense to me in a heterogeneous context, he said to not make change with the current behavior, when run on a vCPU we'll eventually infer via TargetInfo on the vCPU TLS area, and otherwise (I/O thread) this method shouldn't be called so we should abort. Such change LGTM. I can start updating the documentation mentioning "the (default) endianness of the current vCPU." Currently on I/O thread this is the endianness of the binary. Reviewed-by: Richard Henderson r~
Re: [PATCH-for-10.1 v7 5/8] qemu: Convert target_words_bigendian() to TargetInfo API
On 7/8/25 10:19 AM, Philippe Mathieu-Daudé wrote: Reviewed-by: Pierrick Bouvier Signed-off-by: Philippe Mathieu-Daudé --- include/exec/tswap.h | 13 + include/qemu/target-info.h | 8 cpu-target.c | 7 --- hw/core/cpu-system.c | 2 +- hw/display/vga.c | 2 +- hw/virtio/virtio.c | 2 +- system/memory.c| 1 + system/qtest.c | 1 + target-info.c | 5 + 9 files changed, 19 insertions(+), 22 deletions(-) Reviewed-by: Pierrick Bouvier
[PATCH-for-10.1 v7 5/8] qemu: Convert target_words_bigendian() to TargetInfo API
Reviewed-by: Pierrick Bouvier
Signed-off-by: Philippe Mathieu-Daudé
---
include/exec/tswap.h | 13 +
include/qemu/target-info.h | 8
cpu-target.c | 7 ---
hw/core/cpu-system.c | 2 +-
hw/display/vga.c | 2 +-
hw/virtio/virtio.c | 2 +-
system/memory.c| 1 +
system/qtest.c | 1 +
target-info.c | 5 +
9 files changed, 19 insertions(+), 22 deletions(-)
diff --git a/include/exec/tswap.h b/include/exec/tswap.h
index 49511f26117..55ffa633598 100644
--- a/include/exec/tswap.h
+++ b/include/exec/tswap.h
@@ -9,18 +9,7 @@
#define TSWAP_H
#include "qemu/bswap.h"
-
-/**
- * target_big_endian:
- * Returns true if the (default) endianness of the target is big endian,
- * false otherwise. Common code should normally never need to know about the
- * endianness of the target, so please do *not* use this function unless you
- * know very well what you are doing!
- */
-bool target_big_endian(void);
-#ifdef COMPILING_PER_TARGET
-#define target_big_endian() TARGET_BIG_ENDIAN
-#endif
+#include "qemu/target-info.h"
/*
* If we're in target-specific code, we can hard-code the swapping
diff --git a/include/qemu/target-info.h b/include/qemu/target-info.h
index dde0e7d968a..18a8c4ff6e8 100644
--- a/include/qemu/target-info.h
+++ b/include/qemu/target-info.h
@@ -38,4 +38,12 @@ const char *target_machine_typename(void);
*/
const char *target_cpu_type(void);
+/**
+ * target_big_endian:
+ *
+ * Returns: %true if the (default) endianness of the target is big endian,
+ * %false otherwise.
+ */
+bool target_big_endian(void);
+
#endif
diff --git a/cpu-target.c b/cpu-target.c
index 1c90a307593..20db5ff3108 100644
--- a/cpu-target.c
+++ b/cpu-target.c
@@ -22,7 +22,6 @@
#include "system/accel-ops.h"
#include "system/cpus.h"
#include "exec/cpu-common.h"
-#include "exec/tswap.h"
#include "exec/replay-core.h"
#include "exec/log.h"
#include "hw/core/cpu.h"
@@ -85,9 +84,3 @@ void cpu_abort(CPUState *cpu, const char *fmt, ...)
#endif
abort();
}
-
-#undef target_big_endian
-bool target_big_endian(void)
-{
-return TARGET_BIG_ENDIAN;
-}
diff --git a/hw/core/cpu-system.c b/hw/core/cpu-system.c
index 3c84176a0c5..a975405d3a0 100644
--- a/hw/core/cpu-system.c
+++ b/hw/core/cpu-system.c
@@ -24,7 +24,7 @@
#include "exec/cputlb.h"
#include "system/memory.h"
#include "exec/tb-flush.h"
-#include "exec/tswap.h"
+#include "qemu/target-info.h"
#include "hw/qdev-core.h"
#include "hw/qdev-properties.h"
#include "hw/core/sysemu-cpu-ops.h"
diff --git a/hw/display/vga.c b/hw/display/vga.c
index 20475ebbd31..90b89cf4044 100644
--- a/hw/display/vga.c
+++ b/hw/display/vga.c
@@ -26,7 +26,7 @@
#include "qemu/units.h"
#include "system/reset.h"
#include "qapi/error.h"
-#include "exec/tswap.h"
+#include "qemu/target-info.h"
#include "hw/display/vga.h"
#include "hw/i386/x86.h"
#include "hw/pci/pci.h"
diff --git a/hw/virtio/virtio.c b/hw/virtio/virtio.c
index 82a285a31d1..0f4d28033d7 100644
--- a/hw/virtio/virtio.c
+++ b/hw/virtio/virtio.c
@@ -20,7 +20,7 @@
#include "qemu/log.h"
#include "qemu/main-loop.h"
#include "qemu/module.h"
-#include "exec/tswap.h"
+#include "qemu/target-info.h"
#include "qom/object_interfaces.h"
#include "hw/core/cpu.h"
#include "hw/virtio/virtio.h"
diff --git a/system/memory.c b/system/memory.c
index e8d9b15b28f..38da62f5052 100644
--- a/system/memory.c
+++ b/system/memory.c
@@ -22,6 +22,7 @@
#include "qemu/error-report.h"
#include "qemu/main-loop.h"
#include "qemu/qemu-print.h"
+#include "qemu/target-info.h"
#include "qom/object.h"
#include "trace.h"
#include "system/ram_addr.h"
diff --git a/system/qtest.c b/system/qtest.c
index 301b03be2d3..fa42c9f9215 100644
--- a/system/qtest.c
+++ b/system/qtest.c
@@ -29,6 +29,7 @@
#include "qemu/error-report.h"
#include "qemu/module.h"
#include "qemu/cutils.h"
+#include "qemu/target-info.h"
#include "qom/object_interfaces.h"
#define MAX_IRQ 256
diff --git a/target-info.c b/target-info.c
index a756c0714c4..3110ab32f75 100644
--- a/target-info.c
+++ b/target-info.c
@@ -47,3 +47,8 @@ EndianMode target_endian_mode(void)
{
return target_info()->endianness;
}
+
+bool target_big_endian(void)
+{
+return target_endian_mode() == ENDIAN_MODE_BIG;
+}
--
2.49.0
Re: [PATCH-for-10.1 v7 5/8] qemu: Convert target_words_bigendian() to TargetInfo API
On 7/8/25 11:19, Philippe Mathieu-Daudé wrote: -/** - * target_big_endian: - * Returns true if the (default) endianness of the target is big endian, - * false otherwise. Common code should normally never need to know about the - * endianness of the target, so please do *not* use this function unless you - * know very well what you are doing! - */ ... +/** + * target_big_endian: + * + * Returns: %true if the (default) endianness of the target is big endian, + * %false otherwise. + */ +bool target_big_endian(void); Perhaps retain the warning about not using this unless necessary. Reviewed-by: Richard Henderson r~
