> From: Ferruh Yigit <ferruh.yi...@intel.com> > >>> On 10/15/2020 1:41 PM, Lijun Ou wrote: > >>>> When start the testpmd, the pmd driver initializes the RSS > >>>> configuration. Generally, the recommended RSS hash key is used as > >>>> the default key in the driver. In addition, the default key is > >>>> different from the default RSS flow in testpmd without specifying > >>>> RSS hash key. So. if you do not specify the RSS key when creating > >>>> an RSS rule, the testpmd uses the default key as the default RSS > >>>> key of the RSS rule. As a result, you may mistakenly consider that > >>>> the RSS key in use is the valid default key of the NIC, actually, > >>>> the key and the valid default key of the NIC are two values. > >>>> > >>>> Consider the follow usage with testpmd: > >>>> 1. first, startup testpmd: > >>>> testpmd> show port 0 rss-hash key > >>>> RSS functions: > >>>> all ipv4-frag ipv4-other ipv6-frag ipv6-other ip RSS key: > >>>> - > 6D5A56DA255B0EC24167253D43A38FB0D0CA2BCBAE7B30B477CB2DA3803 > 0F > >>>> -20C6A42B73BBEAC01FA > >>>> 2. create a rss rule > >>>> testpmd> flow create 0 ingress pattern eth / ipv4 / udp / end > >>>> testpmd> actions rss \ > >>>> types ipv4-udp end queues end / end > >>>> > >>>> 3. show rss-hash key > >>>> testpmd> show port 0 rss-hash key > >>>> RSS functions: > >>>> all ipv4-udp udp > >>>> RSS key: > >>>> - > 74657374706D6427732064656661756C74205253532068617368206B65792C > 206F > >>>> -76657272696465 > >>>> > >>>> In order to solve the above problems, it use the NIC valid default > >>>> RSS key instead of the testpmd dummy RSS key in the flow > >>>> configuration when the RSS key is not specified in the flow rule. > >>>> If the NIC RSS key is invalid, it will use testpmd dummy RSS key as the > default key. > >>>> > >>>> Fixes: ac8d22de2394 ("ethdev: flatten RSS configuration in flow > >>>> API") > >>>> Cc: sta...@dpdk.org > >>>> > >>>> Signed-off-by: Lijun Ou <ouli...@huawei.com> > >>>> Reviewed-by: Phil Yang <phil.y...@arm.com> > >>>> --- > >>>> V4->V5: > >>>> -rewrite the commit log > >>>> -add reviewed-by > >>> > >>> Hi Lijun, > >>> > >>> There were multiple other comments, it seems they are not addressed > >>> but only updated the commit log, can you please check comments to > prev versions. > >>> > >>> Before going into the details, my question was what happens if > >>> default key not provided at all? > >>> It seems this has been already tried by Ophir [1], later reverted > >>> back [2] bringing the initial issue back. > >>> > >>> According commit, the reason of revert is to support following > command: > >>> "flow create 0 <pattern> actions rss queues 0 1 end key_len 40 / end" > >>> > >>> @Ophir, @Lijun, > >>> Can we ignore the 'key_len' if the 'key' is not supported and solve > >>> current issue as initially intended ([1])? > >>> > >> Hi, Ferruh > >> I have discussed with Phil Yang about the problem in [1]. I think > >> there may be other problems with the idea and there is no better > >> solution. and we need to remove key_len definition from rte_rss_conf > >> structure. They don't have a plan. And [1] was eventually reverted. > >> > > > > Why ignoring 'key_len' (set it to zero) when there is no 'key' > > provided doesn't work? > > > > What do you think [1] + following update, will it work? > > diff --git a/lib/librte_ethdev/rte_flow.c b/lib/librte_ethdev/rte_flow.c > index ee4f3464fe..e7789c87b3 100644 > --- a/lib/librte_ethdev/rte_flow.c > +++ b/lib/librte_ethdev/rte_flow.c > @@ -535,7 +535,7 @@ rte_flow_conv_action_conf(void *buf, const size_t > size, > }), > size > sizeof(*dst.rss) ? sizeof(*dst.rss) : > size); > off = sizeof(*dst.rss); > - if (src.rss->key_len) { > + if (src.rss->key_len && src.rss->key) { > off = RTE_ALIGN_CEIL(off, sizeof(*dst.rss->key)); > tmp = sizeof(*src.rss->key) * src.rss->key_len; > if (size >= off + tmp) >
Ferruh, your suggestion ([1] + update) looks correct. I also verified it on mlx5 PMD. Advantage: it's a generic fix for all dpdk applications using rte_flows (not just testpmd). It reduces code. With this fix the responsibility of handling key==NULL and/or len==0 is moved to the PMDs (which is good). With regard to Lijun patch - I liked the approach of overriding the default testpmd key with the default PMD key. But it only addresses testpmd. More code was added. It seems OK to call rte_eth_dev_rss_hash_conf_get() as part of parsing RSS, but it would feel more confident if we could confirm it for all the PMDs (by testing) or at least review the PMDs rss_hash_conf_get() implementations. > >> Thanks > >> Lijun Ou > >>>