All of lore.kernel.org
 help / color / mirror / Atom feed
* [Intel-wired-lan] [net 1/6] ice: fix FDir IPv6 flexbyte
@ 2020-11-21  0:38 Tony Nguyen
  2020-11-21  0:38 ` [Intel-wired-lan] [net 2/6] ice: Implement flow for IPv6 next header (extension header) Tony Nguyen
                   ` (5 more replies)
  0 siblings, 6 replies; 10+ messages in thread
From: Tony Nguyen @ 2020-11-21  0:38 UTC (permalink / raw)
  To: intel-wired-lan

From: Henry Tieman <henry.w.tieman@intel.com>

The packet classifier would occasionally misrecognize an IPv6 training
packet when the next protocol field was 0. The correct value for
unspecified protocol is IPPROTO_NONE.

Fixes: 165d80d6adab ("ice: Support IPv6 Flow Director filters")
Signed-off-by: Henry Tieman <henry.w.tieman@intel.com>
---
 drivers/net/ethernet/intel/ice/ice_ethtool_fdir.c | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/intel/ice/ice_ethtool_fdir.c b/drivers/net/ethernet/intel/ice/ice_ethtool_fdir.c
index 2d27f66ac853..192729546bbf 100644
--- a/drivers/net/ethernet/intel/ice/ice_ethtool_fdir.c
+++ b/drivers/net/ethernet/intel/ice/ice_ethtool_fdir.c
@@ -1576,7 +1576,13 @@ ice_set_fdir_input_set(struct ice_vsi *vsi, struct ethtool_rx_flow_spec *fsp,
 		       sizeof(struct in6_addr));
 		input->ip.v6.l4_header = fsp->h_u.usr_ip6_spec.l4_4_bytes;
 		input->ip.v6.tc = fsp->h_u.usr_ip6_spec.tclass;
