• Y
    net: hns3: fix kernel crash when unload VF while it is being reset · 0894fc17
    Yufeng Mo 提交于
    mainline inclusion
    from mainline-master
    commit e140c798
    category: bugfix
    bugzilla: https://gitee.com/openeuler/kernel/issues/I4I7P7
    CVE: NA
    
    Reference: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=e140c7983e30
    
    ----------------------------------------------------------------------
    
    When fully configure VLANs for a VF, then unload the VF while
    triggering a reset to PF, will cause a kernel crash because the
    irq is already uninit.
    
    [ 293.177579] ------------[ cut here ]------------
    [ 293.183502] kernel BUG at drivers/pci/msi.c:352!
    [ 293.189547] Internal error: Oops - BUG: 0 [#1] SMP
    ......
    [ 293.390124] Workqueue: hclgevf hclgevf_service_task [hclgevf]
    [ 293.402627] pstate: 80c00009 (Nzcv daif +PAN +UAO)
    [ 293.414324] pc : free_msi_irqs+0x19c/0x1b8
    [ 293.425429] lr : free_msi_irqs+0x18c/0x1b8
    [ 293.436545] sp : ffff00002716fbb0
    [ 293.446950] x29: ffff00002716fbb0 x28: 0000000000000000
    [ 293.459519] x27: 0000000000000000 x26: ffff45b91ea16b00
    [ 293.472183] x25: 0000000000000000 x24: ffffa587b08f4700
    [ 293.484717] x23: ffffc591ac30e000 x22: ffffa587b08f8428
    [ 293.497190] x21: ffffc591ac30e300 x20: 0000000000000000
    [ 293.509594] x19: ffffa58a062a8300 x18: 0000000000000000
    [ 293.521949] x17: 0000000000000000 x16: ffff45b91dcc3f48
    [ 293.534013] x15: 0000000000000000 x14: 0000000000000000
    [ 293.545883] x13: 0000000000000040 x12: 0000000000000228
    [ 293.557508] x11: 0000000000000020 x10: 0000000000000040
    [ 293.568889] x9 : ffff45b91ea1e190 x8 : ffffc591802d0000
    [ 293.580123] x7 : ffffc591802d0148 x6 : 0000000000000120
    [ 293.591190] x5 : ffffc591802d0000 x4 : 0000000000000000
    [ 293.602015] x3 : 0000000000000000 x2 : 0000000000000000
    [ 293.612624] x1 : 00000000000004a4 x0 : ffffa58a1e0c6b80
    [ 293.623028] Call trace:
    [ 293.630340] free_msi_irqs+0x19c/0x1b8
    [ 293.638849] pci_disable_msix+0x118/0x140
    [ 293.647452] pci_free_irq_vectors+0x20/0x38
    [ 293.656081] hclgevf_uninit_msi+0x44/0x58 [hclgevf]
    [ 293.665309] hclgevf_reset_rebuild+0x1ac/0x2e0 [hclgevf]
    [ 293.674866] hclgevf_reset+0x358/0x400 [hclgevf]
    [ 293.683545] hclgevf_reset_service_task+0xd0/0x1b0 [hclgevf]
    [ 293.693325] hclgevf_service_task+0x4c/0x2e8 [hclgevf]
    [ 293.702307] process_one_work+0x1b0/0x448
    [ 293.710034] worker_thread+0x54/0x468
    [ 293.717331] kthread+0x134/0x138
    [ 293.724114] ret_from_fork+0x10/0x18
    [ 293.731324] Code: f940b000 b4ffff00 a903e7b8 f90017b6 (d4210000)
    
    This patch fixes the problem by waiting for the VF reset done
    while unloading the VF.
    
    Fixes: e2cb1dec ("net: hns3: Add HNS3 VF HCL(Hardware Compatibility Layer) Support")
    Signed-off-by: NYufeng Mo <moyufeng@huawei.com>
    Signed-off-by: NGuangbin Huang <huangguangbin2@huawei.com>
    Signed-off-by: NDavid S. Miller <davem@davemloft.net>
    Reviewed-by: NYongxin Li <liyongxin1@huawei.com>
    Signed-off-by: NJunxin Chen <chenjunxin1@huawei.com>
    Signed-off-by: NZheng Zengkai <zhengzengkai@huawei.com>
    0894fc17
hclgevf_main.c 104.7 KB