add configure interrupt support for virtio-mmio bus. This interrupt will working while backend is vhost-vdpa
Signed-off-by: Cindy Lu <l...@redhat.com> --- hw/virtio/virtio-mmio.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/hw/virtio/virtio-mmio.c b/hw/virtio/virtio-mmio.c index e1b5c3b81e..d580f1ea9a 100644 --- a/hw/virtio/virtio-mmio.c +++ b/hw/virtio/virtio-mmio.c @@ -666,6 +666,21 @@ assign_error: return r; } +static int virtio_mmio_set_config_notifier(DeviceState *d, bool assign) +{ + VirtIOMMIOProxy *proxy = VIRTIO_MMIO(d); + VirtIODevice *vdev = virtio_bus_get_device(&proxy->bus); + EventNotifier *notifier = virtio_get_config_notifier(vdev); + int r = 0; + if (assign) { + r = event_notifier_init(notifier, 0); + virtio_set_config_notifier_fd_handler(vdev, true, false); + } else { + virtio_set_config_notifier_fd_handler(vdev, false, false); + event_notifier_cleanup(notifier); + } + return r; +} static void virtio_mmio_pre_plugged(DeviceState *d, Error **errp) { VirtIOMMIOProxy *proxy = VIRTIO_MMIO(d); @@ -780,6 +795,7 @@ static void virtio_mmio_bus_class_init(ObjectClass *klass, void *data) k->ioeventfd_assign = virtio_mmio_ioeventfd_assign; k->pre_plugged = virtio_mmio_pre_plugged; k->has_variable_vring_alignment = true; + k->set_config_notifiers = virtio_mmio_set_config_notifier; bus_class->max_dev = 1; bus_class->get_dev_path = virtio_mmio_bus_get_dev_path; } -- 2.21.3