On 19/05/2026 19.12, Philippe Mathieu-Daudé wrote:
We still build QEMU tools on 32-bit hosts (see commit
cf634dfcd8f), however no OS supported by QEMU still runs
on ESA/390 (Linux dropped support in release 4.1 in 2015).
Technically, the 64-bit Linux kernels on IBM Z still supported 32-bit
userspace until recently:
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=8e0b986c59c67e08ada646249f834655a9e6da16
... which got released with Linux v6.19. So there theoretically could still
be Linux distros around that use a 64-bit kernel with a 32-bit userspace.
Practically, I haven't seens such a setup in ages, so I think it is safe to
go ahead with this patch.
Thus:
Reviewed-by: Thomas Huth <[email protected]>
Remove the configure check, directly checking for the 64-bit
z/Architecture.
Also per commit 3704993f545 from 2020:
"we don't support s390, only 64-bit s390x hosts".
Signed-off-by: Philippe Mathieu-Daudé <[email protected]>
---
configure | 12 ++----------
include/qemu/cacheflush.h | 2 +-
include/qemu/timer.h | 2 +-
block/file-posix.c | 2 +-
disas/disas-host.c | 2 +-
util/cacheflush.c | 2 +-
6 files changed, 7 insertions(+), 15 deletions(-)
diff --git a/configure b/configure
index eea90306728..513ef7a153d 100755
--- a/configure
+++ b/configure
@@ -401,12 +401,8 @@ elif check_define _ARCH_PPC64 ; then
fi
elif check_define __mips64 ; then
cpu="mips64"
-elif check_define __s390__ ; then
- if check_define __s390x__ ; then
- cpu="s390x"
- else
- cpu="s390"
- fi
+elif check_define __s390x__ ; then
+ cpu="s390x"
elif check_define __riscv && check_define _LP64 ; then
cpu="riscv64"
elif check_define __aarch64__ ; then
@@ -469,10 +465,6 @@ case "$cpu" in
linux_arch=riscv
;;
- s390)
- linux_arch=s390
- CPU_CFLAGS="-m31"
- ;;
s390x)
host_arch=s390x
linux_arch=s390
diff --git a/include/qemu/cacheflush.h b/include/qemu/cacheflush.h
index 8c64b878145..0618966ddde 100644
--- a/include/qemu/cacheflush.h
+++ b/include/qemu/cacheflush.h
@@ -19,7 +19,7 @@
* mappings of the same physical page(s).
*/
-#if defined(__x86_64__) || defined(__s390__)
+#if defined(__x86_64__) || defined(__s390x__)
static inline void flush_idcache_range(uintptr_t rx, uintptr_t rw, size_t len)
{
diff --git a/include/qemu/timer.h b/include/qemu/timer.h
index b931181f53d..fc021f8f966 100644
--- a/include/qemu/timer.h
+++ b/include/qemu/timer.h
@@ -889,7 +889,7 @@ static inline int64_t cpu_get_host_ticks(void)
return val;
}
-#elif defined(__s390__)
+#elif defined(__s390x__)
static inline int64_t cpu_get_host_ticks(void)
{
diff --git a/block/file-posix.c b/block/file-posix.c
index e49b13d6abb..5019ddade9b 100644
--- a/block/file-posix.c
+++ b/block/file-posix.c
@@ -79,7 +79,7 @@
#include <linux/hdreg.h>
#include <linux/magic.h>
#include <scsi/sg.h>
-#ifdef __s390__
+#ifdef __s390x__
#include <asm/dasd.h>
#endif
#ifndef FS_NOCOW_FL
diff --git a/disas/disas-host.c b/disas/disas-host.c
index 7cf432938e0..d41235250a0 100644
--- a/disas/disas-host.c
+++ b/disas/disas-host.c
@@ -74,7 +74,7 @@ static void initialize_debug_host(CPUDebug *s)
s->info.print_insn = print_insn_little_mips;
#elif defined(__m68k__)
s->info.print_insn = print_insn_m68k;
-#elif defined(__s390__)
+#elif defined(__s390x__)
s->info.cap_arch = CS_ARCH_SYSZ;
s->info.cap_insn_unit = 2;
s->info.cap_insn_split = 6;
diff --git a/util/cacheflush.c b/util/cacheflush.c
index c043c5f881a..77440ddb478 100644
--- a/util/cacheflush.c
+++ b/util/cacheflush.c
@@ -223,7 +223,7 @@ static void __attribute__((constructor))
init_cache_info(void)
* Architecture (+ OS) specific cache flushing mechanisms.
*/
-#if defined(__x86_64__) || defined(__s390__)
+#if defined(__x86_64__) || defined(__s390x__)
/* Caches are coherent and do not require flushing; symbol inline. */