All of lore.kernel.org
 help / color / mirror / Atom feed
From: bugzilla@dpdk.org
To: dev@dpdk.org
Subject: [DPDK/ethdev Bug 1779] Packet segments do not get freed in mprq_buf_to_pkt() upon encountering MLX5_RXQ_CODE_NOMBUF
Date: Thu, 21 Aug 2025 03:11:37 +0000	[thread overview]
Message-ID: <bug-1779-3@https.bugs.dpdk.org/> (raw)

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

https://bugs.dpdk.org/show_bug.cgi?id=1779

            Bug ID: 1779
           Summary: Packet segments do not get freed in mprq_buf_to_pkt()
                    upon encountering MLX5_RXQ_CODE_NOMBUF
           Product: DPDK
           Version: 22.11
          Hardware: x86
                OS: Linux
            Status: UNCONFIRMED
          Severity: major
          Priority: Normal
         Component: ethdev
          Assignee: dev@dpdk.org
          Reporter: canary.overflow@gmail.com
  Target Milestone: ---

drivers/net/mlx5/mlx5_rx.h mprq_buf_to_pkt(...):

There are 2 issues: 

- uint32_t seg_len = RTE_MIN(len, (uint32_t)(pkt->buf_len -
RTE_PKTMBUF_HEADROOM)) seems unnecessary as to hit this code, len has to be
greater than (uint32_t)(pkt->buf_len - RTE_PKTMBUF_HEADROOM) due to the if
condition

- If the allocation struct rte_mbuf *next = rte_pktmbuf_alloc(rxq->mp) fails
and packet has more than 2 segs, the segs that were allocated previously do not
get freed 

    mprq_buf_to_pkt(...) {
        ...        
        } else if (rxq->strd_scatter_en) {
            struct rte_mbuf *prev = pkt;
            uint32_t seg_len = RTE_MIN(len, (uint32_t)
            (pkt->buf_len - RTE_PKTMBUF_HEADROOM));
            uint32_t rem_len = len - seg_len;

            rte_memcpy(rte_pktmbuf_mtod(pkt, void *), addr, seg_len);
            DATA_LEN(pkt) = seg_len;
            while (rem_len) {
                struct rte_mbuf *next = rte_pktmbuf_alloc(rxq->mp);

                if (unlikely(next == NULL))
                    return MLX5_RXQ_CODE_NOMBUF;
                ...
            }
            ...
        }
        ...
    }

Should rte_pktmbuf_free() be used instead?

-- 
You are receiving this mail because:
You are the assignee for the bug.

[-- Attachment #2: Type: text/html, Size: 3736 bytes --]

                 reply	other threads:[~2025-08-21  3:11 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

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=bug-1779-3@https.bugs.dpdk.org/ \
    --to=bugzilla@dpdk.org \
    --cc=dev@dpdk.org \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.