• Nicolin Chen's avatar
    iommufd: Add a nested HW pagetable object · bd529dbb
    Nicolin Chen authored
    IOMMU_HWPT_ALLOC already supports iommu_domain allocation for usersapce.
    But it can only allocate a hw_pagetable that associates to a given IOAS,
    i.e. only a kernel-managed hw_pagetable of IOMMUFD_OBJ_HWPT_PAGING type.
    
    IOMMU drivers can now support user-managed hw_pagetables, for two-stage
    translation use cases that require user data input from the user space.
    
    Add a new IOMMUFD_OBJ_HWPT_NESTED type with its abort/destroy(). Pair it
    with a new iommufd_hwpt_nested structure and its to_hwpt_nested() helper.
    Update the to_hwpt_paging() helper, so a NESTED-type hw_pagetable can be
    handled in the callers, for example iommufd_hw_pagetable_enforce_rr().
    
    Screen the inputs including the parent PAGING-type hw_pagetable that has
    a need of a new nest_parent flag in the iommufd_hwpt_paging structure.
    
    Extend the IOMMU_HWPT_ALLOC ioctl to accept an IOMMU driver specific data
    input which is tagged by the enum iommu_hwpt_data_type. Also, update the
    @pt_id to accept hwpt_id too besides an ioas_id. Then, use them to allocate
    a hw_pagetable of IOMMUFD_OBJ_HWPT_NESTED type using the
    iommufd_hw_pagetable_alloc_nested() allocator.
    
    Link: https://lore.kernel.org/r/20231026043938.63898-8-yi.l.liu@intel.comSigned-off-by: default avatarNicolin Chen <nicolinc@nvidia.com>
    Co-developed-by: default avatarYi Liu <yi.l.liu@intel.com>
    Signed-off-by: default avatarYi Liu <yi.l.liu@intel.com>
    Reviewed-by: default avatarKevin Tian <kevin.tian@intel.com>
    Reviewed-by: default avatarJason Gunthorpe <jgg@nvidia.com>
    Signed-off-by: default avatarJason Gunthorpe <jgg@nvidia.com>
    bd529dbb
main.c 15.4 KB