• J
    iommu/process: Bind and unbind process to and from devices · 71031de7
    Jean-Philippe Brucker 提交于
    ascend inclusion
    category: feature
    bugzilla: 14369
    CVE: NA
    
    --------------
    
    commit https://patchwork.ozlabs.org/patch/822424/
    
    Add bind and unbind operations to the IOMMU API. Device drivers can use
    them to share process page tables with their device.
    iommu_process_bind_group is provided for VFIO's convenience, as it needs
    to provide a coherent interface on containers. Device drivers will most
    likely want to use iommu_process_bind_device, which doesn't bind the whole
    group.
    
    PASIDs are de facto shared between all devices in a group (because of
    hardware weaknesses), but we don't do anything about it at the API level.
    Making bind_device call bind_group is probably the wrong way around,
    because it requires more work on our side for no benefit. We'd have to
    replay all binds each time a device is hotplugged into a group. But when a
    device is hotplugged into a group, the device driver will have to do a
    bind before using its PASID anyway and we can reject inconsistencies at
    that point.
    
    Concurrent calls to iommu_process_bind_device for the same process are not
    supported at the moment (they'll race on process_alloc which will only
    succeed for the first one; the others will have to retry the bind). I also
    don't support calling bind() on a dying process, not sure if it matters.
    Signed-off-by: NJean-Philippe Brucker <jean-philippe.brucker@arm.com>
    Signed-off-by: NFang Lijun <fanglijun3@huawei.com>
    Reviewed-by: NHanjun Guo <guohanjun@huawei.com>
    Signed-off-by: NYang Yingliang <yangyingliang@huawei.com>
    71031de7
iommu.h 37.7 KB