mirror of
https://github.com/torvalds/linux.git
synced 2026-06-02 19:43:40 +02:00
iommu: Add cache_invalidate_user op
The updates of the PTEs in the nested page table will be propagated to the hardware caches. Add a new domain op cache_invalidate_user() for the userspace to flush the hardware caches for a nested domain through iommufd. No wrapper for it, as it's only supposed to be used by iommufd. Then, pass in invalidation requests in form of a user data array containing a number of invalidation data entries. Link: https://lore.kernel.org/r/20240111041015.47920-2-yi.l.liu@intel.com Reviewed-by: Kevin Tian <kevin.tian@intel.com> Signed-off-by: Lu Baolu <baolu.lu@linux.intel.com> Signed-off-by: Nicolin Chen <nicolinc@nvidia.com> Signed-off-by: Yi Liu <yi.l.liu@intel.com> Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
This commit is contained in:
parent
861deac3b0
commit
f35b88b66f
|
|
@ -284,6 +284,23 @@ struct iommu_user_data {
|
|||
size_t len;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct iommu_user_data_array - iommu driver specific user space data array
|
||||
* @type: The data type of all the entries in the user buffer array
|
||||
* @uptr: Pointer to the user buffer array
|
||||
* @entry_len: The fixed-width length of an entry in the array, in bytes
|
||||
* @entry_num: The number of total entries in the array
|
||||
*
|
||||
* The user buffer includes an array of requests with format defined in
|
||||
* include/uapi/linux/iommufd.h
|
||||
*/
|
||||
struct iommu_user_data_array {
|
||||
unsigned int type;
|
||||
void __user *uptr;
|
||||
size_t entry_len;
|
||||
u32 entry_num;
|
||||
};
|
||||
|
||||
/**
|
||||
* __iommu_copy_struct_from_user - Copy iommu driver specific user space data
|
||||
* @dst_data: Pointer to an iommu driver specific user data that is defined in
|
||||
|
|
@ -440,6 +457,13 @@ struct iommu_ops {
|
|||
* @iotlb_sync_map: Sync mappings created recently using @map to the hardware
|
||||
* @iotlb_sync: Flush all queued ranges from the hardware TLBs and empty flush
|
||||
* queue
|
||||
* @cache_invalidate_user: Flush hardware cache for user space IO page table.
|
||||
* The @domain must be IOMMU_DOMAIN_NESTED. The @array
|
||||
* passes in the cache invalidation requests, in form
|
||||
* of a driver data structure. The driver must update
|
||||
* array->entry_num to report the number of handled
|
||||
* invalidation requests. The driver data structure
|
||||
* must be defined in include/uapi/linux/iommufd.h
|
||||
* @iova_to_phys: translate iova to physical address
|
||||
* @enforce_cache_coherency: Prevent any kind of DMA from bypassing IOMMU_CACHE,
|
||||
* including no-snoop TLPs on PCIe or other platform
|
||||
|
|
@ -465,6 +489,8 @@ struct iommu_domain_ops {
|
|||
size_t size);
|
||||
void (*iotlb_sync)(struct iommu_domain *domain,
|
||||
struct iommu_iotlb_gather *iotlb_gather);
|
||||
int (*cache_invalidate_user)(struct iommu_domain *domain,
|
||||
struct iommu_user_data_array *array);
|
||||
|
||||
phys_addr_t (*iova_to_phys)(struct iommu_domain *domain,
|
||||
dma_addr_t iova);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user