• Lu Baolu's avatar
    iommu: Add static iommu_ops->release_domain · 0061ffe2
    Lu Baolu authored
    The current device_release callback for individual iommu drivers does the
    following:
    
    1) Silent IOMMU DMA translation: It detaches any existing domain from the
       device and puts it into a blocking state (some drivers might use the
       identity state).
    2) Resource release: It releases resources allocated during the
       device_probe callback and restores the device to its pre-probe state.
    
    Step 1 is challenging for individual iommu drivers because each must check
    if a domain is already attached to the device. Additionally, if a deferred
    attach never occurred, the device_release should avoid modifying hardware
    configuration regardless of the reason for its call.
    
    To simplify this process, introduce a static release_domain within the
    iommu_ops structure. It can be either a blocking or identity domain
    depending on the iommu hardware. The iommu core will decide whether to
    attach this domain before the device_release callback, eliminating the
    need for repetitive code in various drivers.
    
    Consequently, the device_release callback can focus solely on the opposite
    operations of device_probe, including releasing all resources allocated
    during that callback.
    Co-developed-by: default avatarJason Gunthorpe <jgg@nvidia.com>
    Signed-off-by: default avatarJason Gunthorpe <jgg@nvidia.com>
    Signed-off-by: default avatarLu Baolu <baolu.lu@linux.intel.com>
    Reviewed-by: default avatarKevin Tian <kevin.tian@intel.com>
    Link: https://lore.kernel.org/r/20240305013305.204605-2-baolu.lu@linux.intel.comSigned-off-by: default avatarJoerg Roedel <jroedel@suse.de>
    0061ffe2
iommu.c 95.2 KB