qemu-devel
[Top][All Lists]
Advanced

[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: Auger Eric
Subject: Re: [Qemu-devel] [PATCH v4 14/17] vfio/pci: Conversion to realize
Date: Thu, 6 Oct 2016 18:12:00 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.1.1

Hi Markus

On 04/10/2016 14:58, Markus Armbruster wrote:
> 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.

I removed this spurious flip for vfio_populate_device and
vfio_msix_early_setup

Thanks

Eric
> 
>>          goto error;
>>      }
>>  
> [...]
> 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]