Message ID | 20200205214422.3657-3-mwilck@suse.com (mailing list archive) |
---|---|
State | Changes Requested |
Headers | show |
Series | scsi: qla2xxx: fixes for driver unloading | expand |
On Wed, Feb 05, 2020 at 10:44:21PM +0100, mwilck@suse.com wrote: > From: Martin Wilck <mwilck@suse.com> > > Since 45235022da99, the firmware is shut down early in the controller > shutdown process. This causes commands sent to the firmware (such as LOGO) > to hang forever. Eventually one or more timeouts will be triggered. > Move the stopping of the firmware until after sessions have terminated. > > Fixes: 45235022da99 ("scsi: qla2xxx: Fix driver unload by shutting down chip") > Signed-off-by: Martin Wilck <mwilck@suse.com> Reviewed-by: Daniel Wagner <dwagner@suse.de>
On Wed, Feb 05, 2020 at 10:44:21PM +0100, mwilck@suse.com wrote: > From: Martin Wilck <mwilck@suse.com> > > Since 45235022da99, the firmware is shut down early in the controller > shutdown process. This causes commands sent to the firmware (such as LOGO) > to hang forever. Eventually one or more timeouts will be triggered. > Move the stopping of the firmware until after sessions have terminated. > > Fixes: 45235022da99 ("scsi: qla2xxx: Fix driver unload by shutting down chip") > Signed-off-by: Martin Wilck <mwilck@suse.com> > --- > drivers/scsi/qla2xxx/qla_os.c | 21 ++++++++++----------- > 1 file changed, 10 insertions(+), 11 deletions(-) > Hi Martin, Reviewed-by: Roman Bolshakov <r.bolshakov@yadro.com> BTW, I think qla_nvme_delete() should be moved up to split the function into two parts: * session/port cleanup * chip shutdown Although invocation of the function after chip shutdown has no functional implications at the moment. Best regards, Roman
On Wed, 5 Feb 2020, 1:44pm, mwilck@suse.com wrote: > From: Martin Wilck <mwilck@suse.com> > > Since 45235022da99, the firmware is shut down early in the controller > shutdown process. This causes commands sent to the firmware (such as LOGO) > to hang forever. Eventually one or more timeouts will be triggered. > Move the stopping of the firmware until after sessions have terminated. > > Fixes: 45235022da99 ("scsi: qla2xxx: Fix driver unload by shutting down chip") > Signed-off-by: Martin Wilck <mwilck@suse.com> > --- > drivers/scsi/qla2xxx/qla_os.c | 21 ++++++++++----------- > 1 file changed, 10 insertions(+), 11 deletions(-) > > diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c > index 2dafb46..e81080d 100644 > --- a/drivers/scsi/qla2xxx/qla_os.c > +++ b/drivers/scsi/qla2xxx/qla_os.c > @@ -3720,6 +3720,16 @@ qla2x00_remove_one(struct pci_dev *pdev) > } > qla2x00_wait_for_hba_ready(base_vha); > > + qla2x00_wait_for_sess_deletion(base_vha); > + > + /* > + * if UNLOAD flag is already set, then continue unload, > + * where it was set first. > + */ > + if (test_bit(UNLOADING, &base_vha->dpc_flags)) > + return; > + > + set_bit(UNLOADING, &base_vha->dpc_flags); > if (IS_QLA25XX(ha) || IS_QLA2031(ha) || IS_QLA27XX(ha) || > IS_QLA28XX(ha)) { > if (ha->flags.fw_started) > @@ -3736,17 +3746,6 @@ qla2x00_remove_one(struct pci_dev *pdev) > qla2x00_try_to_stop_firmware(base_vha); > } > > - qla2x00_wait_for_sess_deletion(base_vha); > - > - /* > - * if UNLOAD flag is already set, then continue unload, > - * where it was set first. > - */ > - if (test_bit(UNLOADING, &base_vha->dpc_flags)) > - return; > - > - set_bit(UNLOADING, &base_vha->dpc_flags); > - > qla_nvme_delete(base_vha); > > dma_free_coherent(&ha->pdev->dev, > NAK. The fcport deletion was done after chip reset to minimize interference and further action on fcports. We should not be sending out logouts during unload (driver just implicitly logs out). If you experience any hangs, please let us know. Regards, -Arun
On Tue, 2020-03-24 at 17:36 -0700, Arun Easi wrote: > On Wed, 5 Feb 2020, 1:44pm, mwilck@suse.com wrote: > > > From: Martin Wilck <mwilck@suse.com> > > > > Since 45235022da99, the firmware is shut down early in the > > controller > > shutdown process. This causes commands sent to the firmware (such > > as LOGO) > > to hang forever. Eventually one or more timeouts will be triggered. > > Move the stopping of the firmware until after sessions have > > terminated. > > > > Fixes: 45235022da99 ("scsi: qla2xxx: Fix driver unload by shutting > > down chip") > > Signed-off-by: Martin Wilck <mwilck@suse.com> > > --- > > drivers/scsi/qla2xxx/qla_os.c | 21 ++++++++++----------- > > 1 file changed, 10 insertions(+), 11 deletions(-) > > > > ... > NAK. > > The fcport deletion was done after chip reset to minimize > interference and > further action on fcports. We should not be sending out logouts > during > unload (driver just implicitly logs out). If you experience any > hangs, > please let us know. What about target mode? AFAIK target ports need to send explicit LOGO. Regards Martin
On Wed, 25 Mar 2020, 8:34am, Martin Wilck wrote: > On Tue, 2020-03-24 at 17:36 -0700, Arun Easi wrote: > > On Wed, 5 Feb 2020, 1:44pm, mwilck@suse.com wrote: > > > > > From: Martin Wilck <mwilck@suse.com> > > > > > > Since 45235022da99, the firmware is shut down early in the > > > controller > > > shutdown process. This causes commands sent to the firmware (such > > > as LOGO) > > > to hang forever. Eventually one or more timeouts will be triggered. > > > Move the stopping of the firmware until after sessions have > > > terminated. > > > > > > Fixes: 45235022da99 ("scsi: qla2xxx: Fix driver unload by shutting > > > down chip") > > > Signed-off-by: Martin Wilck <mwilck@suse.com> > > > --- > > > drivers/scsi/qla2xxx/qla_os.c | 21 ++++++++++----------- > > > 1 file changed, 10 insertions(+), 11 deletions(-) > > > > > > > > ... > > > NAK. > > > > The fcport deletion was done after chip reset to minimize interference > > and further action on fcports. We should not be sending out logouts > > during unload (driver just implicitly logs out). If you experience any > > hangs, please let us know. > > What about target mode? AFAIK target ports need to send explicit LOGO. > I do not see a hard requirement cited in spec, correct me if you see otherwise. Other initiators should see a RSCN and see this device has gone away. Regards, -Arun
diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c index 2dafb46..e81080d 100644 --- a/drivers/scsi/qla2xxx/qla_os.c +++ b/drivers/scsi/qla2xxx/qla_os.c @@ -3720,6 +3720,16 @@ qla2x00_remove_one(struct pci_dev *pdev) } qla2x00_wait_for_hba_ready(base_vha); + qla2x00_wait_for_sess_deletion(base_vha); + + /* + * if UNLOAD flag is already set, then continue unload, + * where it was set first. + */ + if (test_bit(UNLOADING, &base_vha->dpc_flags)) + return; + + set_bit(UNLOADING, &base_vha->dpc_flags); if (IS_QLA25XX(ha) || IS_QLA2031(ha) || IS_QLA27XX(ha) || IS_QLA28XX(ha)) { if (ha->flags.fw_started) @@ -3736,17 +3746,6 @@ qla2x00_remove_one(struct pci_dev *pdev) qla2x00_try_to_stop_firmware(base_vha); } - qla2x00_wait_for_sess_deletion(base_vha); - - /* - * if UNLOAD flag is already set, then continue unload, - * where it was set first. - */ - if (test_bit(UNLOADING, &base_vha->dpc_flags)) - return; - - set_bit(UNLOADING, &base_vha->dpc_flags); - qla_nvme_delete(base_vha); dma_free_coherent(&ha->pdev->dev,