Commit 94289e7960 for qemu.org
commit 94289e7960008ceedd16ba366ddca986df739936
Author: Eric Farman <farman@linux.ibm.com>
Date: Tue Nov 3 18:27:32 2026 +0100
vhost: only use config notifier when exists/initialized
Commit e3b12d0c55e4 ("util/event_notifier: more strict API") added an
assert for an uninitialized file descriptor in event_notifier_get_fd(),
but it presumes that such a thing always exists.
On s390x, where a config notifier does not exist, this is a breaking
change for any vhost-backed device such as virtio-net. To remedy this,
move the acquisition of the file descriptor within the guard against
vhost_set_config_call and expand the guard to ensure the notifier is
initialized before being used.
Fixes: e3b12d0c55e4 ("util/event_notifier: more strict API")
Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@yandex-team.ru>
Tested-by: Konstantin Shkolnyy <kshk@linux.ibm.com>
Link: https://lore.kernel.org/qemu-devel/20261103172732.837511-1-farman@linux.ibm.com
Signed-off-by: Eric Farman <farman@linux.ibm.com>
diff --git a/hw/virtio/vhost.c b/hw/virtio/vhost.c
index b25919c5c7..189ac54117 100644
--- a/hw/virtio/vhost.c
+++ b/hw/virtio/vhost.c
@@ -2119,8 +2119,9 @@ static void vhost_start_config_intr(struct vhost_dev *dev)
virtio_config_get_guest_notifier(dev->vdev);
assert(dev->vhost_ops);
- int fd = event_notifier_get_fd(config_notifier);
- if (dev->vhost_ops->vhost_set_config_call) {
+ if (dev->vhost_ops->vhost_set_config_call &&
+ event_notifier_initialized(config_notifier)) {
+ int fd = event_notifier_get_fd(config_notifier);
r = dev->vhost_ops->vhost_set_config_call(dev, fd);
if (!r) {
event_notifier_set(config_notifier);