aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSreekanth Reddy <[email protected]>2021-03-30 16:21:37 +0530
committerMartin K. Petersen <[email protected]>2021-04-05 23:32:43 -0400
commit3c8604691d2acc7b7d4795d9695070de9eaa5828 (patch)
tree04f031c1031a1d8f936928bb5f152b1ad6be202d
parentc0629d70ca5570ab75e791e03e6fd11b9c754a6a (diff)
scsi: mpt3sas: Block PCI config access from userspace during reset
While diag reset is in progress there is short duration where all access to controller's PCI config space from the host needs to be blocked. This is due to a hardware limitation of the IOC controllers. Block all access to controller's config space from userland applications by calling pci_cfg_access_lock() while diag reset is in progress and unlocking it again after the controller comes back to ready state. Link: https://lore.kernel.org/r/[email protected] Cc: [email protected] #v5.4.108+ Signed-off-by: Sreekanth Reddy <[email protected]> Signed-off-by: Martin K. Petersen <[email protected]>
-rw-r--r--drivers/scsi/mpt3sas/mpt3sas_base.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.c b/drivers/scsi/mpt3sas/mpt3sas_base.c
index 016b01bcc1a3..84c507587166 100644
--- a/drivers/scsi/mpt3sas/mpt3sas_base.c
+++ b/drivers/scsi/mpt3sas/mpt3sas_base.c
@@ -7405,6 +7405,8 @@ _base_diag_reset(struct MPT3SAS_ADAPTER *ioc)
ioc_info(ioc, "sending diag reset !!\n");
+ pci_cfg_access_lock(ioc->pdev);
+
drsprintk(ioc, ioc_info(ioc, "clear interrupts\n"));
count = 0;
@@ -7495,10 +7497,12 @@ _base_diag_reset(struct MPT3SAS_ADAPTER *ioc)
goto out;
}
+ pci_cfg_access_unlock(ioc->pdev);
ioc_info(ioc, "diag reset: SUCCESS\n");
return 0;
out:
+ pci_cfg_access_unlock(ioc->pdev);
ioc_err(ioc, "diag reset: FAILED\n");
return -EFAULT;
}