[PATCH 03/14] common/sfc_efx/base: reduce stack in set addr regions MCDI
From: Ivan Malov <hidden>
Date: 2026-08-11 17:48:52
Subsystem:
the rest · Maintainer:
Linus Torvalds
From: Andy Moreton <redacted>
Code analysis reports an error for excessive stack consumption
(over 1KB). Use a heap allocated payload buffer instead.
Fixes: 60fb370c7bc9 ("common/sfc_efx/base: support NIC DMA memory regions API")
Cc: stable@dpdk.org
Signed-off-by: Andy Moreton <redacted>
Reviewed-by: Ivan Malov <redacted>
Reviewed-by: Viacheslav Galaktionov <redacted>
---
drivers/common/sfc_efx/base/efx_mcdi.c | 21 +++++++++++++++++----
1 file changed, 17 insertions(+), 4 deletions(-)
diff --git a/drivers/common/sfc_efx/base/efx_mcdi.c b/drivers/common/sfc_efx/base/efx_mcdi.c
index 7dc58992be..58ad1a1bc1 100644
--- a/drivers/common/sfc_efx/base/efx_mcdi.c
+++ b/drivers/common/sfc_efx/base/efx_mcdi.c@@ -3550,12 +3550,11 @@ efx_mcdi_set_nic_addr_regions( __in efx_nic_t *enp, __in const efx_nic_dma_region_info_t *endrip) { - EFX_MCDI_DECLARE_BUF(payload, - MC_CMD_SET_DESC_ADDR_REGIONS_IN_LENMAX_MCDI2, - MC_CMD_SET_DESC_ADDR_REGIONS_OUT_LEN); efx_qword_t *trgt_addr_base; + uint8_t *payload = NULL; efx_mcdi_req_t req; unsigned int i; + size_t size; efx_rc_t rc; if (endrip->endri_count >
@@ -3564,6 +3563,15 @@ efx_mcdi_set_nic_addr_regions( goto fail1; } + size = MAX(MC_CMD_SET_DESC_ADDR_REGIONS_IN_LEN(endrip->endri_count), + MC_CMD_SET_DESC_ADDR_REGIONS_OUT_LEN); + + EFSYS_KMEM_ALLOC(enp->en_esip, size, payload); + if (payload == NULL) { + rc = ENOMEM; + goto fail2; + } + req.emr_cmd = MC_CMD_SET_DESC_ADDR_REGIONS; req.emr_in_buf = payload; req.emr_in_length =
@@ -3598,11 +3606,16 @@ efx_mcdi_set_nic_addr_regions( if (req.emr_rc != 0) { rc = req.emr_rc; - goto fail2; + goto fail3; } + EFSYS_KMEM_FREE(enp->en_esip, size, payload); + return (0); +fail3: + EFSYS_PROBE(fail3); + EFSYS_KMEM_FREE(enp->en_esip, size, payload); fail2: EFSYS_PROBE(fail2); fail1:
--
2.47.3