From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 73F47465FE for ; Tue, 22 Apr 2025 17:52:10 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 1BB824064C; Tue, 22 Apr 2025 17:52:08 +0200 (CEST) Received: from mail-wm1-f97.google.com (mail-wm1-f97.google.com [209.85.128.97]) by mails.dpdk.org (Postfix) with ESMTP id 961E84042C for ; Tue, 22 Apr 2025 17:52:05 +0200 (CEST) Received: by mail-wm1-f97.google.com with SMTP id 5b1f17b1804b1-43cf848528aso39990155e9.2 for ; Tue, 22 Apr 2025 08:52:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=6wind.com; s=google; t=1745337125; x=1745941925; darn=dpdk.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=vgCelfETtI+N4Z68aWSWsog/0E0r97+wH2F9cVJMXj4=; b=CQuj7nI1uGcNYPIjBG1wjYkaXW5pX4D60IZSFSeT2dUpQGNMLxTiD259luJ+stQv+x jpI0RXEqsq3fjTK11wowiMfBEXB+d0+XEr8Okn48riiJsq59l9ha/ZUUyburS1Z+Uo6I WGxNVmkLxV+R/ycBjY2v6igZHmFskzmLeCupeNTxWReHL71Ic8Pr841UH84Z3Db5boAp 3/KBo8dRbzygwV3STE+tmSnfw/JAQvQXcRJx5NVffUECCeatblY0lb051afsDSKwI9zm Xzl/Uwi5drqeyd2w9MNGOQz2dACjma4OxPdCDwnYvZN4VW4ZcBVQzPnwXZXNb8tRqyeY D+fg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1745337125; x=1745941925; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=vgCelfETtI+N4Z68aWSWsog/0E0r97+wH2F9cVJMXj4=; b=Pvfa2JRw63TYtKT6r1e7ZJgpsw40T0BDTcp3XvyKHoS5d8+cDq+/ccgtWO+4yA9Ogk OsCsrzym8zgFD6IcXApJc32tJ8XaOQo4cA0RvGoBsyyr01CBBr50tCAJTmvSBOJNzmfb vlzbGq5UQRY21XpyXV7X7E3QXKw1IeySMsvJ/Q55gOhWM7vB9b0KObyFOAwpC8MJsoNL gvi6YaAx6Fbw7pPQmRXip1vrMv2ZWDeg1lCVzQEwMdhcUB7FZgk4kYZNkHlBVXwNXx3h JAjaG4HJj2VNN5OLJTbRvesG9kadjsUu7uk8J4Yu3xNbmtIO0fKj8ommAmb/TR97VT/C 0jqw== X-Forwarded-Encrypted: i=1; AJvYcCXOGO7Y4tBYlA6pC1mmde9+FCIOfIaPAxvI1PvEiyLQ6esk6cvpJTt32gszAwRN55K6AaUVnH0=@dpdk.org X-Gm-Message-State: AOJu0YzCnJUb8NuSavaiLUPrzFpEGczPYlR4pbmvbtBYdSuMTOjFmZMh 5I+8XlVpFC0V5BEjJM1c+haWOcoo9nMpUrbrNzWGeN5Tmjas7Rp7lFM+oDtSTwMlagr8fgNgv01 R6oBO0zIf87IdrZKF2pGp39a/pXHbVFV2 X-Gm-Gg: ASbGncthP2rg1IkS8j97ePzUbFjgNuhBwR0tlaXqVgEy4j+y9NZ9ZMBYlnzE4AI0yNA 4X8auwZ1n6gcNeuC+8cX866OG0whfZnmeK+DtpK6HMAwicmUR8Zm7b4e1jGC4fHJvOfa2XRYiup Ddbur6Vk7R4MoPdzuHlvMfKAovydv8EUOqCFYTYjAACY6lmaHdXd8goxaxLFe9yCFNmyfHZLQ4T rtZf8VGG2geXYWoBsCPQyKoAJ/rSPKUzFvB/UN1ySgyVf7VbjzJPqgHuDgp654cQSdndNC0871p aX0hMMYyooN2GtthnyYO1crjQukIJ64TsCnG2nXCxXEUu8rIiP6EtKpBBDHAyupVedI= X-Google-Smtp-Source: AGHT+IGay0Sv+hETrcj2JpT5aS32hUeteVQXmge4ltF3ThLSLip1n1iNxEZ2oN+eLaOCOrrVzSCLrPCBZ275 X-Received: by 2002:a05:600c:3c8d:b0:440:6a37:be09 with SMTP id 5b1f17b1804b1-4406abb1f63mr148939295e9.16.1745337125138; Tue, 22 Apr 2025 08:52:05 -0700 (PDT) Received: from smtpservice.6wind.com ([185.13.181.2]) by smtp-relay.gmail.com with ESMTP id 5b1f17b1804b1-4406d6e5560sm9701265e9.36.2025.04.22.08.52.04; Tue, 22 Apr 2025 08:52:05 -0700 (PDT) X-Relaying-Domain: 6wind.com Received: from localhost (dio.dev.6wind.com [10.17.1.86]) by smtpservice.6wind.com (Postfix) with ESMTP id D6E86360DC; Tue, 22 Apr 2025 17:52:04 +0200 (CEST) From: edwin.brossette@6wind.com To: dev@dpdk.org Cc: olivier.matz@6wind.com, didier.pallard@6wind.com, lauren.hardy@6wind.com, dsinghrawat@marvell.com, palok@marvell.com, Edwin Brossette , stable@dpdk.org Subject: [PATCH 5/5] net/qede: fix rx_buf_size calculation Date: Tue, 22 Apr 2025 17:51:43 +0200 Message-Id: <20250422155143.3893525-5-edwin.brossette@6wind.com> X-Mailer: git-send-email 2.35.0.4.g44a5d4affccf In-Reply-To: <20250422155143.3893525-1-edwin.brossette@6wind.com> References: <20250422155143.3893525-1-edwin.brossette@6wind.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-BeenThere: stable@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: patches for DPDK stable branches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: stable-bounces@dpdk.org From: Edwin Brossette When the MTU configured is lower than maximum mbuf size (all packet data can be stored in a single mbuf), then rx buffer size is configured with MTU + some overhead. A flooring is applied to this value to align it, meaning its actual value is going to be lower than expected. This is a considerable design flaw, because a data packet fitting exactly the MTU might not fit in the rx buffer. What is observed in this case is that the nic splits the datagram in two segments, essentially doing Rx scatter. However, the qede pmd does not expect gather scatter in this case and does not use the required function: it uses qede_recv_pkts_regular() which is not capable of handling this case. Thus, we end up with malformed packet with m->nb_segs = 2 and m->next = NULL. This means the last part of the data is missing. CEIL max_rx_pktlen instead of FLOORing it. Also change the check on max_rx_pktlen > bufsz in qede_rx_queue_setup(): if this ceiling would make max_rx_pktlen exceed mbuf size, then force enable scatter-gather mode. Fixes: 318d7da3122b ("net/qede: fix Rx buffer size calculation") CC: stable@dpdk.org Signed-off-by: Edwin Brossette Acked-by: Didier Pallard --- drivers/net/qede/qede_rxtx.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/net/qede/qede_rxtx.c b/drivers/net/qede/qede_rxtx.c index ea77f09e18be..2a6f1290ad4a 100644 --- a/drivers/net/qede/qede_rxtx.c +++ b/drivers/net/qede/qede_rxtx.c @@ -111,7 +111,7 @@ qede_calc_rx_buf_size(struct rte_eth_dev *dev, uint16_t mbufsz, rx_buf_size = max_frame_size; /* Align to cache-line size if needed */ - return QEDE_FLOOR_TO_CACHE_LINE_SIZE(rx_buf_size); + return QEDE_CEIL_TO_CACHE_LINE_SIZE(rx_buf_size); } static struct qede_rx_queue * @@ -237,7 +237,7 @@ qede_rx_queue_setup(struct rte_eth_dev *dev, uint16_t qid, /* cache align the mbuf size to simplify rx_buf_size calculation */ bufsz = QEDE_FLOOR_TO_CACHE_LINE_SIZE(bufsz); if ((rxmode->offloads & RTE_ETH_RX_OFFLOAD_SCATTER) || - max_rx_pktlen > bufsz) { + QEDE_CEIL_TO_CACHE_LINE_SIZE(max_rx_pktlen) > bufsz) { if (!dev->data->scattered_rx) { DP_INFO(edev, "Forcing scatter-gather mode\n"); dev->data->scattered_rx = 1; -- 2.35.0.4.g44a5d4affccf