• L
    iommu/iova: avoid softlockup in fq_flush_timeout · 90ba118b
    Li Bin 提交于
    hulk inclusion
    category: bugfix
    bugzilla: 30859
    CVE: NA
    
    ---------------------------
    
    There is softlockup under fio pressure test with smmu enabled:
    watchdog: BUG: soft lockup - CPU#81 stuck for 22s!  [swapper/81:0]
    ...
    Call trace:
     fq_flush_timeout+0xc0/0x110
     call_timer_fn+0x34/0x178
     expire_timers+0xec/0x158
     run_timer_softirq+0xc0/0x1f8
     __do_softirq+0x120/0x324
     irq_exit+0x11c/0x140
     __handle_domain_irq+0x6c/0xc0
     gic_handle_irq+0x6c/0x170
     el1_irq+0xb8/0x140
     arch_cpu_idle+0x38/0x1c0
     default_idle_call+0x24/0x44
     do_idle+0x1f4/0x2d8
     cpu_startup_entry+0x2c/0x30
     secondary_start_kernel+0x17c/0x1c8
    
    This is because the timer callback fq_flush_timeout may run more than
    10ms, and timer may be processed continuously in the softirq so trigger
    softlockup. We can use work to deal with fq_ring_free for each cpu which
    may take long time, that to avoid triggering softlockup.
    Signed-off-by: NLi Bin <huawei.libin@huawei.com>
    Reviewed-By: NXie XiuQi <xiexiuqi@huawei.com>
    Signed-off-by: NYang Yingliang <yangyingliang@huawei.com>
    90ba118b
iova.h 7.1 KB