summaryrefslogtreecommitdiffstats
path: root/sys/dev/if_ndis
diff options
context:
space:
mode:
authorwpaul <wpaul@FreeBSD.org>2004-08-01 22:25:12 +0000
committerwpaul <wpaul@FreeBSD.org>2004-08-01 22:25:12 +0000
commit321873698c7bcd32a6a453937f7624419fbca446 (patch)
tree2894499d9a5440f8ba61225e296d709c27ef43a8 /sys/dev/if_ndis
parent237c75e898625c7229b8d6db9c909d719aea8ef3 (diff)
downloadFreeBSD-src-321873698c7bcd32a6a453937f7624419fbca446.zip
FreeBSD-src-321873698c7bcd32a6a453937f7624419fbca446.tar.gz
The watchdog callout executes with the (non-sleepable) ifnet lock held
now, but it's possible for ndis_reset_nic() to sleep (sometimes the MiniportReset() method returns NDIS_STATUS_PENDING and we have to wait for completion). To get around this, execute the ndis_reset_nic() routine in the NDIS_TASKQUEUE thread.
Diffstat (limited to 'sys/dev/if_ndis')
-rw-r--r--sys/dev/if_ndis/if_ndis.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/sys/dev/if_ndis/if_ndis.c b/sys/dev/if_ndis/if_ndis.c
index 4a3fd96..ae0821d 100644
--- a/sys/dev/if_ndis/if_ndis.c
+++ b/sys/dev/if_ndis/if_ndis.c
@@ -2100,7 +2100,7 @@ ndis_watchdog(ifp)
device_printf(sc->ndis_dev, "watchdog timeout\n");
NDIS_UNLOCK(sc);
- ndis_reset_nic(sc);
+ ndis_sched((void(*)(void *))ndis_reset_nic, sc, NDIS_TASKQUEUE);
ndis_sched(ndis_starttask, ifp, NDIS_TASKQUEUE);
return;
OpenPOWER on IntegriCloud