lkml.org 
[lkml]   [2020]   [Jun]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.19 077/267] scsi: megaraid_sas: TM command refire leads to controller firmware crash
    Date
    From: Sumit Saxena <sumit.saxena@broadcom.com>

    commit 6fd8525a70221c26823b1c7e912fb21f218fb0c5 upstream.

    When TM command times out, driver invokes the controller reset. Post reset,
    driver re-fires pended TM commands which leads to firmware crash.

    Post controller reset, return pended TM commands back to OS.

    Link: https://lore.kernel.org/r/20200508085242.23406-1-chandrakanth.patil@broadcom.com
    Cc: stable@vger.kernel.org
    Signed-off-by: Sumit Saxena <sumit.saxena@broadcom.com>
    Signed-off-by: Chandrakanth Patil <chandrakanth.patil@broadcom.com>
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    drivers/scsi/megaraid/megaraid_sas_fusion.c | 7 ++++++-
    1 file changed, 6 insertions(+), 1 deletion(-)

    --- a/drivers/scsi/megaraid/megaraid_sas_fusion.c
    +++ b/drivers/scsi/megaraid/megaraid_sas_fusion.c
    @@ -3940,6 +3940,7 @@ void megasas_refire_mgmt_cmd(struct mega
    struct fusion_context *fusion;
    struct megasas_cmd *cmd_mfi;
    union MEGASAS_REQUEST_DESCRIPTOR_UNION *req_desc;
    + struct MPI2_RAID_SCSI_IO_REQUEST *scsi_io_req;
    u16 smid;
    bool refire_cmd = 0;
    u8 result;
    @@ -3990,6 +3991,11 @@ void megasas_refire_mgmt_cmd(struct mega
    break;
    }

    + scsi_io_req = (struct MPI2_RAID_SCSI_IO_REQUEST *)
    + cmd_fusion->io_request;
    + if (scsi_io_req->Function == MPI2_FUNCTION_SCSI_TASK_MGMT)
    + result = RETURN_CMD;
    +
    switch (result) {
    case REFIRE_CMD:
    megasas_fire_cmd_fusion(instance, req_desc);
    @@ -4187,7 +4193,6 @@ megasas_issue_tm(struct megasas_instance
    if (!timeleft) {
    dev_err(&instance->pdev->dev,
    "task mgmt type 0x%x timed out\n", type);
    - cmd_mfi->flags |= DRV_DCMD_SKIP_REFIRE;
    mutex_unlock(&instance->reset_mutex);
    rc = megasas_reset_fusion(instance->host, MFI_IO_TIMEOUT_OCR);
    mutex_lock(&instance->reset_mutex);

    \
     
     \ /
      Last update: 2020-06-19 18:29    [W:4.536 / U:0.244 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site