scsi: mpt3sas: Allow processing of events during driver unload.

Events were not processed during driver unload, hence unloading of
driver doesn't complete when drives are disconnected while unloading of
driver.  So don't block events in ISR path, i,e., remove the flag
ioc->remove_host so that events are getting processed during driver
unload.  Thus allowing driver unload to complete by processing drive
removal events during driver unload.

Signed-off-by: Chaitra P B <chaitra.basappa@broadcom.com>
Signed-off-by: Suganath Prabu S <suganath-prabu.subramani@broadcom.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
Chaitra P B 2018-04-24 05:28:37 -04:00 committed by Martin K. Petersen
parent 1537d1bfc5
commit 79eb96d6ca

View File

@ -3680,11 +3680,7 @@ _scsih_tm_tr_complete(struct MPT3SAS_ADAPTER *ioc, u16 smid, u8 msix_index,
u32 ioc_state; u32 ioc_state;
struct _sc_list *delayed_sc; struct _sc_list *delayed_sc;
if (ioc->remove_host) { if (ioc->pci_error_recovery) {
dewtprintk(ioc, pr_info(MPT3SAS_FMT
"%s: host has been removed\n", __func__, ioc->name));
return 1;
} else if (ioc->pci_error_recovery) {
dewtprintk(ioc, pr_info(MPT3SAS_FMT dewtprintk(ioc, pr_info(MPT3SAS_FMT
"%s: host in pci error recovery\n", __func__, "%s: host in pci error recovery\n", __func__,
ioc->name)); ioc->name));
@ -3806,8 +3802,7 @@ _scsih_tm_tr_volume_send(struct MPT3SAS_ADAPTER *ioc, u16 handle)
u16 smid; u16 smid;
struct _tr_list *delayed_tr; struct _tr_list *delayed_tr;
if (ioc->shost_recovery || ioc->remove_host || if (ioc->pci_error_recovery) {
ioc->pci_error_recovery) {
dewtprintk(ioc, pr_info(MPT3SAS_FMT dewtprintk(ioc, pr_info(MPT3SAS_FMT
"%s: host reset in progress!\n", "%s: host reset in progress!\n",
__func__, ioc->name)); __func__, ioc->name));
@ -3860,8 +3855,7 @@ _scsih_tm_volume_tr_complete(struct MPT3SAS_ADAPTER *ioc, u16 smid,
Mpi2SCSITaskManagementReply_t *mpi_reply = Mpi2SCSITaskManagementReply_t *mpi_reply =
mpt3sas_base_get_reply_virt_addr(ioc, reply); mpt3sas_base_get_reply_virt_addr(ioc, reply);
if (ioc->shost_recovery || ioc->remove_host || if (ioc->shost_recovery || ioc->pci_error_recovery) {
ioc->pci_error_recovery) {
dewtprintk(ioc, pr_info(MPT3SAS_FMT dewtprintk(ioc, pr_info(MPT3SAS_FMT
"%s: host reset in progress!\n", "%s: host reset in progress!\n",
__func__, ioc->name)); __func__, ioc->name));
@ -9471,8 +9465,8 @@ mpt3sas_scsih_event_callback(struct MPT3SAS_ADAPTER *ioc, u8 msix_index,
u16 sz; u16 sz;
Mpi26EventDataActiveCableExcept_t *ActiveCableEventData; Mpi26EventDataActiveCableExcept_t *ActiveCableEventData;
/* events turned off due to host reset or driver unloading */ /* events turned off due to host reset */
if (ioc->remove_host || ioc->pci_error_recovery) if (ioc->pci_error_recovery)
return 1; return 1;
mpi_reply = mpt3sas_base_get_reply_virt_addr(ioc, reply); mpi_reply = mpt3sas_base_get_reply_virt_addr(ioc, reply);