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