Provide a vfio error handling callback, that can be used by devices to handle PCI errors for passthrough devices.
Signed-off-by: Farhan Ali <[email protected]> --- hw/vfio/pci.c | 8 ++++++++ hw/vfio/pci.h | 1 + 2 files changed, 9 insertions(+) diff --git a/hw/vfio/pci.c b/hw/vfio/pci.c index bc0b4c4d56..b02a974954 100644 --- a/hw/vfio/pci.c +++ b/hw/vfio/pci.c @@ -3063,11 +3063,19 @@ void vfio_pci_put_device(VFIOPCIDevice *vdev) static void vfio_err_notifier_handler(void *opaque) { VFIOPCIDevice *vdev = opaque; + Error *err = NULL; if (!event_notifier_test_and_clear(&vdev->err_notifier)) { return; } + if (vdev->err_handler) { + if (vdev->err_handler(vdev, &err)) { + return; + } + error_report_err(err); + } + /* * TBD. Retrieve the error details and decide what action * needs to be taken. One of the actions could be to pass diff --git a/hw/vfio/pci.h b/hw/vfio/pci.h index e0aef82a89..faadce487c 100644 --- a/hw/vfio/pci.h +++ b/hw/vfio/pci.h @@ -146,6 +146,7 @@ struct VFIOPCIDevice { EventNotifier err_notifier; EventNotifier req_notifier; int (*resetfn)(struct VFIOPCIDevice *); + bool (*err_handler)(struct VFIOPCIDevice *, Error **); uint32_t vendor_id; uint32_t device_id; uint32_t sub_vendor_id; -- 2.43.0
