• Quinn Tran's avatar
    scsi: qla2xxx: Fix scheduling while atomic · afd438ff
    Quinn Tran authored
    The driver makes a call into midlayer (fc_remote_port_delete) which can put
    the thread to sleep. The thread that originates the call is in interrupt
    context. The combination of the two trigger a crash. Schedule the call in
    non-interrupt context where it is more safe.
    
    kernel: BUG: scheduling while atomic: swapper/7/0/0x00010000
    kernel: Call Trace:
    kernel:  <IRQ>
    kernel:  dump_stack+0x66/0x81
    kernel:  __schedule_bug.cold.90+0x5/0x1d
    kernel:  __schedule+0x7af/0x960
    kernel:  schedule+0x28/0x80
    kernel:  schedule_timeout+0x26d/0x3b0
    kernel:  wait_for_completion+0xb4/0x140
    kernel:  ? wake_up_q+0x70/0x70
    kernel:  __wait_rcu_gp+0x12c/0x160
    kernel:  ? sdev_evt_alloc+0xc0/0x180 [scsi_mod]
    kernel:  synchronize_sched+0x6c/0x80
    kernel:  ? call_rcu_bh+0x20/0x20
    kernel:  ? __bpf_trace_rcu_invoke_callback+0x10/0x10
    kernel:  sdev_evt_alloc+0xfd/0x180 [scsi_mod]
    kernel:  starget_for_each_device+0x85/0xb0 [scsi_mod]
    kernel:  ? scsi_init_io+0x360/0x3d0 [scsi_mod]
    kernel:  scsi_init_io+0x388/0x3d0 [scsi_mod]
    kernel:  device_for_each_child+0x54/0x90
    kernel:  fc_remote_port_delete+0x70/0xe0 [scsi_transport_fc]
    kernel:  qla2x00_schedule_rport_del+0x62/0xf0 [qla2xxx]
    kernel:  qla2x00_mark_device_lost+0x9c/0xd0 [qla2xxx]
    kernel:  qla24xx_handle_plogi_done_event+0x55f/0x570 [qla2xxx]
    kernel:  qla2x00_async_login_sp_done+0xd2/0x100 [qla2xxx]
    kernel:  qla24xx_logio_entry+0x13a/0x3c0 [qla2xxx]
    kernel:  qla24xx_process_response_queue+0x306/0x400 [qla2xxx]
    kernel:  qla24xx_msix_rsp_q+0x3f/0xb0 [qla2xxx]
    kernel:  __handle_irq_event_percpu+0x40/0x180
    kernel:  handle_irq_event_percpu+0x30/0x80
    kernel:  handle_irq_event+0x36/0x60
    
    Link: https://lore.kernel.org/r/20220110050218.3958-7-njavali@marvell.com
    Cc: stable@vger.kernel.org
    Reviewed-by: default avatarHimanshu Madhani <himanshu.madhani@oracle.com>
    Signed-off-by: default avatarQuinn Tran <qutran@marvell.com>
    Signed-off-by: default avatarNilesh Javali <njavali@marvell.com>
    Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
    afd438ff
qla_init.c 254 KB