Skip to content

Commit d5eddde

Browse files
emuslndavem330
authored andcommitted
ionic: check for queues before deleting
Make sure the queue structures exist before trying to delete them. This addresses a couple of error recovery issues. Signed-off-by: Shannon Nelson <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent f9c00e2 commit d5eddde

File tree

1 file changed

+38
-19
lines changed

1 file changed

+38
-19
lines changed

drivers/net/ethernet/pensando/ionic/ionic_lif.c

Lines changed: 38 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1437,41 +1437,60 @@ static void ionic_txrx_disable(struct ionic_lif *lif)
14371437
unsigned int i;
14381438
int err;
14391439

1440-
for (i = 0; i < lif->nxqs; i++) {
1441-
err = ionic_qcq_disable(lif->txqcqs[i].qcq);
1442-
if (err == -ETIMEDOUT)
1443-
break;
1444-
err = ionic_qcq_disable(lif->rxqcqs[i].qcq);
1445-
if (err == -ETIMEDOUT)
1446-
break;
1440+
if (lif->txqcqs) {
1441+
for (i = 0; i < lif->nxqs; i++) {
1442+
err = ionic_qcq_disable(lif->txqcqs[i].qcq);
1443+
if (err == -ETIMEDOUT)
1444+
break;
1445+
}
1446+
}
1447+
1448+
if (lif->rxqcqs) {
1449+
for (i = 0; i < lif->nxqs; i++) {
1450+
err = ionic_qcq_disable(lif->rxqcqs[i].qcq);
1451+
if (err == -ETIMEDOUT)
1452+
break;
1453+
}
14471454
}
14481455
}
14491456

14501457
static void ionic_txrx_deinit(struct ionic_lif *lif)
14511458
{
14521459
unsigned int i;
14531460

1454-
for (i = 0; i < lif->nxqs; i++) {
1455-
ionic_lif_qcq_deinit(lif, lif->txqcqs[i].qcq);
1456-
ionic_tx_flush(&lif->txqcqs[i].qcq->cq);
1457-
ionic_tx_empty(&lif->txqcqs[i].qcq->q);
1461+
if (lif->txqcqs) {
1462+
for (i = 0; i < lif->nxqs; i++) {
1463+
ionic_lif_qcq_deinit(lif, lif->txqcqs[i].qcq);
1464+
ionic_tx_flush(&lif->txqcqs[i].qcq->cq);
1465+
ionic_tx_empty(&lif->txqcqs[i].qcq->q);
1466+
}
1467+
}
14581468

1459-
ionic_lif_qcq_deinit(lif, lif->rxqcqs[i].qcq);
1460-
ionic_rx_flush(&lif->rxqcqs[i].qcq->cq);
1461-
ionic_rx_empty(&lif->rxqcqs[i].qcq->q);
1469+
if (lif->rxqcqs) {
1470+
for (i = 0; i < lif->nxqs; i++) {
1471+
ionic_lif_qcq_deinit(lif, lif->rxqcqs[i].qcq);
1472+
ionic_rx_flush(&lif->rxqcqs[i].qcq->cq);
1473+
ionic_rx_empty(&lif->rxqcqs[i].qcq->q);
1474+
}
14621475
}
14631476
}
14641477

14651478
static void ionic_txrx_free(struct ionic_lif *lif)
14661479
{
14671480
unsigned int i;
14681481

1469-
for (i = 0; i < lif->nxqs; i++) {
1470-
ionic_qcq_free(lif, lif->txqcqs[i].qcq);
1471-
lif->txqcqs[i].qcq = NULL;
1482+
if (lif->txqcqs) {
1483+
for (i = 0; i < lif->nxqs; i++) {
1484+
ionic_qcq_free(lif, lif->txqcqs[i].qcq);
1485+
lif->txqcqs[i].qcq = NULL;
1486+
}
1487+
}
14721488

1473-
ionic_qcq_free(lif, lif->rxqcqs[i].qcq);
1474-
lif->rxqcqs[i].qcq = NULL;
1489+
if (lif->rxqcqs) {
1490+
for (i = 0; i < lif->nxqs; i++) {
1491+
ionic_qcq_free(lif, lif->rxqcqs[i].qcq);
1492+
lif->rxqcqs[i].qcq = NULL;
1493+
}
14751494
}
14761495
}
14771496

0 commit comments

Comments
 (0)