• Lu Baolu's avatar
    iommu/vt-d: Fix lockdep splat in sva bind()/unbind() · 420d42f6
    Lu Baolu authored
    Lock(&iommu->lock) without disabling irq causes lockdep warnings.
    
    ========================================================
    WARNING: possible irq lock inversion dependency detected
    5.11.0-rc1+ #828 Not tainted
    --------------------------------------------------------
    kworker/0:1H/120 just changed the state of lock:
    ffffffffad9ea1b8 (device_domain_lock){..-.}-{2:2}, at:
    iommu_flush_dev_iotlb.part.0+0x32/0x120
    but this lock took another, SOFTIRQ-unsafe lock in the past:
     (&iommu->lock){+.+.}-{2:2}
    
    and interrupts could create inverse lock ordering between them.
    
    other info that might help us debug this:
     Possible interrupt unsafe locking scenario:
    
           CPU0                    CPU1
           ----                    ----
      lock(&iommu->lock);
                                   local_irq_disable();
                                   lock(device_domain_lock);
                                   lock(&iommu->lock);
      <Interrupt>
        lock(device_domain_lock);
    
     *** DEADLOCK ***
    Signed-off-by: default avatarLu Baolu <baolu.lu@linux.intel.com>
    Link: https://lore.kernel.org/r/20201231005323.2178523-5-baolu.lu@linux.intel.comSigned-off-by: default avatarWill Deacon <will@kernel.org>
    420d42f6
svm.c 30.5 KB