Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/2196365/?format=api
{ "id": 2196365, "url": "http://patchwork.ozlabs.org/api/patches/2196365/?format=api", "web_url": "http://patchwork.ozlabs.org/project/intel-wired-lan/patch/20260213-bpf-xdp-meta-rxcksum-v2-3-a82c4802afbe@kernel.org/", "project": { "id": 46, "url": "http://patchwork.ozlabs.org/api/projects/46/?format=api", "name": "Intel Wired Ethernet development", "link_name": "intel-wired-lan", "list_id": "intel-wired-lan.osuosl.org", "list_email": "intel-wired-lan@osuosl.org", "web_url": "", "scm_url": "", "webscm_url": "", "list_archive_url": "", "list_archive_url_format": "", "commit_url_format": "" }, "msgid": "<20260213-bpf-xdp-meta-rxcksum-v2-3-a82c4802afbe@kernel.org>", "list_archive_url": null, "date": "2026-02-13T15:26:22", "name": "[bpf-next,v2,3/5] net: ice: Add xmo_rx_checksum callback", "commit_ref": null, "pull_url": null, "state": "handled-elsewhere", "archived": false, "hash": "04f03faab09242978370781a441b396985d10cd9", "submitter": { "id": 76007, "url": "http://patchwork.ozlabs.org/api/people/76007/?format=api", "name": "Lorenzo Bianconi", "email": "lorenzo@kernel.org" }, "delegate": null, "mbox": "http://patchwork.ozlabs.org/project/intel-wired-lan/patch/20260213-bpf-xdp-meta-rxcksum-v2-3-a82c4802afbe@kernel.org/mbox/", "series": [ { "id": 492113, "url": "http://patchwork.ozlabs.org/api/series/492113/?format=api", "web_url": "http://patchwork.ozlabs.org/project/intel-wired-lan/list/?series=492113", "date": "2026-02-13T15:26:20", "name": "Add the the capability to load HW RX checsum in eBPF programs", "version": 2, "mbox": "http://patchwork.ozlabs.org/series/492113/mbox/" } ], "comments": "http://patchwork.ozlabs.org/api/patches/2196365/comments/", "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/2196365/checks/", "tags": {}, "related": [], "headers": { "Return-Path": "<intel-wired-lan-bounces@osuosl.org>", "X-Original-To": [ "incoming@patchwork.ozlabs.org", "intel-wired-lan@lists.osuosl.org" ], "Delivered-To": [ "patchwork-incoming@legolas.ozlabs.org", "intel-wired-lan@lists.osuosl.org" ], "Authentication-Results": [ "legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=osuosl.org header.i=@osuosl.org header.a=rsa-sha256\n header.s=default header.b=G+Hj608n;\n\tdkim-atps=neutral", "legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=osuosl.org\n (client-ip=2605:bc80:3010::138; helo=smtp1.osuosl.org;\n envelope-from=intel-wired-lan-bounces@osuosl.org;\n receiver=patchwork.ozlabs.org)" ], "Received": [ "from smtp1.osuosl.org (smtp1.osuosl.org [IPv6:2605:bc80:3010::138])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519 server-signature ECDSA (secp384r1) server-digest SHA384)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4fCGHk5PPlz1xxM\n\tfor <incoming@patchwork.ozlabs.org>; Sat, 14 Feb 2026 02:27:14 +1100 (AEDT)", "from localhost (localhost [127.0.0.1])\n\tby smtp1.osuosl.org (Postfix) with ESMTP id 08D53844B0;\n\tFri, 13 Feb 2026 15:27:13 +0000 (UTC)", "from smtp1.osuosl.org ([127.0.0.1])\n by localhost (smtp1.osuosl.org [127.0.0.1]) (amavis, port 10024) with ESMTP\n id eGrftIHDSG18; Fri, 13 Feb 2026 15:27:11 +0000 (UTC)", "from lists1.osuosl.org (lists1.osuosl.org [140.211.166.142])\n\tby smtp1.osuosl.org (Postfix) with ESMTP id 866FC844AF;\n\tFri, 13 Feb 2026 15:27:11 +0000 (UTC)", "from smtp3.osuosl.org (smtp3.osuosl.org [IPv6:2605:bc80:3010::136])\n by lists1.osuosl.org (Postfix) with ESMTP id EB233EC\n for <intel-wired-lan@lists.osuosl.org>; Fri, 13 Feb 2026 15:27:09 +0000 (UTC)", "from localhost (localhost [127.0.0.1])\n by smtp3.osuosl.org (Postfix) with ESMTP id E5793611FB\n for <intel-wired-lan@lists.osuosl.org>; Fri, 13 Feb 2026 15:27:09 +0000 (UTC)", "from smtp3.osuosl.org ([127.0.0.1])\n by localhost (smtp3.osuosl.org [127.0.0.1]) (amavis, port 10024) with ESMTP\n id n6GEjUqz9fRp for <intel-wired-lan@lists.osuosl.org>;\n Fri, 13 Feb 2026 15:27:09 +0000 (UTC)", "from sea.source.kernel.org (sea.source.kernel.org\n [IPv6:2600:3c0a:e001:78e:0:1991:8:25])\n by smtp3.osuosl.org (Postfix) with ESMTPS id 30968607E0\n for <intel-wired-lan@lists.osuosl.org>; Fri, 13 Feb 2026 15:27:08 +0000 (UTC)", "from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58])\n by sea.source.kernel.org (Postfix) with ESMTP id 84ADF440F9;\n Fri, 13 Feb 2026 15:27:08 +0000 (UTC)", "by smtp.kernel.org (Postfix) with ESMTPSA id D9FA5C116C6;\n Fri, 13 Feb 2026 15:27:07 +0000 (UTC)" ], "X-Virus-Scanned": [ "amavis at osuosl.org", "amavis at osuosl.org" ], "X-Comment": "SPF check N/A for local connections - client-ip=140.211.166.142;\n helo=lists1.osuosl.org; envelope-from=intel-wired-lan-bounces@osuosl.org;\n receiver=<UNKNOWN> ", "DKIM-Filter": [ "OpenDKIM Filter v2.11.0 smtp1.osuosl.org 866FC844AF", "OpenDKIM Filter v2.11.0 smtp3.osuosl.org 30968607E0" ], "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=osuosl.org;\n\ts=default; t=1770996431;\n\tbh=D4LKZUvsThHEX6gjEDccjf19jgwypwMXzItxtoiq+pw=;\n\th=From:Date:References:In-Reply-To:To:Cc:Subject:List-Id:\n\t List-Unsubscribe:List-Archive:List-Post:List-Help:List-Subscribe:\n\t From;\n\tb=G+Hj608nF7wczmmdl9i2KTd+HxnC9bBFC/VvmEyf5bBOCw9PpKdLHYz1QET/uOabh\n\t vHrJcfX6j1uB9TLQlrA7pihduw3PYLwVjyuWpjNiSjcoD6X59RI1lPiK8p2X1sbdhl\n\t WdKNHei03/UmIuXdOpvy5hvYwM1lFzLPBi1LlPpeT7vE/gn/7ZxMTmTRGQ5jyiz86f\n\t jeh8qH4DXf+rLmyxreOE6OrN4KhViZo3ji7fgyjbEk2xTU2fE0s/btA3W1cqFlFg1e\n\t ubVYDRHJkYg+SUFof37qoj64sYJSVYKl/KcblrJ6SNkY/eecsxqKY38t2M5sZr+od5\n\t j5dT0+w+Rez8Q==", "Received-SPF": "Pass (mailfrom) identity=mailfrom;\n client-ip=2600:3c0a:e001:78e:0:1991:8:25; helo=sea.source.kernel.org;\n envelope-from=lorenzo@kernel.org; receiver=<UNKNOWN>", "DMARC-Filter": "OpenDMARC Filter v1.4.2 smtp3.osuosl.org 30968607E0", "From": "Lorenzo Bianconi <lorenzo@kernel.org>", "Date": "Fri, 13 Feb 2026 16:26:22 +0100", "MIME-Version": "1.0", "Content-Type": "text/plain; charset=\"utf-8\"", "Content-Transfer-Encoding": "7bit", "Message-Id": "<20260213-bpf-xdp-meta-rxcksum-v2-3-a82c4802afbe@kernel.org>", "References": "<20260213-bpf-xdp-meta-rxcksum-v2-0-a82c4802afbe@kernel.org>", "In-Reply-To": "<20260213-bpf-xdp-meta-rxcksum-v2-0-a82c4802afbe@kernel.org>", "To": "Donald Hunter <donald.hunter@gmail.com>,\n Jakub Kicinski <kuba@kernel.org>, \"David S. Miller\" <davem@davemloft.net>,\n Eric Dumazet <edumazet@google.com>, Paolo Abeni <pabeni@redhat.com>,\n Simon Horman <horms@kernel.org>, Alexei Starovoitov <ast@kernel.org>,\n Daniel Borkmann <daniel@iogearbox.net>,\n Jesper Dangaard Brouer <hawk@kernel.org>,\n John Fastabend <john.fastabend@gmail.com>,\n Stanislav Fomichev <sdf@fomichev.me>, Andrew Lunn <andrew+netdev@lunn.ch>,\n Tony Nguyen <anthony.l.nguyen@intel.com>,\n Przemek Kitszel <przemyslaw.kitszel@intel.com>,\n Alexander Lobakin <aleksander.lobakin@intel.com>,\n Andrii Nakryiko <andrii@kernel.org>,\n Martin KaFai Lau <martin.lau@linux.dev>,\n Eduard Zingerman <eddyz87@gmail.com>, Song Liu <song@kernel.org>,\n Yonghong Song <yonghong.song@linux.dev>, KP Singh <kpsingh@kernel.org>,\n Hao Luo <haoluo@google.com>, Jiri Olsa <jolsa@kernel.org>,\n Shuah Khan <shuah@kernel.org>,\n Maciej Fijalkowski <maciej.fijalkowski@intel.com>", "Cc": "Jakub Sitnicki <jakub@cloudflare.com>, netdev@vger.kernel.org,\n bpf@vger.kernel.org, intel-wired-lan@lists.osuosl.org,\n linux-kselftest@vger.kernel.org, Lorenzo Bianconi <lorenzo@kernel.org>", "X-Mailer": "b4 0.14.2", "X-Mailman-Original-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/simple;\n d=kernel.org; s=k20201202; t=1770996428;\n bh=nlLq2xy0y7+YVfCtc0NLP1rkpfOWfsf+4065jFl7AeA=;\n h=From:Date:Subject:References:In-Reply-To:To:Cc:From;\n b=Cf+nDXWG+S2iiIHpPdoYNiVPhZcHL/CvTXuxSQHDMrXkR1s07vPlhVEJE9z1uspNX\n q6yzXZKkKEk7TukKInjFTQ4XQq+OBltJmRogz7M3y7jcYJDmbZ4DbviEVShw4QYLak\n H6chEE6QReZPCS/WK/N7PZ+ugZ3/CCkUZZBG1fkxgve9ZTDagxg1jh37AQekLTAthI\n oVH/VuX9u5vFCLFVdpKPz1P5oZ6ILMh4lhXFO3rotb+pFHF09j4FmF1LMnQyXPmDqk\n el3lSRC1bQFH+32fMjq4RO1S8zREisrvD41QmlhhVOD7jJKrKUzXWwhhBoLzKSht0u\n +amk06BivSJcQ==", "X-Mailman-Original-Authentication-Results": [ "smtp3.osuosl.org;\n dmarc=pass (p=quarantine dis=none)\n header.from=kernel.org", "smtp3.osuosl.org;\n dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org\n header.a=rsa-sha256 header.s=k20201202 header.b=Cf+nDXWG" ], "Subject": "[Intel-wired-lan] [PATCH bpf-next v2 3/5] net: ice: Add\n xmo_rx_checksum callback", "X-BeenThere": "intel-wired-lan@osuosl.org", "X-Mailman-Version": "2.1.30", "Precedence": "list", "List-Id": "Intel Wired Ethernet Linux Kernel Driver Development\n <intel-wired-lan.osuosl.org>", "List-Unsubscribe": "<https://lists.osuosl.org/mailman/options/intel-wired-lan>,\n <mailto:intel-wired-lan-request@osuosl.org?subject=unsubscribe>", "List-Archive": "<http://lists.osuosl.org/pipermail/intel-wired-lan/>", "List-Post": "<mailto:intel-wired-lan@osuosl.org>", "List-Help": "<mailto:intel-wired-lan-request@osuosl.org?subject=help>", "List-Subscribe": "<https://lists.osuosl.org/mailman/listinfo/intel-wired-lan>,\n <mailto:intel-wired-lan-request@osuosl.org?subject=subscribe>", "Errors-To": "intel-wired-lan-bounces@osuosl.org", "Sender": "\"Intel-wired-lan\" <intel-wired-lan-bounces@osuosl.org>" }, "content": "Implement xmo_rx_checksum callback in ice driver to report RX checksum\nresult to the eBPF program bounded to the NIC.\nIntroduce ice_get_rx_csum utility routine in order to rx cksum codebase\navailable in ice_rx_csum().\n\nSigned-off-by: Lorenzo Bianconi <lorenzo@kernel.org>\n---\n drivers/net/ethernet/intel/ice/ice_txrx_lib.c | 118 +++++++++++++++++---------\n 1 file changed, 76 insertions(+), 42 deletions(-)", "diff": "diff --git a/drivers/net/ethernet/intel/ice/ice_txrx_lib.c b/drivers/net/ethernet/intel/ice/ice_txrx_lib.c\nindex 956da38d63b0032db238325dcff818bbd99478e9..65b34b29f396560739fc58293496a5e9ddf09b53 100644\n--- a/drivers/net/ethernet/intel/ice/ice_txrx_lib.c\n+++ b/drivers/net/ethernet/intel/ice/ice_txrx_lib.c\n@@ -81,69 +81,47 @@ ice_rx_hash_to_skb(const struct ice_rx_ring *rx_ring,\n \t\tlibeth_rx_pt_set_hash(skb, hash, decoded);\n }\n \n-/**\n- * ice_rx_gcs - Set generic checksum in skb\n- * @skb: skb currently being received and modified\n- * @rx_desc: receive descriptor\n- */\n-static void ice_rx_gcs(struct sk_buff *skb,\n-\t\t const union ice_32b_rx_flex_desc *rx_desc)\n-{\n-\tconst struct ice_32b_rx_flex_desc_nic *desc;\n-\tu16 csum;\n-\n-\tdesc = (struct ice_32b_rx_flex_desc_nic *)rx_desc;\n-\tskb->ip_summed = CHECKSUM_COMPLETE;\n-\tcsum = (__force u16)desc->raw_csum;\n-\tskb->csum = csum_unfold((__force __sum16)swab16(csum));\n-}\n-\n-/**\n- * ice_rx_csum - Indicate in skb if checksum is good\n- * @ring: the ring we care about\n- * @skb: skb currently being received and modified\n- * @rx_desc: the receive descriptor\n- * @ptype: the packet type decoded by hardware\n- *\n- * skb->protocol must be set before this function is called\n- */\n static void\n-ice_rx_csum(struct ice_rx_ring *ring, struct sk_buff *skb,\n-\t union ice_32b_rx_flex_desc *rx_desc, u16 ptype)\n+ice_get_rx_csum(const union ice_32b_rx_flex_desc *rx_desc, u16 ptype,\n+\t\tstruct ice_rx_ring *ring, enum xdp_checksum *ip_summed,\n+\t\tu32 *cksum_meta)\n {\n-\tstruct libeth_rx_pt decoded;\n+\tstruct libeth_rx_pt decoded = libie_rx_pt_parse(ptype);\n \tu16 rx_status0, rx_status1;\n \tbool ipv4, ipv6;\n \n-\t/* Start with CHECKSUM_NONE and by default csum_level = 0 */\n-\tskb->ip_summed = CHECKSUM_NONE;\n-\n-\tdecoded = libie_rx_pt_parse(ptype);\n \tif (!libeth_rx_pt_has_checksum(ring->netdev, decoded))\n-\t\treturn;\n+\t\tgoto checksum_none;\n \n \trx_status0 = le16_to_cpu(rx_desc->wb.status_error0);\n \trx_status1 = le16_to_cpu(rx_desc->wb.status_error1);\n-\n \tif ((ring->flags & ICE_RX_FLAGS_RING_GCS) &&\n \t rx_desc->wb.rxdid == ICE_RXDID_FLEX_NIC &&\n \t (decoded.inner_prot == LIBETH_RX_PT_INNER_TCP ||\n \t decoded.inner_prot == LIBETH_RX_PT_INNER_UDP ||\n \t decoded.inner_prot == LIBETH_RX_PT_INNER_ICMP)) {\n-\t\tice_rx_gcs(skb, rx_desc);\n+\t\tconst struct ice_32b_rx_flex_desc_nic *desc;\n+\t\t__wsum wcsum;\n+\t\tu16 csum;\n+\n+\t\tdesc = (struct ice_32b_rx_flex_desc_nic *)rx_desc;\n+\t\t*ip_summed = XDP_CHECKSUM_COMPLETE;\n+\t\tcsum = (__force u16)desc->raw_csum;\n+\t\twcsum = csum_unfold((__force __sum16)swab16(csum));\n+\t\t*cksum_meta = (__force u32)wcsum;\n \t\treturn;\n \t}\n \n \t/* check if HW has decoded the packet and checksum */\n \tif (!(rx_status0 & BIT(ICE_RX_FLEX_DESC_STATUS0_L3L4P_S)))\n-\t\treturn;\n+\t\tgoto checksum_none;\n \n \tipv4 = libeth_rx_pt_get_ip_ver(decoded) == LIBETH_RX_PT_OUTER_IPV4;\n \tipv6 = libeth_rx_pt_get_ip_ver(decoded) == LIBETH_RX_PT_OUTER_IPV6;\n \n \tif (ipv4 && (rx_status0 & (BIT(ICE_RX_FLEX_DESC_STATUS0_XSUM_EIPE_S)))) {\n \t\tring->vsi->back->hw_rx_eipe_error++;\n-\t\treturn;\n+\t\tgoto checksum_none;\n \t}\n \n \tif (ipv4 && (rx_status0 & (BIT(ICE_RX_FLEX_DESC_STATUS0_XSUM_IPE_S))))\n@@ -167,14 +145,45 @@ ice_rx_csum(struct ice_rx_ring *ring, struct sk_buff *skb,\n \t * we need to bump the checksum level by 1 to reflect the fact that\n \t * we are indicating we validated the inner checksum.\n \t */\n-\tif (decoded.tunnel_type >= LIBETH_RX_PT_TUNNEL_IP_GRENAT)\n-\t\tskb->csum_level = 1;\n-\n-\tskb->ip_summed = CHECKSUM_UNNECESSARY;\n+\t*cksum_meta = decoded.tunnel_type >= LIBETH_RX_PT_TUNNEL_IP_GRENAT;\n+\t*ip_summed = XDP_CHECKSUM_UNNECESSARY;\n \treturn;\n \n checksum_fail:\n \tring->vsi->back->hw_csum_rx_error++;\n+checksum_none:\n+\t*ip_summed = XDP_CHECKSUM_NONE;\n+\t*cksum_meta = 0;\n+}\n+\n+/**\n+ * ice_rx_csum - Indicate in skb if checksum is good\n+ * @ring: the ring we care about\n+ * @skb: skb currently being received and modified\n+ * @rx_desc: the receive descriptor\n+ * @ptype: the packet type decoded by hardware\n+ *\n+ * skb->protocol must be set before this function is called\n+ */\n+static void\n+ice_rx_csum(struct ice_rx_ring *ring, struct sk_buff *skb,\n+\t union ice_32b_rx_flex_desc *rx_desc, u16 ptype)\n+{\n+\tenum xdp_checksum ip_summed;\n+\tu32 cksum_meta;\n+\n+\tice_get_rx_csum(rx_desc, ptype, ring, &ip_summed, &cksum_meta);\n+\tswitch (ip_summed) {\n+\tcase XDP_CHECKSUM_UNNECESSARY:\n+\t\tskb->csum_level = cksum_meta;\n+\t\tbreak;\n+\tcase XDP_CHECKSUM_COMPLETE:\n+\t\tskb->csum = (__force __wsum)cksum_meta;\n+\t\tbreak;\n+\tdefault:\n+\t\tbreak;\n+\t}\n+\tskb->ip_summed = ip_summed;\n }\n \n /**\n@@ -569,6 +578,30 @@ static int ice_xdp_rx_hash(const struct xdp_md *ctx, u32 *hash,\n \treturn 0;\n }\n \n+/**\n+ * ice_xdp_rx_checksum - RX checksum XDP hint handler\n+ * @ctx: XDP buff pointer\n+ * @ip_summed: RX checksum result destination address\n+ * @cksum_meta: XDP RX checksum metadata destination address\n+ *\n+ * Copy RX checksum result (if available) and its metadata to the\n+ * destination address.\n+ */\n+static int ice_xdp_rx_checksum(const struct xdp_md *ctx,\n+\t\t\t enum xdp_checksum *ip_summed,\n+\t\t\t u32 *cksum_meta)\n+{\n+\tconst struct libeth_xdp_buff *xdp_ext = (void *)ctx;\n+\tconst union ice_32b_rx_flex_desc *rx_desc = xdp_ext->desc;\n+\tstruct ice_rx_ring *ring;\n+\n+\tring = libeth_xdp_buff_to_rq(xdp_ext, typeof(*ring), xdp_rxq);\n+\tice_get_rx_csum(rx_desc, ice_get_ptype(rx_desc), ring, ip_summed,\n+\t\t\tcksum_meta);\n+\n+\treturn 0;\n+}\n+\n /**\n * ice_xdp_rx_vlan_tag - VLAN tag XDP hint handler\n * @ctx: XDP buff pointer\n@@ -601,4 +634,5 @@ const struct xdp_metadata_ops ice_xdp_md_ops = {\n \t.xmo_rx_timestamp\t\t= ice_xdp_rx_hw_ts,\n \t.xmo_rx_hash\t\t\t= ice_xdp_rx_hash,\n \t.xmo_rx_vlan_tag\t\t= ice_xdp_rx_vlan_tag,\n+\t.xmo_rx_checksum\t\t= ice_xdp_rx_checksum,\n };\n", "prefixes": [ "bpf-next", "v2", "3/5" ] }