XDP hardware hints discussion mail archive
 help / color / mirror / Atom feed
From: Jesper Dangaard Brouer <jbrouer@redhat.com>
To: Simon Horman <simon.horman@corigine.com>
Cc: brouer@redhat.com, bpf@vger.kernel.org,
	"Stanislav Fomichev" <sdf@google.com>,
	"Toke Høiland-Jørgensen" <toke@redhat.com>,
	netdev@vger.kernel.org, linux-kernel@vger.kernel.org,
	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,
	tariqt@nvidia.com, saeedm@nvidia.com, leon@kernel.org,
	linux-rdma@vger.kernel.org
Subject: [xdp-hints] Re: [PATCH bpf V7 4/7] mlx5: bpf_xdp_metadata_rx_hash add xdp rss hash type
Date: Wed, 12 Apr 2023 13:31:18 +0200	[thread overview]
Message-ID: <8cd2d200-09ec-57c2-0619-963dfe5efd58@redhat.com> (raw)
In-Reply-To: <ZDQnFmZdESpF1BEz@corigine.com>



On 10/04/2023 17.11, Simon Horman wrote:
> On Sat, Apr 08, 2023 at 09:24:56PM +0200, Jesper Dangaard Brouer wrote:
>> Update API for bpf_xdp_metadata_rx_hash() with arg for 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.
>>
>> Fixes: bc8d405b1ba9 ("net/mlx5e: Support RX XDP metadata")
>> Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
>> Acked-by: Toke Høiland-Jørgensen <toke@redhat.com>
>> Acked-by: Stanislav Fomichev <sdf@google.com>
>> ---
>>   drivers/net/ethernet/mellanox/mlx5/core/en/xdp.c |   60 ++++++++++++++++++++++
>>   include/linux/mlx5/device.h                      |   14 ++++-
>>   include/net/xdp.h                                |    2 +
>>   3 files changed, 73 insertions(+), 3 deletions(-)
>>
>> diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en/xdp.c b/drivers/net/ethernet/mellanox/mlx5/core/en/xdp.c
>> index efe609f8e3aa..97ef1df94d50 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 <net/xdp_sock_drv.h>
>>   #include "en/xdp.h"
>>   #include "en/params.h"
>> +#include <linux/bitfield.h>
>>   
>>   int mlx5e_xdp_max_mtu(struct mlx5e_params *params, struct mlx5e_xsk_param *xsk)
>>   {
>> @@ -169,15 +170,72 @@ 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;
> 
> Hi Jesper,
> 
> Sparse seems confused about 'mlx5_rss_hash_type' on the line above.
> And I am too. Perhaps it can be removed?
> 

Yes, it can be removed (in V8).

The reason/trick for doing this was to get compiler to create the enum
symbol, which allowed me to inspect the type using pahole (see cmd
below).  (This will also expose this to BTF, but it isn't actually
useful to keep around for BTF, so I will remove it in V8.)


$ pahole -C mlx5_rss_hash_type 
drivers/net/ethernet/mellanox/mlx5/core/en/xdp.o
enum mlx5_rss_hash_type {
	RSS_TYPE_NO_HASH       = 0,
	RSS_TYPE_L3_IPV4       = 4,
	RSS_TYPE_L4_IPV4_TCP   = 5,
	RSS_TYPE_L4_IPV4_UDP   = 6,
	RSS_TYPE_L4_IPV4_IPSEC = 7,
	RSS_TYPE_L3_IPV6       = 8,
	RSS_TYPE_L4_IPV6_TCP   = 9,
	RSS_TYPE_L4_IPV6_UDP   = 10,
	RSS_TYPE_L4_IPV6_IPSEC = 11,
};

This is practical to for reviewers to see if below code is correct:

 > +/* Invalid combinations will simply return zero, allows no boundary 
checks */
 > +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 */
 > +};

> drivers/net/ethernet/mellanox/mlx5/core/en/xdp.c:198:3: warning: symbol 'mlx5_rss_hash_type' was not declared. Should it be static?
> 
> ...
> 


  reply	other threads:[~2023-04-12 11:31 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-04-08 19:24 [xdp-hints] [PATCH bpf V7 0/7] XDP-hints: API change for RX-hash kfunc bpf_xdp_metadata_rx_hash Jesper Dangaard Brouer
2023-04-08 19:24 ` [xdp-hints] [PATCH bpf V7 1/7] selftests/bpf: xdp_hw_metadata default disable bpf_printk Jesper Dangaard Brouer
2023-04-10 14:50   ` [xdp-hints] " Simon Horman
2023-04-11 22:42   ` Stanislav Fomichev
2023-04-12 10:54     ` Jesper Dangaard Brouer
2023-04-12 16:06       ` Stanislav Fomichev
2023-04-12 16:17         ` Jesper Dangaard Brouer
2023-04-08 19:24 ` [xdp-hints] [PATCH bpf V7 2/7] selftests/bpf: Add counters to xdp_hw_metadata Jesper Dangaard Brouer
2023-04-08 19:24 ` [xdp-hints] [PATCH bpf V7 3/7] xdp: rss hash types representation Jesper Dangaard Brouer
2023-04-10 15:04   ` [xdp-hints] " Simon Horman
2023-04-12 11:16     ` Jesper Dangaard Brouer
2023-04-08 19:24 ` [xdp-hints] [PATCH bpf V7 4/7] mlx5: bpf_xdp_metadata_rx_hash add xdp rss hash type Jesper Dangaard Brouer
2023-04-10 15:11   ` [xdp-hints] " Simon Horman
2023-04-12 11:31     ` Jesper Dangaard Brouer [this message]
2023-04-17 11:35       ` Simon Horman
2023-04-08 19:25 ` [xdp-hints] [PATCH bpf V7 5/7] veth: " Jesper Dangaard Brouer
2023-04-08 19:25 ` [xdp-hints] [PATCH bpf V7 6/7] mlx4: " Jesper Dangaard Brouer
2023-04-10 15:12   ` [xdp-hints] " Simon Horman
2023-04-08 19:25 ` [xdp-hints] [PATCH bpf V7 7/7] selftests/bpf: Adjust bpf_xdp_metadata_rx_hash for new arg Jesper Dangaard Brouer

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://lists.xdp-project.net/postorius/lists/xdp-hints.xdp-project.net/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=8cd2d200-09ec-57c2-0619-963dfe5efd58@redhat.com \
    --to=jbrouer@redhat.com \
    --cc=alexandr.lobakin@intel.com \
    --cc=anthony.l.nguyen@intel.com \
    --cc=ast@kernel.org \
    --cc=boon.leong.ong@intel.com \
    --cc=bpf@vger.kernel.org \
    --cc=brouer@redhat.com \
    --cc=daniel@iogearbox.net \
    --cc=davem@davemloft.net \
    --cc=edumazet@google.com \
    --cc=hawk@kernel.org \
    --cc=intel-wired-lan@lists.osuosl.org \
    --cc=jesse.brandeburg@intel.com \
    --cc=john.fastabend@gmail.com \
    --cc=kuba@kernel.org \
    --cc=larysa.zaremba@intel.com \
    --cc=leon@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-rdma@vger.kernel.org \
    --cc=martin.lau@kernel.org \
    --cc=netdev@vger.kernel.org \
    --cc=pabeni@redhat.com \
    --cc=saeedm@nvidia.com \
    --cc=sdf@google.com \
    --cc=simon.horman@corigine.com \
    --cc=tariqt@nvidia.com \
    --cc=toke@redhat.com \
    --cc=xdp-hints@xdp-project.net \
    --cc=yoong.siang.song@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox