scsi: mpt3sas: Fix trace buffer registration failed
authorSreekanth Reddy <sreekanth.reddy@broadcom.com>
Thu, 25 Aug 2022 07:54:55 +0000 (13:24 +0530)
committerMartin K. Petersen <martin.petersen@oracle.com>
Thu, 1 Sep 2022 04:15:46 +0000 (00:15 -0400)
The ExtendedType field was set to 1 in the diag buffer register command and
hence MPT Endpoint firmware is failing the request with Invalid Field
IOCStatus.

memset the request frame to zero before framing the diag buffer register
command.

Link: https://lore.kernel.org/r/20220825075457.16422-3-sreekanth.reddy@broadcom.com
Signed-off-by: Sreekanth Reddy <sreekanth.reddy@broadcom.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/mpt3sas/mpt3sas_ctl.c

index c47da95..0d8b1e9 100644 (file)
@@ -1694,6 +1694,7 @@ _ctl_diag_register_2(struct MPT3SAS_ADAPTER *ioc,
        ioc->ctl_cmds.status = MPT3_CMD_PENDING;
        memset(ioc->ctl_cmds.reply, 0, ioc->reply_sz);
        mpi_request = mpt3sas_base_get_msg_frame(ioc, smid);
+       memset(mpi_request, 0, ioc->request_sz);
        ioc->ctl_cmds.smid = smid;
 
        request_data = ioc->diag_buffer[buffer_type];
@@ -1795,6 +1796,7 @@ _ctl_diag_register_2(struct MPT3SAS_ADAPTER *ioc,
        if (rc && request_data) {
                dma_free_coherent(&ioc->pdev->dev, request_data_sz,
                    request_data, request_data_dma);
+               ioc->diag_buffer[buffer_type] = NULL;
                ioc->diag_buffer_status[buffer_type] &=
                    ~MPT3_DIAG_BUFFER_IS_DRIVER_ALLOCATED;
        }
@@ -2171,6 +2173,7 @@ mpt3sas_send_diag_release(struct MPT3SAS_ADAPTER *ioc, u8 buffer_type,
        ioc->ctl_cmds.status = MPT3_CMD_PENDING;
        memset(ioc->ctl_cmds.reply, 0, ioc->reply_sz);
        mpi_request = mpt3sas_base_get_msg_frame(ioc, smid);
+       memset(mpi_request, 0, ioc->request_sz);
        ioc->ctl_cmds.smid = smid;
 
        mpi_request->Function = MPI2_FUNCTION_DIAG_RELEASE;
@@ -2425,6 +2428,7 @@ _ctl_diag_read_buffer(struct MPT3SAS_ADAPTER *ioc, void __user *arg)
        ioc->ctl_cmds.status = MPT3_CMD_PENDING;
        memset(ioc->ctl_cmds.reply, 0, ioc->reply_sz);
        mpi_request = mpt3sas_base_get_msg_frame(ioc, smid);
+       memset(mpi_request, 0, ioc->request_sz);
        ioc->ctl_cmds.smid = smid;
 
        mpi_request->Function = MPI2_FUNCTION_DIAG_BUFFER_POST;