• Y
    scsi: smartpqi: call pqi_free_interrupts() in pqi_shutdown() · e57b2945
    Yanjiang Jin 提交于
    We must free all irqs during shutdown, else kexec's 2nd kernel would hang
    in pqi_wait_for_completion_io() as below:
    
    Call trace:
    
     pqi_wait_for_completion_io
     pqi_submit_raid_request_synchronous.constprop.78+0x23c/0x310 [smartpqi]
     pqi_configure_events+0xec/0x1f8 [smartpqi]
     pqi_ctrl_init+0x814/0xca0 [smartpqi]
     pqi_pci_probe+0x400/0x46c [smartpqi]
     local_pci_probe+0x48/0xb0
     pci_device_probe+0x14c/0x1b0
     really_probe+0x218/0x3fc
     driver_probe_device+0x70/0x140
     __driver_attach+0x11c/0x134
     bus_for_each_dev+0x70/0xc8
     driver_attach+0x30/0x38
     bus_add_driver+0x1f0/0x294
     driver_register+0x74/0x12c
     __pci_register_driver+0x64/0x70
     pqi_init+0xd0/0x10000 [smartpqi]
     do_one_initcall+0x60/0x1d8
     do_init_module+0x64/0x1f8
     load_module+0x10ec/0x1350
     __se_sys_finit_module+0xd4/0x100
     __arm64_sys_finit_module+0x28/0x34
     el0_svc_handler+0x104/0x160
     el0_svc+0x8/0xc
    
    This happens only in the following combinations:
    
    1. smartpqi is built as module, not built-in;
    2. We have a disk connected to smartpqi card;
    3. Both kexec's 1st and 2nd kernels use this disk as Rootfs' mount point.
    Signed-off-by: NYanjiang Jin <yanjiang.jin@hxt-semitech.com>
    Acked-by: NDon Brace <don.brace@microsemi.com>
    Signed-off-by: NMartin K. Petersen <martin.petersen@oracle.com>
    e57b2945
smartpqi_init.c 230.7 KB