From nobody Thu Apr 9 17:58:36 2026 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 34D3B3890F1 for ; Tue, 3 Mar 2026 19:55:56 +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=1772567760; cv=none; b=i1WdLgR0TLxQeEeb0hN6qwOUbcwytyzn5+XX9CPXJxLgC1Fxx49ZfdL+cMWTgFLyR5jsOJQXT93/yi2RXQJb3QK6QJcu+f6rB4Rliwuc1Cci0EL7e2hngCIQRwm9c8kC4MNt2w7uMt25QkUD8icgA+LASmpagi90VoGNNxNnJS8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772567760; c=relaxed/simple; bh=tBrXfsph2RTre7AKwb6XSwlXm3BvBH5Y/qhSnej/G7o=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=DWI0MHFlG3C5tGXbfEJfZL2bQ8QzGFilo9JWRTAFazxp+0MRz5TpA5DHO6pJuN4GKm7bDUgKad9Zsgj8Okz9+S2HxWhw6cRXY1qeGnCHhBet4T+8mGiER9rnS9B3Bd+pAPp2YpPXKxbj6DyS6q5RYOYmBd49COgZwRKm26HtHew= 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=vTLl3mpW; 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="vTLl3mpW" Received: by mail-pj1-f74.google.com with SMTP id 98e67ed59e1d1-3594620fe97so29239414a91.1 for ; Tue, 03 Mar 2026 11:55:56 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1772567755; x=1773172555; 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=js0eM5dF9ShUt2Ha+FRxZ4vQ9tkmpGaVXJ30nrzMkdw=; b=vTLl3mpWvmnFfDugWK5CCJFJ4FQ7HhIriT4V3Srsy/JSakcJQEKy7q4xNyPPIq7THH gCu3UyxEnqiwGNE5T/evY/rP1QsNioaZXnbNVFHv7nRM/vwaEYESLvTR5ShupWzXijaI 7PB43c4BeD6yWD8sLmt4+v9aJL0Du9SN3PEnlYf78oWnsaFpz6D7J1JQsBzyR5xllQn2 B+vsQ6KwCut9QO4pyO7A8BZH8DXWYxEY7NrvxM5FDL7o0mXoYpQ4cFGgYp0Gq9Sujzmp RIuQTvQy1RxcJeaLdLKF7kUi/Fv4cRoKTUqLe6OCwp0leufUhr58V92sRJO8PqexpWy3 W9zw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1772567755; x=1773172555; 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=js0eM5dF9ShUt2Ha+FRxZ4vQ9tkmpGaVXJ30nrzMkdw=; b=uNqd2N4u2BBSZUQjb/aiTQNTvYEI5LVqcQ+/euNib5DLEdmagWOg8EPTDyT0xY9VdB jGlz3WX1M364+TpShoENOOYv4rSHpwQzr+T0aaBuOuKpXBz7UyFCUrIWz7ZG1F9bvEFO bhQCRFTwOOZGr4Fwfqsp+UwK3YTUOl7PeUmZtPnwPuAsaHqIKsY1cN6yIZPJM280mQZY o5AdJR/PeaIEyKOnLk3Pkam8/cHXl54DFHz5+lDCMQ40nH+dsgfa8L633105fPAVkQiB XiwFoSFf65zaSYCYti12qG7YJhKHoIVXjTCM4dveelBfJgmEZBN8V25D+EHDUj1kasa0 BtsA== X-Forwarded-Encrypted: i=1; AJvYcCU30CY1Hmn9HW5cBjLwrmBKXbtN2fmslNEl1K7VFk4vJhcfCLzPjucyHyOG8deY0MG6lXTqZPW9r+ecJx8=@vger.kernel.org X-Gm-Message-State: AOJu0YzEnHG1ILxjbm9hzg0RYtVTpK543KybGv0/jO6EvIyXh787Z23i j2ecrARwZEJbGJ4PWL26af4mD/DaBw8p4W3qlnnt+qJdW9/NdzK3S4rC+saN7y8FVguQnsEHwGJ UAi71MvAOaCM9aw== X-Received: from pjop12.prod.google.com ([2002:a17:90a:930c:b0:359:79d6:387a]) (user=joshwash job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90b:2496:b0:359:8726:3fb0 with SMTP id 98e67ed59e1d1-3598726419dmr4606668a91.22.1772567755368; Tue, 03 Mar 2026 11:55:55 -0800 (PST) Date: Tue, 3 Mar 2026 11:55:46 -0800 In-Reply-To: <20260303195549.2679070-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: <20260303195549.2679070-1-joshwash@google.com> X-Mailer: git-send-email 2.53.0.473.g4a7958ca14-goog Message-ID: <20260303195549.2679070-2-joshwash@google.com> Subject: [PATCH net-next 1/4] gve: Advertise NETIF_F_GRO_HW instead of NETIF_F_LRO From: Joshua Washington 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 , Jordan Rhee , Ankit Garg , John Fraker , Ziwei Xiao , Matt Olson , Praveen Kaligineedi , Tim Hostetler , linux-kernel@vger.kernel.org, bpf@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Ankit Garg The device behind DQO format has always coalesced packets per stricter hardware GRO spec even though it was being advertised as LRO. Update advertised capability to match device behavior. Signed-off-by: Ankit Garg Reviewed-by: Willem de Bruijn Reviewed-by: Harshitha Ramamurthy Signed-off-by: Joshua Washington --- drivers/net/ethernet/google/gve/gve_adminq.c | 6 +++--- drivers/net/ethernet/google/gve/gve_main.c | 15 ++++++++------- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/drivers/net/ethernet/google/gve/gve_adminq.c b/drivers/net/eth= ernet/google/gve/gve_adminq.c index b72cc0fa..873672f6 100644 --- a/drivers/net/ethernet/google/gve/gve_adminq.c +++ b/drivers/net/ethernet/google/gve/gve_adminq.c @@ -791,7 +791,7 @@ static void gve_adminq_get_create_rx_queue_cmd(struct g= ve_priv *priv, cmd->create_rx_queue.rx_buff_ring_size =3D cpu_to_be16(priv->rx_desc_cnt); cmd->create_rx_queue.enable_rsc =3D - !!(priv->dev->features & NETIF_F_LRO); + !!(priv->dev->features & NETIF_F_GRO_HW); if (priv->header_split_enabled) cmd->create_rx_queue.header_buffer_size =3D cpu_to_be16(priv->header_buf_size); @@ -1127,9 +1127,9 @@ int gve_adminq_describe_device(struct gve_priv *priv) =20 gve_set_default_rss_sizes(priv); =20 - /* DQO supports LRO. */ + /* DQO supports HW-GRO. */ if (!gve_is_gqi(priv)) - priv->dev->hw_features |=3D NETIF_F_LRO; + priv->dev->hw_features |=3D NETIF_F_GRO_HW; =20 priv->max_registered_pages =3D be64_to_cpu(descriptor->max_registered_pages); diff --git a/drivers/net/ethernet/google/gve/gve_main.c b/drivers/net/ether= net/google/gve/gve_main.c index 0ee864b0..ee963c98 100644 --- a/drivers/net/ethernet/google/gve/gve_main.c +++ b/drivers/net/ethernet/google/gve/gve_main.c @@ -1718,9 +1718,9 @@ static int gve_verify_xdp_configuration(struct net_de= vice *dev, struct gve_priv *priv =3D netdev_priv(dev); u16 max_xdp_mtu; =20 - if (dev->features & NETIF_F_LRO) { + if (dev->features & NETIF_F_GRO_HW) { NL_SET_ERR_MSG_MOD(extack, - "XDP is not supported when LRO is on."); + "XDP is not supported when HW-GRO is on."); return -EOPNOTSUPP; } =20 @@ -2137,12 +2137,13 @@ static int gve_set_features(struct net_device *netd= ev, =20 gve_get_curr_alloc_cfgs(priv, &tx_alloc_cfg, &rx_alloc_cfg); =20 - if ((netdev->features & NETIF_F_LRO) !=3D (features & NETIF_F_LRO)) { - netdev->features ^=3D NETIF_F_LRO; - if (priv->xdp_prog && (netdev->features & NETIF_F_LRO)) { + if ((netdev->features & NETIF_F_GRO_HW) !=3D + (features & NETIF_F_GRO_HW)) { + netdev->features ^=3D NETIF_F_GRO_HW; + if (priv->xdp_prog && (netdev->features & NETIF_F_GRO_HW)) { netdev_warn(netdev, - "XDP is not supported when LRO is on.\n"); - err =3D -EOPNOTSUPP; + "HW-GRO is not supported when XDP is on."); + err =3D -EOPNOTSUPP; goto revert_features; } if (netif_running(netdev)) { --=20 2.53.0.473.g4a7958ca14-goog From nobody Thu Apr 9 17:58:36 2026 Received: from mail-pl1-f202.google.com (mail-pl1-f202.google.com [209.85.214.202]) (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 401483890E7 for ; Tue, 3 Mar 2026 19:55:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.202 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772567760; cv=none; b=Gx4r027lDbWQeJwNh8Pf7xz6nSfzUAgg+w0LGNNZ4aLjkNnpkcv0Rzl325rg2f+cKYTqbWZ8qIhC9w1C4FRinK9HaUPF7+o3y23MJthmVT2mPT3zJd/zU3YMuNp3LpriM/gUISvhG2B0tzm5K4oaKEzbHNRRzDOOLCYjXkDquNk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772567760; c=relaxed/simple; bh=lAeoYgBQM1LTZWAFlAqqO4VQEX8bViSlLynqua3uy0E=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=omaeodLb7kqpKAqCq69uSFO9QvjD/YECquPkAmfHQNudv2YXmr3n5nkD2mTT/vYf5W7v69k+OyCspbzWdyouAEtjgQfPDbzyxyPB36XiStlwXiYtJJGMnojv6kBRp63ix8sqH2BJpMR5syWO9vi/Pb36KM05kctlzyjUUf6vdcE= 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=C4Ox95DJ; arc=none smtp.client-ip=209.85.214.202 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="C4Ox95DJ" Received: by mail-pl1-f202.google.com with SMTP id d9443c01a7336-2ae3badc00dso36635725ad.3 for ; Tue, 03 Mar 2026 11:55:58 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1772567757; x=1773172557; 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=P8wBZYOjVx1PhHvmvhSvpE8PvzwVvcrdiZixhCtvqCs=; b=C4Ox95DJEU4xS4hut7ebGN7EhQuj5gI5uyqv8ZG3MykMA0+D6qSI00Y2sUqQ4/MFzp 1es9iKGyLyN+8+ZsqqNpWeEl2lPaEw5+dfYzNb5xKxv/cOgohvnNk1jgUUaejXjGSzvS R7CdhQm171QVnmftcC0Spv/JIuDdRuw6KeZkwCXHbzLivJwc5HwxGvx0B7gtWrF3YWuH tJ+9+3qZkCV47mD1EMoHkABcQMvsPEFxHpRbCkA5AChg7yHNOCAMPkncQfNn7nYlAD5i o5O13KWsSW0kOmkPs19p+Ge9a5PWpXeCtCulzwWOVgtagzuRNxQRUBlNh7sR0oP1SwMO AllA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1772567757; x=1773172557; 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=P8wBZYOjVx1PhHvmvhSvpE8PvzwVvcrdiZixhCtvqCs=; b=fwhcfVKSXGitE7U9sLwxN++0hicAusqH41cIBKbx6cFi6ltvv+1k7hckd87eMdACg1 gjjC45h/bhE3WzF2eyh/nbSVa+l4dTAJv9iiY5/S+z/bnj7vOWBtEFxmOOTVag8vmmuw G6JVaWCzDHvxPQKP5D9GrxL4MVkDG5vygzYK+0bHiUYFoINDHH9C5M1jVotMgVVEjeno txEjsTnBUNy1g8vCZxIYJPnlmWE2k6VnJJ5ThiibAhvQqf2HQa43vk0Ti6u4OxygUVPZ xhipUso8qMmN4eJSL1hOXsO1JOgp3BPxScKRXB4cegP7wIchJ6AFeqv4SXNghqDA9B/s VwSA== X-Forwarded-Encrypted: i=1; AJvYcCXPBeoQ0rqaCE0KTYHSpOyEd0wgZeuYb+5OgHKEr0QMaeLbXxp0PQvxpIB8Pd2RGJK1TGJQsKNitrAbP98=@vger.kernel.org X-Gm-Message-State: AOJu0YzGu6SPOGjAU9JpL3DHpp0XjGF0XPSMVWpO/oZzgbqETBYdigKO WkCFh0LEGfGPDWws8UXhA1/w+yfZhWG4p8aG9iVIL0HmQfn35aqsF/rctjNJa4fYUyq0q+vbxHM QcOQGhqODG3/nHQ== X-Received: from plrd24.prod.google.com ([2002:a17:902:aa98:b0:2ae:4655:2b3b]) (user=joshwash job=prod-delivery.src-stubby-dispatcher) by 2002:a17:903:2ac7:b0:2ae:3afc:eb38 with SMTP id d9443c01a7336-2ae3afcefb0mr135265005ad.41.1772567757193; Tue, 03 Mar 2026 11:55:57 -0800 (PST) Date: Tue, 3 Mar 2026 11:55:47 -0800 In-Reply-To: <20260303195549.2679070-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: <20260303195549.2679070-1-joshwash@google.com> X-Mailer: git-send-email 2.53.0.473.g4a7958ca14-goog Message-ID: <20260303195549.2679070-3-joshwash@google.com> Subject: [PATCH net-next 2/4] gve: fix SW coalescing when hw-GRO is used From: Joshua Washington 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 , Jordan Rhee , Ankit Garg , John Fraker , Ziwei Xiao , Matt Olson , Praveen Kaligineedi , Tim Hostetler , linux-kernel@vger.kernel.org, bpf@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Ankit Garg Leaving gso_segs unpopulated on hardware GRO packet prevents further coalescing by software stack because the kernel's GRO logic marks the SKB for flush because the expected length of all segments doesn't match actual payload length. Setting gso_segs correctly results in significantly more segments being coalesced as measured by the result of dev_gro_receive(). gso_segs are derived from payload length. When header-split is enabled, payload is in the non-linear portion of skb. And when header-split is disabled, we have to parse the headers to determine payload length. Signed-off-by: Ankit Garg Reviewed-by: Eric Dumazet Reviewed-by: Jordan Rhee Reviewed-by: Harshitha Ramamurthy Signed-off-by: Joshua Washington --- drivers/net/ethernet/google/gve/gve_rx_dqo.c | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/drivers/net/ethernet/google/gve/gve_rx_dqo.c b/drivers/net/eth= ernet/google/gve/gve_rx_dqo.c index 63a96106..5ba893e5 100644 --- a/drivers/net/ethernet/google/gve/gve_rx_dqo.c +++ b/drivers/net/ethernet/google/gve/gve_rx_dqo.c @@ -945,11 +945,16 @@ static int gve_rx_complete_rsc(struct sk_buff *skb, struct gve_ptype ptype) { struct skb_shared_info *shinfo =3D skb_shinfo(skb); + int rsc_segments, rsc_seg_len, hdr_len; =20 - /* Only TCP is supported right now. */ + /* HW-GRO only coalesces TCP. */ if (ptype.l4_type !=3D GVE_L4_TYPE_TCP) return -EINVAL; =20 + rsc_seg_len =3D le16_to_cpu(desc->rsc_seg_len); + if (!rsc_seg_len) + return 0; + switch (ptype.l3_type) { case GVE_L3_TYPE_IPV4: shinfo->gso_type =3D SKB_GSO_TCPV4; @@ -961,7 +966,21 @@ static int gve_rx_complete_rsc(struct sk_buff *skb, return -EINVAL; } =20 - shinfo->gso_size =3D le16_to_cpu(desc->rsc_seg_len); + if (skb_headlen(skb)) { + /* With header-split, payload is in the non-linear part */ + rsc_segments =3D DIV_ROUND_UP(skb->data_len, rsc_seg_len); + } else { + /* HW-GRO packets are guaranteed to have complete TCP/IP + * headers in frag[0] when header-split is not enabled. + */ + hdr_len =3D eth_get_headlen(skb->dev, + skb_frag_address(&shinfo->frags[0]), + skb_frag_size(&shinfo->frags[0])); + rsc_segments =3D DIV_ROUND_UP(skb->len - hdr_len, rsc_seg_len); + } + shinfo->gso_size =3D rsc_seg_len; + shinfo->gso_segs =3D rsc_segments; + return 0; } =20 --=20 2.53.0.473.g4a7958ca14-goog From nobody Thu Apr 9 17:58:36 2026 Received: from mail-pg1-f202.google.com (mail-pg1-f202.google.com [209.85.215.202]) (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 34A133909A7 for ; Tue, 3 Mar 2026 19:55:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.202 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772567763; cv=none; b=ToVW1xaesHsUB5zs9E3jZEZv7E00xnGlkVo+uFfy0OQXc54obh57q1lC5gvjUzRFcDmPXwyFuJedBSnzt0WHifEjnsAIjNqw3rzi2uLVgnWWtBnBfbYYjtJxWdZLLyJ46odw5UBumSpyiGbI3844a5ogygjAjAWL4YXBOBrmFnI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772567763; c=relaxed/simple; bh=Fz+xOWFU7AOGBur392VvmH8RfVHXuXIbgMX+VtQzmUo=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=I+HFmr7cu9ODAwnx/GwPh8TWn66ULQKGTSqjrKop3+xp87Rum1yCP/tvf9hKT9wXywVR950q9anJFYSFtPpo1P/iH0xUXew9YKPlAW6D1p26OVLi1bPDhHoGozfg+1apYbjEMp30YxVXfOpHix8bgIe+8jOop1POK57Okjr55GU= 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=SBAl/Bz7; arc=none smtp.client-ip=209.85.215.202 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="SBAl/Bz7" Received: by mail-pg1-f202.google.com with SMTP id 41be03b00d2f7-c70f2120583so3427786a12.3 for ; Tue, 03 Mar 2026 11:55:59 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1772567759; x=1773172559; 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=dq/OV3i9BQc2Nxo8MqQVMxCoaBT7eVK8KXpu8kyi000=; b=SBAl/Bz7g8wUyIfoOWqBebb9/XtKX/DOKzT4m1N42I8caEKbRF4LXcTYEXO/nykKJb LOBi3UT2nBpp9aJl3PcbderSvVThUbl6Hru39LudvvZdfdx/mg0gs0Nf1q+xUuvkIUhk k1oGYK2N/hpTaoAtqgm1BtVMGEfkIq1W6vEwlxd+WvB68ZDRbRuDIy+Hy0ey1uuFYmPc JvX9VNTXxgRES+my+BVrUZeCM0yFVrak+MMQjmiQj6yh2f3GHYQqQp79EIkj/NZIpQ03 Rfr5TOoZkLDTwwOWxK5WYaddrUzlnzdLPB1QFClEGujmNCE7aQGaCVNKAL0BudEYI23a zMsA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1772567759; x=1773172559; 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=dq/OV3i9BQc2Nxo8MqQVMxCoaBT7eVK8KXpu8kyi000=; b=FjIpwZa31oWmCdw4MgV57eDw4gBrGPcd0SP+3XzNXGyMKFQ1Xu7TqQ+8/Ok2SYmILu VAUACZun0ma3c+tOfvTzN9gqeoz2LnTanaCqTJHDD/qTN4Huqz5lSsiU4cF5nhD+zKa7 GetvE9kP9wOXTQPO4GqUNkuDcreXqVtRuNZpQxVAE5gZ6RsMbuGEJlIPQ5XjDNvatOUQ j+f8OzwxonrFxHUa2x0uMeLKnTYaO/5cTuZACdEq3TFeAiIPz2pyqrgfKX927i6pxsDK qEqTjd8fqpESweP+Dqvlr/MU8zIsQk5q9IrPGoHUyh/iqIuIldcTlK1U4O8rp3LfFbQW EFCg== X-Forwarded-Encrypted: i=1; AJvYcCVxlER+93wIfJ3YXn905WakUoARBYnUSw5eAEXoUPzUC4HsvBu+HJj4sfGsA9cTRlo8/1WDfYp2BSofUUs=@vger.kernel.org X-Gm-Message-State: AOJu0Yzp55asJf3wI3g0z7FUM1KaA8m5+9vwF0JlHu3r+F3TxvYC1CpZ 9RgVfni8L/iBXVMr2XH4Qr8Eh/X8FeMASx+dx2lTDeC/z5fdSRUoxLOSxjaz+7/g7LuRCt7Yva+ 8jBGnVZO4e8glMQ== X-Received: from pfjt7.prod.google.com ([2002:a05:6a00:21c7:b0:824:a3b4:6d0]) (user=joshwash job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a00:2d95:b0:822:1dbc:e75d with SMTP id d2e1a72fcca58-8274d933c52mr13543880b3a.1.1772567758991; Tue, 03 Mar 2026 11:55:58 -0800 (PST) Date: Tue, 3 Mar 2026 11:55:48 -0800 In-Reply-To: <20260303195549.2679070-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: <20260303195549.2679070-1-joshwash@google.com> X-Mailer: git-send-email 2.53.0.473.g4a7958ca14-goog Message-ID: <20260303195549.2679070-4-joshwash@google.com> Subject: [PATCH net-next 3/4] gve: pull network headers into skb linear part From: Joshua Washington 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 , Jordan Rhee , Ankit Garg , John Fraker , Ziwei Xiao , Matt Olson , Praveen Kaligineedi , Tim Hostetler , linux-kernel@vger.kernel.org, bpf@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Ankit Garg Currently, in DQO mode with hw-gro enabled, entire received packet is placed into skb fragments when header-split is disabled. This leaves the skb linear part empty, forcing the networking stack to do multiple small memory copies to access eth, IP and TCP headers. This patch adds a single memcpy to put all headers into linear portion before packet reaches the SW GRO stack; thus eliminating multiple smaller memcpy calls. Additionally, the criteria for calling napi_gro_frags() was updated. Since skb->head is now populated, we instead check if the SKB is the cached NAPI scratchpad to ensure we continue using the zero-allocation path. Signed-off-by: Ankit Garg Reviewed-by: Eric Dumazet Reviewed-by: Harshitha Ramamurthy Signed-off-by: Joshua Washington --- drivers/net/ethernet/google/gve/gve_rx_dqo.c | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/drivers/net/ethernet/google/gve/gve_rx_dqo.c b/drivers/net/eth= ernet/google/gve/gve_rx_dqo.c index 5ba893e5..ac44f50d 100644 --- a/drivers/net/ethernet/google/gve/gve_rx_dqo.c +++ b/drivers/net/ethernet/google/gve/gve_rx_dqo.c @@ -946,6 +946,8 @@ static int gve_rx_complete_rsc(struct sk_buff *skb, { struct skb_shared_info *shinfo =3D skb_shinfo(skb); int rsc_segments, rsc_seg_len, hdr_len; + skb_frag_t *frag; + void *va; =20 /* HW-GRO only coalesces TCP. */ if (ptype.l4_type !=3D GVE_L4_TYPE_TCP) @@ -973,10 +975,20 @@ static int gve_rx_complete_rsc(struct sk_buff *skb, /* HW-GRO packets are guaranteed to have complete TCP/IP * headers in frag[0] when header-split is not enabled. */ - hdr_len =3D eth_get_headlen(skb->dev, - skb_frag_address(&shinfo->frags[0]), - skb_frag_size(&shinfo->frags[0])); + frag =3D &skb_shinfo(skb)->frags[0]; + va =3D skb_frag_address(frag); + hdr_len =3D + eth_get_headlen(skb->dev, va, skb_frag_size(frag)); rsc_segments =3D DIV_ROUND_UP(skb->len - hdr_len, rsc_seg_len); + skb_copy_to_linear_data(skb, va, hdr_len); + skb_frag_size_sub(frag, hdr_len); + /* Verify we didn't empty the fragment completely as that could + * otherwise lead to page leaks. + */ + DEBUG_NET_WARN_ON_ONCE(!skb_frag_size(frag)); + skb_frag_off_add(frag, hdr_len); + skb->data_len -=3D hdr_len; + skb->tail +=3D hdr_len; } shinfo->gso_size =3D rsc_seg_len; shinfo->gso_segs =3D rsc_segments; @@ -1013,7 +1025,7 @@ static int gve_rx_complete_skb(struct gve_rx_ring *rx= , struct napi_struct *napi, return err; } =20 - if (skb_headlen(rx->ctx.skb_head) =3D=3D 0) + if (rx->ctx.skb_head =3D=3D napi->skb) napi_gro_frags(napi); else napi_gro_receive(napi, rx->ctx.skb_head); --=20 2.53.0.473.g4a7958ca14-goog From nobody Thu Apr 9 17:58:36 2026 Received: from mail-pg1-f201.google.com (mail-pg1-f201.google.com [209.85.215.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 CA53F396597 for ; Tue, 3 Mar 2026 19:56:01 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772567764; cv=none; b=CkONiA63SldqPCx34QjCr/J0eE0LtAFf7MpL9ZMXKvOkG/cOUFadO4+5iKO+t1OMYo2f2gC/7t/gbUNeTEhW2Wgl8x528LeuTVcZQ/aMcXJ5pO/Ft7g5taEg1JZlsYNqkmkjPAaS93+VJRv+mJTGskeX6jelh8TXTi+RiKdQG3w= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772567764; c=relaxed/simple; bh=bcPmWJbA+HwFh5Sp4FvAT6eGPD1jFzH7Tlh7wmLVZFg=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=dUeOFe65oncHyz/Gk3NDSrPe4WwOqK3o143BEPQXBhJBuoFaV9V3a5d3alY0pzg/N5qkROiYFYeR347CQLvisVYNKuRd0/zyvkc/hXmqV41PVR4dKgPSlgF/ZIhdH2s6h/hWtLKSHGoAxiCcWci2KKoiCdYes1qjm56DlTX4tbA= 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=4bqAqaSW; arc=none smtp.client-ip=209.85.215.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--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="4bqAqaSW" Received: by mail-pg1-f201.google.com with SMTP id 41be03b00d2f7-b6ce1b57b9cso4810938a12.1 for ; Tue, 03 Mar 2026 11:56:01 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1772567761; x=1773172561; 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=q7O+VqmWleakm25HNUCSndfnjpDlMGeEkeH0AG/54zw=; b=4bqAqaSWfGMG3ODjwionQIf98JgMtykwKCws9aOBc/R/0TMDWyhvKVMSl8t7m/OrEH hAnAJiFoXPGE6b+vCvEqZ8ArTzXM02uUgAS/9rLwQvfsxAav0QifZSzLM+gnraqQC7e7 MAwO5HfSmh+3Jb8++u7fzA66Qo1R6nUJS+IUyg1yoqskycYCYmJ8oiGrz5QEApKHAlVV 0tTt0sp/IBKIDwhs8Pr4dvTDj6kr3ZF8LiqN0KRKWEPk0dnSk+kX6WcD1Cv6M5MD5H+y SMY50DiqkA53sHj5v+MdaViqDzDWum0vIIjU8otQPEOadTsDEC/E10g/4VsYtD8BBx/Y Z1VA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1772567761; x=1773172561; 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=q7O+VqmWleakm25HNUCSndfnjpDlMGeEkeH0AG/54zw=; b=a5TdPOf86B/H9QLV+IzYw/BhJGKbur80+W+9AChWVrmfvvnXzvZdYkpCxY4agHmcHl Wh1lGlp31QvboEa1p4lFRXDDyYWOInkSFW41Ieoedenw/2QmuYTltNNhNpCtRZoY/6Tg OaPMm+n6hJa0cwvLlSFRA4p2V5WLPf/diBSVMlHboaW8QniYtL4ktof943P+fXU3c9ZC dqAMOxhL4+fT97bxa8Tsvs/pwFOEXaqRqHnI9hWX43BlkJyiABZdaGBSniIhHCchUmyj R7Th60hMrlPsLuTiMAo/F1E9P7uEdWgea5LKofe3UwJbFMiubZdDntArFfYpsVUJP9DP PH0g== X-Forwarded-Encrypted: i=1; AJvYcCUq60OrzXnWWh4XqWVWa00VcxpHeuvtLk5wevftqWLEYsle5u+P97qv3cuIX4T0YLUtIn6HmSoPz5hyWL8=@vger.kernel.org X-Gm-Message-State: AOJu0Yx7NKH3VzQN4ylQ8ChB0GzEfrK59tCX6UnYP0Lp3iSJhycZQ7rJ rPanEOL82zPcBEHQmkgRHUyOtr/aPq6hHpNME8o0Ymbq6SRNbtehG3QuSDqiYGO9WY1nnYEybDQ rXPn1nOfal4fH9w== X-Received: from pgag24.prod.google.com ([2002:a05:6a02:2f18:b0:c70:e479:52d3]) (user=joshwash job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a21:610e:b0:38d:eeb9:8f49 with SMTP id adf61e73a8af0-395c39de44amr13785530637.2.1772567760815; Tue, 03 Mar 2026 11:56:00 -0800 (PST) Date: Tue, 3 Mar 2026 11:55:49 -0800 In-Reply-To: <20260303195549.2679070-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: <20260303195549.2679070-1-joshwash@google.com> X-Mailer: git-send-email 2.53.0.473.g4a7958ca14-goog Message-ID: <20260303195549.2679070-5-joshwash@google.com> Subject: [PATCH net-next 4/4] gve: Enable hw-gro by default if device supported From: Joshua Washington 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 , Jordan Rhee , Ankit Garg , John Fraker , Ziwei Xiao , Matt Olson , Praveen Kaligineedi , Tim Hostetler , linux-kernel@vger.kernel.org, bpf@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Ankit Garg Change the driver's default behavior to enable hw-gro whenever supported for device. Performance observations: - We observed ~10% improvement in RX single stream throughput across various MTU sizes. - No change in TCP_RR/TCP_CRR latencies Signed-off-by: Ankit Garg Reviewed-by: Willem de Bruijn Reviewed-by: Harshitha Ramamurthy Signed-off-by: Joshua Washington --- drivers/net/ethernet/google/gve/gve_adminq.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/drivers/net/ethernet/google/gve/gve_adminq.c b/drivers/net/eth= ernet/google/gve/gve_adminq.c index 873672f6..6ce8345e 100644 --- a/drivers/net/ethernet/google/gve/gve_adminq.c +++ b/drivers/net/ethernet/google/gve/gve_adminq.c @@ -1128,8 +1128,10 @@ int gve_adminq_describe_device(struct gve_priv *priv) gve_set_default_rss_sizes(priv); =20 /* DQO supports HW-GRO. */ - if (!gve_is_gqi(priv)) + if (gve_is_dqo(priv)) { priv->dev->hw_features |=3D NETIF_F_GRO_HW; + priv->dev->features |=3D NETIF_F_GRO_HW; + } =20 priv->max_registered_pages =3D be64_to_cpu(descriptor->max_registered_pages); --=20 2.53.0.473.g4a7958ca14-goog