diff mbox series

[01/42] lpfc: Limit xri count for kdump environment

Message ID 20190814235712.4487-2-jsmart2021@gmail.com (mailing list archive)
State Accepted
Headers show
Series lpfc: Update lpfc to revision 12.4.0.0 | expand

Commit Message

James Smart Aug. 14, 2019, 11:56 p.m. UTC
SCSI-MQ operation inherently performs pre-allocation of resources
for blk-mq request queues. Even though the kdump environment reduces
the configuration to a single cpu, thus 1 hardware queue, which helps
significantly, the resources are still rather large due to the per
request allocations. Blk-mq pre-allocations can be over 4KB per
request.  With adapter can_queue values in the 4k or 8k range, this
can easily be 32MBs before any other driver memory is factored in.
Driver SGL dma buffer allocation can be up to 8KB per request as well
adding an additional 64MBs. Totals are well over 100MBs for a single
shost.  Given kdump memory auto-sizing utilities don't accommodate
this amount of memory well, its very possible for kdump to fail due
to lack of memory.

Fix by having the driver recognize that it is booting within a kdump
context and reduce the number of requests it will support to a more
reasonable value.

Signed-off-by: Dick Kennedy <dick.kennedy@broadcom.com>
Signed-off-by: James Smart <jsmart2021@gmail.com>
---
 drivers/scsi/lpfc/lpfc_init.c | 5 +++++
 1 file changed, 5 insertions(+)
diff mbox series

Patch

diff --git a/drivers/scsi/lpfc/lpfc_init.c b/drivers/scsi/lpfc/lpfc_init.c
index 1ac98becb5ba..02231370428a 100644
--- a/drivers/scsi/lpfc/lpfc_init.c
+++ b/drivers/scsi/lpfc/lpfc_init.c
@@ -39,6 +39,7 @@ 
 #include <linux/msi.h>
 #include <linux/irq.h>
 #include <linux/bitops.h>
+#include <linux/crash_dump.h>
 
 #include <scsi/scsi.h>
 #include <scsi/scsi_device.h>
@@ -8309,6 +8310,10 @@  lpfc_sli4_read_config(struct lpfc_hba *phba)
 			bf_get(lpfc_mbx_rd_conf_extnts_inuse, rd_config);
 		phba->sli4_hba.max_cfg_param.max_xri =
 			bf_get(lpfc_mbx_rd_conf_xri_count, rd_config);
+		/* Reduce resource usage in kdump environment */
+		if (is_kdump_kernel() &&
+		    phba->sli4_hba.max_cfg_param.max_xri > 512)
+			phba->sli4_hba.max_cfg_param.max_xri = 512;
 		phba->sli4_hba.max_cfg_param.xri_base =
 			bf_get(lpfc_mbx_rd_conf_xri_base, rd_config);
 		phba->sli4_hba.max_cfg_param.max_vpi =