diff options
author | Przemyslaw Lewandowski <przemyslawx.lewandowski@intel.com> | 2023-01-24 23:41:15 +0000 |
---|---|---|
committer | Eric Joyner <erj@FreeBSD.org> | 2023-02-07 00:24:10 +0000 |
commit | c907f13af0e66ea7f3112a06716d4ed6e04da258 (patch) | |
tree | 680b1f2c2f63e21de51fdd5ebe5b839247e4659f | |
parent | b4e0be6df772a3bd5f235e2a840ff4fdbe57e2d1 (diff) | |
download | src-c907f13af0e66ea7f3112a06716d4ed6e04da258.tar.gz src-c907f13af0e66ea7f3112a06716d4ed6e04da258.zip |
iflib: Add null check to iflib_stop()
Ever since gtaskqueue_drain() was added to iflib_stop(), a kernel panic
occurs when the ice(4) driver is in recovery mode. Queues are not
initialized in this mode, so gt_taskqueue is not initialized, and
gtaskqueue_drain() will panic.
Fix this by only doing a drain if an RX queue's gt_taskqueue is
initialized.
Signed-off-by: Eric Joyner <erj@FreeBSD.org>
Reviewed by: erj@
MFC after: 1 week
Sponsored by: Intel Corporation
Differential Revision: https://reviews.freebsd.org/D37892
(cherry picked from commit 9147969bc277b389a62373c6a5050a2ebfd39071)
-rw-r--r-- | sys/net/iflib.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/sys/net/iflib.c b/sys/net/iflib.c index 869985857e4b..3690be2b2a77 100644 --- a/sys/net/iflib.c +++ b/sys/net/iflib.c @@ -2692,8 +2692,9 @@ iflib_stop(if_ctx_t ctx) bzero((void *)di->idi_vaddr, di->idi_size); } for (i = 0; i < scctx->isc_nrxqsets; i++, rxq++) { - gtaskqueue_drain(rxq->ifr_task.gt_taskqueue, - &rxq->ifr_task.gt_task); + if (rxq->ifr_task.gt_taskqueue != NULL) + gtaskqueue_drain(rxq->ifr_task.gt_taskqueue, + &rxq->ifr_task.gt_task); rxq->ifr_cq_cidx = 0; for (j = 0, di = rxq->ifr_ifdi; j < sctx->isc_nrxqs; j++, di++) |