diff options
author | wpaul <wpaul@FreeBSD.org> | 2004-08-01 22:25:12 +0000 |
---|---|---|
committer | wpaul <wpaul@FreeBSD.org> | 2004-08-01 22:25:12 +0000 |
commit | 321873698c7bcd32a6a453937f7624419fbca446 (patch) | |
tree | 2894499d9a5440f8ba61225e296d709c27ef43a8 /sys/dev | |
parent | 237c75e898625c7229b8d6db9c909d719aea8ef3 (diff) | |
download | FreeBSD-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')
-rw-r--r-- | sys/dev/if_ndis/if_ndis.c | 2 |
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; |