>-----Original Message-----
>From: Joao Martins <joao.m.mart...@oracle.com>
>Subject: [PATCH v5 06/13] vfio/{iommufd,container}: Remove caps::aw_bits
>
>Remove caps::aw_bits which requires the bcontainer::iova_ranges being
>initialized after device is actually attached. Instead defer that to
>.get_cap() and call vfio_device_get_aw_bits() directly.
>
>This is in preparation for HostIOMMUDevice::realize() being called early
>during attach_device().
>
>Suggested-by: Zhenzhong Duan <zhenzhong.d...@intel.com>
>Signed-off-by: Joao Martins <joao.m.mart...@oracle.com>
>Reviewed-by: Cédric Le Goater <c...@redhat.com
>---
> include/sysemu/host_iommu_device.h | 3 ---
> backends/iommufd.c                 | 3 ++-
> hw/vfio/container.c                | 5 +----
> hw/vfio/iommufd.c                  | 1 -
> 4 files changed, 3 insertions(+), 9 deletions(-)
>
>diff --git a/include/sysemu/host_iommu_device.h
>b/include/sysemu/host_iommu_device.h
>index ee6c813c8b22..cdeeccec7671 100644
>--- a/include/sysemu/host_iommu_device.h
>+++ b/include/sysemu/host_iommu_device.h
>@@ -19,12 +19,9 @@
>  * struct HostIOMMUDeviceCaps - Define host IOMMU device capabilities.
>  *
>  * @type: host platform IOMMU type.
>- *
>- * @aw_bits: host IOMMU address width. 0xff if no limitation.
>  */
> typedef struct HostIOMMUDeviceCaps {
>     uint32_t type;
>-    uint8_t aw_bits;
> } HostIOMMUDeviceCaps;
>
> #define TYPE_HOST_IOMMU_DEVICE "host-iommu-device"
>diff --git a/backends/iommufd.c b/backends/iommufd.c
>index a94d3b90c05c..58032e588f49 100644
>--- a/backends/iommufd.c
>+++ b/backends/iommufd.c
>@@ -18,6 +18,7 @@
> #include "qemu/error-report.h"
> #include "monitor/monitor.h"
> #include "trace.h"
>+#include "hw/vfio/vfio-common.h"
> #include <sys/ioctl.h>
> #include <linux/iommufd.h>
>
>@@ -270,7 +271,7 @@ static int
>hiod_iommufd_get_cap(HostIOMMUDevice *hiod, int cap, Error **errp)
>     case HOST_IOMMU_DEVICE_CAP_IOMMU_TYPE:
>         return caps->type;
>     case HOST_IOMMU_DEVICE_CAP_AW_BITS:
>-        return caps->aw_bits;
>+        return vfio_device_get_aw_bits(hiod->agent);

I just realized there is an open here. hiod->agent is not necessarily VFIO 
device, can be VDPA device.
May need a bit more work on this.

Thanks
Zhenzhong

>     default:
>         error_setg(errp, "%s: unsupported capability %x", hiod->name, cap);
>         return -EINVAL;
>diff --git a/hw/vfio/container.c b/hw/vfio/container.c
>index 88ede913d6f7..c27f448ba26e 100644
>--- a/hw/vfio/container.c
>+++ b/hw/vfio/container.c
>@@ -1144,7 +1144,6 @@ static bool
>hiod_legacy_vfio_realize(HostIOMMUDevice *hiod, void *opaque,
>     VFIODevice *vdev = opaque;
>
>     hiod->name = g_strdup(vdev->name);
>-    hiod->caps.aw_bits = vfio_device_get_aw_bits(vdev);
>     hiod->agent = opaque;
>
>     return true;
>@@ -1153,11 +1152,9 @@ static bool
>hiod_legacy_vfio_realize(HostIOMMUDevice *hiod, void *opaque,
> static int hiod_legacy_vfio_get_cap(HostIOMMUDevice *hiod, int cap,
>                                     Error **errp)
> {
>-    HostIOMMUDeviceCaps *caps = &hiod->caps;
>-
>     switch (cap) {
>     case HOST_IOMMU_DEVICE_CAP_AW_BITS:
>-        return caps->aw_bits;
>+        return vfio_device_get_aw_bits(hiod->agent);
>     default:
>         error_setg(errp, "%s: unsupported capability %x", hiod->name, cap);
>         return -EINVAL;
>diff --git a/hw/vfio/iommufd.c b/hw/vfio/iommufd.c
>index 545f4a404125..028533bc39b9 100644
>--- a/hw/vfio/iommufd.c
>+++ b/hw/vfio/iommufd.c
>@@ -724,7 +724,6 @@ static bool
>hiod_iommufd_vfio_realize(HostIOMMUDevice *hiod, void *opaque,
>
>     hiod->name = g_strdup(vdev->name);
>     caps->type = type;
>-    caps->aw_bits = vfio_device_get_aw_bits(vdev);
>
>     return true;
> }
>--
>2.17.2

Reply via email to