From nobody Thu Apr 9 19:19:01 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