DPDK patches and discussions
 help / color / mirror / Atom feed
From: Ajit Khaparde <ajit.khaparde@broadcom.com>
To: Kalesh A P <kalesh-anakkur.purayil@broadcom.com>
Cc: dpdk-dev <dev@dpdk.org>, Ferruh Yigit <ferruh.yigit@intel.com>
Subject: Re: [dpdk-dev] [PATCH] net/bnxt: fix memory allocation for command response
Date: Mon, 22 Mar 2021 11:29:31 -0700	[thread overview]
Message-ID: <CACZ4nhsS5cN9Hq7ukR-iqzH5qn2njW6HhR4vEFNOfAPte3b3-w@mail.gmail.com> (raw)
In-Reply-To: <20210320064917.11740-1-kalesh-anakkur.purayil@broadcom.com>

[-- Attachment #1: Type: text/plain, Size: 4106 bytes --]

On Fri, Mar 19, 2021 at 11:27 PM Kalesh A P
<kalesh-anakkur.purayil@broadcom.com> wrote:
>
> From: Kalesh AP <kalesh-anakkur.purayil@broadcom.com>
>
> Driver re-allocates memory for the command response buffer
> when the installed firmware version is newer (and has a larger
> max response length) than the version of HWRM that was used to
> build the PMD.
>
> This change helps to avoid the re-allocation by allocating the
> memory for the command response buffer with PAGE_SIZE.
>
> Coverity issue: 366256, 366204, 366180
> Fixes: b7778e8a1c00 ("net/bnxt: refactor to properly allocate resources for PF/VF")
> Cc: stable@dpdk.org
>
> Signed-off-by: Kalesh AP <kalesh-anakkur.purayil@broadcom.com>
> Reviewed-by: Somnath Kotur <somnath.kotur@broadcom.com>
> Reviewed-by: Ajit Kumar Khaparde <ajit.khaparde@broadcom.com>
> Reviewed-by: Lance Richardson <lance.richardson@broadcom.com>
Patch applied to dpdk-next-net-brcm. Thanks

> ---
>  drivers/net/bnxt/bnxt_ethdev.c |  2 +-
>  drivers/net/bnxt/bnxt_hwrm.c   | 27 ++++-----------------------
>  2 files changed, 5 insertions(+), 24 deletions(-)
>
> diff --git a/drivers/net/bnxt/bnxt_ethdev.c b/drivers/net/bnxt/bnxt_ethdev.c
> index 3724752..ed2ae45 100644
> --- a/drivers/net/bnxt/bnxt_ethdev.c
> +++ b/drivers/net/bnxt/bnxt_ethdev.c
> @@ -5608,7 +5608,7 @@ static int bnxt_drv_init(struct rte_eth_dev *eth_dev)
>         rc = bnxt_alloc_hwrm_resources(bp);
>         if (rc) {
>                 PMD_DRV_LOG(ERR,
> -                           "Failed to allocate hwrm resource rc: %x\n", rc);
> +                           "Failed to allocate response buffer rc: %x\n", rc);
>                 return rc;
>         }
>         rc = bnxt_alloc_leds_info(bp);
> diff --git a/drivers/net/bnxt/bnxt_hwrm.c b/drivers/net/bnxt/bnxt_hwrm.c
> index e3a0731..6a70b6e 100644
> --- a/drivers/net/bnxt/bnxt_hwrm.c
> +++ b/drivers/net/bnxt/bnxt_hwrm.c
> @@ -1284,28 +1284,8 @@ int bnxt_hwrm_ver_get(struct bnxt *bp, uint32_t timeout)
>         max_resp_len = rte_le_to_cpu_16(resp->max_resp_len);
>         dev_caps_cfg = rte_le_to_cpu_32(resp->dev_caps_cfg);
>
> -       if (bp->max_resp_len != max_resp_len) {
> -               sprintf(type, "bnxt_hwrm_" PCI_PRI_FMT,
> -                       bp->pdev->addr.domain, bp->pdev->addr.bus,
> -                       bp->pdev->addr.devid, bp->pdev->addr.function);
> -
> -               rte_free(bp->hwrm_cmd_resp_addr);
> -
> -               bp->hwrm_cmd_resp_addr = rte_malloc(type, max_resp_len, 0);
> -               if (bp->hwrm_cmd_resp_addr == NULL) {
> -                       rc = -ENOMEM;
> -                       goto error;
> -               }
> -               bp->hwrm_cmd_resp_dma_addr =
> -                       rte_malloc_virt2iova(bp->hwrm_cmd_resp_addr);
> -               if (bp->hwrm_cmd_resp_dma_addr == RTE_BAD_IOVA) {
> -                       PMD_DRV_LOG(ERR,
> -                       "Unable to map response buffer to physical memory.\n");
> -                       rc = -ENOMEM;
> -                       goto error;
> -               }
> -               bp->max_resp_len = max_resp_len;
> -       }
> +       RTE_VERIFY(max_resp_len <= bp->max_resp_len);
> +       bp->max_resp_len = max_resp_len;
>
>         if ((dev_caps_cfg &
>                 HWRM_VER_GET_OUTPUT_DEV_CAPS_CFG_SHORT_CMD_SUPPORTED) &&
> @@ -2804,7 +2784,7 @@ int bnxt_alloc_hwrm_resources(struct bnxt *bp)
>
>         sprintf(type, "bnxt_hwrm_" PCI_PRI_FMT, pdev->addr.domain,
>                 pdev->addr.bus, pdev->addr.devid, pdev->addr.function);
> -       bp->max_resp_len = HWRM_MAX_RESP_LEN;
> +       bp->max_resp_len = BNXT_PAGE_SIZE;
>         bp->hwrm_cmd_resp_addr = rte_malloc(type, bp->max_resp_len, 0);
>         if (bp->hwrm_cmd_resp_addr == NULL)
>                 return -ENOMEM;
> @@ -6057,6 +6037,7 @@ int bnxt_hwrm_poll_ver_get(struct bnxt *bp)
>         int rc = 0;
>
>         bp->max_req_len = HWRM_MAX_REQ_LEN;
> +       bp->max_resp_len = BNXT_PAGE_SIZE;
>         bp->hwrm_cmd_timeout = SHORT_HWRM_CMD_TIMEOUT;
>
>         HWRM_PREP(&req, HWRM_VER_GET, BNXT_USE_CHIMP_MB);
> --
> 2.10.1
>

      reply	other threads:[~2021-03-22 18:29 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-03-20  6:49 Kalesh A P
2021-03-22 18:29 ` Ajit Khaparde [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=CACZ4nhsS5cN9Hq7ukR-iqzH5qn2njW6HhR4vEFNOfAPte3b3-w@mail.gmail.com \
    --to=ajit.khaparde@broadcom.com \
    --cc=dev@dpdk.org \
    --cc=ferruh.yigit@intel.com \
    --cc=kalesh-anakkur.purayil@broadcom.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).