Re: [dpdk-dev] [PATCH] net/ice: refine RSS configure
From: Ding, Xuan <hidden>
Date: 2021-03-30 04:32:00
-----Original Message----- From: Zhang, Qi Z <redacted> Sent: Tuesday, March 30, 2021 11:30 AM To: Ding, Xuan <redacted>; Guo, Jia <redacted> Cc: dev@dpdk.org; Yang, Qiming <redacted>; Noonan, Gordon [off-list ref]; Varshney, Shashank1 [off-list ref] Subject: RE: [PATCH] net/ice: refine RSS configurequoted
-----Original Message----- From: Ding, Xuan <redacted> Sent: Tuesday, March 30, 2021 11:00 AM To: Zhang, Qi Z <redacted>; Guo, Jia <redacted> Cc: dev@dpdk.org; Yang, Qiming <redacted>; Noonan, Gordon [off-list ref]; Varshney, Shashank1 [off-list ref] Subject: RE: [PATCH] net/ice: refine RSS configure Hi Qi, Replies inline.quoted
-----Original Message----- From: Zhang, Qi Z <redacted> Sent: Thursday, March 25, 2021 8:43 PM To: Guo, Jia <redacted>; Ding, Xuan <redacted> Cc: dev@dpdk.org; Yang, Qiming <redacted>; Noonan,Gordonquoted
[off-list ref]; Varshney, Shashank1 [off-list ref]; Zhang, Qi Z [off-list ref] Subject: [PATCH] net/ice: refine RSS configure The ICE_RSS_ANY_HEADERS will try to enable outer RSS for non-tunnel case and inner RSS for tunnel case. This confuse user. As we already have ICE_RSS_INNER_HEADER for tunnel case, So, replace ICE_RSS_ANY_HEADERS with ICE_RSS_OUTER_HEADERS for all exist flow which only specified the outer pattern. To enable inner RSS for any tunnel cases, a separated rule should be enabled. The patch also remove some unncessary condition check for GTPUHere ' unncessary ' is a typo, should be 'unnecessary'.quoted
in base code, as we already can support outer RSS for GTPU. Signed-off-by: Qi Zhang <redacted> --- drivers/net/ice/base/ice_flow.c | 14 ------------ drivers/net/ice/ice_ethdev.c | 4 ++-- drivers/net/ice/ice_hash.c | 38 ++++++++++++++++----------------- 3 files changed, 21 insertions(+), 35 deletions(-)diff --git a/drivers/net/ice/base/ice_flow.cb/drivers/net/ice/base/ice_flow.c index d123206fc6..bceb257d61 100644--- a/drivers/net/ice/base/ice_flow.c +++ b/drivers/net/ice/base/ice_flow.c@@ -3678,13 +3678,6 @@ ice_add_rss_cfg_sync(struct ice_hw *hw, u16vsi_handle, if (status) goto exit; -/* Don't do RSS for GTPU Outer */ -if (segs_cnt == ICE_FLOW_SEG_SINGLE && - segs[segs_cnt - 1].hdrs & ICE_FLOW_SEG_HDR_GTPU) { -status = ICE_SUCCESS; -goto exit; -} - /* Search for a flow profile that has matching headers, hash fields * and has the input VSI associated to it. If found, no further * operations required and exit.@@ -3847,13 +3840,6 @@ ice_rem_rss_cfg_sync(struct ice_hw *hw, u16vsi_handle, if (status) goto out; -/* Don't do RSS for GTPU Outer */ -if (segs_cnt == ICE_FLOW_SEG_SINGLE && - segs[segs_cnt - 1].hdrs & ICE_FLOW_SEG_HDR_GTPU) { -status = ICE_SUCCESS; -goto out; -} - prof = ice_flow_find_prof_conds(hw, blk, ICE_FLOW_RX, segs, segs_cnt, vsi_handle, ICE_FLOW_FIND_PROF_CHK_FLDS); diff --git a/drivers/net/ice/ice_ethdev.c b/drivers/net/ice/ice_ethdev.c index 3e85e5f629..4ccf31cb41 100644--- a/drivers/net/ice/ice_ethdev.c +++ b/drivers/net/ice/ice_ethdev.c@@ -2348,7 +2348,7 @@ hash_cfg_reset(struct ice_rss_hash_cfg *cfg)cfg->hash_flds = 0; cfg->addl_hdrs = 0; cfg->symm = 0; -cfg->hdr_type = ICE_RSS_ANY_HEADERS; +cfg->hdr_type = ICE_RSS_OUTER_HEADERS; } static int@@ -2833,7 +2833,7 @@ ice_rss_hash_set(struct ice_pf *pf, uint64_trss_hf)quoted
__func__, ret); cfg.symm = 0; -cfg.hdr_type = ICE_RSS_ANY_HEADERS; +cfg.hdr_type = ICE_RSS_OUTER_HEADERS; /* Configure RSS for IPv4 with src/dst addr as input set */ if (rss_hf & ETH_RSS_IPV4) { cfg.addl_hdrs = ICE_FLOW_SEG_HDR_IPV4 | ICE_FLOW_SEG_HDR_IPV_OTHER; diff --git a/drivers/net/ice/ice_hash.c b/drivers/net/ice/ice_hash.c index 58a0c18d09..7d7e7052da 100644--- a/drivers/net/ice/ice_hash.c +++ b/drivers/net/ice/ice_hash.c@@ -110,7 +110,7 @@ struct ice_rss_hash_cfg ipv4_tmplt = {ICE_FLOW_SEG_HDR_ETH | ICE_FLOW_SEG_HDR_IPV4 | ICE_FLOW_SEG_HDR_IPV_OTHER, ICE_FLOW_HASH_ETH |ICE_FLOW_HASH_IPV4,quoted
-ICE_RSS_ANY_HEADERS, +ICE_RSS_OUTER_HEADERS, 0 };@@ -118,7 +118,7 @@ struct ice_rss_hash_cfg ipv4_udp_tmplt = {ICE_FLOW_SEG_HDR_ETH | ICE_FLOW_SEG_HDR_IPV4 | ICE_FLOW_SEG_HDR_IPV_OTHER | ICE_FLOW_SEG_HDR_UDP,ICE_FLOW_HASH_ETHquoted
| ICE_HASH_UDP_IPV4 | ICE_IPV4_PROT, -ICE_RSS_ANY_HEADERS, +ICE_RSS_OUTER_HEADERS, 0 };@@ -126,7 +126,7 @@ struct ice_rss_hash_cfg ipv4_tcp_tmplt = {ICE_FLOW_SEG_HDR_ETH | ICE_FLOW_SEG_HDR_IPV4 | ICE_FLOW_SEG_HDR_IPV_OTHER | ICE_FLOW_SEG_HDR_TCP,ICE_FLOW_HASH_ETHquoted
| ICE_HASH_TCP_IPV4 | ICE_IPV4_PROT, -ICE_RSS_ANY_HEADERS, +ICE_RSS_OUTER_HEADERS, 0 };@@ -134,7 +134,7 @@ struct ice_rss_hash_cfg ipv4_sctp_tmplt = {ICE_FLOW_SEG_HDR_ETH | ICE_FLOW_SEG_HDR_IPV4 | ICE_FLOW_SEG_HDR_IPV_OTHER | ICE_FLOW_SEG_HDR_SCTP,ICE_FLOW_HASH_ETHquoted
| ICE_HASH_SCTP_IPV4 | ICE_IPV4_PROT, -ICE_RSS_ANY_HEADERS, +ICE_RSS_OUTER_HEADERS, 0 };@@ -142,7 +142,7 @@ struct ice_rss_hash_cfg ipv6_tmplt = {ICE_FLOW_SEG_HDR_ETH | ICE_FLOW_SEG_HDR_IPV6 | ICE_FLOW_SEG_HDR_IPV_OTHER, ICE_FLOW_HASH_ETH |ICE_FLOW_HASH_IPV6,quoted
-ICE_RSS_ANY_HEADERS, +ICE_RSS_OUTER_HEADERS, 0 };@@ -150,7 +150,7 @@ struct ice_rss_hash_cfg ipv6_udp_tmplt = {ICE_FLOW_SEG_HDR_ETH | ICE_FLOW_SEG_HDR_IPV6 | ICE_FLOW_SEG_HDR_IPV_OTHER | ICE_FLOW_SEG_HDR_UDP,ICE_FLOW_HASH_ETHquoted
| ICE_HASH_UDP_IPV6 | ICE_IPV6_PROT, -ICE_RSS_ANY_HEADERS, +ICE_RSS_OUTER_HEADERS, 0 };@@ -158,7 +158,7 @@ struct ice_rss_hash_cfg ipv6_tcp_tmplt = {ICE_FLOW_SEG_HDR_ETH | ICE_FLOW_SEG_HDR_IPV6 | ICE_FLOW_SEG_HDR_IPV_OTHER | ICE_FLOW_SEG_HDR_TCP,ICE_FLOW_HASH_ETHquoted
| ICE_HASH_TCP_IPV6 | ICE_IPV6_PROT, -ICE_RSS_ANY_HEADERS, +ICE_RSS_OUTER_HEADERS, 0 };@@ -166,7 +166,7 @@ struct ice_rss_hash_cfg ipv6_sctp_tmplt = {ICE_FLOW_SEG_HDR_ETH | ICE_FLOW_SEG_HDR_IPV6 | ICE_FLOW_SEG_HDR_IPV_OTHER | ICE_FLOW_SEG_HDR_SCTP,ICE_FLOW_HASH_ETHquoted
| ICE_HASH_SCTP_IPV6 | ICE_IPV6_PROT, -ICE_RSS_ANY_HEADERS, +ICE_RSS_OUTER_HEADERS, 0 };@@ -262,7 +262,7 @@ struct ice_rss_hash_cfg eth_ipv4_esp_tmplt = { ICE_FLOW_SEG_HDR_IPV4 | ICE_FLOW_SEG_HDR_IPV_OTHER |ICE_FLOW_SEG_HDR_ESP, ICE_FLOW_HASH_ESP_SPI,-ICE_RSS_ANY_HEADERS,quoted
+ICE_RSS_OUTER_HEADERS, 0 };@@ -270,7 +270,7 @@ struct ice_rss_hash_cfg eth_ipv4_udp_esp_tmplt = { ICE_FLOW_SEG_HDR_IPV4 | ICE_FLOW_SEG_HDR_IPV_OTHER |ICE_FLOW_SEG_HDR_NAT_T_ESP, ICE_FLOW_HASH_NAT_T_ESP_SPI, -ICE_RSS_ANY_HEADERS, +ICE_RSS_OUTER_HEADERS, 0 };@@ -278,7 +278,7 @@ struct ice_rss_hash_cfg eth_ipv4_ah_tmplt = { ICE_FLOW_SEG_HDR_IPV4 | ICE_FLOW_SEG_HDR_IPV_OTHER |ICE_FLOW_SEG_HDR_AH, ICE_FLOW_HASH_AH_SPI,-ICE_RSS_ANY_HEADERS,quoted
+ICE_RSS_OUTER_HEADERS, 0 };@@ -286,7 +286,7 @@ struct ice_rss_hash_cfg eth_ipv4_l2tpv3_tmplt = { ICE_FLOW_SEG_HDR_IPV4 | ICE_FLOW_SEG_HDR_IPV_OTHER |ICE_FLOW_SEG_HDR_L2TPV3, ICE_FLOW_HASH_L2TPV3_SESS_ID, -ICE_RSS_ANY_HEADERS, +ICE_RSS_OUTER_HEADERS, 0 };@@ -294,7 +294,7 @@ struct ice_rss_hash_cfg eth_ipv4_pfcp_tmplt = { ICE_FLOW_SEG_HDR_IPV4 | ICE_FLOW_SEG_HDR_IPV_OTHER |ICE_FLOW_SEG_HDR_PFCP_SESSION, ICE_FLOW_HASH_PFCP_SEID, -ICE_RSS_ANY_HEADERS, +ICE_RSS_OUTER_HEADERS, 0 };@@ -302,7 +302,7 @@ struct ice_rss_hash_cfg eth_ipv6_esp_tmplt = { ICE_FLOW_SEG_HDR_IPV6 | ICE_FLOW_SEG_HDR_IPV_OTHER |ICE_FLOW_SEG_HDR_ESP, ICE_FLOW_HASH_ESP_SPI,-ICE_RSS_ANY_HEADERS,quoted
+ICE_RSS_OUTER_HEADERS, 0 };@@ -310,7 +310,7 @@ struct ice_rss_hash_cfg eth_ipv6_udp_esp_tmplt = { ICE_FLOW_SEG_HDR_IPV6 | ICE_FLOW_SEG_HDR_IPV_OTHER |ICE_FLOW_SEG_HDR_NAT_T_ESP, ICE_FLOW_HASH_NAT_T_ESP_SPI, -ICE_RSS_ANY_HEADERS, +ICE_RSS_OUTER_HEADERS, 0 };@@ -318,7 +318,7 @@ struct ice_rss_hash_cfg eth_ipv6_ah_tmplt = { ICE_FLOW_SEG_HDR_IPV6 | ICE_FLOW_SEG_HDR_IPV_OTHER |ICE_FLOW_SEG_HDR_AH, ICE_FLOW_HASH_AH_SPI,-ICE_RSS_ANY_HEADERS,quoted
+ICE_RSS_OUTER_HEADERS, 0 };@@ -326,7 +326,7 @@ struct ice_rss_hash_cfg eth_ipv6_l2tpv3_tmplt = { ICE_FLOW_SEG_HDR_IPV6 | ICE_FLOW_SEG_HDR_IPV_OTHER |ICE_FLOW_SEG_HDR_L2TPV3, ICE_FLOW_HASH_L2TPV3_SESS_ID, -ICE_RSS_ANY_HEADERS, +ICE_RSS_OUTER_HEADERS, 0 };@@ -334,14 +334,14 @@ struct ice_rss_hash_cfg eth_ipv6_pfcp_tmplt = { ICE_FLOW_SEG_HDR_IPV6 | ICE_FLOW_SEG_HDR_IPV_OTHER |ICE_FLOW_SEG_HDR_PFCP_SESSION, ICE_FLOW_HASH_PFCP_SEID, -ICE_RSS_ANY_HEADERS, +ICE_RSS_OUTER_HEADERS, 0 }; struct ice_rss_hash_cfg pppoe_tmplt = { ICE_FLOW_SEG_HDR_ETH, ICE_FLOW_HASH_ETH | ICE_FLOW_HASH_PPPOE_SESS_ID,-ICE_RSS_ANY_HEADERS,quoted
+ICE_RSS_OUTER_HEADERS, 0 }; -- 2.26.2Since PPPOE protocol is a encapsulating network protocol. For IP/UDP or IP/TCP cases, is it right to treat it as outer cases? Here are some doubts.PPPOE don't have outer l3/l4, it belongs to the same layer with inner l3/l4, for single layer, we just take outer header Typically , inner header will only be used for gtpu/vxlan/grequoted
Thanks, Xuan
Acked-by: Xuan Ding <redacted> Thanks, Xuan