-		input->ip.v6.proto = fsp->h_u.usr_ip6_spec.l4_proto;
+
+		/* if no protocol requested, use IPPROTO_NONE */
+		if (!fsp->m_u.usr_ip6_spec.l4_proto)
+			input->ip.v6.proto = IPPROTO_NONE;
+		else
+			input->ip.v6.proto = fsp->h_u.usr_ip6_spec.l4_proto;
+
 		memcpy(input->mask.v6.dst_ip, fsp->m_u.usr_ip6_spec.ip6dst,
 		       sizeof(struct in6_addr));
 		memcpy(input->mask.v6.src_ip, fsp->m_u.usr_ip6_spec.ip6src,
-- 
2.20.1


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [Intel-wired-lan] [net 2/6] ice: Implement flow for IPv6 next header (extension header)
  2020-11-21  0:38 [Intel-wired-lan] [net 1/6] ice: fix FDir IPv6 flexbyte Tony Nguyen
@ 2020-11-21  0:38 ` Tony Nguyen
  2020-11-21  0:38 ` [Intel-wired-lan] [net 3/6] ice: update the number of available RSS queues Tony Nguyen
                   ` (4 subsequent siblings)
  5 siblings, 0 replies; 10+ messages in thread
From: Tony Nguyen @ 2020-11-21  0:38 UTC (permalink / raw)
  To: intel-wired-lan

From: Nick Nunley <nicholas.d.nunley@intel.com>

This patch is based on a similar change to i40e by Slawomir Laba:
"i40e: Implement flow for IPv6 next header (extension header)".

When a packet contains an IPv6 header with next header which is
an extension header and not a protocol one, the kernel function
skb_transport_header called with such sk_buff will return a
pointer to the extension header and not to the TCP one.

The above explained call caused a problem with packet processing
for skb with encapsulation for tunnel with ICE_TX_CTX_EIPT_IPV6.
The extension header was not skipped at all.

The ipv6_skip_exthdr function does check if next header of the IPV6
header is an extension header and doesn't modify the l4_proto pointer
if it points to a protocol header value so its safe to omit the
comparison of exthdr and l4.hdr pointers. The ipv6_skip_exthdr can
return value -1. This means that the skipping process failed
and there is something wrong with the packet so it will be dropped.

Fixes: a4e82a81f573 ("ice: Add support for tunnel offloads")
Signed-off-by: Nick Nunley <nicholas.d.nunley@intel.com>
---
 drivers/net/ethernet/intel/ice/ice_txrx.c | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/drivers/net/ethernet/intel/ice/ice_txrx.c b/drivers/net/ethernet/intel/ice/ice_txrx.c
index d2493fa71336..a6793147dc00 100644
--- a/drivers/net/ethernet/intel/ice/ice_txrx.c
+++ b/drivers/net/ethernet/intel/ice/ice_txrx.c
@@ -1922,12 +1922,15 @@ int ice_tx_csum(struct ice_tx_buf *first, struct ice_tx_offload_params *off)
 				  ICE_TX_CTX_EIPT_IPV4_NO_CSUM;
 			l4_proto = ip.v4->protocol;
 		} else if (first->tx_flags & ICE_TX_FLAGS_IPV6) {
+			int ret;
+
 			tunnel |= ICE_TX_CTX_EIPT_IPV6;
 			exthdr = ip.hdr + sizeof(*ip.v6);
 			l4_proto = ip.v6->nexthdr;
-			if (l4.hdr != exthdr)
-				ipv6_skip_exthdr(skb, exthdr - skb->data,
-						 &l4_proto, &frag_off);
+			ret = ipv6_skip_exthdr(skb, exthdr - skb->data,
+					       &l4_proto, &frag_off);
+			if (ret < 0)
+				return -1;
 		}
 
 		/* define outer transport */
-- 
2.20.1


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [Intel-wired-lan] [net 3/6] ice: update the number of available RSS queues
  2020-11-21  0:38 [Intel-wired-lan] [net 1/6] ice: fix FDir IPv6 flexbyte Tony Nguyen
  2020-11-21  0:38 ` [Intel-wired-lan] [net 2/6] ice: Implement flow for IPv6 next header (extension header) Tony Nguyen
@ 2020-11-21  0:38 ` Tony Nguyen
  2020-12-01 15:31   ` Paul Menzel
  2020-11-21  0:38 ` [Intel-wired-lan] [net 4/6] ice: update dev_addr in ice_set_mac_address even if HW filter exists Tony Nguyen
                   ` (3 subsequent siblings)
  5 siblings, 1 reply; 10+ messages in thread
From: Tony Nguyen @ 2020-11-21  0:38 UTC (permalink / raw)
  To: intel-wired-lan

From: Henry Tieman <henry.w.tieman@intel.com>

It was possible to have Rx queues that were not available for use
by RSS. This would happen when increasing the number of Rx queues
while there was a user defined RSS LUT.

Always update the number of available RSS queues when changing the
number of Rx queues.

Fixes: 87324e747fde ("ice: Implement ethtool ops for channels")
Signed-off-by: Henry Tieman <henry.w.tieman@intel.com>
---
 drivers/net/ethernet/intel/ice/ice_ethtool.c | 31 ++++++++++++++------
 1 file changed, 22 insertions(+), 9 deletions(-)

diff --git a/drivers/net/ethernet/intel/ice/ice_ethtool.c b/drivers/net/ethernet/intel/ice/ice_ethtool.c
index 9e8e9531cd87..8515a3a7515f 100644
--- a/drivers/net/ethernet/intel/ice/ice_ethtool.c
+++ b/drivers/net/ethernet/intel/ice/ice_ethtool.c
@@ -3321,6 +3321,18 @@ ice_get_channels(struct net_device *dev, struct ethtool_channels *ch)
 	ch->max_other = ch->other_count;
 }
 
+/**
+ * ice_get_valid_rss_size - return valid number of RSS queues
+ * @hw: pointer to the HW structure
+ * @new_size: requested RSS queues
+ */
+static int ice_get_valid_rss_size(struct ice_hw *hw, int new_size)
+{
+	struct ice_hw_common_caps *caps = &hw->func_caps.common_cap;
+
+	return min_t(int, new_size, BIT(caps->rss_table_entry_width));
+}
+
 /**
  * ice_vsi_set_dflt_rss_lut - set default RSS LUT with requested RSS size
  * @vsi: VSI to reconfigure RSS LUT on
@@ -3348,14 +3360,10 @@ static int ice_vsi_set_dflt_rss_lut(struct ice_vsi *vsi, int req_rss_size)
 		return -ENOMEM;
 
 	/* set RSS LUT parameters */
-	if (!test_bit(ICE_FLAG_RSS_ENA, pf->flags)) {
+	if (!test_bit(ICE_FLAG_RSS_ENA, pf->flags))
 		vsi->rss_size = 1;
-	} else {
-		struct ice_hw_common_caps *caps = &hw->func_caps.common_cap;
-
-		vsi->rss_size = min_t(int, req_rss_size,
-				      BIT(caps->rss_table_entry_width));
-	}
+	else
+		vsi->rss_size = ice_get_valid_rss_size(hw, req_rss_size);
 
 	/* create/set RSS LUT */
 	ice_fill_rss_lut(lut, vsi->rss_table_size, vsi->rss_size);
@@ -3434,8 +3442,13 @@ static int ice_set_channels(struct net_device *dev, struct ethtool_channels *ch)
 
 	ice_vsi_recfg_qs(vsi, new_rx, new_tx);
 
-	if (new_rx && !netif_is_rxfh_configured(dev))
-		return ice_vsi_set_dflt_rss_lut(vsi, new_rx);
+	if (new_rx) {
+		if (!netif_is_rxfh_configured(dev))
+			return ice_vsi_set_dflt_rss_lut(vsi, new_rx);
+
+		/* Update rss_size due to change in Rx queues */
+		vsi->rss_size = ice_get_valid_rss_size(&pf->hw, new_rx);
+	}
 
 	return 0;
 }
-- 
2.20.1


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [Intel-wired-lan] [net 4/6] ice: update dev_addr in ice_set_mac_address even if HW filter exists
  2020-11-21  0:38 [Intel-wired-lan] [net 1/6] ice: fix FDir IPv6 flexbyte Tony Nguyen
  2020-11-21  0:38 ` [Intel-wired-lan] [net 2/6] ice: Implement flow for IPv6 next header (extension header) Tony Nguyen
  2020-11-21  0:38 ` [Intel-wired-lan] [net 3/6] ice: update the number of available RSS queues Tony Nguyen
@ 2020-11-21  0:38 ` Tony Nguyen
  2020-11-21  0:38 ` [Intel-wired-lan] [net 5/6] ice: use correct xdp_ring with XDP_TX action Tony Nguyen
                   ` (2 subsequent siblings)
  5 siblings, 0 replies; 10+ messages in thread
From: Tony Nguyen @ 2020-11-21  0:38 UTC (permalink / raw)
  To: intel-wired-lan

From: Nick Nunley <nicholas.d.nunley@intel.com>

Fix the driver to copy the MAC address configured in ndo_set_mac_address
into dev_addr, even if the MAC filter already exists in HW. In some
situations (e.g. bonding) the netdev's dev_addr could have been modified
outside of the driver, with no change to the HW filter, so the driver
cannot assume that they match.

Fixes: 757976ab16be ("ice: Fix check for removing/adding mac filters")
Signed-off-by: Nick Nunley <nicholas.d.nunley@intel.com>
---
 drivers/net/ethernet/intel/ice/ice_main.c | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/intel/ice/ice_main.c b/drivers/net/ethernet/intel/ice/ice_main.c
index 2dea4d0e9415..7986c677cab5 100644
--- a/drivers/net/ethernet/intel/ice/ice_main.c
+++ b/drivers/net/ethernet/intel/ice/ice_main.c
@@ -4887,9 +4887,15 @@ static int ice_set_mac_address(struct net_device *netdev, void *pi)
 		goto err_update_filters;
 	}
 
-	/* Add filter for new MAC. If filter exists, just return success */
+	/* Add filter for new MAC. If filter exists, return success */
 	status = ice_fltr_add_mac(vsi, mac, ICE_FWD_TO_VSI);
 	if (status == ICE_ERR_ALREADY_EXISTS) {
+		/* Although this MAC filter is already present in hardware it's
+		 * possible in some cases (e.g. bonding) that dev_addr was
+		 * modified outside of the driver and needs to be restored back
+		 * to this value.
+		 */
+		memcpy(netdev->dev_addr, mac, netdev->addr_len);
 		netdev_dbg(netdev, "filter for MAC %pM already exists\n", mac);
 		return 0;
 	}
-- 
2.20.1


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [Intel-wired-lan] [net 5/6] ice: use correct xdp_ring with XDP_TX action
  2020-11-21  0:38 [Intel-wired-lan] [net 1/6] ice: fix FDir IPv6 flexbyte Tony Nguyen
                   ` (2 preceding siblings ...)
  2020-11-21  0:38 ` [Intel-wired-lan] [net 4/6] ice: update dev_addr in ice_set_mac_address even if HW filter exists Tony Nguyen
@ 2020-11-21  0:38 ` Tony Nguyen
  2020-12-01 14:48   ` Kuruvinakunnel, George
  2020-11-21  0:38 ` [Intel-wired-lan] [net 6/6] ice: Fix state bits on LLDP mode switch Tony Nguyen
  2020-12-01 15:15 ` [Intel-wired-lan] [net 1/6] ice: fix FDir IPv6 flexbyte Paul Menzel
  5 siblings, 1 reply; 10+ messages in thread
From: Tony Nguyen @ 2020-11-21  0:38 UTC (permalink / raw)
  To: intel-wired-lan

From: Piotr Raczynski <piotr.raczynski@intel.com>

XDP queue number for XDP_TX action is used inconsistently
and may result with no packets transmitted. Fix queue number
used by the driver when doing XDP_TX, i.e. use receive queue
number as in ice_finalize_xdp_rx.

Also, using smp_processor_id() is wrong here and won't
work with less queues.

Fixes: efc2214b6047 ("ice: Add support for XDP")
Signed-off-by: Piotr Raczynski <piotr.raczynski@intel.com>
---
 drivers/net/ethernet/intel/ice/ice_txrx.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/intel/ice/ice_txrx.c b/drivers/net/ethernet/intel/ice/ice_txrx.c
index a6793147dc00..f34dd4806d5c 100644
--- a/drivers/net/ethernet/intel/ice/ice_txrx.c
+++ b/drivers/net/ethernet/intel/ice/ice_txrx.c
@@ -546,7 +546,7 @@ ice_run_xdp(struct ice_ring *rx_ring, struct xdp_buff *xdp,
 	case XDP_PASS:
 		break;
 	case XDP_TX:
-		xdp_ring = rx_ring->vsi->xdp_rings[smp_processor_id()];
+		xdp_ring = rx_ring->vsi->xdp_rings[rx_ring->q_index];
 		result = ice_xmit_xdp_buff(xdp, xdp_ring);
 		break;
 	case XDP_REDIRECT:
-- 
2.20.1


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [Intel-wired-lan] [net 6/6] ice: Fix state bits on LLDP mode switch
  2020-11-21  0:38 [Intel-wired-lan] [net 1/6] ice: fix FDir IPv6 flexbyte Tony Nguyen
                   ` (3 preceding siblings ...)
  2020-11-21  0:38 ` [Intel-wired-lan] [net 5/6] ice: use correct xdp_ring with XDP_TX action Tony Nguyen
@ 2020-11-21  0:38 ` Tony Nguyen
  2020-12-01 15:15 ` [Intel-wired-lan] [net 1/6] ice: fix FDir IPv6 flexbyte Paul Menzel
  5 siblings, 0 replies; 10+ messages in thread
From: Tony Nguyen @ 2020-11-21  0:38 UTC (permalink / raw)
  To: intel-wired-lan

From: Dave Ertman <david.m.ertman@intel.com>

DCBX_CAP bits were not being adjusted when switching
between SW and FW controlled LLDP.

Adjust bits to correctly indicate which mode the
LLDP logic is in.

Fixes: b94b013eb626 ("ice: Implement DCBNL support")
Signed-off-by: Dave Ertman <david.m.ertman@intel.com>
---
 drivers/net/ethernet/intel/ice/ice.h         | 2 --
 drivers/net/ethernet/intel/ice/ice_dcb_nl.c  | 4 ++++
 drivers/net/ethernet/intel/ice/ice_ethtool.c | 7 +++++++
 3 files changed, 11 insertions(+), 2 deletions(-)

diff --git a/drivers/net/ethernet/intel/ice/ice.h b/drivers/net/ethernet/intel/ice/ice.h
index a0723831c4e4..fc022daba022 100644
--- a/drivers/net/ethernet/intel/ice/ice.h
+++ b/drivers/net/ethernet/intel/ice/ice.h
@@ -442,9 +442,7 @@ struct ice_pf {
 	struct ice_hw_port_stats stats_prev;
 	struct ice_hw hw;
 	u8 stat_prev_loaded:1; /* has previous stats been loaded */
-#ifdef CONFIG_DCB
 	u16 dcbx_cap;
-#endif /* CONFIG_DCB */
 	u32 tx_timeout_count;
 	unsigned long tx_timeout_last_recovery;
 	u32 tx_timeout_recovery_level;
diff --git a/drivers/net/ethernet/intel/ice/ice_dcb_nl.c b/drivers/net/ethernet/intel/ice/ice_dcb_nl.c
index 842d44b63480..8c133a8be6ad 100644
--- a/drivers/net/ethernet/intel/ice/ice_dcb_nl.c
+++ b/drivers/net/ethernet/intel/ice/ice_dcb_nl.c
@@ -160,6 +160,10 @@ static u8 ice_dcbnl_setdcbx(struct net_device *netdev, u8 mode)
 {
 	struct ice_pf *pf = ice_netdev_to_pf(netdev);
 
+	/* if FW LLDP agent is running, DCBNL not allowed to change mode */
+	if (test_bit(ICE_FLAG_FW_LLDP_AGENT, pf->flags))
+		return ICE_DCB_NO_HW_CHG;
+
 	/* No support for LLD_MANAGED modes or CEE+IEEE */
 	if ((mode & DCB_CAP_DCBX_LLD_MANAGED) ||
 	    ((mode & DCB_CAP_DCBX_VER_IEEE) && (mode & DCB_CAP_DCBX_VER_CEE)) ||
diff --git a/drivers/net/ethernet/intel/ice/ice_ethtool.c b/drivers/net/ethernet/intel/ice/ice_ethtool.c
index 8515a3a7515f..1cfa7332888d 100644
--- a/drivers/net/ethernet/intel/ice/ice_ethtool.c
+++ b/drivers/net/ethernet/intel/ice/ice_ethtool.c
@@ -8,6 +8,7 @@
 #include "ice_fltr.h"
 #include "ice_lib.h"
 #include "ice_dcb_lib.h"
+#include <net/dcbnl.h>
 
 struct ice_stats {
 	char stat_string[ETH_GSTRING_LEN];
@@ -1238,6 +1239,9 @@ static int ice_set_priv_flags(struct net_device *netdev, u32 flags)
 			status = ice_init_pf_dcb(pf, true);
 			if (status)
 				dev_warn(dev, "Fail to init DCB\n");
+
+			pf->dcbx_cap &= ~DCB_CAP_DCBX_LLD_MANAGED;
+			pf->dcbx_cap |= DCB_CAP_DCBX_HOST;
 		} else {
 			enum ice_status status;
 			bool dcbx_agent_status;
@@ -1280,6 +1284,9 @@ static int ice_set_priv_flags(struct net_device *netdev, u32 flags)
 			if (status)
 				dev_dbg(dev, "Fail to enable MIB change events\n");
 
+			pf->dcbx_cap &= ~DCB_CAP_DCBX_HOST;
+			pf->dcbx_cap |= DCB_CAP_DCBX_LLD_MANAGED;
+
 			ice_nway_reset(netdev);
 		}
 	}
-- 
2.20.1


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [Intel-wired-lan] [net 5/6] ice: use correct xdp_ring with XDP_TX action
  2020-11-21  0:38 ` [Intel-wired-lan] [net 5/6] ice: use correct xdp_ring with XDP_TX action Tony Nguyen
