diff options
author | Coleman Kane <cokane@FreeBSD.org> | 2008-04-17 22:01:38 +0000 |
---|---|---|
committer | Coleman Kane <cokane@FreeBSD.org> | 2008-04-17 22:01:38 +0000 |
commit | aba7c5b84b764f7dcb96c651735aa1bb10348d34 (patch) | |
tree | edcf701c18b70a15c8e9398fdd259f54e1fea1a0 /sys | |
parent | 8501a69cc940a7d32d9299da26baf0b1863e0fa9 (diff) | |
download | src-aba7c5b84b764f7dcb96c651735aa1bb10348d34.tar.gz src-aba7c5b84b764f7dcb96c651735aa1bb10348d34.zip |
Change the timeout(9) usage in if_ndis to a callout(9) implementation,
as the former is becoming deprecated and exhibits some extraneous
Giant-locking. The new callout(9) is declared MPSAFE, so it may
improve concurrency.
Tested by: matteo
Silence from: wpaul
MFC after: 1 month
Notes
Notes:
svn path=/head/; revision=178286
Diffstat (limited to 'sys')
-rw-r--r-- | sys/dev/if_ndis/if_ndis.c | 15 | ||||
-rw-r--r-- | sys/dev/if_ndis/if_ndisvar.h | 2 |
2 files changed, 7 insertions, 10 deletions
diff --git a/sys/dev/if_ndis/if_ndis.c b/sys/dev/if_ndis/if_ndis.c index 9a9efa7580b8..9658ee723901 100644 --- a/sys/dev/if_ndis/if_ndis.c +++ b/sys/dev/if_ndis/if_ndis.c @@ -1582,17 +1582,13 @@ ndis_tick(xsc) { struct ndis_softc *sc; - mtx_unlock(&Giant); - sc = xsc; IoQueueWorkItem(sc->ndis_tickitem, (io_workitem_func)ndis_ticktask_wrap, WORKQUEUE_CRITICAL, sc); - sc->ndis_stat_ch = timeout(ndis_tick, sc, hz * - sc->ndis_block->nmb_checkforhangsecs); - - mtx_lock(&Giant); + callout_reset(&sc->ndis_stat_callout, + hz * sc->ndis_block->nmb_checkforhangsecs, ndis_tick, sc); return; } @@ -1939,8 +1935,9 @@ ndis_init(xsc) if (sc->ndis_block->nmb_checkforhangsecs == 0) sc->ndis_block->nmb_checkforhangsecs = 3; - sc->ndis_stat_ch = timeout(ndis_tick, sc, - hz * sc->ndis_block->nmb_checkforhangsecs); + callout_init(&sc->ndis_stat_callout, 1); + callout_reset(&sc->ndis_stat_callout, + hz * sc->ndis_block->nmb_checkforhangsecs, ndis_tick, sc); return; } @@ -3153,7 +3150,7 @@ ndis_stop(sc) ieee80211_new_state(ic, IEEE80211_S_INIT, -1); ifp = sc->ifp; - untimeout(ndis_tick, sc, sc->ndis_stat_ch); + callout_drain(&sc->ndis_stat_callout); NDIS_LOCK(sc); ifp->if_timer = 0; diff --git a/sys/dev/if_ndis/if_ndisvar.h b/sys/dev/if_ndis/if_ndisvar.h index 578d04f74278..cdbf543ec052 100644 --- a/sys/dev/if_ndis/if_ndisvar.h +++ b/sys/dev/if_ndis/if_ndisvar.h @@ -129,7 +129,7 @@ struct ndis_softc { ndis_miniport_block *ndis_block; ndis_miniport_characteristics *ndis_chars; interface_type ndis_type; - struct callout_handle ndis_stat_ch; + struct callout ndis_stat_callout; int ndis_maxpkts; ndis_oid *ndis_oids; int ndis_oidcnt; |