[PATCH v5 14/29] iommufd/viommu: Add IOMMUFD_CMD_HW_QUEUE_ALLOC ioctl

Jason Gunthorpe jgg at nvidia.com
Tue Jun 3 05:24:03 PDT 2025


On Mon, Jun 02, 2025 at 10:41:05PM -0700, Nicolin Chen wrote:

> I found that the size_viommu or size_hw_queue might not work using
> a static macro as that RDMA one does:
> 
>  - The size in vIOMMU case is type dependent. E.g. smmuv3 driver
>    uses one iommu_ops to support two types: vSMMU and vCMDQ

Maybe they can just be max()'d?

> 1) Define a get_viommu_size(unsigned int type) op: use a similar
>    macro in the driver function to return with:
> 
> #define VIOMMU_STRUCT_SIZE(ib_struct, drv_struct, member)                      \
> 	    (sizeof(drv_struct) +                                              \
>  		 BUILD_BUG_ON_ZERO(offsetof(drv_struct, member)) +             \
>  		 BUILD_BUG_ON_ZERO(!__same_type(((drv_struct *)NULL)->member,  \
>  						ib_struct)))
> 
> 	if (type == SMMU)
> 		return VIOMMU_STRUCT_SIZE(
> 			struct arm_vsmmu, struct iommufd_viommu, core);
> 	return 0;

I guess this is best?

> 2) Let core allocate with sizeof(struct iommufd_viommu), then let
>    driver krealloc during the viommu_init op call:

No.. memmoving things like locks doesn't work.

Jason



More information about the linux-arm-kernel mailing list