summaryrefslogtreecommitdiffstats
path: root/sys/kern
diff options
context:
space:
mode:
authorphk <phk@FreeBSD.org>1998-01-07 12:29:17 +0000
committerphk <phk@FreeBSD.org>1998-01-07 12:29:17 +0000
commit1e948b4b8ad5468170e0f4fd60bcaa4e0a70bb25 (patch)
tree89e2a0a258e47adc098073369fc7809e1c5e1de7 /sys/kern
parent35c58712f7a1b35bbc1ee024e34f19d35be048dc (diff)
downloadFreeBSD-src-1e948b4b8ad5468170e0f4fd60bcaa4e0a70bb25.zip
FreeBSD-src-1e948b4b8ad5468170e0f4fd60bcaa4e0a70bb25.tar.gz
Improve hardpps readability a bit:
* Rename usec to p_usec so you can search for it. * Macroize the huge median_of_3_samples if statement.
Diffstat (limited to 'sys/kern')
-rw-r--r--sys/kern/kern_clock.c95
-rw-r--r--sys/kern/kern_tc.c95
-rw-r--r--sys/kern/kern_timeout.c95
3 files changed, 135 insertions, 150 deletions
diff --git a/sys/kern/kern_clock.c b/sys/kern/kern_clock.c
index 4d28fd5..b51b29c 100644
--- a/sys/kern/kern_clock.c
+++ b/sys/kern/kern_clock.c
@@ -36,7 +36,7 @@
* SUCH DAMAGE.
*
* @(#)kern_clock.c 8.5 (Berkeley) 1/21/94
- * $Id: kern_clock.c,v 1.46 1997/12/08 22:56:10 fsmp Exp $
+ * $Id: kern_clock.c,v 1.47 1997/12/23 16:31:54 nate Exp $
*/
/* Portions of this software are covered by the following: */
@@ -1114,6 +1114,42 @@ SYSCTL_PROC(_kern, KERN_CLOCKRATE, clockrate, CTLTYPE_STRUCT|CTLFLAG_RD,
0, 0, sysctl_kern_clockrate, "S,clockinfo","");
#ifdef PPS_SYNC
+
+/* We need this ugly monster twice, so lets macroize it... */
+
+#define MEDIAN3(a, m, s) \
+ do { \
+ if (a[0] > a[1]) { \
+ if (a[1] > a[2]) { \
+ /* 0 1 2 */ \
+ m = a[1]; \
+ s = a[0] - a[2]; \
+ } else if (a[2] > a[0]) { \
+ /* 2 0 1 */ \
+ m = a[0]; \
+ s = a[2] - a[1]; \
+ } else { \
+ /* 0 2 1 */ \
+ m = a[2]; \
+ s = a[0] - a[1]; \
+ } \
+ } else { \
+ if (a[1] < a[2]) { \
+ /* 2 1 0 */ \
+ m = a[1]; \
+ s = a[2] - a[0]; \
+ } else if (a[2] < a[0]) { \
+ /* 1 0 2 */ \
+ m = a[0]; \
+ s = a[1] - a[2]; \
+ } else { \
+ /* 1 2 0 */ \
+ m = a[2]; \
+ s = a[1] - a[0]; \
+ } \
+ } \
+ } while (0)
+
/*
* hardpps() - discipline CPU clock oscillator to external PPS signal
*
@@ -1138,9 +1174,9 @@ SYSCTL_PROC(_kern, KERN_CLOCKRATE, clockrate, CTLTYPE_STRUCT|CTLFLAG_RD,
* routine.
*/
void
-hardpps(tvp, usec)
+hardpps(tvp, p_usec)
struct timeval *tvp; /* time at PPS */
- long usec; /* hardware counter at PPS */
+ long p_usec; /* hardware counter at PPS */
{
long u_usec, v_usec, bigtick;
long cal_sec, cal_usec;
@@ -1182,29 +1218,9 @@ hardpps(tvp, usec)
pps_tf[2] = pps_tf[1];
pps_tf[1] = pps_tf[0];
pps_tf[0] = u_usec;
- if (pps_tf[0] > pps_tf[1]) {
- if (pps_tf[1] > pps_tf[2]) {
- pps_offset = pps_tf[1]; /* 0 1 2 */
- v_usec = pps_tf[0] - pps_tf[2];
- } else if (pps_tf[2] > pps_tf[0]) {
- pps_offset = pps_tf[0]; /* 2 0 1 */
- v_usec = pps_tf[2] - pps_tf[1];
- } else {
- pps_offset = pps_tf[2]; /* 0 2 1 */
- v_usec = pps_tf[0] - pps_tf[1];
- }
- } else {
- if (pps_tf[1] < pps_tf[2]) {
- pps_offset = pps_tf[1]; /* 2 1 0 */
- v_usec = pps_tf[2] - pps_tf[0];
- } else if (pps_tf[2] < pps_tf[0]) {
- pps_offset = pps_tf[0]; /* 1 0 2 */
- v_usec = pps_tf[1] - pps_tf[2];
- } else {
- pps_offset = pps_tf[2]; /* 1 2 0 */
- v_usec = pps_tf[1] - pps_tf[0];
- }
- }
+
+ MEDIAN3(pps_tf, pps_offset, v_usec);
+
if (v_usec > MAXTIME)
pps_jitcnt++;
v_usec = (v_usec << PPS_AVG) - pps_jitter;
@@ -1238,7 +1254,7 @@ hardpps(tvp, usec)
return;
pps_count = 0;
pps_calcnt++;
- u_usec = usec << SHIFT_USEC;
+ u_usec = p_usec << SHIFT_USEC;
v_usec = pps_usec - u_usec;
if (v_usec >= bigtick >> 1)
v_usec -= bigtick;
@@ -1287,29 +1303,8 @@ hardpps(tvp, usec)
pps_ff[2] = pps_ff[1];
pps_ff[1] = pps_ff[0];
pps_ff[0] = v_usec;
- if (pps_ff[0] > pps_ff[1]) {
- if (pps_ff[1] > pps_ff[2]) {
- u_usec = pps_ff[1]; /* 0 1 2 */
- v_usec = pps_ff[0] - pps_ff[2];
- } else if (pps_ff[2] > pps_ff[0]) {
- u_usec = pps_ff[0]; /* 2 0 1 */
- v_usec = pps_ff[2] - pps_ff[1];
- } else {
- u_usec = pps_ff[2]; /* 0 2 1 */
- v_usec = pps_ff[0] - pps_ff[1];
- }
- } else {
- if (pps_ff[1] < pps_ff[2]) {
- u_usec = pps_ff[1]; /* 2 1 0 */
- v_usec = pps_ff[2] - pps_ff[0];
- } else if (pps_ff[2] < pps_ff[0]) {
- u_usec = pps_ff[0]; /* 1 0 2 */
- v_usec = pps_ff[1] - pps_ff[2];
- } else {
- u_usec = pps_ff[2]; /* 1 2 0 */
- v_usec = pps_ff[1] - pps_ff[0];
- }
- }
+
+ MEDIAN3(pps_ff, u_usec, v_usec);
/*
* Here the frequency dispersion (stability) is updated. If it
diff --git a/sys/kern/kern_tc.c b/sys/kern/kern_tc.c
index 4d28fd5..b51b29c 100644
--- a/sys/kern/kern_tc.c
+++ b/sys/kern/kern_tc.c
@@ -36,7 +36,7 @@
* SUCH DAMAGE.
*
* @(#)kern_clock.c 8.5 (Berkeley) 1/21/94
- * $Id: kern_clock.c,v 1.46 1997/12/08 22:56:10 fsmp Exp $
+ * $Id: kern_clock.c,v 1.47 1997/12/23 16:31:54 nate Exp $
*/
/* Portions of this software are covered by the following: */
@@ -1114,6 +1114,42 @@ SYSCTL_PROC(_kern, KERN_CLOCKRATE, clockrate, CTLTYPE_STRUCT|CTLFLAG_RD,
0, 0, sysctl_kern_clockrate, "S,clockinfo","");
#ifdef PPS_SYNC
+
+/* We need this ugly monster twice, so lets macroize it... */
+
+#define MEDIAN3(a, m, s) \
+ do { \
+ if (a[0] > a[1]) { \
+ if (a[1] > a[2]) { \
+ /* 0 1 2 */ \
+ m = a[1]; \
+ s = a[0] - a[2]; \
+ } else if (a[2] > a[0]) { \
+ /* 2 0 1 */ \
+ m = a[0]; \
+ s = a[2] - a[1]; \
+ } else { \
+ /* 0 2 1 */ \
+ m = a[2]; \
+ s = a[0] - a[1]; \
+ } \
+ } else { \
+ if (a[1] < a[2]) { \
+ /* 2 1 0 */ \
+ m = a[1]; \
+ s = a[2] - a[0]; \
+ } else if (a[2] < a[0]) { \
+ /* 1 0 2 */ \
+ m = a[0]; \
+ s = a[1] - a[2]; \
+ } else { \
+ /* 1 2 0 */ \
+ m = a[2]; \
+ s = a[1] - a[0]; \
+ } \
+ } \
+ } while (0)
+
/*
* hardpps() - discipline CPU clock oscillator to external PPS signal
*
@@ -1138,9 +1174,9 @@ SYSCTL_PROC(_kern, KERN_CLOCKRATE, clockrate, CTLTYPE_STRUCT|CTLFLAG_RD,
* routine.
*/
void
-hardpps(tvp, usec)
+hardpps(tvp, p_usec)
struct timeval *tvp; /* time at PPS */
- long usec; /* hardware counter at PPS */
+ long p_usec; /* hardware counter at PPS */
{
long u_usec, v_usec, bigtick;
long cal_sec, cal_usec;
@@ -1182,29 +1218,9 @@ hardpps(tvp, usec)
pps_tf[2] = pps_tf[1];
pps_tf[1] = pps_tf[0];
pps_tf[0] = u_usec;
- if (pps_tf[0] > pps_tf[1]) {
- if (pps_tf[1] > pps_tf[2]) {
- pps_offset = pps_tf[1]; /* 0 1 2 */
- v_usec = pps_tf[0] - pps_tf[2];
- } else if (pps_tf[2] > pps_tf[0]) {
- pps_offset = pps_tf[0]; /* 2 0 1 */
- v_usec = pps_tf[2] - pps_tf[1];
- } else {
- pps_offset = pps_tf[2]; /* 0 2 1 */
- v_usec = pps_tf[0] - pps_tf[1];
- }
- } else {
- if (pps_tf[1] < pps_tf[2]) {
- pps_offset = pps_tf[1]; /* 2 1 0 */
- v_usec = pps_tf[2] - pps_tf[0];
- } else if (pps_tf[2] < pps_tf[0]) {
- pps_offset = pps_tf[0]; /* 1 0 2 */
- v_usec = pps_tf[1] - pps_tf[2];
- } else {
- pps_offset = pps_tf[2]; /* 1 2 0 */
- v_usec = pps_tf[1] - pps_tf[0];
- }
- }
+
+ MEDIAN3(pps_tf, pps_offset, v_usec);
+
if (v_usec > MAXTIME)
pps_jitcnt++;
v_usec = (v_usec << PPS_AVG) - pps_jitter;
@@ -1238,7 +1254,7 @@ hardpps(tvp, usec)
return;
pps_count = 0;
pps_calcnt++;
- u_usec = usec << SHIFT_USEC;
+ u_usec = p_usec << SHIFT_USEC;
v_usec = pps_usec - u_usec;
if (v_usec >= bigtick >> 1)
v_usec -= bigtick;
@@ -1287,29 +1303,8 @@ hardpps(tvp, usec)
pps_ff[2] = pps_ff[1];
pps_ff[1] = pps_ff[0];
pps_ff[0] = v_usec;
- if (pps_ff[0] > pps_ff[1]) {
- if (pps_ff[1] > pps_ff[2]) {
- u_usec = pps_ff[1]; /* 0 1 2 */
- v_usec = pps_ff[0] - pps_ff[2];
- } else if (pps_ff[2] > pps_ff[0]) {
- u_usec = pps_ff[0]; /* 2 0 1 */
- v_usec = pps_ff[2] - pps_ff[1];
- } else {
- u_usec = pps_ff[2]; /* 0 2 1 */
- v_usec = pps_ff[0] - pps_ff[1];
- }
- } else {
- if (pps_ff[1] < pps_ff[2]) {
- u_usec = pps_ff[1]; /* 2 1 0 */
- v_usec = pps_ff[2] - pps_ff[0];
- } else if (pps_ff[2] < pps_ff[0]) {
- u_usec = pps_ff[0]; /* 1 0 2 */
- v_usec = pps_ff[1] - pps_ff[2];
- } else {
- u_usec = pps_ff[2]; /* 1 2 0 */
- v_usec = pps_ff[1] - pps_ff[0];
- }
- }
+
+ MEDIAN3(pps_ff, u_usec, v_usec);
/*
* Here the frequency dispersion (stability) is updated. If it
diff --git a/sys/kern/kern_timeout.c b/sys/kern/kern_timeout.c
index 4d28fd5..b51b29c 100644
--- a/sys/kern/kern_timeout.c
+++ b/sys/kern/kern_timeout.c
@@ -36,7 +36,7 @@
* SUCH DAMAGE.
*
* @(#)kern_clock.c 8.5 (Berkeley) 1/21/94
- * $Id: kern_clock.c,v 1.46 1997/12/08 22:56:10 fsmp Exp $
+ * $Id: kern_clock.c,v 1.47 1997/12/23 16:31:54 nate Exp $
*/
/* Portions of this software are covered by the following: */
@@ -1114,6 +1114,42 @@ SYSCTL_PROC(_kern, KERN_CLOCKRATE, clockrate, CTLTYPE_STRUCT|CTLFLAG_RD,
0, 0, sysctl_kern_clockrate, "S,clockinfo","");
#ifdef PPS_SYNC
+
+/* We need this ugly monster twice, so lets macroize it... */
+
+#define MEDIAN3(a, m, s) \
+ do { \
+ if (a[0] > a[1]) { \
+ if (a[1] > a[2]) { \
+ /* 0 1 2 */ \
+ m = a[1]; \
+ s = a[0] - a[2]; \
+ } else if (a[2] > a[0]) { \
+ /* 2 0 1 */ \
+ m = a[0]; \
+ s = a[2] - a[1]; \
+ } else { \
+ /* 0 2 1 */ \
+ m = a[2]; \
+ s = a[0] - a[1]; \
+ } \
+ } else { \
+ if (a[1] < a[2]) { \
+ /* 2 1 0 */ \
+ m = a[1]; \
+ s = a[2] - a[0]; \
+ } else if (a[2] < a[0]) { \
+ /* 1 0 2 */ \
+ m = a[0]; \
+ s = a[1] - a[2]; \
+ } else { \
+ /* 1 2 0 */ \
+ m = a[2]; \
+ s = a[1] - a[0]; \
+ } \
+ } \
+ } while (0)
+
/*
* hardpps() - discipline CPU clock oscillator to external PPS signal
*
@@ -1138,9 +1174,9 @@ SYSCTL_PROC(_kern, KERN_CLOCKRATE, clockrate, CTLTYPE_STRUCT|CTLFLAG_RD,
* routine.
*/
void
-hardpps(tvp, usec)
+hardpps(tvp, p_usec)
struct timeval *tvp; /* time at PPS */
- long usec; /* hardware counter at PPS */
+ long p_usec; /* hardware counter at PPS */
{
long u_usec, v_usec, bigtick;
long cal_sec, cal_usec;
@@ -1182,29 +1218,9 @@ hardpps(tvp, usec)
pps_tf[2] = pps_tf[1];
pps_tf[1] = pps_tf[0];
pps_tf[0] = u_usec;
- if (pps_tf[0] > pps_tf[1]) {
- if (pps_tf[1] > pps_tf[2]) {
- pps_offset = pps_tf[1]; /* 0 1 2 */
- v_usec = pps_tf[0] - pps_tf[2];
- } else if (pps_tf[2] > pps_tf[0]) {
- pps_offset = pps_tf[0]; /* 2 0 1 */
- v_usec = pps_tf[2] - pps_tf[1];
- } else {
- pps_offset = pps_tf[2]; /* 0 2 1 */
- v_usec = pps_tf[0] - pps_tf[1];
- }
- } else {
- if (pps_tf[1] < pps_tf[2]) {
- pps_offset = pps_tf[1]; /* 2 1 0 */
- v_usec = pps_tf[2] - pps_tf[0];
- } else if (pps_tf[2] < pps_tf[0]) {
- pps_offset = pps_tf[0]; /* 1 0 2 */
- v_usec = pps_tf[1] - pps_tf[2];
- } else {
- pps_offset = pps_tf[2]; /* 1 2 0 */
- v_usec = pps_tf[1] - pps_tf[0];
- }
- }
+
+ MEDIAN3(pps_tf, pps_offset, v_usec);
+
if (v_usec > MAXTIME)
pps_jitcnt++;
v_usec = (v_usec << PPS_AVG) - pps_jitter;
@@ -1238,7 +1254,7 @@ hardpps(tvp, usec)
return;
pps_count = 0;
pps_calcnt++;
- u_usec = usec << SHIFT_USEC;
+ u_usec = p_usec << SHIFT_USEC;
v_usec = pps_usec - u_usec;
if (v_usec >= bigtick >> 1)
v_usec -= bigtick;
@@ -1287,29 +1303,8 @@ hardpps(tvp, usec)
pps_ff[2] = pps_ff[1];
pps_ff[1] = pps_ff[0];
pps_ff[0] = v_usec;
- if (pps_ff[0] > pps_ff[1]) {
- if (pps_ff[1] > pps_ff[2]) {
- u_usec = pps_ff[1]; /* 0 1 2 */
- v_usec = pps_ff[0] - pps_ff[2];
- } else if (pps_ff[2] > pps_ff[0]) {
- u_usec = pps_ff[0]; /* 2 0 1 */
- v_usec = pps_ff[2] - pps_ff[1];
- } else {
- u_usec = pps_ff[2]; /* 0 2 1 */
- v_usec = pps_ff[0] - pps_ff[1];
- }
- } else {
- if (pps_ff[1] < pps_ff[2]) {
- u_usec = pps_ff[1]; /* 2 1 0 */
- v_usec = pps_ff[2] - pps_ff[0];
- } else if (pps_ff[2] < pps_ff[0]) {
- u_usec = pps_ff[0]; /* 1 0 2 */
- v_usec = pps_ff[1] - pps_ff[2];
- } else {
- u_usec = pps_ff[2]; /* 1 2 0 */
- v_usec = pps_ff[1] - pps_ff[0];
- }
- }
+
+ MEDIAN3(pps_ff, u_usec, v_usec);
/*
* Here the frequency dispersion (stability) is updated. If it
OpenPOWER on IntegriCloud