Hi Shameer, Nicolin, On 2/6/26 3:48 PM, Shameer Kolothum wrote: > From: Nicolin Chen <[email protected]> > > The updated IOMMUFD uAPI introduces the ability for userspace to request > a specific hardware info data type via IOMMU_GET_HW_INFO. Update > iommufd_backend_get_device_info() to set IOMMU_HW_INFO_FLAG_INPUT_TYPE > when a non-zero type is supplied, and adjust all callers to pass a type > value explicitly initialised to zero (IOMMU_HW_INFO_TYPE_DEFAULT) when > no specific type is requested. > > Signed-off-by: Nicolin Chen <[email protected]> > Signed-off-by: Shameer Kolothum <[email protected]> > --- > backends/iommufd.c | 7 +++++++ > hw/arm/smmuv3-accel.c | 2 +- > hw/vfio/iommufd.c | 4 ++-- > 3 files changed, 10 insertions(+), 3 deletions(-) > > diff --git a/backends/iommufd.c b/backends/iommufd.c > index acfab907c0..5daefe505e 100644 > --- a/backends/iommufd.c > +++ b/backends/iommufd.c > @@ -387,16 +387,23 @@ bool iommufd_backend_get_dirty_bitmap(IOMMUFDBackend > *be, > return true; > } > > +/* > + * @type can carry a desired HW info type defined in the uapi headers. If > caller > + * doesn't have one, indicating it wants the default type, then @type should > be > + * zeroed (i.e. IOMMU_HW_INFO_TYPE_DEFAULT). > + */ > bool iommufd_backend_get_device_info(IOMMUFDBackend *be, uint32_t devid, > uint32_t *type, void *data, uint32_t > len, > uint64_t *caps, uint8_t *max_pasid_log2, > Error **errp) > { > struct iommu_hw_info info = { > + .flags = (*type) ? IOMMU_HW_INFO_FLAG_INPUT_TYPE : 0, > .size = sizeof(info), > .dev_id = devid, > .data_len = len, > .data_uptr = (uintptr_t)data, > + .in_data_type = *type, > }; > > if (ioctl(be->fd, IOMMU_GET_HW_INFO, &info)) { > diff --git a/hw/arm/smmuv3-accel.c b/hw/arm/smmuv3-accel.c > index beffb8aa94..14ea4eac37 100644 > --- a/hw/arm/smmuv3-accel.c > +++ b/hw/arm/smmuv3-accel.c > @@ -127,7 +127,7 @@ smmuv3_accel_hw_compatible(SMMUv3State *s, > HostIOMMUDeviceIOMMUFD *idev, > Error **errp) > { > struct iommu_hw_info_arm_smmuv3 info; > - uint32_t data_type; > + uint32_t data_type = 0; I would use IOMMU_HW_INFO_TYPE_DEFAULT explicitly. > uint64_t caps; > > if (!iommufd_backend_get_device_info(idev->iommufd, idev->devid, > &data_type, > diff --git a/hw/vfio/iommufd.c b/hw/vfio/iommufd.c > index 131612eb83..d0f124300d 100644 > --- a/hw/vfio/iommufd.c > +++ b/hw/vfio/iommufd.c > @@ -349,7 +349,7 @@ static bool iommufd_cdev_autodomains_get(VFIODevice > *vbasedev, > ERRP_GUARD(); > IOMMUFDBackend *iommufd = vbasedev->iommufd; > VFIOContainer *bcontainer = VFIO_IOMMU(container); > - uint32_t type, flags = 0; > + uint32_t type = 0, flags = 0; > uint64_t hw_caps; > VendorCaps caps; > VFIOIOASHwpt *hwpt; > @@ -938,7 +938,7 @@ static bool hiod_iommufd_vfio_realize(HostIOMMUDevice > *hiod, void *opaque, > HostIOMMUDeviceIOMMUFD *idev; > HostIOMMUDeviceCaps *caps = &hiod->caps; > VendorCaps *vendor_caps = &caps->vendor_caps; > - enum iommu_hw_info_type type; > + enum iommu_hw_info_type type = 0; here also
With that Reviewed-by: Eric Auger <[email protected]> Thanks Eric > uint8_t max_pasid_log2; > uint64_t hw_caps; >
