• S
    iommu/AMD: Per-thread IOMMU Interrupt Handling · 3f398bc7
    Suravee Suthikulpanit 提交于
    In the current interrupt handling scheme, there are as many threads as
    the number of IOMMUs. Each thread is created and assigned to an IOMMU at
    the time of registering interrupt handlers (request_threaded_irq).
    When an IOMMU HW generates an interrupt, the irq handler (top half) wakes up
    the corresponding thread to process event and PPR logs of all IOMMUs
    starting from the 1st IOMMU.
    
    In the system with multiple IOMMU,this handling scheme complicates the
    synchronization of the IOMMU data structures and status registers as
    there could be multiple threads competing for the same IOMMU while
    the other IOMMU could be left unhandled.
    
    To simplify, this patch is proposing a different interrupt handling scheme
    by having each thread only managing interrupts of the corresponding IOMMU.
    This can be achieved by passing the struct amd_iommu when registering the
    interrupt handlers. This structure is unique for each IOMMU and can be used
    by the bottom half thread to identify the IOMMU to be handled instead
    of calling for_each_iommu.  Besides this also eliminate the needs to lock
    the IOMMU for processing event and PPR logs.
    Signed-off-by: NSuravee Suthikulpanit <suravee.suthikulpanit@amd.com>
    Signed-off-by: NJoerg Roedel <joro@8bytes.org>
    3f398bc7
amd_iommu.c 96.9 KB