diff options
author | Eric Auger <eric.auger@redhat.com> | 2016-10-17 10:57:59 -0600 |
---|---|---|
committer | Alex Williamson <alex.williamson@redhat.com> | 2016-10-17 10:57:59 -0600 |
commit | 7237011d0596e57f42d2a4e0556034b8d13533fe (patch) | |
tree | 37373e8610e87ea48770e76d2dd09eb5d7810df1 /hw/vfio | |
parent | 7ef165b9a8d903babddaf9c61c54ae9b6e739604 (diff) |
vfio/pci: Pass an error object to vfio_pci_igd_opregion_init
Pass an error object to prepare for migration to VFIO-PCI realize.
In vfio_probe_igd_bar4_quirk, simply report the error.
Signed-off-by: Eric Auger <eric.auger@redhat.com>
Reviewed-by: Markus Armbruster <armbru@redhat.com>
Signed-off-by: Alex Williamson <alex.williamson@redhat.com>
Diffstat (limited to 'hw/vfio')
-rw-r--r-- | hw/vfio/pci-quirks.c | 10 | ||||
-rw-r--r-- | hw/vfio/pci.c | 3 | ||||
-rw-r--r-- | hw/vfio/pci.h | 3 |
3 files changed, 8 insertions, 8 deletions
diff --git a/hw/vfio/pci-quirks.c b/hw/vfio/pci-quirks.c index 806ea5d21a..2cbda0844e 100644 --- a/hw/vfio/pci-quirks.c +++ b/hw/vfio/pci-quirks.c @@ -1056,7 +1056,7 @@ typedef struct VFIOIGDQuirk { * of the IGD device. */ int vfio_pci_igd_opregion_init(VFIOPCIDevice *vdev, - struct vfio_region_info *info) + struct vfio_region_info *info, Error **errp) { int ret; @@ -1064,7 +1064,7 @@ int vfio_pci_igd_opregion_init(VFIOPCIDevice *vdev, ret = pread(vdev->vbasedev.fd, vdev->igd_opregion, info->size, info->offset); if (ret != info->size) { - error_report("vfio: Error reading IGD OpRegion"); + error_setg(errp, "failed to read IGD OpRegion"); g_free(vdev->igd_opregion); vdev->igd_opregion = NULL; return -EINVAL; @@ -1489,10 +1489,10 @@ static void vfio_probe_igd_bar4_quirk(VFIOPCIDevice *vdev, int nr) } /* Setup OpRegion access */ - ret = vfio_pci_igd_opregion_init(vdev, opregion); + ret = vfio_pci_igd_opregion_init(vdev, opregion, &err); if (ret) { - error_report("IGD device %s failed to setup OpRegion, " - "legacy mode disabled", vdev->vbasedev.name); + error_append_hint(&err, "IGD legacy mode disabled\n"); + error_reportf_err(err, ERR_PREFIX, vdev->vbasedev.name); goto out; } diff --git a/hw/vfio/pci.c b/hw/vfio/pci.c index e2cf6acb6a..3d84126e87 100644 --- a/hw/vfio/pci.c +++ b/hw/vfio/pci.c @@ -2721,10 +2721,9 @@ static int vfio_initfn(PCIDevice *pdev) goto out_teardown; } - ret = vfio_pci_igd_opregion_init(vdev, opregion); + ret = vfio_pci_igd_opregion_init(vdev, opregion, &err); g_free(opregion); if (ret) { - error_setg_errno(&err, -ret, "IGD OpRegion initialization failed"); goto out_teardown; } } diff --git a/hw/vfio/pci.h b/hw/vfio/pci.h index 87a62f921a..a8366bb2a7 100644 --- a/hw/vfio/pci.h +++ b/hw/vfio/pci.h @@ -164,6 +164,7 @@ void vfio_setup_resetfn_quirk(VFIOPCIDevice *vdev); int vfio_populate_vga(VFIOPCIDevice *vdev, Error **errp); int vfio_pci_igd_opregion_init(VFIOPCIDevice *vdev, - struct vfio_region_info *info); + struct vfio_region_info *info, + Error **errp); #endif /* HW_VFIO_VFIO_PCI_H */ |