Commit 3c860469 authored by Sreekanth Reddy's avatar Sreekanth Reddy Committed by Martin K. Petersen

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/20210330105137.20728-1-sreekanth.reddy@broadcom.com
Cc: stable@vger.kernel.org #v5.4.108+
Signed-off-by: default avatarSreekanth Reddy <sreekanth.reddy@broadcom.com>
Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
parent c0629d70
...@@ -7405,6 +7405,8 @@ _base_diag_reset(struct MPT3SAS_ADAPTER *ioc) ...@@ -7405,6 +7405,8 @@ _base_diag_reset(struct MPT3SAS_ADAPTER *ioc)
ioc_info(ioc, "sending diag reset !!\n"); ioc_info(ioc, "sending diag reset !!\n");
pci_cfg_access_lock(ioc->pdev);
drsprintk(ioc, ioc_info(ioc, "clear interrupts\n")); drsprintk(ioc, ioc_info(ioc, "clear interrupts\n"));
count = 0; count = 0;
...@@ -7495,10 +7497,12 @@ _base_diag_reset(struct MPT3SAS_ADAPTER *ioc) ...@@ -7495,10 +7497,12 @@ _base_diag_reset(struct MPT3SAS_ADAPTER *ioc)
goto out; goto out;
} }
pci_cfg_access_unlock(ioc->pdev);
ioc_info(ioc, "diag reset: SUCCESS\n"); ioc_info(ioc, "diag reset: SUCCESS\n");
return 0; return 0;
out: out:
pci_cfg_access_unlock(ioc->pdev);
ioc_err(ioc, "diag reset: FAILED\n"); ioc_err(ioc, "diag reset: FAILED\n");
return -EFAULT; return -EFAULT;
} }
......
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