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: fefed3d1e6
("enic: new driver")
Signed-off-by: John Daley <johndale@cisco.com>
Reviewed-by: Nelson Escobar <neescoba@cisco.com>
This commit is contained in:
parent
0473ffe338
commit
954828b8be
@ -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) {
|
||||
|
Loading…
Reference in New Issue
Block a user