mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-18 10:13:57 +08:00
[SCSI] megaraid_sas: Add driver workaround for PERC5/1068 kdump kernel panic
The following patch for megaraid_sas adds a driver workaround for PERC5/1068 based controller FW that keeps a command from the main kernel that the driver cannot cancel which was causing a kernel panic in shutdown of the kdump kernel. Signed-off-by: Adam Radford <aradford@gmail.com> Signed-off-by: James Bottomley <JBottomley@Parallels.com>
This commit is contained in:
parent
c8e858fe72
commit
e5f93a36f7
@ -139,6 +139,7 @@
|
||||
#define MFI_CMD_ABORT 0x06
|
||||
#define MFI_CMD_SMP 0x07
|
||||
#define MFI_CMD_STP 0x08
|
||||
#define MFI_CMD_INVALID 0xff
|
||||
|
||||
#define MR_DCMD_CTRL_GET_INFO 0x01010000
|
||||
#define MR_DCMD_LD_GET_LIST 0x03010000
|
||||
|
@ -215,6 +215,10 @@ megasas_return_cmd(struct megasas_instance *instance, struct megasas_cmd *cmd)
|
||||
|
||||
cmd->scmd = NULL;
|
||||
cmd->frame_count = 0;
|
||||
if ((instance->pdev->device != PCI_DEVICE_ID_LSI_FUSION) &&
|
||||
(instance->pdev->device != PCI_DEVICE_ID_LSI_INVADER) &&
|
||||
(reset_devices))
|
||||
cmd->frame->hdr.cmd = MFI_CMD_INVALID;
|
||||
list_add_tail(&cmd->list, &instance->cmd_pool);
|
||||
|
||||
spin_unlock_irqrestore(&instance->cmd_pool_lock, flags);
|
||||
@ -2165,7 +2169,16 @@ megasas_complete_cmd(struct megasas_instance *instance, struct megasas_cmd *cmd,
|
||||
cmd->scmd->SCp.ptr = NULL;
|
||||
|
||||
switch (hdr->cmd) {
|
||||
|
||||
case MFI_CMD_INVALID:
|
||||
/* Some older 1068 controller FW may keep a pended
|
||||
MR_DCMD_CTRL_EVENT_GET_INFO left over from the main kernel
|
||||
when booting the kdump kernel. Ignore this command to
|
||||
prevent a kernel panic on shutdown of the kdump kernel. */
|
||||
printk(KERN_WARNING "megaraid_sas: MFI_CMD_INVALID command "
|
||||
"completed.\n");
|
||||
printk(KERN_WARNING "megaraid_sas: If you have a controller "
|
||||
"other than PERC5, please upgrade your firmware.\n");
|
||||
break;
|
||||
case MFI_CMD_PD_SCSI_IO:
|
||||
case MFI_CMD_LD_SCSI_IO:
|
||||
|
||||
@ -2934,6 +2947,10 @@ static int megasas_create_frame_pool(struct megasas_instance *instance)
|
||||
memset(cmd->frame, 0, total_sz);
|
||||
cmd->frame->io.context = cmd->index;
|
||||
cmd->frame->io.pad_0 = 0;
|
||||
if ((instance->pdev->device != PCI_DEVICE_ID_LSI_FUSION) &&
|
||||
(instance->pdev->device != PCI_DEVICE_ID_LSI_INVADER) &&
|
||||
(reset_devices))
|
||||
cmd->frame->hdr.cmd = MFI_CMD_INVALID;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
Loading…
Reference in New Issue
Block a user