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);