From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dispatch1-us1.ppe-hosted.com (dispatch1-us1.ppe-hosted.com [148.163.129.52]) by dpdk.org (Postfix) with ESMTP id 9F8491CA3D for ; Sat, 7 Apr 2018 11:06:08 +0200 (CEST) X-Virus-Scanned: Proofpoint Essentials engine Received: from webmail.solarflare.com (uk.solarflare.com [193.34.186.16]) (using TLSv1 with cipher ECDHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1-us3.ppe-hosted.com (Proofpoint Essentials ESMTP Server) with ESMTPS id 1ECB0B40056; Sat, 7 Apr 2018 09:06:06 +0000 (UTC) Received: from [192.168.38.17] (84.52.114.114) by ukex01.SolarFlarecom.com (10.17.10.4) with Microsoft SMTP Server (TLS) id 15.0.1044.25; Sat, 7 Apr 2018 10:05:56 +0100 To: Adrien Mazarguil , Thomas Monjalon , Ferruh Yigit , CC: Xueming Li , Wenzhuo Lu , Jingjing Wu , Beilei Xing , "Qi Zhang" , Konstantin Ananyev , Nelio Laranjeiro , Yongseok Koh , Pascal Mazon , Radu Nicolau , Akhil Goyal , Ivan Malov References: <20180404150312.12304-1-adrien.mazarguil@6wind.com> <20180406131736.19145-1-adrien.mazarguil@6wind.com> <20180406131736.19145-8-adrien.mazarguil@6wind.com> From: Andrew Rybchenko Message-ID: <314cca32-b9f9-afb9-b2e5-55d9175935cb@solarflare.com> Date: Sat, 7 Apr 2018 12:05:51 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.7.0 MIME-Version: 1.0 In-Reply-To: <20180406131736.19145-8-adrien.mazarguil@6wind.com> Content-Language: en-GB X-Originating-IP: [84.52.114.114] X-ClientProxiedBy: ocex03.SolarFlarecom.com (10.20.40.36) To ukex01.SolarFlarecom.com (10.17.10.4) X-TM-AS-Product-Ver: SMEX-11.0.0.1191-8.100.1062-23768.003 X-TM-AS-Result: No--20.525700-0.000000-31 X-TM-AS-User-Approved-Sender: Yes X-TM-AS-User-Blocked-Sender: No X-MDID: 1523091967-VcS1YiWFT+85 Content-Type: text/plain; charset="utf-8"; format=flowed Content-Transfer-Encoding: 8bit X-Content-Filtered-By: Mailman/MimeDel 2.1.15 Subject: Re: [dpdk-dev] [PATCH v2 07/15] ethdev: flatten RSS configuration in flow API X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 07 Apr 2018 09:06:09 -0000 On 04/06/2018 04:25 PM, Adrien Mazarguil wrote: > Since its inception, the rte_flow RSS action has been relying in part on > external struct rte_eth_rss_conf for compatibility with the legacy RSS API. > This structure lacks parameters such as the hash algorithm to use, and more > recently, a method to tell which layer RSS should be performed on [1]. > > Given struct rte_eth_rss_conf will never be flexible enough to represent a > complete RSS configuration (e.g. RETA table), this patch supersedes it by > extending the rte_flow RSS action directly. > > A subsequent patch will add a field to use a non-default RSS hash > algorithm. To that end, a field named "types" replaces the field formerly > known as "rss_hf" and standing for "RSS hash functions" as it was > confusing. Actual RSS hash function types are defined by enum > rte_eth_hash_function. > This patch updates all PMDs and example applications accordingly. > > It breaks ABI compatibility for the following public functions: > > - rte_flow_copy() > - rte_flow_create() > - rte_flow_query() > - rte_flow_validate() > > [1] commit 676b605182a5 ("doc: announce ethdev API change for RSS > configuration") > > Signed-off-by: Adrien Mazarguil > Cc: Xueming Li > Cc: Ferruh Yigit > Cc: Thomas Monjalon > Cc: Wenzhuo Lu > Cc: Jingjing Wu > Cc: Beilei Xing > Cc: Qi Zhang > Cc: Konstantin Ananyev > Cc: Nelio Laranjeiro > Cc: Yongseok Koh > Cc: Andrew Rybchenko > Cc: Pascal Mazon > Cc: Radu Nicolau > Cc: Akhil Goyal > --- > app/test-pmd/cmdline_flow.c | 59 +++++----- > app/test-pmd/config.c | 39 +++---- > doc/guides/prog_guide/rte_flow.rst | 22 ++-- > drivers/net/e1000/e1000_ethdev.h | 13 ++- > drivers/net/e1000/igb_ethdev.c | 4 +- > drivers/net/e1000/igb_flow.c | 31 ++--- > drivers/net/e1000/igb_rxtx.c | 51 +++++++-- > drivers/net/i40e/i40e_ethdev.c | 53 +++++++-- > drivers/net/i40e/i40e_ethdev.h | 15 ++- > drivers/net/i40e/i40e_flow.c | 47 ++++---- > drivers/net/ixgbe/ixgbe_ethdev.c | 4 +- > drivers/net/ixgbe/ixgbe_ethdev.h | 13 ++- > drivers/net/ixgbe/ixgbe_flow.c | 30 ++--- > drivers/net/ixgbe/ixgbe_rxtx.c | 51 +++++++-- > drivers/net/mlx4/mlx4.c | 2 +- > drivers/net/mlx4/mlx4_flow.c | 61 +++++----- > drivers/net/mlx4/mlx4_flow.h | 2 +- > drivers/net/mlx4/mlx4_rxq.c | 2 +- > drivers/net/mlx4/mlx4_rxtx.h | 2 +- > drivers/net/mlx5/mlx5_flow.c | 193 +++++++++++++++----------------- > drivers/net/mlx5/mlx5_rxq.c | 22 ++-- > drivers/net/mlx5/mlx5_rxtx.h | 26 +++-- > drivers/net/sfc/sfc_flow.c | 21 ++-- > drivers/net/tap/tap_flow.c | 8 +- > examples/ipsec-secgw/ipsec.c | 10 +- > lib/librte_ether/rte_flow.c | 39 +++---- > lib/librte_ether/rte_flow.h | 6 +- > 27 files changed, 473 insertions(+), 353 deletions(-) <...> > diff --git a/drivers/net/sfc/sfc_flow.c b/drivers/net/sfc/sfc_flow.c > index 056405515..1a2c0299c 100644 > --- a/drivers/net/sfc/sfc_flow.c > +++ b/drivers/net/sfc/sfc_flow.c > @@ -1234,13 +1234,11 @@ sfc_flow_parse_rss(struct sfc_adapter *sa, > struct sfc_rxq *rxq; > unsigned int rxq_hw_index_min; > unsigned int rxq_hw_index_max; > - const struct rte_eth_rss_conf *rss_conf = rss->rss_conf; > - uint64_t rss_hf; > - uint8_t *rss_key = NULL; > + const uint8_t *rss_key; > struct sfc_flow_rss *sfc_rss_conf = &flow->rss_conf; > unsigned int i; > > - if (rss->num == 0) > + if (rss->queue_num == 0) > return -EINVAL; > > rxq_sw_index = sa->rxq_count - 1; > @@ -1248,7 +1246,7 @@ sfc_flow_parse_rss(struct sfc_adapter *sa, > rxq_hw_index_min = rxq->hw_index; > rxq_hw_index_max = 0; > > - for (i = 0; i < rss->num; ++i) { > + for (i = 0; i < rss->queue_num; ++i) { > rxq_sw_index = rss->queue[i]; > > if (rxq_sw_index >= sa->rxq_count) > @@ -1263,15 +1261,14 @@ sfc_flow_parse_rss(struct sfc_adapter *sa, > rxq_hw_index_max = rxq->hw_index; > } > > - rss_hf = (rss_conf != NULL) ? rss_conf->rss_hf : SFC_RSS_OFFLOADS; Here we had a fallback to default rss_hf (now types) if rss_conf is unspecified. > - if ((rss_hf & ~SFC_RSS_OFFLOADS) != 0) > + if ((rss->types & ~SFC_RSS_OFFLOADS) != 0) > return -EINVAL; > > - if (rss_conf != NULL) { > - if (rss_conf->rss_key_len != sizeof(sa->rss_key)) > + if (rss->key_len) { > + if (rss->key_len != sizeof(sa->rss_key)) > return -EINVAL; > > - rss_key = rss_conf->rss_key; > + rss_key = rss->key; > } else { > rss_key = sa->rss_key; > } > @@ -1280,11 +1277,11 @@ sfc_flow_parse_rss(struct sfc_adapter *sa, > > sfc_rss_conf->rxq_hw_index_min = rxq_hw_index_min; > sfc_rss_conf->rxq_hw_index_max = rxq_hw_index_max; > - sfc_rss_conf->rss_hash_types = sfc_rte_to_efx_hash_type(rss_hf); > + sfc_rss_conf->rss_hash_types = sfc_rte_to_efx_hash_type(rss->types); Now types go directly to mapping function and unspecified types (0) will result in 0 rss_hash_types. Of course, it is a question how to treat types==0. It is possible to say that it no RSS, but it does not make sense. So, real options are device defaults (regardless configured on device level) or device config (rx_adv.conf.rss_conf.rss_hf). I would prefer the later. Please, document the intended behaviour in rte_flow.rst. If the later is chosen, above we'll have a bug since fallback to fixed default. Just use sa->rss_hash_types as fallback. Something like: if (rss->types)     sfc_rss_conf->rss_hash_types = sfc_rte_to_efx_hash_type(rss->types); else     sfc_rss_conf->rss_hash_types =sa->rss_hash_types; > rte_memcpy(sfc_rss_conf->rss_key, rss_key, sizeof(sa->rss_key)); > > for (i = 0; i < RTE_DIM(sfc_rss_conf->rss_tbl); ++i) { > - unsigned int rxq_sw_index = rss->queue[i % rss->num]; > + unsigned int rxq_sw_index = rss->queue[i % rss->queue_num]; > struct sfc_rxq *rxq = sa->rxq_info[rxq_sw_index].rxq; > > sfc_rss_conf->rss_tbl[i] = rxq->hw_index - rxq_hw_index_min; <...>