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 pasidwill 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