summaryrefslogtreecommitdiffstats
path: root/sys/dev/if_ndis/if_ndis.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/dev/if_ndis/if_ndis.c')
-rw-r--r--sys/dev/if_ndis/if_ndis.c15
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;
OpenPOWER on IntegriCloud