From 321873698c7bcd32a6a453937f7624419fbca446 Mon Sep 17 00:00:00 2001 From: wpaul Date: Sun, 1 Aug 2004 22:25:12 +0000 Subject: 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. --- sys/dev/if_ndis/if_ndis.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'sys/dev/if_ndis') 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; -- cgit v1.1