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")
Signed-off-by: Eric Farman <[email protected]>
---
hw/virtio/vhost.c | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/hw/virtio/vhost.c b/hw/virtio/vhost.c
index b25919c5c7d..189ac541178 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);
--
2.53.0