On Mon, Oct 21, 2024 at 05:20:10PM -0700, Nicolin Chen wrote: > struct iommufd_viommu_ops { > + struct iommufd_vdevice *(*vdevice_alloc)(struct iommufd_viommu *viommu, > + struct device *dev, u64 id); > + void (*vdevice_free)(struct iommufd_vdevice *vdev); ... > +#define iommufd_vdevice_alloc(ictx, drv_struct, member) \ > + ({ \ > + static_assert( \ > + __same_type(struct iommufd_vdevice, \ > + ((struct drv_struct *)NULL)->member)); \ > + static_assert(offsetof(struct drv_struct, member.obj) == 0); \ > + container_of(_iommufd_object_alloc(ictx, \ > + sizeof(struct drv_struct), \ > + IOMMUFD_OBJ_VDEVICE), \ > + struct drv_struct, member.obj); \ > + }) Per discussion in vIRQ series [1], we might not need to expose struct iommufd_vdevice. So, dropping most of the changes here, and moving iommufd_device to the private header. [1] https://lore.kernel.org/linux-iommu/ZxlGfgfwrGZGIbeF@Asurada-Nvidia/ Nicolin