``ticks'' is in my opinion a really badly named global variable. But we all know that finding names is hard ;)
Since its popularity seems to be really high lately, I'd suggest to rename it. I chose ``hcticks'' for "hardclock ticks". I believe this would help auditing the possible existing and/or future conditions leading to overflow. As a bonus this diff removes all the "extern hcticks;" declaration and include <sys/kernel.h> instead. Opinions? PS: I missed 4 conversions in my previous diff, can you find them? diff --git sys/dev/atapiscsi/atapiscsi.c sys/dev/atapiscsi/atapiscsi.c index df5c45b..be164ea 100644 --- sys/dev/atapiscsi/atapiscsi.c +++ sys/dev/atapiscsi/atapiscsi.c @@ -613,7 +613,6 @@ wdc_atapi_the_machine(struct channel_softc *chp, struct wdc_xfer *xfer, enum atapi_context ctxt) { int idx = 0; - extern int ticks; int timeout_delay = hz / 10; if (xfer->c_flags & C_POLL) { @@ -637,7 +636,7 @@ wdc_atapi_the_machine(struct channel_softc *chp, struct wdc_xfer *xfer, struct atapi_return_args retargs = ARGS_INIT; (xfer->next)(chp, xfer, - xfer->endticks && (ticks - xfer->endticks >= 0), + xfer->endticks && (hcticks - xfer->endticks >= 0), &retargs); if (retargs.timeout != -1) @@ -646,7 +645,7 @@ wdc_atapi_the_machine(struct channel_softc *chp, struct wdc_xfer *xfer, * can be just microseconds before the tick changes. */ xfer->endticks = - max((retargs.timeout * hz) / 1000, 1) + 1 + ticks; + max((retargs.timeout * hz) / 1000, 1) + 1 + hcticks; if (xfer->next == NULL) { if (xfer->c_flags & C_POLL_MACHINE) @@ -661,7 +660,7 @@ wdc_atapi_the_machine(struct channel_softc *chp, struct wdc_xfer *xfer, if (retargs.expect_irq) { int timeout_period; chp->ch_flags |= WDCF_IRQ_WAIT; - timeout_period = xfer->endticks - ticks; + timeout_period = xfer->endticks - hcticks; if (timeout_period < 1) timeout_period = 1; timeout_add(&chp->ch_timo, timeout_period); diff --git sys/dev/ic/ar5008.c sys/dev/ic/ar5008.c index d3ad6c9..fa1c1e9 100644 --- sys/dev/ic/ar5008.c +++ sys/dev/ic/ar5008.c @@ -2381,8 +2381,7 @@ ar5008_hw_init(struct athn_softc *sc, struct ieee80211_channel *c, ar5008_init_chains(sc); if (sc->flags & ATHN_FLAG_OLPC) { - extern int ticks; - sc->olpc_ticks = ticks; + sc->olpc_ticks = hcticks; ops->olpc_init(sc); } diff --git sys/dev/ic/athn.c sys/dev/ic/athn.c index 03460ef..df2b9b1 100644 --- sys/dev/ic/athn.c +++ sys/dev/ic/athn.c @@ -1218,7 +1218,6 @@ athn_iter_func(void *arg, struct ieee80211_node *ni) void athn_calib_to(void *arg) { - extern int ticks; struct athn_softc *sc = arg; struct athn_ops *ops = &sc->ops; struct ieee80211com *ic = &sc->sc_ic; @@ -1229,8 +1228,8 @@ athn_calib_to(void *arg) /* Do periodic (every 4 minutes) PA calibration. */ if (AR_SREV_9285_11_OR_LATER(sc) && !AR_SREV_9380_10_OR_LATER(sc) && - (ticks - (sc->pa_calib_ticks + 240 * hz)) >= 0) { - sc->pa_calib_ticks = ticks; + (hcticks - (sc->pa_calib_ticks + 240 * hz)) >= 0) { + sc->pa_calib_ticks = hcticks; if (AR_SREV_9271(sc)) ar9271_pa_calib(sc); else @@ -1239,8 +1238,8 @@ athn_calib_to(void *arg) /* Do periodic (every 30 seconds) temperature compensation. */ if ((sc->flags & ATHN_FLAG_OLPC) && - ticks >= sc->olpc_ticks + 30 * hz) { - sc->olpc_ticks = ticks; + hcticks >= sc->olpc_ticks + 30 * hz) { + sc->olpc_ticks = hcticks; ops->olpc_temp_compensation(sc); } @@ -1279,8 +1278,7 @@ athn_init_calib(struct athn_softc *sc, struct ieee80211_channel *c, if (!AR_SREV_9380_10_OR_LATER(sc)) { /* Do PA calibration. */ if (AR_SREV_9285_11_OR_LATER(sc)) { - extern int ticks; - sc->pa_calib_ticks = ticks; + sc->pa_calib_ticks = hcticks; if (AR_SREV_9271(sc)) ar9271_pa_calib(sc); else diff --git sys/dev/ic/bwi.c sys/dev/ic/bwi.c index d612db3..7514e29 100644 --- sys/dev/ic/bwi.c +++ sys/dev/ic/bwi.c @@ -97,8 +97,6 @@ int bwi_debug = 1; #define __unused __attribute__((__unused__)) -extern int ticks; - /* XXX end porting goop */ /* MAC */ @@ -6509,11 +6507,11 @@ bwi_led_event(struct bwi_softc *sc, int event) if (event == BWI_LED_EVENT_POLL) { if ((led->l_flags & BWI_LED_F_POLLABLE) == 0) return; - if (ticks - sc->sc_led_ticks < sc->sc_led_idle) + if (hcticks - sc->sc_led_ticks < sc->sc_led_idle) return; } - sc->sc_led_ticks = ticks; + sc->sc_led_ticks = hcticks; if (sc->sc_led_blinking) return; diff --git sys/dev/pci/drm/drmP.h sys/dev/pci/drm/drmP.h index 4cff951..206c6a0 100644 --- sys/dev/pci/drm/drmP.h +++ sys/dev/pci/drm/drmP.h @@ -92,8 +92,6 @@ #define DRM_WAKEUP(x) wakeup(x) -extern int ticks; - #define drm_msleep(x) mdelay(x) extern struct cfdriver drm_cd; diff --git sys/dev/pci/drm/drm_linux.h sys/dev/pci/drm/drm_linux.h index 0e651ba..90e5975 100644 --- sys/dev/pci/drm/drm_linux.h +++ sys/dev/pci/drm/drm_linux.h @@ -17,6 +17,7 @@ #include <sys/atomic.h> #include <sys/task.h> +#include <sys/kernel.h> typedef int irqreturn_t; #define IRQ_NONE 0 @@ -321,9 +322,9 @@ do { \ atomic_inc_int(&(wq).count); \ sleep_setup(&sls, &wq, 0, "drmwet"); \ sleep_setup_timeout(&sls, ret); \ - deadline = ticks + ret; \ + deadline = hcticks + ret; \ sleep_finish(&sls, !(condition)); \ - ret = deadline - ticks; \ + ret = deadline - hcticks; \ __error = sleep_finish_timeout(&sls); \ atomic_dec_int(&(wq).count); \ if (ret < 0 || __error == EWOULDBLOCK) \ @@ -351,9 +352,9 @@ do { \ sleep_setup(&sls, &wq, PCATCH, "drmweti"); \ sleep_setup_timeout(&sls, ret); \ sleep_setup_signal(&sls, PCATCH); \ - deadline = ticks + ret; \ + deadline = hcticks + ret; \ sleep_finish(&sls, !(condition)); \ - ret = deadline - ticks; \ + ret = deadline - hcticks; \ __error1 = sleep_finish_timeout(&sls); \ __error = sleep_finish_signal(&sls); \ atomic_dec_int(&(wq).count); \ @@ -565,8 +566,7 @@ timespec_sub(struct timespec t1, struct timespec t2) #define time_in_range(x, min, max) ((x) >= (min) && (x) <= (max)) -extern int ticks; -#define jiffies ticks +#define jiffies hcticks #undef HZ #define HZ hz diff --git sys/dev/usb/if_cdcef.c sys/dev/usb/if_cdcef.c index 5496d9c..8b8d195 100644 --- sys/dev/usb/if_cdcef.c +++ sys/dev/usb/if_cdcef.c @@ -25,6 +25,7 @@ #include <sys/param.h> +#include <sys/kernel.h> #include <sys/device.h> #include <sys/socket.h> #include <sys/systm.h> @@ -121,8 +122,6 @@ struct usbf_function_methods cdcef_methods = { #define DEVNAME(sc) ((sc)->sc_dev.bdev.dv_xname) -extern int ticks; - /* * USB function match/attach/detach */ @@ -239,7 +238,7 @@ cdcef_attach(struct device *parent, struct device *self, void *aux) macaddr_hi = htons(0x2acb); bcopy(&macaddr_hi, &sc->sc_arpcom.ac_enaddr[0], sizeof(u_int16_t)); - bcopy(&ticks, &sc->sc_arpcom.ac_enaddr[2], sizeof(u_int32_t)); + bcopy(&hcticks, &sc->sc_arpcom.ac_enaddr[2], sizeof(u_int32_t)); sc->sc_arpcom.ac_enaddr[5] = (u_int8_t)(sc->sc_dev.bdev.dv_unit); printf(": address %s\n", ether_sprintf(sc->sc_arpcom.ac_enaddr)); diff --git sys/dev/usb/if_ugl.c sys/dev/usb/if_ugl.c index ba8490b..b76e019 100644 --- sys/dev/usb/if_ugl.c +++ sys/dev/usb/if_ugl.c @@ -54,6 +54,7 @@ #include <bpfilter.h> #include <sys/param.h> +#include <sys/kernel.h> #include <sys/systm.h> #include <sys/timeout.h> #include <sys/sockio.h> @@ -152,8 +153,6 @@ int ugldebug = 0; #define DPRINTFN(n,x) #endif -extern int ticks; - /* * Various supported device vendors/products. */ @@ -253,7 +252,7 @@ ugl_attach(struct device *parent, struct device *self, void *aux) macaddr_hi = htons(0x2acb); bcopy(&macaddr_hi, &sc->sc_arpcom.ac_enaddr[0], sizeof(u_int16_t)); - bcopy(&ticks, &sc->sc_arpcom.ac_enaddr[2], sizeof(u_int32_t)); + bcopy(&hcticks, &sc->sc_arpcom.ac_enaddr[2], sizeof(u_int32_t)); sc->sc_arpcom.ac_enaddr[5] = (u_int8_t)(sc->sc_dev.dv_unit); printf("%s: address %s\n", diff --git sys/kern/kern_clock.c sys/kern/kern_clock.c index adaaab0..b382330 100644 --- sys/kern/kern_clock.c +++ sys/kern/kern_clock.c @@ -97,7 +97,7 @@ int stathz; int schedhz; int profhz; int profprocs; -int ticks; +int hcticks; /* # of hardclock ticks */ static int psdiv, pscnt; /* prof => stat divider */ int psratio; /* ratio: prof / stat */ diff --git sys/kern/kern_timeout.c sys/kern/kern_timeout.c index c888cb3..6cc6c9c 100644 --- sys/kern/kern_timeout.c +++ sys/kern/kern_timeout.c @@ -42,8 +42,8 @@ /* * Timeouts are kept in a hierarchical timing wheel. The to_time is the value - * of the global variable "ticks" when the timeout should be called. There are - * four levels with 256 buckets each. See 'Scheme 7' in + * of the global variable "hcticks" when the timeout should be called. There + * are four levels with 256 buckets each. See 'Scheme 7' in * "Hashed and Hierarchical Timing Wheels: Efficient Data Structures for * Implementing a Timer Facility" by George Varghese and Tony Lauck. */ @@ -137,7 +137,7 @@ struct mutex timeout_mutex = MUTEX_INITIALIZER(IPL_HIGH); * be positive or negative so comparing it with anything is dangerous. * The only way we can use the to->to_time value in any predictable way * is when we calculate how far in the future `to' will timeout - - * "to->to_time - ticks". The result will always be positive for future + * "to->to_time - hcticks". The result will always be positive for future * timeouts and 0 or negative for due timeouts. */ @@ -176,7 +176,7 @@ timeout_add(struct timeout *new, int to_ticks) mtx_enter(&timeout_mutex); /* Initialize the time here, it won't change. */ old_time = new->to_time; - new->to_time = to_ticks + ticks; + new->to_time = to_ticks + hcticks; new->to_flags &= ~TIMEOUT_TRIGGERED; /* @@ -185,7 +185,7 @@ timeout_add(struct timeout *new, int to_ticks) * and let it be rescheduled later. */ if (new->to_flags & TIMEOUT_ONQUEUE) { - if (new->to_time - ticks < old_time - ticks) { + if (new->to_time - hcticks < old_time - hcticks) { CIRCQ_REMOVE(&new->to_list); CIRCQ_INSERT(&new->to_list, &timeout_todo); } @@ -304,15 +304,15 @@ timeout_hardclock_update(void) mtx_enter(&timeout_mutex); - ticks++; + hcticks++; - MOVEBUCKET(0, ticks); - if (MASKWHEEL(0, ticks) == 0) { - MOVEBUCKET(1, ticks); - if (MASKWHEEL(1, ticks) == 0) { - MOVEBUCKET(2, ticks); - if (MASKWHEEL(2, ticks) == 0) - MOVEBUCKET(3, ticks); + MOVEBUCKET(0, hcticks); + if (MASKWHEEL(0, hcticks) == 0) { + MOVEBUCKET(1, hcticks); + if (MASKWHEEL(1, hcticks) == 0) { + MOVEBUCKET(2, hcticks); + if (MASKWHEEL(2, hcticks) == 0) + MOVEBUCKET(3, hcticks); } } ret = !CIRCQ_EMPTY(&timeout_todo); @@ -333,14 +333,14 @@ softclock(void *arg) CIRCQ_REMOVE(&to->to_list); /* If due run it, otherwise insert it into the right bucket. */ - if (to->to_time - ticks > 0) { + if (to->to_time - hcticks > 0) { CIRCQ_INSERT(&to->to_list, - &BUCKET((to->to_time - ticks), to->to_time)); + &BUCKET((to->to_time - hcticks), to->to_time)); } else { #ifdef DEBUG - if (to->to_time - ticks < 0) + if (to->to_time - hcticks < 0) printf("timeout delayed %d\n", to->to_time - - ticks); + hcticks); #endif to->to_flags &= ~TIMEOUT_ONQUEUE; to->to_flags |= TIMEOUT_TRIGGERED; @@ -369,7 +369,7 @@ timeout_adjust_ticks(int adj) return; mtx_enter(&timeout_mutex); - new_ticks = ticks + adj; + new_ticks = hcticks + adj; for (b = 0; b < nitems(timeout_wheel); b++) { p = CIRCQ_FIRST(&timeout_wheel[b]); while (p != &timeout_wheel[b]) { @@ -377,13 +377,13 @@ timeout_adjust_ticks(int adj) p = CIRCQ_FIRST(p); /* when moving a timeout forward need to reinsert it */ - if (to->to_time - ticks < adj) + if (to->to_time - hcticks < adj) to->to_time = new_ticks; CIRCQ_REMOVE(&to->to_list); CIRCQ_INSERT(&to->to_list, &timeout_todo); } } - ticks = new_ticks; + hcticks = new_ticks; mtx_leave(&timeout_mutex); } #endif @@ -403,7 +403,7 @@ db_show_callout_bucket(struct circq *bucket) to = timeout_from_circq(p); db_find_sym_and_offset((db_addr_t)to->to_func, &name, &offset); name = name ? name : "?"; - db_printf("%9d %2td/%-4td %p %s\n", to->to_time - ticks, + db_printf("%9d %2td/%-4td %p %s\n", to->to_time - hcticks, (bucket - timeout_wheel) / WHEELSIZE, bucket - timeout_wheel, to->to_arg, name); } @@ -414,8 +414,8 @@ db_show_callout(db_expr_t addr, int haddr, db_expr_t count, char *modif) { int b; - db_printf("ticks now: %d\n", ticks); - db_printf(" ticks wheel arg func\n"); + db_printf("hcticks now: %d\n", hcticks); + db_printf(" hcticks wheel arg func\n"); db_show_callout_bucket(&timeout_todo); for (b = 0; b < nitems(timeout_wheel); b++) diff --git sys/kern/subr_pool.c sys/kern/subr_pool.c index 043cc8b..b75f3ad 100644 --- sys/kern/subr_pool.c +++ sys/kern/subr_pool.c @@ -682,7 +682,7 @@ pool_put(struct pool *pp, void *v) */ pp->pr_nidle++; - ph->ph_tick = ticks; + ph->ph_tick = hcticks; TAILQ_REMOVE(&pp->pr_partpages, ph, ph_pagelist); TAILQ_INSERT_TAIL(&pp->pr_emptypages, ph, ph_pagelist); pool_update_curpage(pp); @@ -694,7 +694,7 @@ pool_put(struct pool *pp, void *v) /* is it time to free a page? */ if (pp->pr_nidle > pp->pr_maxpages && (ph = TAILQ_FIRST(&pp->pr_emptypages)) != NULL && - (ticks - ph->ph_tick) > (hz * pool_wait_free)) { + (hcticks - ph->ph_tick) > (hz * pool_wait_free)) { freeph = ph; pool_p_remove(pp, freeph); } @@ -1379,7 +1379,7 @@ pool_gc_pages(void *null) /* is it time to free a page? */ if (pp->pr_nidle > pp->pr_minpages && (ph = TAILQ_FIRST(&pp->pr_emptypages)) != NULL && - (ticks - ph->ph_tick) > (hz * pool_wait_gc)) { + (hcticks - ph->ph_tick) > (hz * pool_wait_gc)) { freeph = ph; pool_p_remove(pp, freeph); } else diff --git sys/net/bpf.c sys/net/bpf.c index e7a038e..a9afab6 100644 --- sys/net/bpf.c +++ sys/net/bpf.c @@ -41,6 +41,7 @@ #include "bpfilter.h" #include <sys/param.h> +#include <sys/kernel.h> #include <sys/systm.h> #include <sys/mbuf.h> #include <sys/proc.h> @@ -73,9 +74,6 @@ #define PRINET 26 /* interruptible */ -/* from kern/kern_clock.c; incremented each clock tick. */ -extern int ticks; - /* * The default read buffer size is patchable. */ @@ -411,7 +409,7 @@ bpfread(dev_t dev, struct uio *uio, int ioflag) * we can then figure out when we're done reading. */ if (d->bd_rtout != -1 && d->bd_rdStart == 0) - d->bd_rdStart = ticks; + d->bd_rdStart = hcticks; else d->bd_rdStart = 0; @@ -444,7 +442,7 @@ bpfread(dev_t dev, struct uio *uio, int ioflag) /* User requested non-blocking I/O */ error = EWOULDBLOCK; } else { - if ((d->bd_rdStart + d->bd_rtout) < ticks) { + if ((d->bd_rdStart + d->bd_rtout) < hcticks) { error = tsleep((caddr_t)d, PRINET|PCATCH, "bpf", d->bd_rtout); } else @@ -1065,7 +1063,7 @@ bpfpoll(dev_t dev, int events, struct proc *p) * started waiting. */ if (d->bd_rtout != -1 && d->bd_rdStart == 0) - d->bd_rdStart = ticks; + d->bd_rdStart = hcticks; selrecord(p, &d->bd_sel); } splx(s); @@ -1099,7 +1097,7 @@ bpfkqfilter(dev_t dev, struct knote *kn) D_GET(d); SLIST_INSERT_HEAD(klist, kn, kn_selnext); if (d->bd_rtout != -1 && d->bd_rdStart == 0) - d->bd_rdStart = ticks; + d->bd_rdStart = hcticks; splx(s); return (0); @@ -1442,7 +1440,7 @@ bpf_catchpacket(struct bpf_d *d, u_char *pkt, size_t pktlen, size_t snaplen, bpf_wakeup(d); } - if (d->bd_rdStart && (d->bd_rtout + d->bd_rdStart < ticks)) { + if (d->bd_rdStart && (d->bd_rtout + d->bd_rdStart < hcticks)) { /* * we could be selecting on the bpf, and we * may have timeouts set. We got here by getting diff --git sys/net/if.c sys/net/if.c index fbe239d..907912f 100644 --- sys/net/if.c +++ sys/net/if.c @@ -1121,20 +1121,17 @@ if_clone_list(struct if_clonereq *ifcr) void if_congestion(void) { - extern int ticks; - - ifq_congestion = ticks; + ifq_congestion = hcticks; } int if_congested(void) { - extern int ticks; int diff; - diff = ticks - ifq_congestion; + diff = hcticks - ifq_congestion; if (diff < 0) { - ifq_congestion = ticks - hz; + ifq_congestion = hcticks - hz; return (0); } @@ -2551,12 +2548,10 @@ u_int net_livelocks; void net_tick(void *null) { - extern int ticks; - - if (ticks - net_ticks > 1) + if (hcticks - net_ticks > 1) net_livelocks++; - net_ticks = ticks; + net_ticks = hcticks; timeout_add(&net_tick_to, 1); } @@ -2564,19 +2559,15 @@ net_tick(void *null) int net_livelocked(void) { - extern int ticks; - - return (ticks - net_ticks > 1); + return (hcticks - net_ticks > 1); } void if_rxr_init(struct if_rxring *rxr, u_int lwm, u_int hwm) { - extern int ticks; - memset(rxr, 0, sizeof(*rxr)); - rxr->rxr_adjusted = ticks; + rxr->rxr_adjusted = hcticks; rxr->rxr_cwm = rxr->rxr_lwm = lwm; rxr->rxr_hwm = hwm; } @@ -2584,8 +2575,6 @@ if_rxr_init(struct if_rxring *rxr, u_int lwm, u_int hwm) static inline void if_rxr_adjust_cwm(struct if_rxring *rxr) { - extern int ticks; - if (net_livelocked()) { if (rxr->rxr_cwm > rxr->rxr_lwm) rxr->rxr_cwm--; @@ -2596,16 +2585,15 @@ if_rxr_adjust_cwm(struct if_rxring *rxr) else if (rxr->rxr_cwm < rxr->rxr_hwm) rxr->rxr_cwm++; - rxr->rxr_adjusted = ticks; + rxr->rxr_adjusted = hcticks; } u_int if_rxr_get(struct if_rxring *rxr, u_int max) { - extern int ticks; u_int diff; - if (ticks - rxr->rxr_adjusted >= 1) { + if (hcticks - rxr->rxr_adjusted >= 1) { /* we're free to try for an adjustment */ if_rxr_adjust_cwm(rxr); } diff --git sys/net80211/ieee80211_crypto_tkip.c sys/net80211/ieee80211_crypto_tkip.c index 20b84f1..e19cbfa 100644 --- sys/net80211/ieee80211_crypto_tkip.c +++ sys/net80211/ieee80211_crypto_tkip.c @@ -23,6 +23,7 @@ #include <sys/param.h> #include <sys/systm.h> +#include <sys/kernel.h> #include <sys/mbuf.h> #include <sys/malloc.h> #include <sys/kernel.h> @@ -499,8 +500,6 @@ ieee80211_tkip_deauth(void *arg, struct ieee80211_node *ni) void ieee80211_michael_mic_failure(struct ieee80211com *ic, u_int64_t tsc) { - extern int ticks; - if (ic->ic_flags & IEEE80211_F_COUNTERM) return; /* countermeasures already active */ @@ -518,8 +517,8 @@ ieee80211_michael_mic_failure(struct ieee80211com *ic, u_int64_t tsc) * seconds have passed since the most recent previous MIC failure. */ if (ic->ic_tkip_micfail == 0 || - ticks - (ic->ic_tkip_micfail + 60 * hz) >= 0) { - ic->ic_tkip_micfail = ticks; + hcticks - (ic->ic_tkip_micfail + 60 * hz) >= 0) { + ic->ic_tkip_micfail = hcticks; ic->ic_tkip_micfail_last_tsc = tsc; return; } @@ -558,7 +557,7 @@ ieee80211_michael_mic_failure(struct ieee80211com *ic, u_int64_t tsc) break; } - ic->ic_tkip_micfail = ticks; + ic->ic_tkip_micfail = hcticks; ic->ic_tkip_micfail_last_tsc = tsc; } diff --git sys/sys/kernel.h sys/sys/kernel.h index 0aa5bab..79dd89b 100644 --- sys/sys/kernel.h +++ sys/sys/kernel.h @@ -54,7 +54,7 @@ extern int tick; /* usec per tick (1000000 / hz) */ extern int tickfix; /* periodic tick adj. tick not integral */ extern int tickfixinterval; /* interval at which to apply adjustment */ extern int tickadj; /* "standard" clock skew, us./tick */ -extern int ticks; /* # of hardclock ticks */ +extern int hcticks; /* # of hardclock ticks */ extern int hz; /* system clock's frequency */ extern int stathz; /* statistics clock's frequency */ extern int profhz; /* profiling clock's frequency */ diff --git sys/sys/timeout.h sys/sys/timeout.h index 8f25af1..3f14f20 100644 --- sys/sys/timeout.h +++ sys/sys/timeout.h @@ -39,7 +39,7 @@ * Initializes a timeout struct to call the function with the argument. * A timeout only needs to be initialized once. * - timeout_add(timeout, ticks) - * Schedule this timeout to run in "ticks" ticks (there are hz ticks in + * Schedule this timeout to run in "hcticks" ticks (there are hz ticks in * one second). You may not touch the timeout with timeout_set once the * timeout is scheduled. A second call to timeout_add with an already * scheduled timeout will cause the old timeout to be canceled and the