From 954828b8be39f3b77a1869f0371bc9d759b075de Mon Sep 17 00:00:00 2001 From: John Daley Date: Sun, 10 Jul 2016 14:15:30 -0700 Subject: [PATCH] net/enic: fix crash when changing number of queues The check that all Tx and Rx queues were set up was not adequate when reconfiguring with a different number of queues. Only the number of completion queues (CQs) was being used to make the determination, but the CQ array is shared between the underlying Rx and Tx queues. Check that the internal Rx, Tx and CQs are all set up before completing port configuration. Fixes: fefed3d1e62c ("enic: new driver") Signed-off-by: John Daley Reviewed-by: Nelson Escobar --- drivers/net/enic/enic_ethdev.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/drivers/net/enic/enic_ethdev.c b/drivers/net/enic/enic_ethdev.c index 3c87b49ead..21ac48f4b2 100644 --- a/drivers/net/enic/enic_ethdev.c +++ b/drivers/net/enic/enic_ethdev.c @@ -142,9 +142,21 @@ static int enicpmd_dev_setup_intr(struct enic *enic) if (!enic->cq[index].ctrl) break; } - if (enic->cq_count != index) return 0; + for (index = 0; index < enic->wq_count; index++) { + if (!enic->wq[index].ctrl) + break; + } + if (enic->wq_count != index) + return 0; + /* check start of packet (SOP) RQs only in case scatter is disabled. */ + for (index = 0; index < enic->rq_count; index++) { + if (!enic->rq[enic_sop_rq(index)].ctrl) + break; + } + if (enic->rq_count != index) + return 0; ret = enic_alloc_intr_resources(enic); if (ret) { -- 2.20.1