@ 2020-12-01 14:48   ` Kuruvinakunnel, George
  0 siblings, 0 replies; 10+ messages in thread
From: Kuruvinakunnel, George @ 2020-12-01 14:48 UTC (permalink / raw)
  To: intel-wired-lan

> From: Intel-wired-lan <intel-wired-lan-bounces@osuosl.org> On Behalf Of Tony
> Nguyen
> Sent: Saturday, November 21, 2020 6:09 AM
> To: intel-wired-lan at lists.osuosl.org
> Subject: [Intel-wired-lan] [net 5/6] ice: use correct xdp_ring with XDP_TX action
> 
> From: Piotr Raczynski <piotr.raczynski@intel.com>
> 
> XDP queue number for XDP_TX action is used inconsistently and may result with
> no packets transmitted. Fix queue number used by the driver when doing
> XDP_TX, i.e. use receive queue number as in ice_finalize_xdp_rx.
> 
> Also, using smp_processor_id() is wrong here and won't work with less queues.
> 
> Fixes: efc2214b6047 ("ice: Add support for XDP")
> Signed-off-by: Piotr Raczynski <piotr.raczynski@intel.com>
> ---
>  drivers/net/ethernet/intel/ice/ice_txrx.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>  

Tested-by: George Kuruvinakunnel <george.kuruvinakunnel@intel.com>


^ permalink raw reply	[flat|nested] 10+ messages in thread

* [Intel-wired-lan] [net 1/6] ice: fix FDir IPv6 flexbyte
  2020-11-21  0:38 [Intel-wired-lan] [net 1/6] ice: fix FDir IPv6 flexbyte Tony Nguyen
                   ` (4 preceding siblings ...)
  2020-11-21  0:38 ` [Intel-wired-lan] [net 6/6] ice: Fix state bits on LLDP mode switch Tony Nguyen
@ 2020-12-01 15:15 ` Paul Menzel
  5 siblings, 0 replies; 10+ messages in thread
