• L
    iommu: Add DMA ownership management interfaces · 1ea2a07a
    Lu Baolu 提交于
    Multiple devices may be placed in the same IOMMU group because they
    cannot be isolated from each other. These devices must either be
    entirely under kernel control or userspace control, never a mixture.
    
    This adds dma ownership management in iommu core and exposes several
    interfaces for the device drivers and the device userspace assignment
    framework (i.e. VFIO), so that any conflict between user and kernel
    controlled dma could be detected at the beginning.
    
    The device driver oriented interfaces are,
    
    	int iommu_device_use_default_domain(struct device *dev);
    	void iommu_device_unuse_default_domain(struct device *dev);
    
    By calling iommu_device_use_default_domain(), the device driver tells
    the iommu layer that the device dma is handled through the kernel DMA
    APIs. The iommu layer will manage the IOVA and use the default domain
    for DMA address translation.
    
    The device user-space assignment framework oriented interfaces are,
    
    	int iommu_group_claim_dma_owner(struct iommu_group *group,
    					void *owner);
    	void iommu_group_release_dma_owner(struct iommu_group *group);
    	bool iommu_group_dma_owner_claimed(struct iommu_group *group);
    
    The device userspace assignment must be disallowed if the DMA owner
    claiming interface returns failure.
    Signed-off-by: NJason Gunthorpe <jgg@nvidia.com>
    Signed-off-by: NKevin Tian <kevin.tian@intel.com>
    Signed-off-by: NLu Baolu <baolu.lu@linux.intel.com>
    Reviewed-by: NRobin Murphy <robin.murphy@arm.com>
    Link: https://lore.kernel.org/r/20220418005000.897664-2-baolu.lu@linux.intel.comSigned-off-by: NJoerg Roedel <jroedel@suse.de>
    1ea2a07a
iommu.h 32.8 KB