From: Jason Gunthorpe jgg@nvidia.com Sent: Monday, July 31, 2023 9:46 PM
On Mon, Jul 31, 2023 at 08:33:55AM +0000, Liu, Yi L wrote:
From: Jason Gunthorpe jgg@nvidia.com Sent: Thursday, July 27, 2023 10:43 PM
On Thu, Jul 27, 2023 at 07:57:57AM +0000, Tian, Kevin wrote:
From: Liu, Yi L yi.l.liu@intel.com Sent: Monday, July 24, 2023 7:00 PM
@@ -252,11 +258,20 @@ struct iommu_iotlb_gather {
- @remove_dev_pasid: Remove any translation configurations of a specific
pasid, so that any DMA transactions with this pasid
will be blocked by the hardware.
- @hw_info_type: One of enum iommu_hw_info_type defined in
include/uapi/linux/iommufd.h. It is used to tag the type
of data returned by .hw_info callback. The drivers that
support .hw_info callback should define a unique type
in include/uapi/linux/iommufd.h. For the drivers that do
not implement .hw_info callback, this field is
IOMMU_HW_INFO_TYPE_NONE which is 0. Hence, such drivers
do not need to care this field.
every time looking at this field the same question came out why it is required (and looks I forgot your previous response).
The major reason is that not every driver implements the hw_info callback.
e.g. why cannot the type be returned in @hw_info():
void *(*hw_info)(struct device *dev, u32 *length, int *type);
u32 *type
NULL callback implies IOMMU_HW_INFO_TYPE_NONE.
If every one of these queries has its own type it makes sense
Though, is it not possible that we can have a type for the entire driver?
Not quite sure if I got your point. Is it acceptable to define the callabck in the current version? or Kevin's suggestion makes more sense?
I'm trying to remember if there is a reason we need unique types for the domain and the invalidation or if we can get bye with a single type just for the whole iommu driver.
I see. Seems like your comment is more related to the below patches.
https://lore.kernel.org/linux-iommu/20230724110406.107212-2-yi.l.liu@intel.c... https://lore.kernel.org/linux-iommu/20230724110406.107212-10-yi.l.liu@intel.... https://lore.kernel.org/linux-iommu/20230724111335.107427-2-yi.l.liu@intel.c... https://lore.kernel.org/linux-iommu/20230724111335.107427-8-yi.l.liu@intel.c...
I think we unique types fort the domain and invalidation. E.g. IOMMU_HWPT_TYPE_VTD_S1. The reason is that different vendors have different stage1 format, and require different user parameters to allocate. So needs to define unique types.
I suppose if we ever want to to "virtio-iommu invalidation" we'd want to use a new type for it?
Yes. needed in the domain allocation path as well. IIRC, there was a discussion on whether have a general cache invalidation data structure or not[1], and the conclusion was to have separate invalidation data structures instead of a generic structure for all types of stage1 page tables.
[1] https://lore.kernel.org/linux-iommu/20230309134217.GA1673607@myrica/
Regards, Yi Liu