lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <1555821c-0645-4b0f-8c4d-dc3cf2ab518b@intel.com>
Date: Wed, 27 Aug 2025 17:10:18 +0200
From: Alexander Lobakin <aleksander.lobakin@...el.com>
To: Jiawen Wu <jiawenwu@...stnetic.com>
CC: <netdev@...r.kernel.org>, Andrew Lunn <andrew+netdev@...n.ch>, "David S.
 Miller" <davem@...emloft.net>, Eric Dumazet <edumazet@...gle.com>, "Jakub
 Kicinski" <kuba@...nel.org>, Paolo Abeni <pabeni@...hat.com>, Simon Horman
	<horms@...nel.org>, Mengyuan Lou <mengyuanlou@...-swift.com>
Subject: Re: [PATCH net-next 2/2] net: wangxun: add RSS reta and rxfh fields
 support

From: Jiawen Wu <jiawenwu@...stnetic.com>
Date: Wed, 27 Aug 2025 14:46:34 +0800

> Add ethtool ops for Rx flow hashing, query and set RSS indirection table
> and hash key. And support to configure L4 header fields with
> TCP/UDP/SCTP for flow hasing.
> 
> Signed-off-by: Jiawen Wu <jiawenwu@...stnetic.com>
> ---
>  .../net/ethernet/wangxun/libwx/wx_ethtool.c   | 152 ++++++++++++++++++
>  .../net/ethernet/wangxun/libwx/wx_ethtool.h   |  12 ++
>  drivers/net/ethernet/wangxun/libwx/wx_type.h  |   6 +
>  .../net/ethernet/wangxun/ngbe/ngbe_ethtool.c  |   6 +
>  .../ethernet/wangxun/txgbe/txgbe_ethtool.c    |   6 +
>  5 files changed, 182 insertions(+)
> 
> diff --git a/drivers/net/ethernet/wangxun/libwx/wx_ethtool.c b/drivers/net/ethernet/wangxun/libwx/wx_ethtool.c
> index 9572b9f28e59..a0a46b1b4f9e 100644
> --- a/drivers/net/ethernet/wangxun/libwx/wx_ethtool.c
> +++ b/drivers/net/ethernet/wangxun/libwx/wx_ethtool.c
> @@ -481,6 +481,158 @@ int wx_set_channels(struct net_device *dev,
>  }
>  EXPORT_SYMBOL(wx_set_channels);
>  
> +u32 wx_rss_indir_size(struct net_device *netdev)
> +{
> +	struct wx *wx = netdev_priv(netdev);
> +
> +	return wx_rss_indir_tbl_entries(wx);
> +}
> +EXPORT_SYMBOL(wx_rss_indir_size);
> +
> +u32 wx_get_rxfh_key_size(struct net_device *netdev)
> +{
> +	return WX_RSS_KEY_SIZE;
> +}
> +EXPORT_SYMBOL(wx_get_rxfh_key_size);
> +
> +static void wx_get_reta(struct wx *wx, u32 *indir)
> +{
> +	int i, reta_size = wx_rss_indir_tbl_entries(wx);

Nit: you can embed iterator declarations inside the corresponding loop
declarations.

	for (u32 i = 0; ...

> +	u16 rss_m = wx->ring_feature[RING_F_RSS].mask;
> +
> +	if (test_bit(WX_FLAG_SRIOV_ENABLED, wx->flags))
> +		rss_m = wx->ring_feature[RING_F_RSS].indices - 1;
> +
> +	for (i = 0; i < reta_size; i++)
> +		indir[i] = wx->rss_indir_tbl[i] & rss_m;
> +}

[...]

> +	reta_entries = wx_rss_indir_tbl_entries(wx);
> +	/* Fill out the redirection table */
> +	if (rxfh->indir) {
> +		int max_queues = min_t(int, wx->num_rx_queues,
> +				       WX_RSS_INDIR_TBL_MAX);

I guess you can't have negative number of queues, why int?

> +
> +		/*Allow at least 2 queues w/ SR-IOV.*/
> +		if (test_bit(WX_FLAG_SRIOV_ENABLED, wx->flags) &&
> +		    max_queues < 2)
> +			max_queues = 2;
> +
> +		/* Verify user input. */
> +		for (i = 0; i < reta_entries; i++)
> +			if (rxfh->indir[i] >= max_queues)
> +				return -EINVAL;
> +
> +		for (i = 0; i < reta_entries; i++)
> +			wx->rss_indir_tbl[i] = rxfh->indir[i];
> +
> +		wx_store_reta(wx);
> +	}
> +
> +	/* Fill out the rss hash key */
> +	if (rxfh->key) {
> +		memcpy(wx->rss_key, rxfh->key, WX_RSS_KEY_SIZE);
> +		wx_store_rsskey(wx);
> +	}
> +
> +	return 0;
> +}
> +EXPORT_SYMBOL(wx_set_rxfh);
> +
> +static const struct wx_rss_flow_map rss_flow_table[] = {
> +	{ TCP_V4_FLOW, RXH_L4_B_0_1 | RXH_L4_B_2_3, WX_RSS_FIELD_IPV4_TCP},
> +	{ TCP_V6_FLOW, RXH_L4_B_0_1 | RXH_L4_B_2_3, WX_RSS_FIELD_IPV6_TCP},
> +	{ UDP_V4_FLOW, RXH_L4_B_0_1 | RXH_L4_B_2_3, WX_RSS_FIELD_IPV4_UDP},
> +	{ UDP_V6_FLOW, RXH_L4_B_0_1 | RXH_L4_B_2_3, WX_RSS_FIELD_IPV6_UDP},
> +	{ SCTP_V4_FLOW, RXH_L4_B_0_1 | RXH_L4_B_2_3, WX_RSS_FIELD_IPV4_SCTP},
> +	{ SCTP_V6_FLOW, RXH_L4_B_0_1 | RXH_L4_B_2_3, WX_RSS_FIELD_IPV6_SCTP},

If you start declarations with `{ ` (with a space), do the same at the
end of them:

`IPV4_TCP },`

Thanks,
Olek

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