[dpdk-dev] net/qede: fix L2-handles used for RSS hash update

Message ID 1527873381-23910-1-git-send-email-rasesh.mody@cavium.com (mailing list archive)
State Superseded, archived
Delegated to: Ferruh Yigit
Headers

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/Intel-compilation success Compilation OK

Commit Message

Mody, Rasesh June 1, 2018, 5:16 p.m. UTC
  Fix fast path array index which is used for passing L2 handles to RSS
indirection table. Currently, it is using the local copy of indirection
table. When the RX queue configuration changes the local copy becomes
invalid.

Fixes: 69d7ba88f1a1 ("net/qede/base: use L2-handles for RSS configuration")
Cc: stable@dpdk.org

Signed-off-by: Rasesh Mody <rasesh.mody@cavium.com>
---
 drivers/net/qede/qede_ethdev.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
  

Comments

Kevin Traynor June 5, 2018, 1:39 p.m. UTC | #1
On 06/01/2018 06:16 PM, Rasesh Mody wrote:
> Fix fast path array index which is used for passing L2 handles to RSS
> indirection table. Currently, it is using the local copy of indirection
> table. When the RX queue configuration changes the local copy becomes
> invalid.
> 
> Fixes: 69d7ba88f1a1 ("net/qede/base: use L2-handles for RSS configuration")
> Cc: stable@dpdk.org
> 
> Signed-off-by: Rasesh Mody <rasesh.mody@cavium.com>
> ---
>  drivers/net/qede/qede_ethdev.c |    2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/net/qede/qede_ethdev.c b/drivers/net/qede/qede_ethdev.c
> index 3206cc6..6e9e76d 100644
> --- a/drivers/net/qede/qede_ethdev.c
> +++ b/drivers/net/qede/qede_ethdev.c
> @@ -2210,7 +2210,7 @@ int qede_rss_hash_update(struct rte_eth_dev *eth_dev,
>  	vport_update_params.vport_id = 0;
>  	/* pass the L2 handles instead of qids */
>  	for (i = 0 ; i < ECORE_RSS_IND_TABLE_SIZE ; i++) {
> -		idx = qdev->rss_ind_table[i];
> +		idx = ECORE_RSS_IND_TABLE_SIZE % QEDE_RSS_COUNT(qdev);
>  		rss_params.rss_ind_table[i] = qdev->fp_array[idx].rxq->handle;

hi, idx never changes in the loop, so the same rxq handle is in every
rss_ind_table entry - is it right?

>  	}
>  	vport_update_params.rss_params = &rss_params;
>
  
Mody, Rasesh June 5, 2018, 4:16 p.m. UTC | #2
> From: Kevin Traynor [mailto:ktraynor@redhat.com]

> Sent: Tuesday, June 05, 2018 6:40 AM

> 

> On 06/01/2018 06:16 PM, Rasesh Mody wrote:

> > Fix fast path array index which is used for passing L2 handles to RSS

> > indirection table. Currently, it is using the local copy of

> > indirection table. When the RX queue configuration changes the local

> > copy becomes invalid.

> >

> > Fixes: 69d7ba88f1a1 ("net/qede/base: use L2-handles for RSS

> > configuration")

> > Cc: stable@dpdk.org

> >

> > Signed-off-by: Rasesh Mody <rasesh.mody@cavium.com>

> > ---

> >  drivers/net/qede/qede_ethdev.c |    2 +-

> >  1 file changed, 1 insertion(+), 1 deletion(-)

> >

> > diff --git a/drivers/net/qede/qede_ethdev.c

> > b/drivers/net/qede/qede_ethdev.c index 3206cc6..6e9e76d 100644

> > --- a/drivers/net/qede/qede_ethdev.c

> > +++ b/drivers/net/qede/qede_ethdev.c

> > @@ -2210,7 +2210,7 @@ int qede_rss_hash_update(struct rte_eth_dev

> *eth_dev,

> >  	vport_update_params.vport_id = 0;

> >  	/* pass the L2 handles instead of qids */

> >  	for (i = 0 ; i < ECORE_RSS_IND_TABLE_SIZE ; i++) {

> > -		idx = qdev->rss_ind_table[i];

> > +		idx = ECORE_RSS_IND_TABLE_SIZE %

> QEDE_RSS_COUNT(qdev);

> >  		rss_params.rss_ind_table[i] = qdev->fp_array[idx].rxq-

> >handle;

> 

> hi, idx never changes in the loop, so the same rxq handle is in every

> rss_ind_table entry - is it right?


The idx depends on number of RXQs. If a single RXQ is configured then idx does not change in the loop,  in which case same RXQ handle is in every entry.

Thanks!
-Rasesh
> 

> >  	}

> >  	vport_update_params.rss_params = &rss_params;

> >
  
Kevin Traynor June 5, 2018, 4:41 p.m. UTC | #3
On 06/05/2018 05:16 PM, Mody, Rasesh wrote:
>> From: Kevin Traynor [mailto:ktraynor@redhat.com]
>> Sent: Tuesday, June 05, 2018 6:40 AM
>>
>> On 06/01/2018 06:16 PM, Rasesh Mody wrote:
>>> Fix fast path array index which is used for passing L2 handles to RSS
>>> indirection table. Currently, it is using the local copy of
>>> indirection table. When the RX queue configuration changes the local
>>> copy becomes invalid.
>>>
>>> Fixes: 69d7ba88f1a1 ("net/qede/base: use L2-handles for RSS
>>> configuration")
>>> Cc: stable@dpdk.org
>>>
>>> Signed-off-by: Rasesh Mody <rasesh.mody@cavium.com>
>>> ---
>>>  drivers/net/qede/qede_ethdev.c |    2 +-
>>>  1 file changed, 1 insertion(+), 1 deletion(-)
>>>
>>> diff --git a/drivers/net/qede/qede_ethdev.c
>>> b/drivers/net/qede/qede_ethdev.c index 3206cc6..6e9e76d 100644
>>> --- a/drivers/net/qede/qede_ethdev.c
>>> +++ b/drivers/net/qede/qede_ethdev.c
>>> @@ -2210,7 +2210,7 @@ int qede_rss_hash_update(struct rte_eth_dev
>> *eth_dev,
>>>  	vport_update_params.vport_id = 0;
>>>  	/* pass the L2 handles instead of qids */
>>>  	for (i = 0 ; i < ECORE_RSS_IND_TABLE_SIZE ; i++) {
>>> -		idx = qdev->rss_ind_table[i];
>>> +		idx = ECORE_RSS_IND_TABLE_SIZE %
>> QEDE_RSS_COUNT(qdev);
>>>  		rss_params.rss_ind_table[i] = qdev->fp_array[idx].rxq-
>>> handle;
>>
>> hi, idx never changes in the loop, so the same rxq handle is in every
>> rss_ind_table entry - is it right?
> 
> The idx depends on number of RXQs. If a single RXQ is configured then idx does not change in the loop,  in which case same RXQ handle is in every entry.

The value depends on number of Rxqs, but that value will not change for
each of 128 iterations *regardless* of the number of Rxq's configured
(assuming that will be static during the loop). Perhaps that's what you
want, but it looks odd to be calculating the idx in each loop iteration
when it won't change.

idx = ECORE_RSS_IND_TABLE_SIZE % QEDE_RSS_COUNT(qdev)

=>

idx = 128 % qdev->num_rx_queues

> 
> Thanks!
> -Rasesh
>>
>>>  	}
>>>  	vport_update_params.rss_params = &rss_params;
>>>
>
  
Mody, Rasesh June 5, 2018, 5:14 p.m. UTC | #4
> From: Kevin Traynor [mailto:ktraynor@redhat.com]

> Sent: Tuesday, June 05, 2018 9:42 AM

> 

> On 06/05/2018 05:16 PM, Mody, Rasesh wrote:

> >> From: Kevin Traynor [mailto:ktraynor@redhat.com]

> >> Sent: Tuesday, June 05, 2018 6:40 AM

> >>

> >> On 06/01/2018 06:16 PM, Rasesh Mody wrote:

> >>> Fix fast path array index which is used for passing L2 handles to

> >>> RSS indirection table. Currently, it is using the local copy of

> >>> indirection table. When the RX queue configuration changes the local

> >>> copy becomes invalid.

> >>>

> >>> Fixes: 69d7ba88f1a1 ("net/qede/base: use L2-handles for RSS

> >>> configuration")

> >>> Cc: stable@dpdk.org

> >>>

> >>> Signed-off-by: Rasesh Mody <rasesh.mody@cavium.com>

> >>> ---

> >>>  drivers/net/qede/qede_ethdev.c |    2 +-

> >>>  1 file changed, 1 insertion(+), 1 deletion(-)

> >>>

> >>> diff --git a/drivers/net/qede/qede_ethdev.c

> >>> b/drivers/net/qede/qede_ethdev.c index 3206cc6..6e9e76d 100644

> >>> --- a/drivers/net/qede/qede_ethdev.c

> >>> +++ b/drivers/net/qede/qede_ethdev.c

> >>> @@ -2210,7 +2210,7 @@ int qede_rss_hash_update(struct rte_eth_dev

> >> *eth_dev,

> >>>  	vport_update_params.vport_id = 0;

> >>>  	/* pass the L2 handles instead of qids */

> >>>  	for (i = 0 ; i < ECORE_RSS_IND_TABLE_SIZE ; i++) {

> >>> -		idx = qdev->rss_ind_table[i];

> >>> +		idx = ECORE_RSS_IND_TABLE_SIZE %

> >> QEDE_RSS_COUNT(qdev);

> >>>  		rss_params.rss_ind_table[i] = qdev->fp_array[idx].rxq-

> handle;

> >>

> >> hi, idx never changes in the loop, so the same rxq handle is in every

> >> rss_ind_table entry - is it right?

> >

> > The idx depends on number of RXQs. If a single RXQ is configured then idx

> does not change in the loop,  in which case same RXQ handle is in every

> entry.

> 

> The value depends on number of Rxqs, but that value will not change for

> each of 128 iterations *regardless* of the number of Rxq's configured

> (assuming that will be static during the loop). Perhaps that's what you want,

> but it looks odd to be calculating the idx in each loop iteration when it won't

> change.


I see what you are saying, will send a revised patch, thanks.

> 

> idx = ECORE_RSS_IND_TABLE_SIZE % QEDE_RSS_COUNT(qdev)

> 

> =>

> 

> idx = 128 % qdev->num_rx_queues

> 

> >

> > Thanks!

> > -Rasesh

> >>

> >>>  	}

> >>>  	vport_update_params.rss_params = &rss_params;

> >>>

> >
  

Patch

diff --git a/drivers/net/qede/qede_ethdev.c b/drivers/net/qede/qede_ethdev.c
index 3206cc6..6e9e76d 100644
--- a/drivers/net/qede/qede_ethdev.c
+++ b/drivers/net/qede/qede_ethdev.c
@@ -2210,7 +2210,7 @@  int qede_rss_hash_update(struct rte_eth_dev *eth_dev,
 	vport_update_params.vport_id = 0;
 	/* pass the L2 handles instead of qids */
 	for (i = 0 ; i < ECORE_RSS_IND_TABLE_SIZE ; i++) {
-		idx = qdev->rss_ind_table[i];
+		idx = ECORE_RSS_IND_TABLE_SIZE % QEDE_RSS_COUNT(qdev);
 		rss_params.rss_ind_table[i] = qdev->fp_array[idx].rxq->handle;
 	}
 	vport_update_params.rss_params = &rss_params;