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 c47da95b97897b507f08e9da9d9f41f57e9b9db2..0d8b1e942dedaa186a3dc709fc236745182e916c 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;