From nobody Fri Dec 19 14:21:12 2025 Received: from mail-pj1-f74.google.com (mail-pj1-f74.google.com [209.85.216.74]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8CFAF34DCE0 for ; Thu, 6 Nov 2025 19:28:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.74 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762457296; cv=none; b=RtldX3T6YIIXbdRvf9XhTk3E6Zcqt+p8clUrIXeimqZjVOJ8n0e8EwLr7JLko4JHtIFqethWet3BPfaoKx0kgCVpZpxTwrT0mviHvmrIe1Nycnt63DEcJ31emxzb/qgo8F58tJaL6o1Gi7PauyUcQWdF1QNH7btq8L5hCkkzy18= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762457296; c=relaxed/simple; bh=iDX+Xjk6YPshtFGXJ/bFso821Raymie9r/DGYwcIVUY=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=baf9Azina3gdBvEu/kdusDwm7/kgmSlad45VAeWrlLmShgKkjr/KeflKHcPQV87honh+8W0TGev5y9T6Z5v2nqjKySTQgwZKpIZvWwIsILR/0uX9KlCLCPjfHw4BxRH4Sn0QUeKWQT6xM/cZ7ilvwijIcI09Q6qPOtCI7vK2j/w= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--joshwash.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=RSexhXqE; arc=none smtp.client-ip=209.85.216.74 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--joshwash.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="RSexhXqE" Received: by mail-pj1-f74.google.com with SMTP id 98e67ed59e1d1-33baf262850so27528a91.0 for ; Thu, 06 Nov 2025 11:28:14 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1762457294; x=1763062094; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=eIN6Z9i91+duDdYVW8qK20gY3PDqSGvt0BSLKjqFHuw=; b=RSexhXqE0fInpyvdEwGWthH0Wn8vP8La8rCLhZnmhAGOJEjpmkQ/bUc3xdowwdKr+S WxTU9sISsMQMRRyfDKj4yOiyPLsDj+6P9aoXp1SfkKf/djgV7Ne9kn0IGnLdE37wt+Dc K6H6jNzxys/FWUd7eohVwW8+jdVzJC5eBtdPdpF1H/PHGle7bjVmCxz9DGFs+7ZD8r2m XGLaR8DWd+Mw110KD2kitRHUdz7fbEgMNgFQeIeNB7Fe7D33K7/k1y7ig5py639uMK83 Y24CReCgUfdqycq16sQ2DYQDk9tyLEwpyK4JKc8MKkgz47xOw+hAATedHcp4aufCNBj8 nW7A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1762457294; x=1763062094; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=eIN6Z9i91+duDdYVW8qK20gY3PDqSGvt0BSLKjqFHuw=; b=MuY17ivvORE5twcDePw/S2lSYeQID8b8zAbCwz1qvYYZmSmRNYkiBKavV6VtsXNrGr J4lSYNAJFdjJZz/2nsHsIihZVaLuhSWfe6RX0kj5lOsggUuAYUOZszXDxKpSReRwJxeV JLJjMWrryYefUmaEYp6Ln4et81CknmTZZHuE5eDW5MiZqI/TO5h6+MvErU+lbSDvUzag kNkZB4AVIOFlAhVZJhn/3JEFsGRPOIkOkeNDb6mNdXQH6t4c/W4xOPRlujgucV5gspbK 0WluBE4cFoVDVRwggCue2MpX0zRBUZ+PCG6nMUKorfyOomzmmxkz2PmwRZ+NXF0hzIxf DS/g== X-Forwarded-Encrypted: i=1; AJvYcCXG7zVSvsivap/3VycqiSpDguVmeU67j6wsaedrYpjJzS7hqE2YIXLxlAIrO6x2QVJBh05L/6XBBFBWs7s=@vger.kernel.org X-Gm-Message-State: AOJu0YxNLy9d6DWrQ9bV/b1wn+d/UlxE2jW2pmgN1h1fQsNa+yC1NENJ wknXf2/YWJPfSwe/CWVBdDdsSVBAskMTAoJG/MBMx34aL9cZZhnwB4On3jYQNAvIUDbKWc6SuCP CEzW1q4PiT8wWXw== X-Google-Smtp-Source: AGHT+IE40sp+DzYKQD/+xYllnXpCS8xcKrLwbzO/rBj+3SuPPrgmpHyIs5cY0wvKNyo/ls3d26o2FlPqwqdiVg== X-Received: from pjbfy4.prod.google.com ([2002:a17:90b:204:b0:343:4a54:8435]) (user=joshwash job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90b:50cf:b0:32e:d599:1f66 with SMTP id 98e67ed59e1d1-3434c577697mr370154a91.30.1762457293812; Thu, 06 Nov 2025 11:28:13 -0800 (PST) Date: Thu, 6 Nov 2025 11:27:43 -0800 In-Reply-To: <20251106192746.243525-1-joshwash@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20251106192746.243525-1-joshwash@google.com> X-Mailer: git-send-email 2.51.2.1041.gc1ab5b90ca-goog Message-ID: <20251106192746.243525-2-joshwash@google.com> Subject: [PATCH net-next v3 1/4] gve: Decouple header split from RX buffer length From: joshwash@google.com To: netdev@vger.kernel.org Cc: Joshua Washington , Harshitha Ramamurthy , Andrew Lunn , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Alexei Starovoitov , Daniel Borkmann , Jesper Dangaard Brouer , John Fastabend , Stanislav Fomichev , Willem de Bruijn , Praveen Kaligineedi , Ziwei Xiao , John Fraker , "Dr. David Alan Gilbert" , Ankit Garg , linux-kernel@vger.kernel.org, bpf@vger.kernel.org, Jordan Rhee Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Ankit Garg Previously, enabling header split via `gve_set_hsplit_config` also implicitly changed the RX buffer length to 4K (if supported by the device). This coupled two settings that should be orthogonal; this patch removes that side effect. After this change, `gve_set_hsplit_config` only toggles the header split configuration. The RX buffer length is no longer affected and must be configured independently. Signed-off-by: Ankit Garg Reviewed-by: Harshitha Ramamurthy Reviewed-by: Jordan Rhee Reviewed-by: Willem de Bruijn Signed-off-by: Joshua Washington --- drivers/net/ethernet/google/gve/gve.h | 3 --- drivers/net/ethernet/google/gve/gve_ethtool.c | 2 -- drivers/net/ethernet/google/gve/gve_main.c | 10 ---------- 3 files changed, 15 deletions(-) diff --git a/drivers/net/ethernet/google/gve/gve.h b/drivers/net/ethernet/g= oogle/gve/gve.h index ac325ab..872dae6 100644 --- a/drivers/net/ethernet/google/gve/gve.h +++ b/drivers/net/ethernet/google/gve/gve.h @@ -59,8 +59,6 @@ =20 #define GVE_DEFAULT_RX_BUFFER_SIZE 2048 =20 -#define GVE_MAX_RX_BUFFER_SIZE 4096 - #define GVE_XDP_RX_BUFFER_SIZE_DQO 4096 =20 #define GVE_DEFAULT_RX_BUFFER_OFFSET 2048 @@ -1247,7 +1245,6 @@ void gve_rx_free_rings_gqi(struct gve_priv *priv, struct gve_rx_alloc_rings_cfg *cfg); void gve_rx_start_ring_gqi(struct gve_priv *priv, int idx); void gve_rx_stop_ring_gqi(struct gve_priv *priv, int idx); -u16 gve_get_pkt_buf_size(const struct gve_priv *priv, bool enable_hplit); bool gve_header_split_supported(const struct gve_priv *priv); int gve_set_hsplit_config(struct gve_priv *priv, u8 tcp_data_split, struct gve_rx_alloc_rings_cfg *rx_alloc_cfg); diff --git a/drivers/net/ethernet/google/gve/gve_ethtool.c b/drivers/net/et= hernet/google/gve/gve_ethtool.c index b030a84..db6fc85 100644 --- a/drivers/net/ethernet/google/gve/gve_ethtool.c +++ b/drivers/net/ethernet/google/gve/gve_ethtool.c @@ -606,8 +606,6 @@ static int gve_set_ringparam(struct net_device *netdev, } else { /* Set ring params for the next up */ priv->header_split_enabled =3D rx_alloc_cfg.enable_header_split; - priv->rx_cfg.packet_buffer_size =3D - rx_alloc_cfg.packet_buffer_size; priv->tx_desc_cnt =3D tx_alloc_cfg.ring_size; priv->rx_desc_cnt =3D rx_alloc_cfg.ring_size; } diff --git a/drivers/net/ethernet/google/gve/gve_main.c b/drivers/net/ether= net/google/gve/gve_main.c index 347391a..453e40a 100644 --- a/drivers/net/ethernet/google/gve/gve_main.c +++ b/drivers/net/ethernet/google/gve/gve_main.c @@ -2041,14 +2041,6 @@ static void gve_tx_timeout(struct net_device *dev, u= nsigned int txqueue) priv->tx_timeo_cnt++; } =20 -u16 gve_get_pkt_buf_size(const struct gve_priv *priv, bool enable_hsplit) -{ - if (enable_hsplit && priv->max_rx_buffer_size >=3D GVE_MAX_RX_BUFFER_SIZE) - return GVE_MAX_RX_BUFFER_SIZE; - else - return GVE_DEFAULT_RX_BUFFER_SIZE; -} - /* Header split is only supported on DQ RDA queue format. If XDP is enable= d, * header split is not allowed. */ @@ -2080,8 +2072,6 @@ int gve_set_hsplit_config(struct gve_priv *priv, u8 t= cp_data_split, return 0; =20 rx_alloc_cfg->enable_header_split =3D enable_hdr_split; - rx_alloc_cfg->packet_buffer_size =3D - gve_get_pkt_buf_size(priv, enable_hdr_split); =20 return 0; } --=20 2.51.2.997.g839fc31de9-goog From nobody Fri Dec 19 14:21:12 2025 Received: from mail-pj1-f74.google.com (mail-pj1-f74.google.com [209.85.216.74]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id AC066350A11 for ; Thu, 6 Nov 2025 19:28:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.74 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762457298; cv=none; b=jBuePQrHWke/opCkc1IrF+mHeSgczLGdc6bCspjhPqiTu1A6VlRwZzFC3E0IYamJnQ9h9u8xUnwBwJvceBD+qzA2IsmhEYNV5TQT28ZCSfvijochVxlhBhD/qgd1eBU2+NVGsRprOIWyfQe4c/YaS+kao2nVZLVCivhojQA5cQY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762457298; c=relaxed/simple; bh=pcL4mwaNz826zqpYk9r6miFynK/UjPiuyy50810qFLw=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=f3XYrYF1VtZSDwu+ptAZVI6EeFioryi5JfTdx3HOPJ49NcpbK07KDtTZEeder6ufnSlg9T2joctmGjnfDtF9SPAKMK+MwK4ge/Wdp8qzGStsvQiu2H8oOL148O7KJWvilXbdqQdYMVwSKkunkjbn2d2cel9ht2WwVKzy1zUfZ6A= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--joshwash.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=GCvW05bH; arc=none smtp.client-ip=209.85.216.74 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--joshwash.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="GCvW05bH" Received: by mail-pj1-f74.google.com with SMTP id 98e67ed59e1d1-33da21394adso19555a91.1 for ; Thu, 06 Nov 2025 11:28:16 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1762457296; x=1763062096; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=iKgJEyI/mY8AR1xsdJxGBP2wYE2Ojj7dC3lzuPfMB5Q=; b=GCvW05bHps3K0Tca2deUNoeHJJwg8ATqXCoLyOvJwtuv8zprmc+4h+s8vDkd/VQFyN TYPmIcBe60XRr9HFkyHkk2tBzRkncUtOjTsSvqE2BMpI9qvc3YLPHzhX2BxkxQArnWQd h0FV/uGvLHshQjDgWepPOUCwPslGvYvzljLL1E8eqwdqB763ePZmZMBXrUYPRVKoGh2k MLl5b47ahBBCiWprCCuOlWeA2ULHSrreUOxXOpwDfBxI2ajlxRjgnml4W1dqPaIBLhgv /jM7A1U7MKpda699DPzr5RykL9NpTyKeuE5uSZnFQimIOOlUX0gnz8+1IrbAzYjdkeVf lhkg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1762457296; x=1763062096; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=iKgJEyI/mY8AR1xsdJxGBP2wYE2Ojj7dC3lzuPfMB5Q=; b=WAFxY0OnlugzSrSeTGahOuE29h2gcwMGgE2Fy1crWUbwZ8oeP19i9r5LCMXhsvbODS 9xrjdhXVke731xOx6QVbJLjFA5aW/nWSSncxWrELtkrkNFgqV/GGkaky5XU3Xwyk4JG2 CydLTypi6fYbmPRt7Kjc5e+Fnzz9c5lRPkeaSW6/KQZGvgN013cqSy7/KtnvVDrTDY0t /UHLQrLD7PqeZG7n9vySiHHDIripvIQrlDWEFHOH4ItRbYdgeuiLN5UboEClxFQDwX9w xd2/zSqelNtCKQauh7zxFlMf25kKBpJYzHifmtmzEbxT4ZHWff2OjI7jyra9zeTIVcM0 3dLA== X-Forwarded-Encrypted: i=1; AJvYcCXwNX7Lepebb6zhYenhZ7o7763LbQYx/8i+A5ZCgYZSBOsm8P1euJg3wysPIoLwO6jbVh10PX3YCxc1t7Y=@vger.kernel.org X-Gm-Message-State: AOJu0YzMkEDrBufBRG9u4YpzgmMbnGnSQqFxYfFd8DKXeN8e65ypGBr5 mVe4/jA35Iv/ULE6UnKaqvZztdC9PLM82tIMlxC5z9l+3MXmHmKVwhNynUQYWVJd4/9K1i/lWO6 8cyKFJDKP1Hy3sQ== X-Google-Smtp-Source: AGHT+IHuoC9uSzkGJMnKST7Musb48MfIxk+yGYWyESYp6VWPanJk3sFt8EEnKt8WNeVDhpt7ClFHwkP8aV18dQ== X-Received: from pjvp5.prod.google.com ([2002:a17:90a:df85:b0:340:e523:10dd]) (user=joshwash job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90b:3885:b0:340:bb64:c5e with SMTP id 98e67ed59e1d1-3434c4fa855mr370595a91.14.1762457295919; Thu, 06 Nov 2025 11:28:15 -0800 (PST) Date: Thu, 6 Nov 2025 11:27:44 -0800 In-Reply-To: <20251106192746.243525-1-joshwash@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20251106192746.243525-1-joshwash@google.com> X-Mailer: git-send-email 2.51.2.1041.gc1ab5b90ca-goog Message-ID: <20251106192746.243525-3-joshwash@google.com> Subject: [PATCH net-next v3 2/4] gve: Use extack to log xdp config verification errors From: joshwash@google.com To: netdev@vger.kernel.org Cc: Joshua Washington , Harshitha Ramamurthy , Andrew Lunn , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Alexei Starovoitov , Daniel Borkmann , Jesper Dangaard Brouer , John Fastabend , Stanislav Fomichev , Willem de Bruijn , Praveen Kaligineedi , Ziwei Xiao , John Fraker , "Dr. David Alan Gilbert" , Ankit Garg , linux-kernel@vger.kernel.org, bpf@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Ankit Garg Plumb extack as it allows us to send more detailed error messages back and append 'gve' suffix to method name per convention. NL_SET_ERR_MSG_FMT_MOD doesn't support format string longer than 80 chars so keeping netdev warning with actual queue count details. Signed-off-by: Ankit Garg Reviewed-by: Harshitha Ramamurthy Reviewed-by: Willem de Bruijn Signed-off-by: Joshua Washington --- Changes in v3: * Removed newline from extack messages (Jakub Kicinski) Changes in v2: * Add this patch to the series for RX buffer length management (Jakub Kicinski) --- drivers/net/ethernet/google/gve/gve_main.c | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/drivers/net/ethernet/google/gve/gve_main.c b/drivers/net/ether= net/google/gve/gve_main.c index 453e40a..c1d9916 100644 --- a/drivers/net/ethernet/google/gve/gve_main.c +++ b/drivers/net/ethernet/google/gve/gve_main.c @@ -1707,18 +1707,21 @@ static int gve_xsk_wakeup(struct net_device *dev, u= 32 queue_id, u32 flags) return 0; } =20 -static int verify_xdp_configuration(struct net_device *dev) +static int gve_verify_xdp_configuration(struct net_device *dev, + struct netlink_ext_ack *extack) { struct gve_priv *priv =3D netdev_priv(dev); u16 max_xdp_mtu; =20 if (dev->features & NETIF_F_LRO) { - netdev_warn(dev, "XDP is not supported when LRO is on.\n"); + NL_SET_ERR_MSG_MOD(extack, + "XDP is not supported when LRO is on."); return -EOPNOTSUPP; } =20 if (priv->header_split_enabled) { - netdev_warn(dev, "XDP is not supported when header-data split is enabled= .\n"); + NL_SET_ERR_MSG_MOD(extack, + "XDP is not supported when header-data split is enabled."); return -EOPNOTSUPP; } =20 @@ -1727,17 +1730,20 @@ static int verify_xdp_configuration(struct net_devi= ce *dev) max_xdp_mtu -=3D GVE_RX_PAD; =20 if (dev->mtu > max_xdp_mtu) { - netdev_warn(dev, "XDP is not supported for mtu %d.\n", - dev->mtu); + NL_SET_ERR_MSG_FMT_MOD(extack, + "XDP is not supported for mtu %d.", + dev->mtu); return -EOPNOTSUPP; } =20 if (priv->rx_cfg.num_queues !=3D priv->tx_cfg.num_queues || (2 * priv->tx_cfg.num_queues > priv->tx_cfg.max_queues)) { - netdev_warn(dev, "XDP load failed: The number of configured RX queues %d= should be equal to the number of configured TX queues %d and the number of= configured RX/TX queues should be less than or equal to half the maximum n= umber of RX/TX queues %d", - priv->rx_cfg.num_queues, - priv->tx_cfg.num_queues, + netdev_warn(dev, + "XDP load failed: The number of configured RX queues %d should be e= qual to the number of configured TX queues %d and the number of configured = RX/TX queues should be less than or equal to half the maximum number of RX/= TX queues %d.", + priv->rx_cfg.num_queues, priv->tx_cfg.num_queues, priv->tx_cfg.max_queues); + NL_SET_ERR_MSG_MOD(extack, + "XDP load failed: The number of configured RX queues should be equa= l to the number of configured TX queues and the number of configured RX/TX = queues should be less than or equal to half the maximum number of RX/TX que= ues"); return -EINVAL; } return 0; @@ -1748,7 +1754,7 @@ static int gve_xdp(struct net_device *dev, struct net= dev_bpf *xdp) struct gve_priv *priv =3D netdev_priv(dev); int err; =20 - err =3D verify_xdp_configuration(dev); + err =3D gve_verify_xdp_configuration(dev, xdp->extack); if (err) return err; switch (xdp->command) { --=20 2.51.2.997.g839fc31de9-goog From nobody Fri Dec 19 14:21:12 2025 Received: from mail-pj1-f73.google.com (mail-pj1-f73.google.com [209.85.216.73]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 533403557F6 for ; Thu, 6 Nov 2025 19:28:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.73 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762457300; cv=none; b=A+K3d1bQPmOBqAa2X3yUMZ/AYsm8+eCeiIT8HehB/4mc9vQ0hSqmWY5DBM2XlZIt0jdHz27HP6akjxPAHHUOo8rDACw3L6GQyLxspaMxd/4VlB7qgrqg6zSVRgvKIP/ltxRNGTL4WK3umTMAsJwxpfROP89ClfS1/7cibLCs9rs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762457300; c=relaxed/simple; bh=Xb4EfJdY6bPJY5RRiIfdF/NTZ7iibhgTGr5o3oPF3g4=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=aeQLfULt5oJo6BO59pyuelCajd9VkxI/Hv9srPyrKvxZiEAXOBgiP+GHxFUH+PLTXJs6213SdETD4CDv5Hu6iNgTXSWcUONC3PaK7JGwxiB9kbe3/fnO8r3B6KQwRESWOUQ6+471tAq+BOD0vhZbcr3vYE33xXwv7RX3trJKdyE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--joshwash.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=2nuipWcF; arc=none smtp.client-ip=209.85.216.73 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--joshwash.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="2nuipWcF" Received: by mail-pj1-f73.google.com with SMTP id 98e67ed59e1d1-340bc4ef67fso10459a91.3 for ; Thu, 06 Nov 2025 11:28:18 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1762457297; x=1763062097; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=0JM9jdZzTWd6aLiHrXhH8eGJ9TVRerOe4nqWwRUMVsg=; b=2nuipWcFo49jIv9Iv2llln7A70bCFjYdz1Bk3nKkpbomUK6i9r7zGcu8Mnb2V2xEWc zm0kTah+sYnHqcHtXwnoFjhc7Yt4aYMn600D2awCjouzJeM2GaIhCcr3tAMAOpH0ynA5 p46QszYhZExLydXFxfMgmFdigKiSkHEMEwpUklO8cCDjbhlbaxuc0k97Eqn57rC+uSZS eXJCMK6plNOtoo8IlQInP+BTv+huvLYZPVl9NNDe6SJ6rEMNO1u+l1vf+bYVdkuqZslP r3aGFKnhMN9Z0PnXsRLPYA/59TewJ0/OxtnfEfjfpPxiBk4EzV6zgeMK+xy7sANsGewe N/aw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1762457297; x=1763062097; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=0JM9jdZzTWd6aLiHrXhH8eGJ9TVRerOe4nqWwRUMVsg=; b=OgPMx8rQWezoLCttrt29Tt3lcqCGgaBa4qByvr5fkdmgqWt+PShkBfvWKEXVPEsfl4 vINL+rnwoOi7ffMbqblCIH6LPs681gq205oc10QL+f8he3nbjGSSuhOgKTMat68s818w cPU/6VfqgNTQpFSEVHhFfQx9b/Juf4+QOA6L6EMKSiHnybdp1pU2gs+bzvl4XfXtJ/ZO hb8WkHYEcYVBOW8Ag4CneWuxZ/YQEG8Z0Nh5aF77MN7KM0hs09eYGVHHtEHIVahnhrRt SjHp2P4HdpF/4BG3sQKR0sgLNkxvcbTyk5x5w2WH7Xh0c2+Wg+/4w/1AUMy5Bu+9rWWa zc/g== X-Forwarded-Encrypted: i=1; AJvYcCVEM2Uy1Zd+8b9ohBJoAzFQJd7Rj48mseLgVX0cd+8Q57lZb1EV6eVfA2NFI9yPUNSsO8O/x3whOSWQMiM=@vger.kernel.org X-Gm-Message-State: AOJu0YzxsAtgQXHcxByHRouLCcDgCCAki0+QEaaspRKyczZrCA/mSipt QNntnkGFLi62+tYUim7HU0HwLT1eUawVIWZt2YtVakwBAGVFCAL1dr4pcJFFMHeEfk1A7VH8KpS KRcHfB0xD7a4kDQ== X-Google-Smtp-Source: AGHT+IHGM7JVCPtaPwEFgfbgQR8t2tAo11fskdg8fmXe8PTIoLmsll2rbUTNi7cuelWzWi1tOatyEbKa4QTqwQ== X-Received: from pjty1.prod.google.com ([2002:a17:90a:ca81:b0:33b:51fe:1a89]) (user=joshwash job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90b:3885:b0:340:bb64:c5e with SMTP id 98e67ed59e1d1-3434c4fa855mr370694a91.14.1762457297556; Thu, 06 Nov 2025 11:28:17 -0800 (PST) Date: Thu, 6 Nov 2025 11:27:45 -0800 In-Reply-To: <20251106192746.243525-1-joshwash@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20251106192746.243525-1-joshwash@google.com> X-Mailer: git-send-email 2.51.2.1041.gc1ab5b90ca-goog Message-ID: <20251106192746.243525-4-joshwash@google.com> Subject: [PATCH net-next v3 3/4] gve: Allow ethtool to configure rx_buf_len From: joshwash@google.com To: netdev@vger.kernel.org Cc: Joshua Washington , Harshitha Ramamurthy , Andrew Lunn , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Alexei Starovoitov , Daniel Borkmann , Jesper Dangaard Brouer , John Fastabend , Stanislav Fomichev , Willem de Bruijn , Praveen Kaligineedi , Ziwei Xiao , John Fraker , "Dr. David Alan Gilbert" , Ankit Garg , linux-kernel@vger.kernel.org, bpf@vger.kernel.org, Jordan Rhee Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Ankit Garg Add support for getting and setting the RX buffer length via the ethtool ring parameters (`ethtool -g`/`-G`). The driver restricts the allowed buffer length to 2048 (SZ_2K) by default and allows 4096 (SZ_4K) based on device options. As XDP is only supported when the `rx_buf_len` is 2048, the driver now enforces this in two places: 1. In `gve_xdp_set`, rejecting XDP programs if the current buffer length is not 2048. 2. In `gve_set_rx_buf_len_config`, rejecting buffer length changes if XDP is loaded and the new length is not 2048. Signed-off-by: Ankit Garg Reviewed-by: Harshitha Ramamurthy Reviewed-by: Jordan Rhee Reviewed-by: Willem de Bruijn Signed-off-by: Joshua Washington --- Changes in v3: * Removed newline from extack messages (Jakub Kicinski) Changes in v2: * Refactored RX buffer length validation to clarify that it handles scenario when device doesn't advertise 4K support (Jakub Kicinski) --- drivers/net/ethernet/google/gve/gve.h | 9 +++++++++ drivers/net/ethernet/google/gve/gve_ethtool.c | 13 ++++++++++++- drivers/net/ethernet/google/gve/gve_main.c | 39 +++++++++++++++++++++++= ++++++++++++++++ 3 files changed, 60 insertions(+), 1 deletion(-) diff --git a/drivers/net/ethernet/google/gve/gve.h b/drivers/net/ethernet/g= oogle/gve/gve.h index 872dae6..bebd1ac 100644 --- a/drivers/net/ethernet/google/gve/gve.h +++ b/drivers/net/ethernet/google/gve/gve.h @@ -1165,6 +1165,12 @@ static inline bool gve_is_gqi(struct gve_priv *priv) priv->queue_format =3D=3D GVE_GQI_QPL_FORMAT; } =20 +static inline bool gve_is_dqo(struct gve_priv *priv) +{ + return priv->queue_format =3D=3D GVE_DQO_RDA_FORMAT || + priv->queue_format =3D=3D GVE_DQO_QPL_FORMAT; +} + static inline u32 gve_num_tx_queues(struct gve_priv *priv) { return priv->tx_cfg.num_queues + priv->tx_cfg.num_xdp_queues; @@ -1246,6 +1252,9 @@ void gve_rx_free_rings_gqi(struct gve_priv *priv, void gve_rx_start_ring_gqi(struct gve_priv *priv, int idx); void gve_rx_stop_ring_gqi(struct gve_priv *priv, int idx); bool gve_header_split_supported(const struct gve_priv *priv); +int gve_set_rx_buf_len_config(struct gve_priv *priv, u32 rx_buf_len, + struct netlink_ext_ack *extack, + struct gve_rx_alloc_rings_cfg *rx_alloc_cfg); int gve_set_hsplit_config(struct gve_priv *priv, u8 tcp_data_split, struct gve_rx_alloc_rings_cfg *rx_alloc_cfg); /* rx buffer handling */ diff --git a/drivers/net/ethernet/google/gve/gve_ethtool.c b/drivers/net/et= hernet/google/gve/gve_ethtool.c index db6fc85..52500ae 100644 --- a/drivers/net/ethernet/google/gve/gve_ethtool.c +++ b/drivers/net/ethernet/google/gve/gve_ethtool.c @@ -529,6 +529,8 @@ static void gve_get_ringparam(struct net_device *netdev, cmd->rx_pending =3D priv->rx_desc_cnt; cmd->tx_pending =3D priv->tx_desc_cnt; =20 + kernel_cmd->rx_buf_len =3D priv->rx_cfg.packet_buffer_size; + if (!gve_header_split_supported(priv)) kernel_cmd->tcp_data_split =3D ETHTOOL_TCP_DATA_SPLIT_UNKNOWN; else if (priv->header_split_enabled) @@ -589,6 +591,12 @@ static int gve_set_ringparam(struct net_device *netdev, int err; =20 gve_get_curr_alloc_cfgs(priv, &tx_alloc_cfg, &rx_alloc_cfg); + + err =3D gve_set_rx_buf_len_config(priv, kernel_cmd->rx_buf_len, extack, + &rx_alloc_cfg); + if (err) + return err; + err =3D gve_set_hsplit_config(priv, kernel_cmd->tcp_data_split, &rx_alloc_cfg); if (err) @@ -605,6 +613,8 @@ static int gve_set_ringparam(struct net_device *netdev, return err; } else { /* Set ring params for the next up */ + priv->rx_cfg.packet_buffer_size =3D + rx_alloc_cfg.packet_buffer_size; priv->header_split_enabled =3D rx_alloc_cfg.enable_header_split; priv->tx_desc_cnt =3D tx_alloc_cfg.ring_size; priv->rx_desc_cnt =3D rx_alloc_cfg.ring_size; @@ -944,7 +954,8 @@ static int gve_get_ts_info(struct net_device *netdev, =20 const struct ethtool_ops gve_ethtool_ops =3D { .supported_coalesce_params =3D ETHTOOL_COALESCE_USECS, - .supported_ring_params =3D ETHTOOL_RING_USE_TCP_DATA_SPLIT, + .supported_ring_params =3D ETHTOOL_RING_USE_TCP_DATA_SPLIT | + ETHTOOL_RING_USE_RX_BUF_LEN, .get_drvinfo =3D gve_get_drvinfo, .get_strings =3D gve_get_strings, .get_sset_count =3D gve_get_sset_count, diff --git a/drivers/net/ethernet/google/gve/gve_main.c b/drivers/net/ether= net/google/gve/gve_main.c index c1d9916..2a24b3a 100644 --- a/drivers/net/ethernet/google/gve/gve_main.c +++ b/drivers/net/ethernet/google/gve/gve_main.c @@ -1725,6 +1725,13 @@ static int gve_verify_xdp_configuration(struct net_d= evice *dev, return -EOPNOTSUPP; } =20 + if (priv->rx_cfg.packet_buffer_size !=3D SZ_2K) { + NL_SET_ERR_MSG_FMT_MOD(extack, + "XDP is not supported for Rx buf len %d, only %d supported.", + priv->rx_cfg.packet_buffer_size, SZ_2K); + return -EOPNOTSUPP; + } + max_xdp_mtu =3D priv->rx_cfg.packet_buffer_size - sizeof(struct ethhdr); if (priv->queue_format =3D=3D GVE_GQI_QPL_FORMAT) max_xdp_mtu -=3D GVE_RX_PAD; @@ -2056,6 +2063,38 @@ bool gve_header_split_supported(const struct gve_pri= v *priv) priv->queue_format =3D=3D GVE_DQO_RDA_FORMAT && !priv->xdp_prog; } =20 +int gve_set_rx_buf_len_config(struct gve_priv *priv, u32 rx_buf_len, + struct netlink_ext_ack *extack, + struct gve_rx_alloc_rings_cfg *rx_alloc_cfg) +{ + u32 old_rx_buf_len =3D rx_alloc_cfg->packet_buffer_size; + + if (rx_buf_len =3D=3D old_rx_buf_len) + return 0; + + /* device options may not always contain support for 4K buffers */ + if (!gve_is_dqo(priv) || priv->max_rx_buffer_size < SZ_4K) { + NL_SET_ERR_MSG_MOD(extack, + "Modifying Rx buf len is not supported"); + return -EOPNOTSUPP; + } + + if (priv->xdp_prog && rx_buf_len !=3D SZ_2K) { + NL_SET_ERR_MSG_MOD(extack, + "Rx buf len can only be 2048 when XDP is on"); + return -EINVAL; + } + + if (rx_buf_len !=3D SZ_2K && rx_buf_len !=3D SZ_4K) { + NL_SET_ERR_MSG_MOD(extack, + "Rx buf len can only be 2048 or 4096"); + return -EINVAL; + } + rx_alloc_cfg->packet_buffer_size =3D rx_buf_len; + + return 0; +} + int gve_set_hsplit_config(struct gve_priv *priv, u8 tcp_data_split, struct gve_rx_alloc_rings_cfg *rx_alloc_cfg) { --=20 2.51.2.997.g839fc31de9-goog From nobody Fri Dec 19 14:21:12 2025 Received: from mail-pj1-f73.google.com (mail-pj1-f73.google.com [209.85.216.73]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 028B43559EE for ; Thu, 6 Nov 2025 19:28:19 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.73 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762457301; cv=none; b=JZ2nX+FNg9/XispT8WTi2YCB1EAABaTfYnAgIQ0ktcESp1XR3dnteXOLF2H/jmXuhlivsVSXr8HQ1dTBxWpuFdSoa+psI8RYRyBizQQTLWE2nq2FTemyY8SQb8DCAHJdhEpoTYvXlSu+NTnyV/Abgyc+fHGXZaNbOHFW5ABQedU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762457301; c=relaxed/simple; bh=1Y+YpubDp1qb7oc7hg3w1PWoz9inIa15b2wdhzuZk9M=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=Y3KC/RsDcKePmVZ4kPhwoBro87ocd568iSsoSCz5H37xNdS09LPcOhiu/gKgzWOKy4oSnte2MEIVt4DWjIAXQxiJoqD7+Y0qucnCPZJbQEhDfd5JOnHtBk+3BIdfGvnr3Fh31IDL1aa8Vqb45T7Qk/cKNAB5Yofw/35LnI95+Jk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--joshwash.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=r1gZxOib; arc=none smtp.client-ip=209.85.216.73 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--joshwash.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="r1gZxOib" Received: by mail-pj1-f73.google.com with SMTP id 98e67ed59e1d1-340bb1bf12aso12336a91.1 for ; Thu, 06 Nov 2025 11:28:19 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1762457299; x=1763062099; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=V3U2BLp1AgEXNIvYOhrj08jJ81pfESpJT+bWqtR6/KU=; b=r1gZxOibS8MW3Iw6vmRpRh1GkWyj97wcxCi3EdHBnefAwMvhaahGQ1HvzN2VFfi2bT LrseiW5LMELcRDQX7gf8rwAKhpPzs30pW85AJiCEGU4a2GHseWJP66l/HAeXSYdu5YYu ra2zEZXpyptrzoKZCq/Sdp56e5waWJtZ+KthMiYTXihhLjTKF+nW2/C5vfy8P2G82njP qXKFlyMrqlk+lrFqzI4+K1JNQ5O8PZhWbZbwp1nD+mEauAcU15K1tz7KYHBzAN3hu4T/ d8vfXKfjvhUupXPDnQ8hNpLUZ+5DIazI++spbDbKMwUp1XXKwG0Dga8r3nqHVMlDqxsD LUEw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1762457299; x=1763062099; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=V3U2BLp1AgEXNIvYOhrj08jJ81pfESpJT+bWqtR6/KU=; b=kuNOCn8A2M88poZry/rR8jA0m44OYcG/5kQJ94RW0nNS/I9EszSURbOLzDVEbGI5t7 Q9t9eYlTYDtC7AkBS5PkHqLP8x6oX9bMtQR/t+W8M5MWxx5nrpkR92OLLX7gbqKQamn0 8C2yA6a99hV6+UozrGq0aH5fWQChsQ/RVmUFZiBJWb7Fc472I8/QCHkHqHWFiORQZgHX H3gr4Ck+w2+ueEbLHrV5voaYPDF+E0nk+zS/UzUJ2t7UkBe035yQsA9xQPEhOZ0IfVVu 6oSddqDWtCA6FM7+lUb4//5/LhgtBWxyIp8cHU4QlmlEaWIIeHPpaLCURB9nRo5nYpo+ ySDA== X-Forwarded-Encrypted: i=1; AJvYcCWujRmqFci7G+wK5c6DHqKwDC/yeG3W4NicrihJ2MKKyznKQvD5YybW+lD+kdUzkZrCMw8KiYXQltrdppI=@vger.kernel.org X-Gm-Message-State: AOJu0YyDH92qNvH5W3Ft/Niylu7ljOpcoxP9/toxLiR6LPK/yBqYIV5T zxBMIczatmVv+wCH7SDYYYtKHSNJhvuhOLnEc6ICgRB1AOSBbJM48MDUX0P2N1uQmTZEooYrbc1 9hrE4ruNc+NUIUA== X-Google-Smtp-Source: AGHT+IEsIfGYhZdZ2tqtBbcVUZ7ueSUHICQoVDbIm+m6yTPLyYNJ4OIu36HZ71hM7vJ6QPPO9Ilb5TFmeTcycw== X-Received: from pjbrm14.prod.google.com ([2002:a17:90b:3ece:b0:341:2141:d814]) (user=joshwash job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90b:3809:b0:32d:dc3e:5575 with SMTP id 98e67ed59e1d1-3434c4e0e7emr325363a91.5.1762457299298; Thu, 06 Nov 2025 11:28:19 -0800 (PST) Date: Thu, 6 Nov 2025 11:27:46 -0800 In-Reply-To: <20251106192746.243525-1-joshwash@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20251106192746.243525-1-joshwash@google.com> X-Mailer: git-send-email 2.51.2.1041.gc1ab5b90ca-goog Message-ID: <20251106192746.243525-5-joshwash@google.com> Subject: [PATCH net-next v3 4/4] gve: Default to max_rx_buffer_size for DQO if device supported From: joshwash@google.com To: netdev@vger.kernel.org Cc: Joshua Washington , Harshitha Ramamurthy , Andrew Lunn , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Alexei Starovoitov , Daniel Borkmann , Jesper Dangaard Brouer , John Fastabend , Stanislav Fomichev , Willem de Bruijn , Praveen Kaligineedi , Ziwei Xiao , John Fraker , "Dr. David Alan Gilbert" , Ankit Garg , linux-kernel@vger.kernel.org, bpf@vger.kernel.org, Jordan Rhee Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Ankit Garg Change the driver's default behavior to prefer the largest available RX buffer length supported by the device for DQO format, rather than always using the hardcoded 2K default. Previously, the driver would initialize with `GVE_DEFAULT_RX_BUFFER_SIZE` (2K), even if the device advertised support for a larger length (e.g., 4K). Performance observations: - With LRO disabled, we observed >10% improvement in RX single stream throughput when MTU >=3D2048. - With LRO enabled, we observed >10% improvement in RX single stream throughput when MTU >=3D1460. - No regressions were observed. Signed-off-by: Ankit Garg Reviewed-by: Harshitha Ramamurthy Reviewed-by: Jordan Rhee Reviewed-by: Willem de Bruijn Signed-off-by: Joshua Washington --- drivers/net/ethernet/google/gve/gve_adminq.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/drivers/net/ethernet/google/gve/gve_adminq.c b/drivers/net/eth= ernet/google/gve/gve_adminq.c index 4f33d09..b72cc0f 100644 --- a/drivers/net/ethernet/google/gve/gve_adminq.c +++ b/drivers/net/ethernet/google/gve/gve_adminq.c @@ -987,6 +987,10 @@ static void gve_enable_supported_features(struct gve_p= riv *priv, dev_info(&priv->pdev->dev, "BUFFER SIZES device option enabled with max_rx_buffer_size of %u, hea= der_buf_size of %u.\n", priv->max_rx_buffer_size, priv->header_buf_size); + if (gve_is_dqo(priv) && + priv->max_rx_buffer_size > GVE_DEFAULT_RX_BUFFER_SIZE) + priv->rx_cfg.packet_buffer_size =3D + priv->max_rx_buffer_size; } =20 /* Read and store ring size ranges given by device */ --=20 2.51.2.997.g839fc31de9-goog