[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH v4 14/17] vfio/pci: Conversion to realize
From: |
Markus Armbruster |
Subject: |
Re: [Qemu-devel] [PATCH v4 14/17] vfio/pci: Conversion to realize |
Date: |
Tue, 04 Oct 2016 14:58:41 +0200 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/24.5 (gnu/linux) |
Eric Auger <address@hidden> writes:
> This patch converts VFIO PCI to realize function.
>
> Also original initfn errors now are propagated using QEMU
> error objects. All errors are formatted with the same pattern:
> "vfio: %s: the error description"
>
> Signed-off-by: Eric Auger <address@hidden>
>
> ---
> v2 -> v3:
> - use errp directly in all cases
>
> v1 -> v2:
> - correct error_setg_errno with positive error values
> ---
> hw/vfio/pci.c | 68
> ++++++++++++++++++++++------------------------------
> hw/vfio/trace-events | 2 +-
> 2 files changed, 29 insertions(+), 41 deletions(-)
>
> diff --git a/hw/vfio/pci.c b/hw/vfio/pci.c
> index 40ff4a7..b316e13 100644
> --- a/hw/vfio/pci.c
> +++ b/hw/vfio/pci.c
> @@ -2513,13 +2513,12 @@ static void
> vfio_unregister_req_notifier(VFIOPCIDevice *vdev)
> vdev->req_enabled = false;
> }
>
> -static int vfio_initfn(PCIDevice *pdev)
> +static void vfio_realize(PCIDevice *pdev, Error **errp)
> {
> VFIOPCIDevice *vdev = DO_UPCAST(VFIOPCIDevice, pdev, pdev);
> VFIODevice *vbasedev_iter;
> VFIOGroup *group;
> char *tmp, group_path[PATH_MAX], *group_name;
> - Error *err = NULL;
> ssize_t len;
> struct stat st;
> int groupid;
> @@ -2533,9 +2532,9 @@ static int vfio_initfn(PCIDevice *pdev)
> }
>
> if (stat(vdev->vbasedev.sysfsdev, &st) < 0) {
> - error_setg_errno(&err, errno, "no such host device");
> - ret = -errno;
> - goto error;
> + error_setg_errno(errp, errno, "no such host device");
> + error_prepend(errp, ERR_PREFIX, vdev->vbasedev.sysfsdev);
> + return;
> }
>
> vdev->vbasedev.name = g_strdup(basename(vdev->vbasedev.sysfsdev));
> @@ -2547,8 +2546,8 @@ static int vfio_initfn(PCIDevice *pdev)
> g_free(tmp);
>
> if (len <= 0 || len >= sizeof(group_path)) {
> - ret = len < 0 ? -errno : -ENAMETOOLONG;
> - error_setg_errno(&err, -ret, "no iommu_group found");
> + error_setg_errno(errp, len < 0 ? errno : ENAMETOOLONG,
> + "no iommu_group found");
> goto error;
> }
>
> @@ -2556,36 +2555,33 @@ static int vfio_initfn(PCIDevice *pdev)
>
> group_name = basename(group_path);
> if (sscanf(group_name, "%d", &groupid) != 1) {
> - error_setg_errno(&err, errno, "failed to read %s", group_path);
> - ret = -errno;
> + error_setg_errno(errp, errno, "failed to read %s", group_path);
> goto error;
> }
>
> - trace_vfio_initfn(vdev->vbasedev.name, groupid);
> + trace_vfio_realize(vdev->vbasedev.name, groupid);
>
> - group = vfio_get_group(groupid, pci_device_iommu_address_space(pdev),
> &err);
> + group = vfio_get_group(groupid, pci_device_iommu_address_space(pdev),
> errp);
> if (!group) {
> - ret = -ENOENT;
> goto error;
> }
>
> QLIST_FOREACH(vbasedev_iter, &group->device_list, next) {
> if (strcmp(vbasedev_iter->name, vdev->vbasedev.name) == 0) {
> - error_setg(&err, "device is already attached");
> + error_setg(errp, "device is already attached");
> vfio_put_group(group);
> - ret = -EBUSY;
> goto error;
> }
> }
>
> - ret = vfio_get_device(group, vdev->vbasedev.name, &vdev->vbasedev, &err);
> + ret = vfio_get_device(group, vdev->vbasedev.name, &vdev->vbasedev, errp);
> if (ret) {
> vfio_put_group(group);
> goto error;
> }
>
> - ret = vfio_populate_device(vdev, &err);
> - if (err) {
> + ret = vfio_populate_device(vdev, errp);
> + if (ret) {
The if (err) comes from PATCH 03. You could reduce churn by checking
ret from the start. More of the same below. Your choice.
> goto error;
> }
>
[...]
- [Qemu-devel] [PATCH v4 10/17] vfio: Pass an error object to vfio_get_device, (continued)
- [Qemu-devel] [PATCH v4 10/17] vfio: Pass an error object to vfio_get_device, Eric Auger, 2016/10/03
- [Qemu-devel] [PATCH v4 11/17] vfio/platform: Pass an error object to vfio_populate_device, Eric Auger, 2016/10/03
- [Qemu-devel] [PATCH v4 12/17] vfio/platform: fix a wrong returned value in vfio_populate_device, Eric Auger, 2016/10/03
- [Qemu-devel] [PATCH v4 15/17] vfio/pci: Remove vfio_msix_early_setup returned value, Eric Auger, 2016/10/03
- [Qemu-devel] [PATCH v4 14/17] vfio/pci: Conversion to realize, Eric Auger, 2016/10/03
- Re: [Qemu-devel] [PATCH v4 14/17] vfio/pci: Conversion to realize,
Markus Armbruster <=
- [Qemu-devel] [PATCH v4 16/17] vfio/pci: Remove vfio_populate_device returned value, Eric Auger, 2016/10/03
- [Qemu-devel] [PATCH v4 13/17] vfio/platform: Pass an error object to vfio_base_device_init, Eric Auger, 2016/10/03
- [Qemu-devel] [PATCH v4 17/17] vfio/pci: Handle host oversight, Eric Auger, 2016/10/03
- Re: [Qemu-devel] [PATCH v4 00/17] Convert VFIO-PCI to realize, Markus Armbruster, 2016/10/04