From nobody Thu Apr 9 15:51:20 2026 Received: from mail-pl1-f201.google.com (mail-pl1-f201.google.com [209.85.214.201]) (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 4E5EF34C818 for ; Fri, 6 Mar 2026 22:48:22 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772837304; cv=none; b=YSXHXjnhgqFBff4B8zSBS0En0P0StdGAG7BsqTJyAagdxqQHpJ18kvS02xgRzgGAzc0rDnOMeKuQynhSGURYuKP+0kKmlG2L9YUHnD3obNl5Phcck60BXFnrFvQfprzmB1CSDa7tysQPxu4P1ae8Fp+xk9vLM+tVVAVq0zTYO5Q= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772837304; c=relaxed/simple; bh=7G6+qnfUJNedkiph200Y9njZnfcgLo1U6unr0/UMiUo=; h=Date:Mime-Version:Message-ID:Subject:From:To:Cc:Content-Type; b=N7HDVTGv0Vb25ZV/DQDO9b9yPDTyy1rgF0Sp8yupdFdH4Ts7yhOtNkN5VFk47+3u5r8ZRhyjeBCh68NeM8200/40pv0lAqx0G4TNEseo/mSIPuGleHFnXaeL5coW2YBUlIIzqJFoJ9Y5dAslbTvvb6LCoXoBLiuNzDfN4fgzkfU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--hramamurthy.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=OY4FO1C3; arc=none smtp.client-ip=209.85.214.201 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--hramamurthy.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="OY4FO1C3" Received: by mail-pl1-f201.google.com with SMTP id d9443c01a7336-2ae42659a39so399157195ad.1 for ; Fri, 06 Mar 2026 14:48:22 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1772837301; x=1773442101; darn=vger.kernel.org; h=cc:to:from:subject:message-id:mime-version:date:from:to:cc:subject :date:message-id:reply-to; bh=ET1z2PhZ/vXx0rxDcMUa4k7I7QKL/rFCVqGRGN/V+18=; b=OY4FO1C3xYrifLDDxr9OT+Hu/Qy9SY2bWjwjdRC4+wHZH0QhAt8BgOt7+kfMCWIEEq swjm+mlEeBqd7woE8ms1aiF3+TYjpZFTkEjxoSrWhC+cFu5nTAJaOvEJW6x9Zx8NcDhX SSZk/tSj6gcaSFbSTh/XXfXRmNDpb6eM/bjQn8NFYax70/ciz0GnrJhJU9L5EYjqIDV6 XGUSPimK7UKnGtKR+Fh996YCr92t9oRaOf6VsxNlGLIHV0REHLMxsCWa5ooS3pVBw28/ HX4fuBKj3/BitYaw3P36E0YBr+BRbeSxuYzhXc7uIUgEpsxdxX729vDkbWZhlGCtpKGA 3dHg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1772837301; x=1773442101; h=cc:to:from:subject:message-id:mime-version:date:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=ET1z2PhZ/vXx0rxDcMUa4k7I7QKL/rFCVqGRGN/V+18=; b=qjnNDWCaQ+We+jnARzJIqND5r3CCMJhY+ZPHRq4j0tdY9FehslLdCRWqISLtTVhG3Q t5Jj3lp+g88PRYZHBHmV8TgJajUyrve4mpnGRyMDLGRbcY7sWND8KIEAxm/05cSbK7An hIGxEzFnwJ4orVrD42F1qIbScsacCvx30MhVKzxYQ/hIWTfZvuV7AKX+Tfd9FHaV7X94 U838kL9j1z3ytVrajUuMZrlm6fWRrYw2EufVvvzgSo28BKyAKYmwSb98EpdGOL3Q6HCq rAiSLVH3xNr88FiQn2Zhf/nDwjCAk8jzY7ItGSeZEuGiKd9bLcz0IPDeyiWxrMsyCJWD 8EBg== X-Forwarded-Encrypted: i=1; AJvYcCWddmpi3ltJ7AYRv/SnaiFfPY6jz0Jm+Y0O/pCUQh2oIxB6pZ8whmFhBDZzK9RikysNUKg8GSKkenS97i4=@vger.kernel.org X-Gm-Message-State: AOJu0Yz1rfBtHPqttak3r3/5YDcK2DHkncCZz/KLXqhuhaqNLDMdDPq2 Sh3trjTniWCXlL4k8FLwYXgi2l0jH5bOSJjFynSWr7jCvfKqXfywIesDyPBHVZRRIr6e9Efsifa ostWSekqAQqG5Gi8wk+ZHfUgPKw== X-Received: from plai10.prod.google.com ([2002:a17:902:c94a:b0:2ae:5031:c200]) (user=hramamurthy job=prod-delivery.src-stubby-dispatcher) by 2002:a17:903:2441:b0:2ae:4fdb:d596 with SMTP id d9443c01a7336-2ae82367db1mr39069735ad.11.1772837301327; Fri, 06 Mar 2026 14:48:21 -0800 (PST) Date: Fri, 6 Mar 2026 22:48:16 +0000 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 X-Mailer: git-send-email 2.53.0.473.g4a7958ca14-goog Message-ID: <20260306224816.3391551-1-hramamurthy@google.com> Subject: [PATCH net-next] gve: add support for UDP GSO for DQO format From: Harshitha Ramamurthy To: netdev@vger.kernel.org Cc: joshwash@google.com, hramamurthy@google.com, andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, willemb@google.com, nktgrg@google.com, jfraker@google.com, ziweixiao@google.com, maolson@google.com, pkaligineedi@google.com, linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Ankit Garg Enable support for UDP GSO when using DQO format. Advertise the feature flag during device initialization and enable offload by default. Signed-off-by: Ankit Garg Reviewed-by: Willem de Bruijn Signed-off-by: Harshitha Ramamurthy --- drivers/net/ethernet/google/gve/gve_adminq.c | 8 +++++--- drivers/net/ethernet/google/gve/gve_tx_dqo.c | 33 ++++++++++++++++++++++++= --------- 2 files changed, 29 insertions(+), 12 deletions(-) diff --git a/drivers/net/ethernet/google/gve/gve_adminq.c b/drivers/net/eth= ernet/google/gve/gve_adminq.c index 6ce8345e..f27b9501 100644 --- a/drivers/net/ethernet/google/gve/gve_adminq.c +++ b/drivers/net/ethernet/google/gve/gve_adminq.c @@ -1127,10 +1127,12 @@ int gve_adminq_describe_device(struct gve_priv *pri= v) =20 gve_set_default_rss_sizes(priv); =20 - /* DQO supports HW-GRO. */ + /* DQO supports HW-GRO and UDP_GSO */ if (gve_is_dqo(priv)) { - priv->dev->hw_features |=3D NETIF_F_GRO_HW; - priv->dev->features |=3D NETIF_F_GRO_HW; + u64 additional_features =3D NETIF_F_GRO_HW | NETIF_F_GSO_UDP_L4; + + priv->dev->hw_features |=3D additional_features; + priv->dev->features |=3D additional_features; } =20 priv->max_registered_pages =3D diff --git a/drivers/net/ethernet/google/gve/gve_tx_dqo.c b/drivers/net/eth= ernet/google/gve/gve_tx_dqo.c index 28e85730..81d27a12 100644 --- a/drivers/net/ethernet/google/gve/gve_tx_dqo.c +++ b/drivers/net/ethernet/google/gve/gve_tx_dqo.c @@ -565,9 +565,11 @@ static void gve_tx_fill_pkt_desc_dqo(struct gve_tx_rin= g *tx, u32 *desc_idx, */ static int gve_prep_tso(struct sk_buff *skb) { + struct skb_shared_info *shinfo =3D skb_shinfo(skb); + u32 paylen, l4_start; struct tcphdr *tcp; + struct udphdr *udp; int header_len; - u32 paylen; int err; =20 /* Note: HW requires MSS (gso_size) to be <=3D 9728 and the total length @@ -578,21 +580,34 @@ static int gve_prep_tso(struct sk_buff *skb) * - Kernel will not produce a TSO larger than 64k */ =20 - if (unlikely(skb_shinfo(skb)->gso_size < GVE_TX_MIN_TSO_MSS_DQO)) + if (unlikely(shinfo->gso_size < GVE_TX_MIN_TSO_MSS_DQO)) return -1; =20 - if (!(skb_shinfo(skb)->gso_type & (SKB_GSO_TCPV4 | SKB_GSO_TCPV6))) - return -EINVAL; - /* Needed because we will modify header. */ err =3D skb_cow_head(skb, 0); if (err < 0) return err; =20 - tcp =3D tcp_hdr(skb); - paylen =3D skb->len - skb_transport_offset(skb); - csum_replace_by_diff(&tcp->check, (__force __wsum)htonl(paylen)); - header_len =3D skb_tcp_all_headers(skb); + l4_start =3D skb_transport_offset(skb); + paylen =3D skb->len - l4_start; + + switch (shinfo->gso_type) { + case SKB_GSO_TCPV4: + case SKB_GSO_TCPV6: + tcp =3D tcp_hdr(skb); + csum_replace_by_diff(&tcp->check, + (__force __wsum)htonl(paylen)); + header_len =3D skb_tcp_all_headers(skb); + break; + case SKB_GSO_UDP_L4: + udp =3D udp_hdr(skb); + csum_replace_by_diff(&udp->check, + (__force __wsum)htonl(paylen)); + header_len =3D sizeof(struct udphdr) + l4_start; + break; + default: + return -EINVAL; + } =20 if (unlikely(header_len > GVE_TX_MAX_HDR_SIZE_DQO)) return -EINVAL; --=20 2.53.0.473.g4a7958ca14-goog