• Lu Baolu's avatar
    iommu: Track iopf group instead of last fault · 19911232
    Lu Baolu authored
    
    
    Previously, before a group of page faults was passed to the domain's iopf
    handler, the last page fault of the group was kept in the list of
    iommu_fault_param::faults. In the page fault response path, the group's
    last page fault was used to look up the list, and the page faults were
    responded to device only if there was a matched fault.
    
    The previous approach seems unnecessarily complex and not performance
    friendly. Put the page fault group itself to the outstanding fault list.
    It can be removed in the page fault response path or in the
    iopf_queue_remove_device() path. The pending list is protected by
    iommu_fault_param::lock. To allow checking for the group's presence in
    the list using list_empty(), the iopf group should be removed from the
    list with list_del_init().
    
    IOMMU_PAGE_RESP_PASID_VALID is set in the code but not used anywhere.
    Remove it to make the code clean. IOMMU_PAGE_RESP_PASID_VALID is set
    in the response message indicating that the response message includes
    a valid PASID value. Actually, we should keep this hardware detail in
    the individual driver. When the page fault handling framework in IOMMU
    and IOMMUFD subsystems includes a valid PASID in the fault message, the
    response message should always contain the same PASID value. Individual
    drivers should be responsible for deciding whether to include the PASID
    in the messages they provide for the hardware.
    Signed-off-by: default avatarLu Baolu <baolu.lu@linux.intel.com>
    Reviewed-by: default avatarJason Gunthorpe <jgg@nvidia.com>
    Reviewed-by: default avatarKevin Tian <kevin.tian@intel.com>
    Tested-by: default avatarYan Zhao <yan.y.zhao@intel.com>
    Link: https://lore.kernel.org/r/20240212012227.119381-15-baolu.lu@linux.intel.com
    
    Signed-off-by: default avatarJoerg Roedel <jroedel@suse.de>
    19911232
io-pgfault.c 14.4 KB