diff options
Diffstat (limited to 'sys/dev/if_ndis/if_ndis.c')
-rw-r--r-- | sys/dev/if_ndis/if_ndis.c | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/sys/dev/if_ndis/if_ndis.c b/sys/dev/if_ndis/if_ndis.c index 415e262..a3a9806 100644 --- a/sys/dev/if_ndis/if_ndis.c +++ b/sys/dev/if_ndis/if_ndis.c @@ -240,6 +240,11 @@ ndis_attach(dev) sc->ndis_dev = dev; sc->ndis_mtx = mtx_pool_alloc(ndis_mtxpool); + sc->ndis_intrmtx = mtx_pool_alloc(ndis_mtxpool); + TASK_INIT(&sc->ndis_intrtask, 0, ndis_intrtask, sc); + TASK_INIT(&sc->ndis_ticktask, 0, ndis_ticktask, sc); + TASK_INIT(&sc->ndis_starttask, 0, ndis_starttask, sc); + /* * Map control/status registers. @@ -332,11 +337,6 @@ ndis_attach(dev) goto fail; } - sc->ndis_intrmtx = mtx_pool_alloc(ndis_mtxpool); - TASK_INIT(&sc->ndis_intrtask, 0, ndis_intrtask, sc); - TASK_INIT(&sc->ndis_ticktask, 0, ndis_ticktask, sc); - TASK_INIT(&sc->ndis_starttask, 0, ndis_starttask, sc); - /* * Allocate the parent bus DMA tag appropriate for PCI. */ @@ -928,7 +928,8 @@ ndis_intr(arg) sc = arg; ifp = &sc->arpcom.ac_if; - if (!(ifp->if_flags & IFF_UP)) + if (!(ifp->if_flags & IFF_UP) && + sc->ndis_block.nmb_miniportadapterctx == NULL) return; mtx_lock(sc->ndis_intrmtx); @@ -940,7 +941,7 @@ ndis_intr(arg) } mtx_unlock(sc->ndis_intrmtx); - if (is_our_intr || call_isr) + if ((is_our_intr || call_isr) && (ifp->if_flags & IFF_UP)) taskqueue_enqueue(taskqueue_swi, &sc->ndis_intrtask); return; |