From patchwork Tue Mar 28 20:15:58 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jesper Dangaard Brouer X-Patchwork-Id: 13191514 X-Patchwork-Delegate: bpf@iogearbox.net Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 95A69C77B60 for ; Tue, 28 Mar 2023 20:17:00 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229891AbjC1UQ7 (ORCPT ); Tue, 28 Mar 2023 16:16:59 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59626 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229910AbjC1UQx (ORCPT ); Tue, 28 Mar 2023 16:16:53 -0400 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id DE63B3AB7 for ; Tue, 28 Mar 2023 13:16:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1680034563; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=Btpaq0T95DzJARTIOQ/tKL2YaQOMLaE7wfp3COF2FTY=; b=W/TMywnG4pKAHjQy84EhQ0ysG5bVY3LZc9Gc3jzqmJoKyrgHC053uGdzlOl9qIrSZFuP+D b1TQlU8jEueTynEEsciuXE2yvLlhIvtDF6t83UWyZ1oPOLyMr008ncFisRwGdHCexFnymm 6c211ytM7F3k4MQIlRbGRgWYjMSToqg= Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-231-g5Rjh4JJNqSdboiLnOtOPQ-1; Tue, 28 Mar 2023 16:16:00 -0400 X-MC-Unique: g5Rjh4JJNqSdboiLnOtOPQ-1 Received: from smtp.corp.redhat.com (int-mx10.intmail.prod.int.rdu2.redhat.com [10.11.54.10]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 6B3B4101A531; Tue, 28 Mar 2023 20:15:59 +0000 (UTC) Received: from firesoul.localdomain (unknown [10.45.242.4]) by smtp.corp.redhat.com (Postfix) with ESMTP id 16548492C3E; Tue, 28 Mar 2023 20:15:59 +0000 (UTC) Received: from [10.1.1.1] (localhost [IPv6:::1]) by firesoul.localdomain (Postfix) with ESMTP id 3616E30736C72; Tue, 28 Mar 2023 22:15:58 +0200 (CEST) Subject: [PATCH bpf RFC 1/4] xdp: rss hash types representation From: Jesper Dangaard Brouer To: bpf@vger.kernel.org Cc: Jesper Dangaard Brouer , netdev@vger.kernel.org, Stanislav Fomichev , martin.lau@kernel.org, ast@kernel.org, daniel@iogearbox.net, alexandr.lobakin@intel.com, larysa.zaremba@intel.com, xdp-hints@xdp-project.net, anthony.l.nguyen@intel.com, yoong.siang.song@intel.com, boon.leong.ong@intel.com, intel-wired-lan@lists.osuosl.org, pabeni@redhat.com, jesse.brandeburg@intel.com, kuba@kernel.org, edumazet@google.com, john.fastabend@gmail.com, hawk@kernel.org, davem@davemloft.net Date: Tue, 28 Mar 2023 22:15:58 +0200 Message-ID: <168003455815.3027256.7575362149566382055.stgit@firesoul> In-Reply-To: <168003451121.3027256.13000250073816770554.stgit@firesoul> References: <168003451121.3027256.13000250073816770554.stgit@firesoul> User-Agent: StGit/1.4 MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.1 on 10.11.54.10 Precedence: bulk List-ID: X-Mailing-List: bpf@vger.kernel.org X-Patchwork-Delegate: bpf@iogearbox.net X-Patchwork-State: RFC The RSS hash type specifies what portion of packet data NIC hardware used when calculating RSS hash value. The RSS types are focused on Internet traffic protocols at OSI layers L3 and L4. L2 (e.g. ARP) often get hash value zero and no RSS type. For L3 focused on IPv4 vs. IPv6, and L4 primarily TCP vs UDP, but some hardware supports SCTP. Hardware RSS types are differently encoded for each hardware NIC. Most hardware represent RSS hash type as a number. Determining L3 vs L4 often requires a mapping table as there often isn't a pattern or sorting according to ISO layer. The patch introduce a XDP RSS hash type (xdp_rss_hash_type) that can both be seen as a number that is ordered according by ISO layer, and can be bit masked to separate IPv4 and IPv6 types for L4 protocols. Room is available for extending later while keeping these properties. This maps and unifies difference to hardware specific hashes. This proposal change the kfunc API bpf_xdp_metadata_rx_hash() to return this RSS hash type on success. Signed-off-by: Jesper Dangaard Brouer --- include/net/xdp.h | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ net/core/xdp.c | 4 +++- 2 files changed, 54 insertions(+), 1 deletion(-) diff --git a/include/net/xdp.h b/include/net/xdp.h index 5393b3ebe56e..63f462f5ea7f 100644 --- a/include/net/xdp.h +++ b/include/net/xdp.h @@ -8,6 +8,7 @@ #include /* skb_shared_info */ #include +#include /** * DOC: XDP RX-queue information @@ -396,6 +397,56 @@ XDP_METADATA_KFUNC_xxx MAX_XDP_METADATA_KFUNC, }; +/* For partitioning of xdp_rss_hash_type */ +#define RSS_L3 GENMASK(2,0) /* 3-bits = values between 1-7 */ +#define L4_BIT BIT(3) /* 1-bit - L4 indication */ +#define RSS_L4_IPV4 GENMASK(6,4) /* 3-bits */ +#define RSS_L4_IPV6 GENMASK(9,7) /* 3-bits */ +#define RSS_L4 GENMASK(9,3) /* = 7-bits - covering L4 IPV4+IPV6 */ +#define L4_IPV6_EX_BIT BIT(9) /* 1-bit - L4 IPv6 with Extension hdr */ + /* 11-bits in total */ + +/* The XDP RSS hash type (xdp_rss_hash_type) can both be seen as a number that + * is ordered according by ISO layer, and can be bit masked to separate IPv4 and + * IPv6 types for L4 protocols. Room is available for extending later while + * keeping above properties, as this need to cover NIC hardware RSS types. + */ +enum xdp_rss_hash_type { + XDP_RSS_TYPE_NONE = 0, + XDP_RSS_TYPE_L2 = XDP_RSS_TYPE_NONE, + + XDP_RSS_TYPE_L3_MASK = RSS_L3, + XDP_RSS_TYPE_L3_IPV4 = FIELD_PREP_CONST(RSS_L3, 1), + XDP_RSS_TYPE_L3_IPV6 = FIELD_PREP_CONST(RSS_L3, 2), + XDP_RSS_TYPE_L3_IPV6_EX = FIELD_PREP_CONST(RSS_L3, 4), + + XDP_RSS_TYPE_L4_MASK = RSS_L4, + XDP_RSS_TYPE_L4_SHIFT = __bf_shf(RSS_L4), + XDP_RSS_TYPE_L4_MASK_EX = RSS_L4 | L4_IPV6_EX_BIT, + + XDP_RSS_TYPE_L4_IPV4_MASK = RSS_L4_IPV4, + XDP_RSS_TYPE_L4_BIT = L4_BIT, + XDP_RSS_TYPE_L4_IPV4_TCP = L4_BIT|FIELD_PREP_CONST(RSS_L4_IPV4, 1), + XDP_RSS_TYPE_L4_IPV4_UDP = L4_BIT|FIELD_PREP_CONST(RSS_L4_IPV4, 2), + XDP_RSS_TYPE_L4_IPV4_SCTP = L4_BIT|FIELD_PREP_CONST(RSS_L4_IPV4, 3), + + XDP_RSS_TYPE_L4_IPV6_MASK = RSS_L4_IPV6, + XDP_RSS_TYPE_L4_IPV6_TCP = L4_BIT|FIELD_PREP_CONST(RSS_L4_IPV6, 1), + XDP_RSS_TYPE_L4_IPV6_UDP = L4_BIT|FIELD_PREP_CONST(RSS_L4_IPV6, 2), + XDP_RSS_TYPE_L4_IPV6_SCTP = L4_BIT|FIELD_PREP_CONST(RSS_L4_IPV6, 3), + + XDP_RSS_TYPE_L4_IPV6_EX_MASK = L4_IPV6_EX_BIT, + XDP_RSS_TYPE_L4_IPV6_TCP_EX = XDP_RSS_TYPE_L4_IPV6_TCP |L4_IPV6_EX_BIT, + XDP_RSS_TYPE_L4_IPV6_UDP_EX = XDP_RSS_TYPE_L4_IPV6_UDP |L4_IPV6_EX_BIT, + XDP_RSS_TYPE_L4_IPV6_SCTP_EX = XDP_RSS_TYPE_L4_IPV6_SCTP|L4_IPV6_EX_BIT, +}; +#undef RSS_L3 +#undef L4_BIT +#undef RSS_L4_IPV4 +#undef RSS_L4_IPV6 +#undef RSS_L4 +#undef L4_IPV6_EX_BIT + #ifdef CONFIG_NET u32 bpf_xdp_metadata_kfunc_id(int id); bool bpf_dev_bound_kfunc_id(u32 btf_id); diff --git a/net/core/xdp.c b/net/core/xdp.c index 7133017bcd74..81d41df30695 100644 --- a/net/core/xdp.c +++ b/net/core/xdp.c @@ -721,12 +721,14 @@ __bpf_kfunc int bpf_xdp_metadata_rx_timestamp(const struct xdp_md *ctx, u64 *tim * @hash: Return value pointer. * * Return: - * * Returns 0 on success or ``-errno`` on error. + * * Returns (positive) RSS hash **type** on success or ``-errno`` on error. + * * ``enum xdp_rss_hash_type`` : RSS hash type * * ``-EOPNOTSUPP`` : means device driver doesn't implement kfunc * * ``-ENODATA`` : means no RX-hash available for this frame */ __bpf_kfunc int bpf_xdp_metadata_rx_hash(const struct xdp_md *ctx, u32 *hash) { + BTF_TYPE_EMIT(enum xdp_rss_hash_type); return -EOPNOTSUPP; } From patchwork Tue Mar 28 20:16:03 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jesper Dangaard Brouer X-Patchwork-Id: 13191515 X-Patchwork-Delegate: bpf@iogearbox.net Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 7E8CBC6FD18 for ; Tue, 28 Mar 2023 20:17:07 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229755AbjC1URG (ORCPT ); Tue, 28 Mar 2023 16:17:06 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59656 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229898AbjC1UQ7 (ORCPT ); Tue, 28 Mar 2023 16:16:59 -0400 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 12F3F3C07 for ; Tue, 28 Mar 2023 13:16:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1680034571; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=vdLO4Y9b3BsmrzeQcmRa2KtBaNDjkTa0G8yC7xzEAHs=; b=HoMFs4trOpatHFbpIUqBwml9sFo+9/tdQ+9Xb5beIM94A813IbPV6B8sEANcrlb+VcxFy3 FTzzVfTru9xuA/NcgUEilGW4Slkb5lupK7+4aeFHuK8Tjv1FmVEjqJDqVryk+cPFgLObFl 2FtQE1jZisC5A9MiaQW4ScdcqbH6tOk= Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-645-3VB9WbnRMUWoRxrLLCTkdQ-1; Tue, 28 Mar 2023 16:16:07 -0400 X-MC-Unique: 3VB9WbnRMUWoRxrLLCTkdQ-1 Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.rdu2.redhat.com [10.11.54.7]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 5E042185A78F; Tue, 28 Mar 2023 20:16:04 +0000 (UTC) Received: from firesoul.localdomain (unknown [10.45.242.4]) by smtp.corp.redhat.com (Postfix) with ESMTP id 22D7614171BD; Tue, 28 Mar 2023 20:16:04 +0000 (UTC) Received: from [10.1.1.1] (localhost [IPv6:::1]) by firesoul.localdomain (Postfix) with ESMTP id 44BBF30736C72; Tue, 28 Mar 2023 22:16:03 +0200 (CEST) Subject: [PATCH bpf RFC 2/4] igc: bpf_xdp_metadata_rx_hash return xdp rss hash type From: Jesper Dangaard Brouer To: bpf@vger.kernel.org Cc: Jesper Dangaard Brouer , netdev@vger.kernel.org, Stanislav Fomichev , martin.lau@kernel.org, ast@kernel.org, daniel@iogearbox.net, alexandr.lobakin@intel.com, larysa.zaremba@intel.com, xdp-hints@xdp-project.net, anthony.l.nguyen@intel.com, yoong.siang.song@intel.com, boon.leong.ong@intel.com, intel-wired-lan@lists.osuosl.org, pabeni@redhat.com, jesse.brandeburg@intel.com, kuba@kernel.org, edumazet@google.com, john.fastabend@gmail.com, hawk@kernel.org, davem@davemloft.net Date: Tue, 28 Mar 2023 22:16:03 +0200 Message-ID: <168003456323.3027256.2973825783029955917.stgit@firesoul> In-Reply-To: <168003451121.3027256.13000250073816770554.stgit@firesoul> References: <168003451121.3027256.13000250073816770554.stgit@firesoul> User-Agent: StGit/1.4 MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.1 on 10.11.54.7 Precedence: bulk List-ID: X-Mailing-List: bpf@vger.kernel.org X-Patchwork-Delegate: bpf@iogearbox.net X-Patchwork-State: RFC Update API for bpf_xdp_metadata_rx_hash() by returning xdp rss hash type via mapping table. Signed-off-by: Jesper Dangaard Brouer --- drivers/net/ethernet/intel/igc/igc_main.c | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/drivers/net/ethernet/intel/igc/igc_main.c b/drivers/net/ethernet/intel/igc/igc_main.c index b382476f347c..a14f0597524a 100644 --- a/drivers/net/ethernet/intel/igc/igc_main.c +++ b/drivers/net/ethernet/intel/igc/igc_main.c @@ -6496,6 +6496,26 @@ static int igc_xdp_rx_timestamp(const struct xdp_md *_ctx, u64 *timestamp) return -ENODATA; } +/* Mapping HW RSS Type to enum xdp_rss_hash_type */ +enum xdp_rss_hash_type igc_xdp_rss_type[IGC_RSS_TYPE_MAX_TABLE] = { + [IGC_RSS_TYPE_NO_HASH] = XDP_RSS_TYPE_L2, + [IGC_RSS_TYPE_HASH_TCP_IPV4] = XDP_RSS_TYPE_L4_IPV4_TCP, + [IGC_RSS_TYPE_HASH_IPV4] = XDP_RSS_TYPE_L3_IPV4, + [IGC_RSS_TYPE_HASH_TCP_IPV6] = XDP_RSS_TYPE_L4_IPV6_TCP, + [IGC_RSS_TYPE_HASH_IPV6_EX] = XDP_RSS_TYPE_L3_IPV6_EX, + [IGC_RSS_TYPE_HASH_IPV6] = XDP_RSS_TYPE_L3_IPV6, + [IGC_RSS_TYPE_HASH_TCP_IPV6_EX] = XDP_RSS_TYPE_L4_IPV6_TCP_EX, + [IGC_RSS_TYPE_HASH_UDP_IPV4] = XDP_RSS_TYPE_L4_IPV4_UDP, + [IGC_RSS_TYPE_HASH_UDP_IPV6] = XDP_RSS_TYPE_L4_IPV6_UDP, + [IGC_RSS_TYPE_HASH_UDP_IPV6_EX] = XDP_RSS_TYPE_L4_IPV6_UDP_EX, + [10] = XDP_RSS_TYPE_NONE, /* RSS Type above 9 "Reserved" by HW */ + [11] = XDP_RSS_TYPE_NONE, /* keep array sized for SW bit-mask */ + [12] = XDP_RSS_TYPE_NONE, /* to handle future HW revisons */ + [13] = XDP_RSS_TYPE_NONE, + [14] = XDP_RSS_TYPE_NONE, + [15] = XDP_RSS_TYPE_NONE, +}; + static int igc_xdp_rx_hash(const struct xdp_md *_ctx, u32 *hash) { const struct igc_xdp_buff *ctx = (void *)_ctx; @@ -6505,7 +6525,7 @@ static int igc_xdp_rx_hash(const struct xdp_md *_ctx, u32 *hash) *hash = le32_to_cpu(ctx->rx_desc->wb.lower.hi_dword.rss); - return 0; + return igc_xdp_rss_type[igc_rss_type(ctx->rx_desc)]; } const struct xdp_metadata_ops igc_xdp_metadata_ops = { From patchwork Tue Mar 28 20:16:08 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jesper Dangaard Brouer X-Patchwork-Id: 13191516 X-Patchwork-Delegate: bpf@iogearbox.net Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id B12BFC6FD18 for ; Tue, 28 Mar 2023 20:17:13 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229924AbjC1URM (ORCPT ); Tue, 28 Mar 2023 16:17:12 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59774 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229820AbjC1URE (ORCPT ); Tue, 28 Mar 2023 16:17:04 -0400 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id B7E2A40C1 for ; Tue, 28 Mar 2023 13:16:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1680034576; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=5g4mrXl41+GFKanErFDMONuv//RKV9fef6DjptIgCzo=; b=HYl8RFXg/x0S2n8m2cIWTfH9FJnwW1jTAagmUO/F4eacv+S9euWgKsrp2OgK3/DnMqt7nH AzyRLXhoICK99hrEh9Qy33dyptqxECOYlJiT8osBS5HvE5+MGrDgSFN/9BslvTjhJOoLfL UeX0FYLj2marJ8BZguWxqxzF+CPhLXQ= Received: from mimecast-mx02.redhat.com (mx3-rdu2.redhat.com [66.187.233.73]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-608-6nCBLlI-NnamgUygy5UhhA-1; Tue, 28 Mar 2023 16:16:10 -0400 X-MC-Unique: 6nCBLlI-NnamgUygy5UhhA-1 Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.rdu2.redhat.com [10.11.54.8]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 82363280BF64; Tue, 28 Mar 2023 20:16:09 +0000 (UTC) Received: from firesoul.localdomain (unknown [10.45.242.4]) by smtp.corp.redhat.com (Postfix) with ESMTP id 30AC8C15BA0; Tue, 28 Mar 2023 20:16:09 +0000 (UTC) Received: from [10.1.1.1] (localhost [IPv6:::1]) by firesoul.localdomain (Postfix) with ESMTP id 530E130736C72; Tue, 28 Mar 2023 22:16:08 +0200 (CEST) Subject: [PATCH bpf RFC 3/4] veth: bpf_xdp_metadata_rx_hash return xdp rss hash type From: Jesper Dangaard Brouer To: bpf@vger.kernel.org Cc: Jesper Dangaard Brouer , netdev@vger.kernel.org, Stanislav Fomichev , martin.lau@kernel.org, ast@kernel.org, daniel@iogearbox.net, alexandr.lobakin@intel.com, larysa.zaremba@intel.com, xdp-hints@xdp-project.net, anthony.l.nguyen@intel.com, yoong.siang.song@intel.com, boon.leong.ong@intel.com, intel-wired-lan@lists.osuosl.org, pabeni@redhat.com, jesse.brandeburg@intel.com, kuba@kernel.org, edumazet@google.com, john.fastabend@gmail.com, hawk@kernel.org, davem@davemloft.net Date: Tue, 28 Mar 2023 22:16:08 +0200 Message-ID: <168003456829.3027256.12371018603759735483.stgit@firesoul> In-Reply-To: <168003451121.3027256.13000250073816770554.stgit@firesoul> References: <168003451121.3027256.13000250073816770554.stgit@firesoul> User-Agent: StGit/1.4 MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.1 on 10.11.54.8 Precedence: bulk List-ID: X-Mailing-List: bpf@vger.kernel.org X-Patchwork-Delegate: bpf@iogearbox.net X-Patchwork-State: RFC Update API for bpf_xdp_metadata_rx_hash() by returning xdp rss hash type. The veth driver currently only support XDP-hints based on SKB code path. The SKB have lost information about the RSS hash type, by compressing the information down to a single bitfield skb->l4_hash, that only knows if this was a L4 hash value. In preparation for veth, the xdp_rss_hash_type have an L4 indication bit that allow us to return a meaningful L4 indication when working with SKB based packets. Signed-off-by: Jesper Dangaard Brouer --- drivers/net/veth.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/net/veth.c b/drivers/net/veth.c index 046461ee42ea..6b1084e39b25 100644 --- a/drivers/net/veth.c +++ b/drivers/net/veth.c @@ -1624,7 +1624,7 @@ static int veth_xdp_rx_hash(const struct xdp_md *ctx, u32 *hash) return -ENODATA; *hash = skb_get_hash(_ctx->skb); - return 0; + return _ctx->skb->l4_hash ? XDP_RSS_TYPE_L4_BIT : XDP_RSS_TYPE_NONE; } static const struct net_device_ops veth_netdev_ops = { From patchwork Tue Mar 28 20:16:13 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jesper Dangaard Brouer X-Patchwork-Id: 13191517 X-Patchwork-Delegate: bpf@iogearbox.net Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id A09A9C6FD18 for ; Tue, 28 Mar 2023 20:17:27 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229606AbjC1UR0 (ORCPT ); Tue, 28 Mar 2023 16:17:26 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60786 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229917AbjC1URW (ORCPT ); Tue, 28 Mar 2023 16:17:22 -0400 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 3B3753C24 for ; Tue, 28 Mar 2023 13:16:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1680034583; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=J7UgUDHgyEUlKSNxXIij1X+qewlo91D1CaFgRDEtS24=; b=QgsnRrnCWrU0D/aNS30qb11OXGtIS+TfKFhjtStnoG6zSJ+p+nhIIkxs7TWBkQWgi/1YAM IZ83mhvwIMgvT67paogKVOaMtwVCLQrDkge7DKpXSiACCvvYx4+0hsGUqBj/p2G714nBDc T3LD4/WcVZfw9Go7TEasuAQvjMQqsJw= Received: from mimecast-mx02.redhat.com (mx3-rdu2.redhat.com [66.187.233.73]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-671-qEp2KWvYOquJdgk6GqCUdQ-1; Tue, 28 Mar 2023 16:16:17 -0400 X-MC-Unique: qEp2KWvYOquJdgk6GqCUdQ-1 Received: from smtp.corp.redhat.com (int-mx09.intmail.prod.int.rdu2.redhat.com [10.11.54.9]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 9B01B3C1068F; Tue, 28 Mar 2023 20:16:14 +0000 (UTC) Received: from firesoul.localdomain (unknown [10.45.242.4]) by smtp.corp.redhat.com (Postfix) with ESMTP id 3F9F4492C13; Tue, 28 Mar 2023 20:16:14 +0000 (UTC) Received: from [10.1.1.1] (localhost [IPv6:::1]) by firesoul.localdomain (Postfix) with ESMTP id 6170330736C72; Tue, 28 Mar 2023 22:16:13 +0200 (CEST) Subject: [PATCH bpf RFC 4/4] mlx5: bpf_xdp_metadata_rx_hash return xdp rss hash type From: Jesper Dangaard Brouer To: bpf@vger.kernel.org Cc: Jesper Dangaard Brouer , netdev@vger.kernel.org, Stanislav Fomichev , martin.lau@kernel.org, ast@kernel.org, daniel@iogearbox.net, alexandr.lobakin@intel.com, larysa.zaremba@intel.com, xdp-hints@xdp-project.net, anthony.l.nguyen@intel.com, yoong.siang.song@intel.com, boon.leong.ong@intel.com, intel-wired-lan@lists.osuosl.org, pabeni@redhat.com, jesse.brandeburg@intel.com, kuba@kernel.org, edumazet@google.com, john.fastabend@gmail.com, hawk@kernel.org, davem@davemloft.net Date: Tue, 28 Mar 2023 22:16:13 +0200 Message-ID: <168003457335.3027256.7577085917635608718.stgit@firesoul> In-Reply-To: <168003451121.3027256.13000250073816770554.stgit@firesoul> References: <168003451121.3027256.13000250073816770554.stgit@firesoul> User-Agent: StGit/1.4 MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.1 on 10.11.54.9 Precedence: bulk List-ID: X-Mailing-List: bpf@vger.kernel.org X-Patchwork-Delegate: bpf@iogearbox.net X-Patchwork-State: RFC Update API for bpf_xdp_metadata_rx_hash() by returning xdp rss hash type via mapping table. The mlx5 hardware can also identify and RSS hash IPSEC. This indicate hash includes SPI (Security Parameters Index) as part of IPSEC hash. Extend xdp core enum xdp_rss_hash_type with IPSEC hash type. Signed-off-by: Jesper Dangaard Brouer --- drivers/net/ethernet/mellanox/mlx5/core/en/xdp.c | 61 +++++++++++++++++++++- include/linux/mlx5/device.h | 14 ++++- include/net/xdp.h | 3 + 3 files changed, 74 insertions(+), 4 deletions(-) diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en/xdp.c b/drivers/net/ethernet/mellanox/mlx5/core/en/xdp.c index c5dae48b7932..07bd70249c42 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/en/xdp.c +++ b/drivers/net/ethernet/mellanox/mlx5/core/en/xdp.c @@ -34,6 +34,7 @@ #include #include "en/xdp.h" #include "en/params.h" +#include int mlx5e_xdp_max_mtu(struct mlx5e_params *params, struct mlx5e_xsk_param *xsk) { @@ -169,15 +170,71 @@ static int mlx5e_xdp_rx_timestamp(const struct xdp_md *ctx, u64 *timestamp) return 0; } +/* Mapping HW RSS Type bits CQE_RSS_HTYPE_IP + CQE_RSS_HTYPE_L4 into 4-bits*/ +#define RSS_TYPE_MAX_TABLE 16 /* 4-bits max 16 entries */ +#define RSS_L4 GENMASK(1,0) +#define RSS_L3 GENMASK(3,2) /* Same as CQE_RSS_HTYPE_IP */ + +/* Valid combinations of CQE_RSS_HTYPE_IP + CQE_RSS_HTYPE_L4 sorted numerical */ +enum mlx5_rss_hash_type { + RSS_TYPE_NO_HASH = (FIELD_PREP_CONST(RSS_L3, CQE_RSS_IP_NONE)| \ + FIELD_PREP_CONST(RSS_L4, CQE_RSS_L4_NONE)), + RSS_TYPE_L3_IPV4 = (FIELD_PREP_CONST(RSS_L3, CQE_RSS_IPV4)| \ + FIELD_PREP_CONST(RSS_L4, CQE_RSS_L4_NONE)), + RSS_TYPE_L4_IPV4_TCP = (FIELD_PREP_CONST(RSS_L3, CQE_RSS_IPV4)| \ + FIELD_PREP_CONST(RSS_L4, CQE_RSS_L4_TCP)), + RSS_TYPE_L4_IPV4_UDP = (FIELD_PREP_CONST(RSS_L3, CQE_RSS_IPV4)| \ + FIELD_PREP_CONST(RSS_L4, CQE_RSS_L4_UDP)), + RSS_TYPE_L4_IPV4_IPSEC = (FIELD_PREP_CONST(RSS_L3, CQE_RSS_IPV4)| \ + FIELD_PREP_CONST(RSS_L4, CQE_RSS_L4_IPSEC)), + RSS_TYPE_L3_IPV6 = (FIELD_PREP_CONST(RSS_L3, CQE_RSS_IPV6)| \ + FIELD_PREP_CONST(RSS_L4, CQE_RSS_L4_NONE)), + RSS_TYPE_L4_IPV6_TCP = (FIELD_PREP_CONST(RSS_L3, CQE_RSS_IPV6)| \ + FIELD_PREP_CONST(RSS_L4, CQE_RSS_L4_TCP)), + RSS_TYPE_L4_IPV6_UDP = (FIELD_PREP_CONST(RSS_L3, CQE_RSS_IPV6)| \ + FIELD_PREP_CONST(RSS_L4, CQE_RSS_L4_UDP)), + RSS_TYPE_L4_IPV6_IPSEC = (FIELD_PREP_CONST(RSS_L3, CQE_RSS_IPV6)| \ + FIELD_PREP_CONST(RSS_L4, CQE_RSS_L4_IPSEC)), +} mlx5_rss_hash_type; + +/* The invalid combinations will simply return zero */ +static const enum xdp_rss_hash_type mlx5_xdp_rss_type[RSS_TYPE_MAX_TABLE] = { + [RSS_TYPE_NO_HASH] = XDP_RSS_TYPE_NONE, + [1] = XDP_RSS_TYPE_NONE, /* Implicit zero */ + [2] = XDP_RSS_TYPE_NONE, /* Implicit zero */ + [3] = XDP_RSS_TYPE_NONE, /* Implicit zero */ + [RSS_TYPE_L3_IPV4] = XDP_RSS_TYPE_L3_IPV4, + [RSS_TYPE_L4_IPV4_TCP] = XDP_RSS_TYPE_L4_IPV4_TCP, + [RSS_TYPE_L4_IPV4_UDP] = XDP_RSS_TYPE_L4_IPV4_UDP, + [RSS_TYPE_L4_IPV4_IPSEC]= XDP_RSS_TYPE_L4_IPV4_IPSEC, + [RSS_TYPE_L3_IPV6] = XDP_RSS_TYPE_L3_IPV6, + [RSS_TYPE_L4_IPV6_TCP] = XDP_RSS_TYPE_L4_IPV6_TCP, + [RSS_TYPE_L4_IPV6_UDP] = XDP_RSS_TYPE_L4_IPV6_UDP, + [RSS_TYPE_L4_IPV6_IPSEC]= XDP_RSS_TYPE_L4_IPV6_IPSEC, + [12] = XDP_RSS_TYPE_NONE, /* Implicit zero */ + [13] = XDP_RSS_TYPE_NONE, /* Implicit zero */ + [14] = XDP_RSS_TYPE_NONE, /* Implicit zero */ + [15] = XDP_RSS_TYPE_NONE, /* Implicit zero */ +}; + static int mlx5e_xdp_rx_hash(const struct xdp_md *ctx, u32 *hash) { const struct mlx5e_xdp_buff *_ctx = (void *)ctx; + const struct mlx5_cqe64 *cqe = _ctx->cqe; + u32 hash_type, l4_type, ip_type, lookup; if (unlikely(!(_ctx->xdp.rxq->dev->features & NETIF_F_RXHASH))) return -ENODATA; - *hash = be32_to_cpu(_ctx->cqe->rss_hash_result); - return 0; + *hash = be32_to_cpu(cqe->rss_hash_result); + + hash_type = cqe->rss_hash_type; + BUILD_BUG_ON(CQE_RSS_HTYPE_IP != RSS_L3); /* same mask */ + ip_type = hash_type & CQE_RSS_HTYPE_IP; + l4_type = FIELD_GET(CQE_RSS_HTYPE_L4, hash_type); + lookup = ip_type | l4_type; + + return mlx5_xdp_rss_type[lookup]; } const struct xdp_metadata_ops mlx5e_xdp_metadata_ops = { diff --git a/include/linux/mlx5/device.h b/include/linux/mlx5/device.h index 71b06ebad402..27aa9ae10996 100644 --- a/include/linux/mlx5/device.h +++ b/include/linux/mlx5/device.h @@ -36,6 +36,7 @@ #include #include #include +#include #if defined(__LITTLE_ENDIAN) #define MLX5_SET_HOST_ENDIANNESS 0 @@ -980,14 +981,23 @@ enum { }; enum { - CQE_RSS_HTYPE_IP = 0x3 << 2, + CQE_RSS_HTYPE_IP = GENMASK(3,2), /* cqe->rss_hash_type[3:2] - IP destination selected for hash * (00 = none, 01 = IPv4, 10 = IPv6, 11 = Reserved) */ - CQE_RSS_HTYPE_L4 = 0x3 << 6, + CQE_RSS_IP_NONE = 0x0, + CQE_RSS_IPV4 = 0x1, + CQE_RSS_IPV6 = 0x2, + CQE_RSS_RESERVED = 0x3, + + CQE_RSS_HTYPE_L4 = GENMASK(7,6), /* cqe->rss_hash_type[7:6] - L4 destination selected for hash * (00 = none, 01 = TCP. 10 = UDP, 11 = IPSEC.SPI */ + CQE_RSS_L4_NONE = 0x0, + CQE_RSS_L4_TCP = 0x1, + CQE_RSS_L4_UDP = 0x2, + CQE_RSS_L4_IPSEC = 0x3, }; enum { diff --git a/include/net/xdp.h b/include/net/xdp.h index 63f462f5ea7f..962611d5bc02 100644 --- a/include/net/xdp.h +++ b/include/net/xdp.h @@ -429,16 +429,19 @@ enum xdp_rss_hash_type { XDP_RSS_TYPE_L4_IPV4_TCP = L4_BIT|FIELD_PREP_CONST(RSS_L4_IPV4, 1), XDP_RSS_TYPE_L4_IPV4_UDP = L4_BIT|FIELD_PREP_CONST(RSS_L4_IPV4, 2), XDP_RSS_TYPE_L4_IPV4_SCTP = L4_BIT|FIELD_PREP_CONST(RSS_L4_IPV4, 3), + XDP_RSS_TYPE_L4_IPV4_IPSEC = L4_BIT|FIELD_PREP_CONST(RSS_L4_IPV4, 4), XDP_RSS_TYPE_L4_IPV6_MASK = RSS_L4_IPV6, XDP_RSS_TYPE_L4_IPV6_TCP = L4_BIT|FIELD_PREP_CONST(RSS_L4_IPV6, 1), XDP_RSS_TYPE_L4_IPV6_UDP = L4_BIT|FIELD_PREP_CONST(RSS_L4_IPV6, 2), XDP_RSS_TYPE_L4_IPV6_SCTP = L4_BIT|FIELD_PREP_CONST(RSS_L4_IPV6, 3), + XDP_RSS_TYPE_L4_IPV6_IPSEC = L4_BIT|FIELD_PREP_CONST(RSS_L4_IPV6, 4), XDP_RSS_TYPE_L4_IPV6_EX_MASK = L4_IPV6_EX_BIT, XDP_RSS_TYPE_L4_IPV6_TCP_EX = XDP_RSS_TYPE_L4_IPV6_TCP |L4_IPV6_EX_BIT, XDP_RSS_TYPE_L4_IPV6_UDP_EX = XDP_RSS_TYPE_L4_IPV6_UDP |L4_IPV6_EX_BIT, XDP_RSS_TYPE_L4_IPV6_SCTP_EX = XDP_RSS_TYPE_L4_IPV6_SCTP|L4_IPV6_EX_BIT, + XDP_RSS_TYPE_L4_IPV6_IPSEC_EX= XDP_RSS_TYPE_L4_IPV6_IPSEC|L4_IPV6_EX_BIT, }; #undef RSS_L3 #undef L4_BIT