* [PULL 1/7] hw/s390x: Fix memory leaks after removing elements with QTAILQ_REMOVE
2026-06-05 14:56 [PULL 0/7] s390x updates Cornelia Huck
@ 2026-06-05 14:56 ` Cornelia Huck
2026-06-05 14:56 ` [PULL 2/7] target/s390x: Make container ids in SysIB_15x 1-based Cornelia Huck
` (6 subsequent siblings)
7 siblings, 0 replies; 11+ messages in thread
From: Cornelia Huck @ 2026-06-05 14:56 UTC (permalink / raw)
To: qemu-devel
Cc: qemu-s390x, Thomas Huth, Farhan Ali, Matthew Rosato,
Cornelia Huck
From: Thomas Huth <thuth@redhat.com>
The elements that get removed with QTAILQ_REMOVE are never referenced
afterwards anymore, so the corresponding memory should get freed.
Fixes: 37fa32de70 ("s390x/pci: Honor DMA limits set by vfio")
Reviewed-by: Farhan Ali <alifm@linux.ibm.com>
Signed-off-by: Thomas Huth <thuth@redhat.com>
Reviewed-by: Matthew Rosato <mjrosato@linux.ibm.com>
Tested-by: Matthew Rosato <mjrosato@linux.ibm.com>
Message-ID: <20260511063825.53633-1-thuth@redhat.com>
Signed-off-by: Cornelia Huck <cohuck@redhat.com>
---
hw/s390x/s390-pci-vfio.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/hw/s390x/s390-pci-vfio.c b/hw/s390x/s390-pci-vfio.c
index 7c754b656da0..db6de00bd285 100644
--- a/hw/s390x/s390-pci-vfio.c
+++ b/hw/s390x/s390-pci-vfio.c
@@ -101,6 +101,7 @@ void s390_pci_end_dma_count(S390pciState *s, S390PCIDMACount *cnt)
cnt->users--;
if (cnt->users == 0) {
QTAILQ_REMOVE(&s->zpci_dma_limit, cnt, link);
+ g_free(cnt);
}
}
--
2.54.0
^ permalink raw reply related [flat|nested] 11+ messages in thread* [PULL 2/7] target/s390x: Make container ids in SysIB_15x 1-based
2026-06-05 14:56 [PULL 0/7] s390x updates Cornelia Huck
2026-06-05 14:56 ` [PULL 1/7] hw/s390x: Fix memory leaks after removing elements with QTAILQ_REMOVE Cornelia Huck
@ 2026-06-05 14:56 ` Cornelia Huck
2026-06-05 14:56 ` [PULL 3/7] hw/s390x/ccw: Mark virtio-pci disable-legacy property as optional Cornelia Huck
` (5 subsequent siblings)
7 siblings, 0 replies; 11+ messages in thread
From: Cornelia Huck @ 2026-06-05 14:56 UTC (permalink / raw)
To: qemu-devel
Cc: qemu-s390x, Alexandra Winter, Hendrik Brueckner,
Christian Borntraeger, Gautam Gala, Cornelia Huck
From: Alexandra Winter <wintera@linux.ibm.com>
The Container Id in a container-type TLE of SysIB_15x is defined as 8-bit
unsigned nonzero integer. Make stsi fc 15 emulation architecture compliant,
by starting the container ids at 1 for the lowest numbered container.
The qemu misbehaviour without this patch becomes obvious due to a recently
proposed kernel fix. Older linux kernels pass the container ids from stsi
fc15 unchanged to sysfs, i.e. starting at 1 on s390 hardware. This resulted
in off-by-one values when compared to the values from HMC. A Linux kernel
fix is being proposed to correct the sysfs topology ids by -1, so they
start at 0, e.g. when displayed by 'lscpu -ye'. In case a KVM guest with a
fixed kernel runs on a host with a qemu without this fix, this can result
in container ids erroneously being shown as 255.
Example (Fixed guest on unfixed qemu):
$ lscpu -ye
CPU NODE DRAWER BOOK SOCKET CORE L1d:L1i:L2 ONLINE CONFIGURED POLARIZATION ADDRESS
0 0 255 255 255 0 0:0:0 yes yes vert-medium 0
1 0 255 255 0 1 1:1:1 yes yes vert-medium 1
After this fix:
$ lscpu -ye
CPU NODE DRAWER BOOK SOCKET CORE L1d:L1i:L2 ONLINE CONFIGURED POLARIZATION ADDRESS
0 0 0 0 0 0 0:0:0 yes yes vert-medium 0
1 0 0 0 1 1 1:1:1 yes yes vert-medium 1
Fixes: f4f54b582f ("target/s390x/cpu topology: handle STSI(15) and build the SYSIB")
Signed-off-by: Alexandra Winter <wintera@linux.ibm.com>
Acked-by: Hendrik Brueckner <brueckner@linux.ibm.com>
Acked-by: Christian Borntraeger <borntraeger@linux.ibm.com>
Reviewed-by: Gautam Gala <ggala@linux.ibm.com>
Message-ID: <20260511134909.43802-1-wintera@linux.ibm.com>
Signed-off-by: Cornelia Huck <cohuck@redhat.com>
---
target/s390x/kvm/stsi-topology.c | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/target/s390x/kvm/stsi-topology.c b/target/s390x/kvm/stsi-topology.c
index 301d41b68d2e..afd00da0e68b 100644
--- a/target/s390x/kvm/stsi-topology.c
+++ b/target/s390x/kvm/stsi-topology.c
@@ -90,9 +90,9 @@ static int stsi_topology_fill_sysib(S390TopologyList *topology_list,
int last_drawer = -1;
int last_book = -1;
int last_socket = -1;
- int drawer_id = 0;
- int book_id = 0;
- int socket_id = 0;
+ int drawer_id = 1;
+ int book_id = 1;
+ int socket_id = 1;
int n = sizeof(SysIB_151x);
QTAILQ_FOREACH(entry, topology_list, next) {
@@ -103,12 +103,12 @@ static int stsi_topology_fill_sysib(S390TopologyList *topology_list,
if (level > 3 && drawer_change) {
SYSIB_GUARD(n, sizeof(SYSIBContainerListEntry));
p = fill_container(p, 3, drawer_id++);
- book_id = 0;
+ book_id = 1;
}
if (level > 2 && book_change) {
SYSIB_GUARD(n, sizeof(SYSIBContainerListEntry));
p = fill_container(p, 2, book_id++);
- socket_id = 0;
+ socket_id = 1;
}
if (socket_change) {
SYSIB_GUARD(n, sizeof(SYSIBContainerListEntry));
--
2.54.0
^ permalink raw reply related [flat|nested] 11+ messages in thread* [PULL 3/7] hw/s390x/ccw: Mark virtio-pci disable-legacy property as optional
2026-06-05 14:56 [PULL 0/7] s390x updates Cornelia Huck
2026-06-05 14:56 ` [PULL 1/7] hw/s390x: Fix memory leaks after removing elements with QTAILQ_REMOVE Cornelia Huck
2026-06-05 14:56 ` [PULL 2/7] target/s390x: Make container ids in SysIB_15x 1-based Cornelia Huck
@ 2026-06-05 14:56 ` Cornelia Huck
2026-06-05 14:56 ` [PULL 4/7] s390x/pci: Fix interrupt forwarding disable for interpreted devices Cornelia Huck
` (4 subsequent siblings)
7 siblings, 0 replies; 11+ messages in thread
From: Cornelia Huck @ 2026-06-05 14:56 UTC (permalink / raw)
To: qemu-devel; +Cc: qemu-s390x, Jaehoon Kim, Matthew Rosato, Cornelia Huck
From: Jaehoon Kim <jhkim@linux.ibm.com>
The s390-ccw-virtio-11.0 compatibility property for TYPE_VIRTIO_PCI
"disable-legacy" causes QEMU to abort when instantiating
vhost-user-fs-pci devices:
Unexpected error in object_property_find_err() at
../qom/object.c:1284:
qemu-system-s390x: -device vhost-user-fs-pci: can't apply
global virtio-pci.disable-legacy=off: Property
'vhost-user-fs-pci.disable-legacy' not found
The issue occurs because some vhost-user devices like
vhost-user-fs-pci only implement the non-transitional variant
and do not define a generic device type. Non-transitional
devices have disable-legacy hardcoded to "on" and do not
expose it as a property, while only generic device types have
the "disable-legacy" property. This affects users running
older machine versions (11.0 and earlier) even when using the
latest QEMU version.
Mark the global property as optional so it only applies to
devices that actually have the property, allowing vhost-user
devices without a generic variant to be instantiated
successfully on older machine versions.
Fixes: 26103c13cff0 ("hw/s390x/ccw: Disable legacy virtio-pci by default (v11.1+)")
Signed-off-by: Jaehoon Kim <jhkim@linux.ibm.com>
Reviewed-by: Matthew Rosato <mjrosato@linux.ibm.com>
Message-ID: <20260520183403.223983-1-jhkim@linux.ibm.com>
Signed-off-by: Cornelia Huck <cohuck@redhat.com>
---
hw/s390x/s390-virtio-ccw.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/hw/s390x/s390-virtio-ccw.c b/hw/s390x/s390-virtio-ccw.c
index 4d35f9b10bcc..25a9fa495540 100644
--- a/hw/s390x/s390-virtio-ccw.c
+++ b/hw/s390x/s390-virtio-ccw.c
@@ -946,7 +946,7 @@ static void ccw_machine_11_0_class_options(MachineClass *mc)
* keep legacy virtio-pci enabled.
*/
static GlobalProperty compat[] = {
- { TYPE_VIRTIO_PCI, "disable-legacy", "off" },
+ { TYPE_VIRTIO_PCI, "disable-legacy", "off", .optional = true },
};
ccw_machine_11_1_class_options(mc);
compat_props_add(mc->compat_props, compat, G_N_ELEMENTS(compat));
--
2.54.0
^ permalink raw reply related [flat|nested] 11+ messages in thread* [PULL 4/7] s390x/pci: Fix interrupt forwarding disable for interpreted devices
2026-06-05 14:56 [PULL 0/7] s390x updates Cornelia Huck
` (2 preceding siblings ...)
2026-06-05 14:56 ` [PULL 3/7] hw/s390x/ccw: Mark virtio-pci disable-legacy property as optional Cornelia Huck
@ 2026-06-05 14:56 ` Cornelia Huck
2026-06-05 14:56 ` [PULL 5/7] MAINTAINERS: Fix s390x storage key/attribute device paths Cornelia Huck
` (3 subsequent siblings)
7 siblings, 0 replies; 11+ messages in thread
From: Cornelia Huck @ 2026-06-05 14:56 UTC (permalink / raw)
To: qemu-devel
Cc: qemu-s390x, Farhan Ali, qemu-stable, Niklas Schnelle,
Matthew Rosato, Omar Elghoul, Cornelia Huck
From: Farhan Ali <alifm@linux.ibm.com>
Remove the FH_MASK_ENABLE check when disabling interrupt forwarding
during device reset. This check was broken for the default case in
the switch statement above, preventing proper cleanup of interrupt
forwarding.
The pbdev->aif check in s390_pci_kvm_aif_disable() already guards
against double-disabling of interrupt forwarding.
Cc: qemu-stable@nongnu.org
Reported-by: Niklas Schnelle <schnelle@linux.ibm.com>
Signed-off-by: Farhan Ali <alifm@linux.ibm.com>
Reviewed-by: Matthew Rosato <mjrosato@linux.ibm.com>
Tested-by: Omar Elghoul <oelghoul@linux.ibm.com>
Message-ID: <20260521182946.1607-1-alifm@linux.ibm.com>
Signed-off-by: Cornelia Huck <cohuck@redhat.com>
---
hw/s390x/s390-pci-bus.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/hw/s390x/s390-pci-bus.c b/hw/s390x/s390-pci-bus.c
index 4de7b587e8a5..eb2b6185db0a 100644
--- a/hw/s390x/s390-pci-bus.c
+++ b/hw/s390x/s390-pci-bus.c
@@ -1504,7 +1504,7 @@ static void s390_pci_device_reset(DeviceState *dev)
break;
}
- if (pbdev->interp && (pbdev->fh & FH_MASK_ENABLE)) {
+ if (pbdev->interp) {
/* Interpreted devices were using interrupt forwarding */
s390_pci_kvm_aif_disable(pbdev);
} else if (pbdev->summary_ind) {
--
2.54.0
^ permalink raw reply related [flat|nested] 11+ messages in thread* [PULL 5/7] MAINTAINERS: Fix s390x storage key/attribute device paths
2026-06-05 14:56 [PULL 0/7] s390x updates Cornelia Huck
` (3 preceding siblings ...)
2026-06-05 14:56 ` [PULL 4/7] s390x/pci: Fix interrupt forwarding disable for interpreted devices Cornelia Huck
@ 2026-06-05 14:56 ` Cornelia Huck
2026-06-05 14:56 ` [PULL 6/7] MAINTAINERS: Fix tcg/s390x/ path Cornelia Huck
` (2 subsequent siblings)
7 siblings, 0 replies; 11+ messages in thread
From: Cornelia Huck @ 2026-06-05 14:56 UTC (permalink / raw)
To: qemu-devel
Cc: qemu-s390x, Philippe Mathieu-Daudé, Pierrick Bouvier,
Thomas Huth, Cornelia Huck
From: Philippe Mathieu-Daudé <philmd@linaro.org>
Fixes: 56e34834029 ("MAINTAINERS: split out s390x sections")
Reported-by: Pierrick Bouvier <pierrick.bouvier@oss.qualcomm.com>
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Thomas Huth <thuth@redhat.com>
Message-ID: <20260519171240.97420-2-philmd@linaro.org>
Signed-off-by: Cornelia Huck <cohuck@redhat.com>
---
MAINTAINERS | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/MAINTAINERS b/MAINTAINERS
index 4ff33eb630bd..48db280e478d 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -2973,7 +2973,7 @@ M: Halil Pasic <pasic@linux.ibm.com>
M: Christian Borntraeger <borntraeger@linux.ibm.com>
R: Jason Herne <jjherne@linux.ibm.com>
S: Supported
-F: hw/s390x/storage-keys.h
+F: include/hw/s390x/storage-keys.h
F: hw/s390x/s390-skeys*.c
L: qemu-s390x@nongnu.org
@@ -2982,7 +2982,7 @@ M: Halil Pasic <pasic@linux.ibm.com>
M: Christian Borntraeger <borntraeger@linux.ibm.com>
R: Jason Herne <jjherne@linux.ibm.com>
S: Supported
-F: hw/s390x/storage-attributes.h
+F: include/hw/s390x/storage-attributes.h
F: hw/s390x/s390-stattrib*.c
L: qemu-s390x@nongnu.org
--
2.54.0
^ permalink raw reply related [flat|nested] 11+ messages in thread* [PULL 6/7] MAINTAINERS: Fix tcg/s390x/ path
2026-06-05 14:56 [PULL 0/7] s390x updates Cornelia Huck
` (4 preceding siblings ...)
2026-06-05 14:56 ` [PULL 5/7] MAINTAINERS: Fix s390x storage key/attribute device paths Cornelia Huck
@ 2026-06-05 14:56 ` Cornelia Huck
2026-06-05 14:56 ` [PULL 7/7] buildsys: Stop checking for ESA/390 host Cornelia Huck
2026-06-06 22:10 ` [PULL 0/7] s390x updates Stefan Hajnoczi
7 siblings, 0 replies; 11+ messages in thread
From: Cornelia Huck @ 2026-06-05 14:56 UTC (permalink / raw)
To: qemu-devel
Cc: qemu-s390x, Philippe Mathieu-Daudé, Pierrick Bouvier,
Thomas Huth, Richard Henderson, Cornelia Huck
From: Philippe Mathieu-Daudé <philmd@linaro.org>
This folder was renamed in commit 3704993f545 ("tcg/s390x: Rename
from tcg/s390").
Reported-by: Pierrick Bouvier <pierrick.bouvier@oss.qualcomm.com>
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Thomas Huth <thuth@redhat.com>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Message-ID: <20260519171240.97420-3-philmd@linaro.org>
Signed-off-by: Cornelia Huck <cohuck@redhat.com>
---
MAINTAINERS | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/MAINTAINERS b/MAINTAINERS
index 48db280e478d..79ecac16fe01 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -4171,7 +4171,7 @@ F: disas/riscv*.[ch]
S390 TCG target
M: Richard Henderson <richard.henderson@linaro.org>
S: Maintained
-F: tcg/s390/
+F: tcg/s390x/
L: qemu-s390x@nongnu.org
SPARC TCG target
--
2.54.0
^ permalink raw reply related [flat|nested] 11+ messages in thread* [PULL 7/7] buildsys: Stop checking for ESA/390 host
2026-06-05 14:56 [PULL 0/7] s390x updates Cornelia Huck
` (5 preceding siblings ...)
2026-06-05 14:56 ` [PULL 6/7] MAINTAINERS: Fix tcg/s390x/ path Cornelia Huck
@ 2026-06-05 14:56 ` Cornelia Huck
2026-06-06 22:10 ` [PULL 0/7] s390x updates Stefan Hajnoczi
7 siblings, 0 replies; 11+ messages in thread
From: Cornelia Huck @ 2026-06-05 14:56 UTC (permalink / raw)
To: qemu-devel
Cc: qemu-s390x, Philippe Mathieu-Daudé, Thomas Huth,
Richard Henderson, Cornelia Huck
From: Philippe Mathieu-Daudé <philmd@linaro.org>
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).
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é <philmd@linaro.org>
Reviewed-by: Thomas Huth <thuth@redhat.com>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Message-ID: <20260519171240.97420-4-philmd@linaro.org>
Signed-off-by: Cornelia Huck <cohuck@redhat.com>
---
block/file-posix.c | 2 +-
configure | 12 ++----------
disas/disas-host.c | 2 +-
include/qemu/cacheflush.h | 2 +-
include/qemu/timer.h | 2 +-
util/cacheflush.c | 2 +-
6 files changed, 7 insertions(+), 15 deletions(-)
diff --git a/block/file-posix.c b/block/file-posix.c
index e49b13d6abb5..5019ddade9b5 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/configure b/configure
index 1ceb4d7ecc42..d786d3a7c9b4 100755
--- a/configure
+++ b/configure
@@ -399,12 +399,8 @@ elif check_define _ARCH_PPC64 ; then
else
cpu="ppc64"
fi
-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
@@ -461,10 +457,6 @@ case "$cpu" in
linux_arch=riscv
;;
- s390)
- linux_arch=s390
- CPU_CFLAGS="-m31"
- ;;
s390x)
host_arch=s390x
linux_arch=s390
diff --git a/disas/disas-host.c b/disas/disas-host.c
index 7cf432938e0b..d41235250a0a 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/include/qemu/cacheflush.h b/include/qemu/cacheflush.h
index 8c64b8781458..0618966ddde0 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 ec03635dd34c..9a62ac8cded1 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/util/cacheflush.c b/util/cacheflush.c
index 247c4ce29803..a44fb136f7e0 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. */
--
2.54.0
^ permalink raw reply related [flat|nested] 11+ messages in thread* Re: [PULL 0/7] s390x updates
2026-06-05 14:56 [PULL 0/7] s390x updates Cornelia Huck
` (6 preceding siblings ...)
2026-06-05 14:56 ` [PULL 7/7] buildsys: Stop checking for ESA/390 host Cornelia Huck
@ 2026-06-06 22:10 ` Stefan Hajnoczi
7 siblings, 0 replies; 11+ messages in thread
From: Stefan Hajnoczi @ 2026-06-06 22:10 UTC (permalink / raw)
To: Cornelia Huck; +Cc: qemu-devel, qemu-s390x, Cornelia Huck
[-- Attachment #1: Type: text/plain, Size: 116 bytes --]
Applied, thanks.
Please update the changelog at https://wiki.qemu.org/ChangeLog/11.1 for any user-visible changes.
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]
^ permalink raw reply [flat|nested] 11+ messages in thread