[dpdk-dev] enic: fix issues when using Rx scatter with multiple RQs
Commit Message
The Rx scatter patch failed to make a few changes and resulted
in problems when using multiple RQs since the wrong RQ or CQ
was being used.
Fixes: 14a261bf0520 ("enic: add scattered Rx support")
Signed-off-by: Nelson Escobar <neescoba@cisco.com>
Reviewed-by: John Daley <johndale@cisco.com>
---
drivers/net/enic/enic.h | 2 +-
drivers/net/enic/enic_main.c | 10 ++++++----
2 files changed, 7 insertions(+), 5 deletions(-)
Comments
On Fri, Jun 24, 2016 at 03:39:57PM -0700, Nelson Escobar wrote:
> The Rx scatter patch failed to make a few changes and resulted
> in problems when using multiple RQs since the wrong RQ or CQ
> was being used.
>
I think you might need to expand on what the "few changes" are.
Also, please expand out the terms RQ and CQ are.
Thanks,
/Bruce
> Fixes: 14a261bf0520 ("enic: add scattered Rx support")
>
> Signed-off-by: Nelson Escobar <neescoba@cisco.com>
> Reviewed-by: John Daley <johndale@cisco.com>
> ---
> drivers/net/enic/enic.h | 2 +-
> drivers/net/enic/enic_main.c | 10 ++++++----
> 2 files changed, 7 insertions(+), 5 deletions(-)
>
> diff --git a/drivers/net/enic/enic.h b/drivers/net/enic/enic.h
> index ed5f18d..15b1d45 100644
> --- a/drivers/net/enic/enic.h
> +++ b/drivers/net/enic/enic.h
> @@ -174,7 +174,7 @@ static inline unsigned int enic_vnic_rq_count(struct enic *enic)
>
> static inline unsigned int enic_cq_rq(__rte_unused struct enic *enic, unsigned int rq)
> {
> - return rq;
> + return rq / 2;
This looks like it might need a comment explaning why you divide by 2.
@@ -174,7 +174,7 @@ static inline unsigned int enic_vnic_rq_count(struct enic *enic)
static inline unsigned int enic_cq_rq(__rte_unused struct enic *enic, unsigned int rq)
{
- return rq;
+ return rq / 2;
}
static inline unsigned int enic_cq_wq(struct enic *enic, unsigned int wq)
@@ -238,19 +238,20 @@ void enic_init_vnic_resources(struct enic *enic)
struct vnic_rq *data_rq;
for (index = 0; index < enic->rq_count; index++) {
+ cq_idx = enic_cq_rq(enic, enic_sop_rq(index));
+
vnic_rq_init(&enic->rq[enic_sop_rq(index)],
- enic_cq_rq(enic, index),
+ cq_idx,
error_interrupt_enable,
error_interrupt_offset);
data_rq = &enic->rq[enic_data_rq(index)];
if (data_rq->in_use)
vnic_rq_init(data_rq,
- enic_cq_rq(enic, index),
+ cq_idx,
error_interrupt_enable,
error_interrupt_offset);
- cq_idx = enic_cq_rq(enic, index);
vnic_cq_init(&enic->cq[cq_idx],
0 /* flow_control_enable */,
1 /* color_enable */,
@@ -899,7 +900,8 @@ static int enic_set_rsscpu(struct enic *enic, u8 rss_hash_bits)
return -ENOMEM;
for (i = 0; i < (1 << rss_hash_bits); i++)
- (*rss_cpu_buf_va).cpu[i/4].b[i%4] = i % enic->rq_count;
+ (*rss_cpu_buf_va).cpu[i / 4].b[i % 4] =
+ enic_sop_rq(i % enic->rq_count);
err = enic_set_rss_cpu(enic,
rss_cpu_buf_pa,