• J
    iommu/sva: Bind process address spaces to devices · 353d72bc
    Jean-Philippe Brucker 提交于
    hulk inclusion
    category: feature
    bugzilla: 14369
    CVE: NA
    -------------------
    
    Add bind() and unbind() operations to the IOMMU API. Bind() returns a
    PASID that drivers can program in hardware, to let their devices access an
    mm. This patch only adds skeletons for the device driver API, most of the
    implementation is still missing.
    
    IOMMU groups with more than one device aren't supported for SVA at the
    moment. There may be P2P traffic between devices within a group, which
    cannot be seen by an IOMMU (note that supporting PASID doesn't add any
    form of isolation with regard to P2P). Supporting groups would require
    calling bind() for all bound processes every time a device is added to a
    group, to perform sanity checks (e.g. ensure that new devices support
    PASIDs at least as big as those already allocated in the group). It also
    means making sure that reserved ranges (IOMMU_RESV_*) of all devices are
    carved out of processes. This is already tricky with single devices, but
    becomes very difficult with groups. Since SVA-capable devices are expected
    to be cleanly isolated, and since we don't have any way to test groups or
    hot-plug, we only allow singular groups for now.
    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>
    Reviewed-by: NZhen Lei <thunder.leizhen@huawei.com>
    Signed-off-by: NYang Yingliang <yangyingliang@huawei.com>
    353d72bc
iommu.c 61.5 KB