• Lu Baolu's avatar
    iommu/vt-d: Fix lockdep splat in iommu_flush_dev_iotlb() · 1a3f2fd7
    Lu Baolu authored
    Lock(&iommu->lock) without disabling irq causes lockdep warnings.
    
    [   12.703950] ========================================================
    [   12.703962] WARNING: possible irq lock inversion dependency detected
    [   12.703975] 5.9.0-rc6+ #659 Not tainted
    [   12.703983] --------------------------------------------------------
    [   12.703995] systemd-udevd/284 just changed the state of lock:
    [   12.704007] ffffffffbd6ff4d8 (device_domain_lock){..-.}-{2:2}, at:
                   iommu_flush_dev_iotlb.part.57+0x2e/0x90
    [   12.704031] but this lock took another, SOFTIRQ-unsafe lock in the past:
    [   12.704043]  (&iommu->lock){+.+.}-{2:2}
    [   12.704045]
    
                   and interrupts could create inverse lock ordering between
                   them.
    
    [   12.704073]
                   other info that might help us debug this:
    [   12.704085]  Possible interrupt unsafe locking scenario:
    
    [   12.704097]        CPU0                    CPU1
    [   12.704106]        ----                    ----
    [   12.704115]   lock(&iommu->lock);
    [   12.704123]                                local_irq_disable();
    [   12.704134]                                lock(device_domain_lock);
    [   12.704146]                                lock(&iommu->lock);
    [   12.704158]   <Interrupt>
    [   12.704164]     lock(device_domain_lock);
    [   12.704174]
                    *** DEADLOCK ***
    Signed-off-by: default avatarLu Baolu <baolu.lu@linux.intel.com>
    Link: https://lore.kernel.org/r/20200927062428.13713-1-baolu.lu@linux.intel.comSigned-off-by: default avatarJoerg Roedel <jroedel@suse.de>
    1a3f2fd7
iommu.c 158 KB