From: Paul Menzel @ 2020-12-01 15:15 UTC (permalink / raw)
  To: intel-wired-lan

Dear Henry,


Am 21.11.20 um 01:38 schrieb Tony Nguyen:
> From: Henry Tieman <henry.w.tieman@intel.com>
> 
> The packet classifier would occasionally misrecognize an IPv6 training
> packet when the next protocol field was 0. The correct value for
> unspecified protocol is IPPROTO_NONE.
> 
> Fixes: 165d80d6adab ("ice: Support IPv6 Flow Director filters")
> Signed-off-by: Henry Tieman <henry.w.tieman@intel.com>
> ---
>   drivers/net/ethernet/intel/ice/ice_ethtool_fdir.c | 8 +++++++-
>   1 file changed, 7 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/net/ethernet/intel/ice/ice_ethtool_fdir.c b/drivers/net/ethernet/intel/ice/ice_ethtool_fdir.c
> index 2d27f66ac853..192729546bbf 100644
> --- a/drivers/net/ethernet/intel/ice/ice_ethtool_fdir.c
> +++ b/drivers/net/ethernet/intel/ice/ice_ethtool_fdir.c
> @@ -1576,7 +1576,13 @@ ice_set_fdir_input_set(struct ice_vsi *vsi, struct ethtool_rx_flow_spec *fsp,
>   		       sizeof(struct in6_addr));
>   		input->ip.v6.l4_header = fsp->h_u.usr_ip6_spec.l4_4_bytes;
>   		input->ip.v6.tc = fsp->h_u.usr_ip6_spec.tclass;
> -		input->ip.v6.proto = fsp->h_u.usr_ip6_spec.l4_proto;
> +
> +		/* if no protocol requested, use IPPROTO_NONE */
> +		if (!fsp->m_u.usr_ip6_spec.l4_proto)
> +			input->ip.v6.proto = IPPROTO_NONE;
> +		else
> +			input->ip.v6.proto = fsp->h_u.usr_ip6_spec.l4_proto;
> +

I prefer non-negation and the ternary operator, but it?s subjective.

     input->ip.v6.proto = fsp->h_u.usr_ip6_spec.l4_proto ? 
fsp->h_u.usr_ip6_spec.l4_proto : IPPROTO_NONE;

(GCC even has the extension `a ?: b`.)

