Commit c3e385a1 authored by Sumit Saxena's avatar Sumit Saxena Committed by Martin K. Petersen

megaraid_sas: reduce memory footprints in kdump mode

This patch will reduce memory footprints of megaraid_sas driver when
booted in kdump mode.  Driver will not allocate memory for optional and
perfromance oriented features.  Below are key changes done in
megaraid_sas driver to do this:

1. Limit Controller's queue depth to 100 in kdump mode.

2. Do not allocate memory for system info buffer and PD info buffer.

3. Disable performance oriented features e.g. Disable RDPQ mode, disable
   dual queue depth, restrict to single MSI-x vector.
Signed-off-by: default avatarSumit Saxena <sumit.saxena@broadcom.com>
Reviewed-by: default avatarHannes Reinicke <hare@suse.de>
Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
parent 1f275f97
...@@ -1344,6 +1344,8 @@ struct megasas_ctrl_info { ...@@ -1344,6 +1344,8 @@ struct megasas_ctrl_info {
#define SCAN_PD_CHANNEL 0x1 #define SCAN_PD_CHANNEL 0x1
#define SCAN_VD_CHANNEL 0x2 #define SCAN_VD_CHANNEL 0x2
#define MEGASAS_KDUMP_QUEUE_DEPTH 100
enum MR_SCSI_CMD_TYPE { enum MR_SCSI_CMD_TYPE {
READ_WRITE_LDIO = 0, READ_WRITE_LDIO = 0,
NON_READ_WRITE_LDIO = 1, NON_READ_WRITE_LDIO = 1,
......
...@@ -5761,13 +5761,6 @@ static int megasas_probe_one(struct pci_dev *pdev, ...@@ -5761,13 +5761,6 @@ static int megasas_probe_one(struct pci_dev *pdev,
break; break;
} }
instance->system_info_buf = pci_zalloc_consistent(pdev,
sizeof(struct MR_DRV_SYSTEM_INFO),
&instance->system_info_h);
if (!instance->system_info_buf)
dev_info(&instance->pdev->dev, "Can't allocate system info buffer\n");
/* Crash dump feature related initialisation*/ /* Crash dump feature related initialisation*/
instance->drv_buf_index = 0; instance->drv_buf_index = 0;
instance->drv_buf_alloc = 0; instance->drv_buf_alloc = 0;
...@@ -5777,14 +5770,6 @@ static int megasas_probe_one(struct pci_dev *pdev, ...@@ -5777,14 +5770,6 @@ static int megasas_probe_one(struct pci_dev *pdev,
spin_lock_init(&instance->crashdump_lock); spin_lock_init(&instance->crashdump_lock);
instance->crash_dump_buf = NULL; instance->crash_dump_buf = NULL;
if (!reset_devices)
instance->crash_dump_buf = pci_alloc_consistent(pdev,
CRASH_DMA_BUF_SIZE,
&instance->crash_dump_h);
if (!instance->crash_dump_buf)
dev_err(&pdev->dev, "Can't allocate Firmware "
"crash dump DMA buffer\n");
megasas_poll_wait_aen = 0; megasas_poll_wait_aen = 0;
instance->flag_ieee = 0; instance->flag_ieee = 0;
instance->ev = NULL; instance->ev = NULL;
...@@ -5803,11 +5788,26 @@ static int megasas_probe_one(struct pci_dev *pdev, ...@@ -5803,11 +5788,26 @@ static int megasas_probe_one(struct pci_dev *pdev,
goto fail_alloc_dma_buf; goto fail_alloc_dma_buf;
} }
instance->pd_info = pci_alloc_consistent(pdev, if (!reset_devices) {
sizeof(struct MR_PD_INFO), &instance->pd_info_h); instance->system_info_buf = pci_zalloc_consistent(pdev,
sizeof(struct MR_DRV_SYSTEM_INFO),
&instance->system_info_h);
if (!instance->system_info_buf)
dev_info(&instance->pdev->dev, "Can't allocate system info buffer\n");
instance->pd_info = pci_alloc_consistent(pdev,
sizeof(struct MR_PD_INFO), &instance->pd_info_h);
if (!instance->pd_info) if (!instance->pd_info)
dev_err(&instance->pdev->dev, "Failed to alloc mem for pd_info\n"); dev_err(&instance->pdev->dev, "Failed to alloc mem for pd_info\n");
instance->crash_dump_buf = pci_alloc_consistent(pdev,
CRASH_DMA_BUF_SIZE,
&instance->crash_dump_h);
if (!instance->crash_dump_buf)
dev_err(&pdev->dev, "Can't allocate Firmware "
"crash dump DMA buffer\n");
}
/* /*
* Initialize locks and queues * Initialize locks and queues
...@@ -7173,6 +7173,16 @@ static int __init megasas_init(void) ...@@ -7173,6 +7173,16 @@ static int __init megasas_init(void)
{ {
int rval; int rval;
/*
* Booted in kdump kernel, minimize memory footprints by
* disabling few features
*/
if (reset_devices) {
msix_vectors = 1;
rdpq_enable = 0;
dual_qdepth_disable = 1;
}
/* /*
* Announce driver version and other information * Announce driver version and other information
*/ */
......
...@@ -257,6 +257,9 @@ megasas_fusion_update_can_queue(struct megasas_instance *instance, int fw_boot_c ...@@ -257,6 +257,9 @@ megasas_fusion_update_can_queue(struct megasas_instance *instance, int fw_boot_c
if (!instance->is_rdpq) if (!instance->is_rdpq)
instance->max_fw_cmds = min_t(u16, instance->max_fw_cmds, 1024); instance->max_fw_cmds = min_t(u16, instance->max_fw_cmds, 1024);
if (reset_devices)
instance->max_fw_cmds = min(instance->max_fw_cmds,
(u16)MEGASAS_KDUMP_QUEUE_DEPTH);
/* /*
* Reduce the max supported cmds by 1. This is to ensure that the * Reduce the max supported cmds by 1. This is to ensure that the
* reply_q_sz (1 more than the max cmd that driver may send) * reply_q_sz (1 more than the max cmd that driver may send)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment