Mercurial > vordog
diff vordog.c @ 8:a28764b2a28e
modify selection of timeout for 2^n nanoseconds
author | Thinker K.F. Li <thinker@branda.to> |
---|---|
date | Tue, 08 Jul 2008 17:10:01 +0800 |
parents | 5a281ce7453c |
children | b4f4a69ea86a |
line wrap: on
line diff
--- a/vordog.c Tue Jul 08 16:06:24 2008 +0800 +++ b/vordog.c Tue Jul 08 17:10:01 2008 +0800 @@ -201,21 +201,22 @@ * after 4 times of initial value. So, it only (i * 4) seconds in range * of 4 ~ (255 * 4), where i is one of positive integer, are supported. * - * The supported time intervals of watchdog(9) are 2^31~2^39 nanoseconds. + * The supported time intervals of watchdog(9) are 2^32~2^39 nanoseconds. * vordog used a (i * 4) seconds for 2^n seconds while i * 4 seconds is - * smallest one of intervals that bigger than 2^n seconds. + * closest to 2^n nanoseconds. The variances between i * 4 seconds and + * 2^n nanoseconds are less than 7% (6.8678%). */ static void vordog_wd9_evh(void *priv_data, u_int cmd, int *error) { vd_softc_t sc; u_int timeout, u; - /* 2^31, 2^32, ..., 2^39 nanoseconds */ - static const int timeouts[] = { 1, 2, 3, 5, 9, 18, 35, 69, 138}; + /* 2^32, 2^33, ..., 2^39 nanoseconds */ + static const int timeouts[] = { 1, 2, 4, 9, 17, 34, 69, 137}; sc = (vd_softc_t)priv_data; u = cmd & WD_INTERVAL; - if(u < 31 || u > 39) { + if(u < 32 || u > 39) { /* Out of range! Can not be configured. */ vordog_wd9_disable(); sc->init_val = 0;