From: Jagannathan Raman <jag.ra...@oracle.com> Hook this call up to the legacy reset handler for vfio-user-pci.
Originally-by: John Johnson <john.g.john...@oracle.com> Signed-off-by: Elena Ufimtseva <elena.ufimts...@oracle.com> Signed-off-by: Jagannathan Raman <jag.ra...@oracle.com> Signed-off-by: John Levon <john.le...@nutanix.com> --- hw/vfio-user/common.c | 12 ++++++++++++ hw/vfio-user/common.h | 1 + hw/vfio-user/pci.c | 15 +++++++++++++++ 3 files changed, 28 insertions(+) diff --git a/hw/vfio-user/common.c b/hw/vfio-user/common.c index 182ef5ab8f..160a1f0536 100644 --- a/hw/vfio-user/common.c +++ b/hw/vfio-user/common.c @@ -1362,6 +1362,18 @@ static int vfio_user_region_write(VFIOUserProxy *proxy, uint8_t index, return ret; } +void vfio_user_reset(VFIOUserProxy *proxy) +{ + VFIOUserHdr msg; + + vfio_user_request_msg(&msg, VFIO_USER_DEVICE_RESET, sizeof(msg), 0); + + vfio_user_send_wait(proxy, &msg, NULL, 0); + if (msg.flags & VFIO_USER_ERROR) { + error_printf("reset reply error %d\n", msg.error_reply); + } +} + /* * Socket-based io_ops diff --git a/hw/vfio-user/common.h b/hw/vfio-user/common.h index 31b11ed614..c09637dd48 100644 --- a/hw/vfio-user/common.h +++ b/hw/vfio-user/common.h @@ -95,6 +95,7 @@ void vfio_user_set_handler(VFIODevice *vbasedev, void *reqarg); bool vfio_user_validate_version(VFIOUserProxy *proxy, Error **errp); int vfio_user_get_info(VFIOUserProxy *proxy, struct vfio_device_info *info); +void vfio_user_reset(VFIOUserProxy *proxy); extern VFIODeviceIO vfio_dev_io_sock; diff --git a/hw/vfio-user/pci.c b/hw/vfio-user/pci.c index cf1e642399..d520b7592b 100644 --- a/hw/vfio-user/pci.c +++ b/hw/vfio-user/pci.c @@ -276,6 +276,20 @@ static void vfio_user_instance_finalize(Object *obj) } } +static void vfio_user_pci_reset(DeviceState *dev) +{ + VFIOPCIDevice *vdev = VFIO_PCI_BASE(dev); + VFIODevice *vbasedev = &vdev->vbasedev; + + vfio_pci_pre_reset(vdev); + + if (vbasedev->reset_works) { + vfio_user_reset(vbasedev->proxy); + } + + vfio_pci_post_reset(vdev); +} + static const Property vfio_user_pci_dev_properties[] = { DEFINE_PROP_STRING("socket", VFIOUserPCIDevice, sock_name), DEFINE_PROP_BOOL("x-send-queued", VFIOUserPCIDevice, send_queued, false), @@ -287,6 +301,7 @@ static void vfio_user_pci_dev_class_init(ObjectClass *klass, void *data) DeviceClass *dc = DEVICE_CLASS(klass); PCIDeviceClass *pdc = PCI_DEVICE_CLASS(klass); + device_class_set_legacy_reset(dc, vfio_user_pci_reset); device_class_set_props(dc, vfio_user_pci_dev_properties); dc->desc = "VFIO over socket PCI device assignment"; pdc->realize = vfio_user_pci_realize; -- 2.34.1