Commit 6997db98 authored by Quinn Tran's avatar Quinn Tran Committed by Martin K. Petersen

scsi: qla2xxx: Set remove flag for all VP

During driver unload, the remove flag will be set for all
scsi_qla_host/NPIV. This allows each NPIV to see the flag instead of
reaching for base_vha to search for it.

Link: https://lore.kernel.org/r/20190912180918.6436-11-hmadhani@marvell.comSigned-off-by: default avatarQuinn Tran <qutran@marvell.com>
Signed-off-by: default avatarHimanshu Madhani <hmadhani@marvell.com>
Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
parent c76ae845
...@@ -3486,6 +3486,29 @@ qla2x00_probe_one(struct pci_dev *pdev, const struct pci_device_id *id) ...@@ -3486,6 +3486,29 @@ qla2x00_probe_one(struct pci_dev *pdev, const struct pci_device_id *id)
return ret; return ret;
} }
static void __qla_set_remove_flag(scsi_qla_host_t *base_vha)
{
scsi_qla_host_t *vp;
unsigned long flags;
struct qla_hw_data *ha;
if (!base_vha)
return;
ha = base_vha->hw;
spin_lock_irqsave(&ha->vport_slock, flags);
list_for_each_entry(vp, &ha->vp_list, list)
set_bit(PFLG_DRIVER_REMOVING, &vp->pci_flags);
/*
* Indicate device removal to prevent future board_disable
* and wait until any pending board_disable has completed.
*/
set_bit(PFLG_DRIVER_REMOVING, &base_vha->pci_flags);
spin_unlock_irqrestore(&ha->vport_slock, flags);
}
static void static void
qla2x00_shutdown(struct pci_dev *pdev) qla2x00_shutdown(struct pci_dev *pdev)
{ {
...@@ -3502,7 +3525,7 @@ qla2x00_shutdown(struct pci_dev *pdev) ...@@ -3502,7 +3525,7 @@ qla2x00_shutdown(struct pci_dev *pdev)
* Prevent future board_disable and wait * Prevent future board_disable and wait
* until any pending board_disable has completed. * until any pending board_disable has completed.
*/ */
set_bit(PFLG_DRIVER_REMOVING, &vha->pci_flags); __qla_set_remove_flag(vha);
cancel_work_sync(&ha->board_disable); cancel_work_sync(&ha->board_disable);
if (!atomic_read(&pdev->enable_cnt)) if (!atomic_read(&pdev->enable_cnt))
...@@ -3658,10 +3681,7 @@ qla2x00_remove_one(struct pci_dev *pdev) ...@@ -3658,10 +3681,7 @@ qla2x00_remove_one(struct pci_dev *pdev)
ha = base_vha->hw; ha = base_vha->hw;
ql_log(ql_log_info, base_vha, 0xb079, ql_log(ql_log_info, base_vha, 0xb079,
"Removing driver\n"); "Removing driver\n");
__qla_set_remove_flag(base_vha);
/* Indicate device removal to prevent future board_disable and wait
* until any pending board_disable has completed. */
set_bit(PFLG_DRIVER_REMOVING, &base_vha->pci_flags);
cancel_work_sync(&ha->board_disable); cancel_work_sync(&ha->board_disable);
/* /*
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment