]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
scsi: megaraid_sas: Avoid firing DCMDs while OCR is in progress
authorShivasharan S <shivasharan.srikanteshwara@broadcom.com>
Fri, 5 Jan 2018 13:27:42 +0000 (05:27 -0800)
committerJack Vogel <jack.vogel@oracle.com>
Thu, 8 Mar 2018 02:44:10 +0000 (18:44 -0800)
Driver needs to avoid PCI writes while OCR is in progress.  Use
reset_mutex to synchronize between firing DCMDs MR_DCMD_PD_GET_INFO and
MR_DCMD_DRV_GET_TARGET_PROP while OCR is triggered.  Without this fix,
if Device/VD add/creation is in progress and at the same time MR
Firmware is going through OCR, user may see OCR never completed and it
may need system reboot.  This scenario is rare to occur. Fix is provided
as part of review.

Signed-off-by: Sumit Saxena <sumit.saxena@broadcom.com>
Signed-off-by: Shivasharan S <shivasharan.srikanteshwara@broadcom.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Orabug: 27625001
Signed-off-by: Jack Vogel <jack.vogel@oracle.com>
Reviewed-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/megaraid/megaraid_sas.h
drivers/scsi/megaraid/megaraid_sas_base.c

index b47279336ab351d407eb52148c217a5e16408d78..14779464a2d1f3cb0896465a5578d142f50ab05e 100644 (file)
@@ -2188,7 +2188,6 @@ struct megasas_instance {
        struct megasas_evt_detail *evt_detail;
        dma_addr_t evt_detail_h;
        struct megasas_cmd *aen_cmd;
-       struct mutex hba_mutex;
        struct semaphore ioctl_sem;
 
        struct Scsi_Host *host;
index 6ade70788e6be74e44b4a244c06897ee00094a27..49d296f0abc9b2f894fe90098eb08ab3e441ed98 100644 (file)
@@ -1953,7 +1953,7 @@ static int megasas_slave_configure(struct scsi_device *sdev)
                }
        }
 
-       mutex_lock(&instance->hba_mutex);
+       mutex_lock(&instance->reset_mutex);
        /* Send DCMD to Firmware and cache the information */
        if ((instance->pd_info) && !MEGASAS_IS_LOGICAL(sdev))
                megasas_get_pd_info(instance, sdev);
@@ -1967,7 +1967,7 @@ static int megasas_slave_configure(struct scsi_device *sdev)
        is_target_prop = (ret_target_prop == DCMD_SUCCESS) ? true : false;
        megasas_set_static_target_properties(sdev, is_target_prop);
 
-       mutex_unlock(&instance->hba_mutex);
+       mutex_unlock(&instance->reset_mutex);
 
        /* This sdev property may change post OCR */
        megasas_set_dynamic_target_properties(sdev);
@@ -6384,7 +6384,6 @@ static inline void megasas_init_ctrl_params(struct megasas_instance *instance)
        spin_lock_init(&instance->stream_lock);
        spin_lock_init(&instance->completion_lock);
 
-       mutex_init(&instance->hba_mutex);
        mutex_init(&instance->reset_mutex);
 
        if ((instance->pdev->device == PCI_DEVICE_ID_LSI_SAS0073SKINNY) ||