[PATCH v2 03/14] common/sfc_efx/base: reduce stack in set addr regions MCDI
Ivan Malov <[email protected]>
| Newsgroups | org.dpdk.dev |
|---|---|
| Message-ID | <[email protected]> |
From: Andy Moreton <[email protected]> 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: [email protected] Signed-off-by: Andy Moreton <[email protected]> Reviewed-by: Ivan Malov <[email protected]> Reviewed-by: Viacheslav Galaktionov <[email protected]> --- 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