>   		memcpy(input->mask.v6.dst_ip, fsp->m_u.usr_ip6_spec.ip6dst,
>   		       sizeof(struct in6_addr));
>   		memcpy(input->mask.v6.src_ip, fsp->m_u.usr_ip6_spec.ip6src,

Reviewed-by: Paul Menzel <pmenzel@molgen.mpg.de>


Kind regards,

Paul

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [Intel-wired-lan] [net 3/6] ice: update the number of available RSS queues
  2020-11-21  0:38 ` [Intel-wired-lan] [net 3/6] ice: update the number of available RSS queues Tony Nguyen
@ 2020-12-01 15:31   ` Paul Menzel
  2020-12-02  0:21     ` Nguyen, Anthony L
  0 siblings, 1 reply; 10+ messages in thread
From: Paul Menzel @ 2020-12-01 15:31 UTC (permalink / raw)
  To: intel-wired-lan

Dear Henry, dear Tony,


Am 21.11.20 um 01:38 schrieb Tony Nguyen:
> From: Henry Tieman <henry.w.tieman@intel.com>
> 
> It was possible to have Rx queues that were not available for use
> by RSS. This would happen when increasing the number of Rx queues
> while there was a user defined RSS LUT.
> 
> Always update the number of available RSS queues when changing the
> number of Rx queues.
> 
> Fixes: 87324e747fde ("ice: Implement ethtool ops for channels")
> Signed-off-by: Henry Tieman <henry.w.tieman@intel.com>
> ---
>   drivers/net/ethernet/intel/ice/ice_ethtool.c | 31 ++++++++++++++------
>   1 file changed, 22 insertions(+), 9 deletions(-)
> 
> diff --git a/drivers/net/ethernet/intel/ice/ice_ethtool.c b/drivers/net/ethernet/intel/ice/ice_ethtool.c
> index 9e8e9531cd87..8515a3a7515f 100644
> --- a/drivers/net/ethernet/intel/ice/ice_ethtool.c
> +++ b/drivers/net/ethernet/intel/ice/ice_ethtool.c
> @@ -3321,6 +3321,18 @@ ice_get_channels(struct net_device *dev, struct ethtool_channels *ch)
>   	ch->max_other = ch->other_count;
>   }
>   
> +/**
> + * ice_get_valid_rss_size - return valid number of RSS queues
> + * @hw: pointer to the HW structure
> + * @new_size: requested RSS queues
> + */
> +static int ice_get_valid_rss_size(struct ice_hw *hw, int new_size)
> +{
> +	struct ice_hw_common_caps *caps = &hw->func_caps.common_cap;
> +
> +	return min_t(int, new_size, BIT(caps->rss_table_entry_width));
> +}
> +
>   /**
>    * ice_vsi_set_dflt_rss_lut - set default RSS LUT with requested RSS size
>    * @vsi: VSI to reconfigure RSS LUT on
> @@ -3348,14 +3360,10 @@ static int ice_vsi_set_dflt_rss_lut(struct ice_vsi *vsi, int req_rss_size)
>   		return -ENOMEM;
>   
>   	/* set RSS LUT parameters */
> -	if (!test_bit(ICE_FLAG_RSS_ENA, pf->flags)) {
> +	if (!test_bit(ICE_FLAG_RSS_ENA, pf->flags))
>   		vsi->rss_size = 1;
> -	} else {
> -		struct ice_hw_common_caps *caps = &hw->func_caps.common_cap;
> -
> -		vsi->rss_size = min_t(int, req_rss_size,
> -				      BIT(caps->rss_table_entry_width));
> -	}
> +	else
> +		vsi->rss_size = ice_get_valid_rss_size(hw, req_rss_size);
>   
>   	/* create/set RSS LUT */
>   	ice_fill_rss_lut(lut, vsi->rss_table_size, vsi->rss_size);
> @@ -3434,8 +3442,13 @@ static int ice_set_channels(struct net_device *dev, struct ethtool_channels *ch)
>   
>   	ice_vsi_recfg_qs(vsi, new_rx, new_tx);
>   
> -	if (new_rx && !netif_is_rxfh_configured(dev))
> -		return ice_vsi_set_dflt_rss_lut(vsi, new_rx);
> +	if (new_rx) {
> +		if (!netif_is_rxfh_configured(dev))
> +			return ice_vsi_set_dflt_rss_lut(vsi, new_rx);
> +
> +		/* Update rss_size due to change in Rx queues */
> +		vsi->rss_size = ice_get_valid_rss_size(&pf->hw, new_rx);
> +	}

Why not unconditionally call

     vsi->rss_size = ice_get_valid_rss_size(&pf->hw, new_rx);

as the function handles the case `new_rx = 0`, right?

`ice_vsi_recfg_qs(vsi, new_rx, new_tx);` also does not check `new_tx` 
for example.

>   
>   	return 0;
>   }


Kind regards,

Paul

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [Intel-wired-lan] [net 3/6] ice: update the number of available RSS queues
  2020-12-01 15:31   ` Paul Menzel
@ 2020-12-02  0:21     ` Nguyen, Anthony L
  0 siblings, 0 replies; 10+ messages in thread
From: Nguyen, Anthony L @ 2020-12-02  0:21 UTC (permalink / raw)
  To: intel-wired-lan

On Tue, 2020-12-01 at 16:31 +0100, Paul Menzel wrote:
> Dear Henry, dear Tony,
> 
> 
> Am 21.11.20 um 01:38 schrieb Tony Nguyen:
> > From: Henry Tieman <henry.w.tieman@intel.com>
> > 
> > It was possible to have Rx queues that were not available for use
> > by RSS. This would happen when increasing the number of Rx queues
> > while there was a user defined RSS LUT.
> > 
> > Always update the number of available RSS queues when changing the
> > number of Rx queues.
> > 
> > Fixes: 87324e747fde ("ice: Implement ethtool ops for channels")
> > Signed-off-by: Henry Tieman <henry.w.tieman@intel.com>
> > ---
> >   drivers/net/ethernet/intel/ice/ice_ethtool.c | 31 ++++++++++++++-
> > -----
> >   1 file changed, 22 insertions(+), 9 deletions(-)
> > 
> > diff --git a/drivers/net/ethernet/intel/ice/ice_ethtool.c
> > b/drivers/net/ethernet/intel/ice/ice_ethtool.c
> > index 9e8e9531cd87..8515a3a7515f 100644
> > --- a/drivers/net/ethernet/intel/ice/ice_ethtool.c
> > +++ b/drivers/net/ethernet/intel/ice/ice_ethtool.c
> > @@ -3321,6 +3321,18 @@ ice_get_channels(struct net_device *dev,
> > struct ethtool_channels *ch)
> >   	ch->max_other = ch->other_count;
> >   }
> >   
> > +/**
> > + * ice_get_valid_rss_size - return valid number of RSS queues
> > + * @hw: pointer to the HW structure
> > + * @new_size: requested RSS queues
> > + */
> > +static int ice_get_valid_rss_size(struct ice_hw *hw, int new_size)
> > +{
> > +	struct ice_hw_common_caps *caps = &hw->func_caps.common_cap;
> > +
> > +	return min_t(int, new_size, BIT(caps->rss_table_entry_width));
> > +}
> > +
> >   /**
> >    * ice_vsi_set_dflt_rss_lut - set default RSS LUT with requested
> > RSS size
> >    * @vsi: VSI to reconfigure RSS LUT on
> > @@ -3348,14 +3360,10 @@ static int ice_vsi_set_dflt_rss_lut(struct
> > ice_vsi *vsi, int req_rss_size)
> >   		return -ENOMEM;
> >   
> >   	/* set RSS LUT parameters */
> > -	if (!test_bit(ICE_FLAG_RSS_ENA, pf->flags)) {
> > +	if (!test_bit(ICE_FLAG_RSS_ENA, pf->flags))
> >   		vsi->rss_size = 1;
> > -	} else {
> > -		struct ice_hw_common_caps *caps = &hw-
> > >func_caps.common_cap;
> > -
> > -		vsi->rss_size = min_t(int, req_rss_size,
> > -				      BIT(caps-
> > >rss_table_entry_width));
> > -	}
> > +	else
> > +		vsi->rss_size = ice_get_valid_rss_size(hw,
> > req_rss_size);
> >   
> >   	/* create/set RSS LUT */
> >   	ice_fill_rss_lut(lut, vsi->rss_table_size, vsi->rss_size);
> > @@ -3434,8 +3442,13 @@ static int ice_set_channels(struct
> > net_device *dev, struct ethtool_channels *ch)
> >   
> >   	ice_vsi_recfg_qs(vsi, new_rx, new_tx);
> >   
> > -	if (new_rx && !netif_is_rxfh_configured(dev))
> > -		return ice_vsi_set_dflt_rss_lut(vsi, new_rx);
> > +	if (new_rx) {
> > +		if (!netif_is_rxfh_configured(dev))
> > +			return ice_vsi_set_dflt_rss_lut(vsi, new_rx);
> > +
> > +		/* Update rss_size due to change in Rx queues */
> > +		vsi->rss_size = ice_get_valid_rss_size(&pf->hw,
> > new_rx);
> > +	}
> 
> Why not unconditionally call
> 
>      vsi->rss_size = ice_get_valid_rss_size(&pf->hw, new_rx);
> 
> as the function handles the case `new_rx = 0`, right?

Yea, that's right. I will update.

Thanks,
Tony

^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2020-12-02  0:21 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-11-21  0:38 [Intel-wired-lan] [net 1/6] ice: fix FDir IPv6 flexbyte Tony Nguyen
2020-11-21  0:38 ` [Intel-wired-lan] [net 2/6] ice: Implement flow for IPv6 next header (extension header) Tony Nguyen
2020-11-21  0:38 ` [Intel-wired-lan] [net 3/6] ice: update the number of available RSS queues Tony Nguyen
2020-12-01 15:31   ` Paul Menzel
2020-12-02  0:21     ` Nguyen, Anthony L
2020-11-21  0:38 ` [Intel-wired-lan] [net 4/6] ice: update dev_addr in ice_set_mac_address even if HW filter exists Tony Nguyen
2020-11-21  0:38 ` [Intel-wired-lan] [net 5/6] ice: use correct xdp_ring with XDP_TX action Tony Nguyen
2020-12-01 14:48   ` Kuruvinakunnel, George
2020-11-21  0:38 ` [Intel-wired-lan] [net 6/6] ice: Fix state bits on LLDP mode switch Tony Nguyen
2020-12-01 15:15 ` [Intel-wired-lan] [net 1/6] ice: fix FDir IPv6 flexbyte Paul Menzel

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.