On Wed, Jan 03, 2024 at 12:58:48PM -0400, Jason Gunthorpe wrote: > On Wed, Jan 03, 2024 at 08:48:46AM -0800, Nicolin Chen wrote: > > > You can pass the ctx to the invalidate op, it is already implied > > > because the passed iommu_domain is linked to a single iommufd ctx. > > > > The device virtual id lookup API needs something similar, yet it > > likely needs a viommu pointer (or its id) instead? As the table > > is attached to a viommu while an ictx can have multiple viommus, > > right? > > Yes, when we get to an API for that it will have to be some op > 'invalidate_viommu(..)' and it can get the necessary pointers. OK! I will try that first. > The viommu object will have to be some driver object like the > iommu_domain. I drafted something like this, linking it to struct iommu_device: +struct iommufd_viommu { + struct iommufd_object obj; + struct iommufd_ctx *ictx; + struct iommu_device *iommu_dev; + struct iommufd_hwpt_paging *hwpt; + /* array of struct iommufd_device, indexed by device virtual id */ + struct xarray device_ids; +}; Thanks Nicolin