From: Stephen Hemminger <stephen@networkplumber.org>
To: Joshua Washington <joshwash@google.com>
Cc: dev@dpdk.org
Subject: Re: [PATCH 0/9] Stability fixes for GVE
Date: Thu, 2 Jul 2026 21:36:49 -0700 [thread overview]
Message-ID: <20260702213649.674d8b16@phoenix.local> (raw)
In-Reply-To: <CALuQH+XNRfWpd1zXm9GOe08h3z7DHb=FdV5jOnqGFP4Y5E8q=Q@mail.gmail.com>
On Wed, 1 Jul 2026 12:59:18 -0700
Joshua Washington <joshwash@google.com> wrote:
> On Wed, Jul 1, 2026 at 11:50 AM Stephen Hemminger
> <stephen@networkplumber.org> wrote:
> >
> > On Wed, 1 Jul 2026 11:35:18 -0700
> > Joshua Washington <joshwash@google.com> wrote:
> >
> > > This patch series consists of mostly unrelated fixes in the GVE driver.
> > >
> > > Joshua Washington (9):
> > > net/gve: clear out shared memory region for stats report
> > > net/gve: delay adding mbuf head to software ring
> > > net/gve: copy data to QPL buffer when mbuf read does not
> > > net/gve: validate buf ID before processing Rx packet
> > > net/gve: set mbuf to null in software ring after use
> > > net/gve: free ctx mbuf if packet dropped after first segment
> > > net/gve: increase range of DMA memzone ids to 64 bits
> > > net/gve: don't reset ring size bounds to default on reset
> > > net/gve: restrict max ring size in GQ QPL to 2K
> > >
> > > drivers/net/gve/base/gve_adminq.c | 12 ++++++---
> > > drivers/net/gve/base/gve_osdep.h | 4 +--
> > > drivers/net/gve/gve_ethdev.c | 8 +++---
> > > drivers/net/gve/gve_ethdev.h | 1 +
> > > drivers/net/gve/gve_rx.c | 3 +++
> > > drivers/net/gve/gve_rx_dqo.c | 6 +++++
> > > drivers/net/gve/gve_tx.c | 42 +++++++++++++++++++------------
> > > 7 files changed, 52 insertions(+), 24 deletions(-)
> > >
> >
> > *Build Failed #1:
> > OS: OpenAnolis8.10-64
> > Target: x86_64-native-linuxapp-gcc
> > FAILED: drivers/libtmp_rte_net_gve.a.p/net_gve_gve_tx.c.o
> > gcc -Idrivers/libtmp_rte_net_gve.a.p -Idrivers -I../drivers -Idrivers/net/gve -I../drivers/net/gve -I../drivers/net/gve/base -Ilib/ethdev -I../lib/ethdev -Ilib/eal/common -I../lib/eal/common -I. -I.. -Iconfig -I../config -Ilib/eal/include -I../lib/eal/include -Ilib/eal/linux/include -I../lib/eal/linux/include -Ilib/eal/x86/include -I../lib/eal/x86/include -I../kernel/linux -Ilib/eal -I../lib/eal -Ilib/kvargs -I../lib/kvargs -Ilib/log -I../lib/log -Ilib/metrics -I../lib/metrics -Ilib/telemetry -I../lib/telemetry -Ilib/argparse -I../lib/argparse -Ilib/net -I../lib/net -Ilib/mbuf -I../lib/mbuf -Ilib/mempool -I../lib/mempool -Ilib/ring -I../lib/ring -Ilib/meter -I../lib/meter -Idrivers/bus/pci -I../drivers/bus/pci -I../drivers/bus/pci/linux -Ilib/pci -I../lib/pci -Idrivers/bus/vdev -I../drivers/bus/vdev -fdiagnostics-color=always -D_FILE_OFFSET_BITS=64 -Wall -Winvalid-pch -Wextra -Werror -std=c11 -O3 -include rte_config.h -Wvla -Wcast-qual -Wdeprecated -Wformat -Wformat-nonliteral -Wformat-security -Wmissing-declarations -Wmissing-prototypes -Wnested-externs -Wold-style-definition -Wpointer-arith -Wshadow -Wsign-compare -Wstrict-prototypes -Wundef -Wwrite-strings -Wno-packed-not-aligned -Wno-missing-field-initializers -D_GNU_SOURCE -fPIC -march=native -mrtm -DALLOW_EXPERIMENTAL_API -DALLOW_INTERNAL_API -Wno-format-truncation -Wno-vla -DRTE_COMPONENT_CLASS=pmd_net -DRTE_COMPONENT_NAME=gve -DRTE_LOG_DEFAULT_LOGTYPE=pmd.net.gve -MD -MQ drivers/libtmp_rte_net_gve.a.p/net_gve_gve_tx.c.o -MF drivers/libtmp_rte_net_gve.a.p/net_gve_gve_tx.c.o.d -o drivers/libtmp_rte_net_gve.a.p/net_gve_gve_tx.c.o -c ../drivers/net/gve/gve_tx.c
> > ../drivers/net/gve/gve_tx.c: In function ‘gve_tx_burst_qpl’:
> > ../drivers/net/gve/gve_tx.c:258:21: error: variable ‘addr’ set but not used [-Werror=unused-but-set-variable]
> > uint64_t ol_flags, addr, fifo_addr;
> > ^~~~
> > cc1: all warnings being treated as errors
> > [1640/3750] Compiling C object drivers/libtmp_rte_net_gve.a.p/net_gve_gve_rx.c.o
> > [1641/3750] Compiling C object drivers/libtmp_rte_net_hinic.a.p/net_hinic_base_hinic_pmd_cfg.c.o
> > [1642/3750] Compiling C object drivers/libtmp_rte_net_failsafe.a.p/net_failsafe_failsafe_ops.c.o
> > [1643/3750] Compiling C object drivers/libtmp_rte_net_hinic.a.p/net_hinic_base_hinic_pmd_api_cmd.c.o
> > [1644/3750] Compiling C object drivers/libtmp_rte_net_hinic.a.p/net_hinic_base_hinic_pmd_cmdq.c.o
> > [1645/3750] Compiling C object drivers/libtmp_rte_net_hinic.a.p/net_hinic_hinic_pmd_rx.c.o
> > [1646/3750] Compiling C object drivers/libtmp_rte_net_hinic.a.p/net_hinic_hinic_pmd_flow.c.o
> > [1647/3750] Compiling C object drivers/libtmp_rte_net_hinic.a.p/net_hinic_hinic_pmd_ethdev.c.o
> > [1648/3750] Compiling C object drivers/libtmp_rte_net_hinic.a.p/net_hinic_hinic_pmd_tx.c.o
> > ninja: build stopped
>
> Will fix in v2.
Here is AI review if it helps
Review of "net/gve" 9-patch series (bundle 1995)
Applied cleanly on top of 26.07-rc2 and built with
meson -Dbuildtype=minsize -Ddefault_library=static -Dwerror=true
The series is a solid set of datapath and reset-path bug fixes. One patch
breaks the build on its own, which blocks the series until fixed.
Patch 3/9 (net/gve: copy data to QPL buffer when mbuf read does not)
Error: build failure. Removing the two rte_memcpy() calls that consumed
'addr' leaves 'addr' set but never read, so the driver no longer compiles
under -Werror:
gve_tx.c: In function 'gve_tx_burst_qpl':
gve_tx.c:258:28: error: variable 'addr' set but not used
[-Werror=unused-but-set-variable]
Both remaining assignments are now dead:
addr = (uint64_t)(tx_pkt->buf_addr) + tx_pkt->data_off;
...
addr = (uint64_t)(tx_pkt->buf_addr) + tx_pkt->data_off + hlen;
Drop 'addr' from the declaration and delete both assignments. This also
means each commit does not build independently, breaking git bisect.
The fix itself is correct: rte_pktmbuf_read() returns a pointer into the
mbuf when the range is contiguous and does not touch the destination, so
the guarded rte_memcpy() is needed for both the header and the TSO
payload copy.
Patch 9/9 (net/gve: restrict max ring size in GQ QPL to 2K)
Info: the new include uses quotes,
#include "rte_common.h"
but every other DPDK header in this driver (including base/gve_osdep.h)
uses angle brackets. Prefer:
#include <rte_common.h>
The GQ-QPL RTE_MIN() cap and the DQO override refactor are correct; the
initial device-value assignment that DQO overwrites is an intentional
default, not a dead store.
Patches 1, 2, 4, 5, 6, 7, 8: no issues found.
- 2/9: sw_ring record loop advances sw_id by nb_segs exactly as before;
the added !tx_pkt guard is a safe bound.
- 4/9: buf_id bound check sits after the completion descriptor is
consumed (rx_id / nb_rx_hold / generation advanced), so a bad id is
dropped without stalling the ring.
- 5/9 + 6/9: nulling sw_ring after handing the mbuf to the application
and freeing ctx->mbuf_head on drop are consistent - the head chain is
removed from sw_ring before being freed, so no double free, and refill
overwrites the slots with freshly allocated mbufs.
No Reviewed-by given: patch 3 does not build. Once the unused 'addr' is
removed I'm happy to ack the series.
prev parent reply other threads:[~2026-07-03 4:36 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-01 18:35 [PATCH 0/9] Stability fixes for GVE Joshua Washington
2026-07-01 18:35 ` [PATCH 1/9] net/gve: clear out shared memory region for stats report Joshua Washington
2026-07-01 18:35 ` [PATCH 2/9] net/gve: delay adding mbuf head to software ring Joshua Washington
2026-07-01 18:35 ` [PATCH 3/9] net/gve: copy data to QPL buffer when mbuf read does not Joshua Washington
2026-07-01 18:35 ` [PATCH 4/9] net/gve: validate buf ID before processing Rx packet Joshua Washington
2026-07-01 18:35 ` [PATCH 5/9] net/gve: set mbuf to null in software ring after use Joshua Washington
2026-07-01 18:35 ` [PATCH 6/9] net/gve: free ctx mbuf if packet dropped after first segment Joshua Washington
2026-07-01 18:35 ` [PATCH 7/9] net/gve: increase range of DMA memzone ids to 64 bits Joshua Washington
2026-07-01 18:35 ` [PATCH 8/9] net/gve: don't reset ring size bounds to default on reset Joshua Washington
2026-07-01 18:35 ` [PATCH 9/9] net/gve: restrict max ring size in GQ QPL to 2K Joshua Washington
2026-07-01 18:50 ` [PATCH 0/9] Stability fixes for GVE Stephen Hemminger
2026-07-01 19:59 ` Joshua Washington
2026-07-03 4:36 ` Stephen Hemminger [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=20260702213649.674d8b16@phoenix.local \
--to=stephen@networkplumber.org \
--cc=dev@dpdk.org \
--cc=joshwash@google.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 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.