summaryrefslogtreecommitdiff
path: root/misc/zaptel/files/patch-ztdummy::ztdummy.c
diff options
context:
space:
mode:
Diffstat (limited to 'misc/zaptel/files/patch-ztdummy::ztdummy.c')
-rw-r--r--misc/zaptel/files/patch-ztdummy::ztdummy.c112
1 files changed, 0 insertions, 112 deletions
diff --git a/misc/zaptel/files/patch-ztdummy::ztdummy.c b/misc/zaptel/files/patch-ztdummy::ztdummy.c
deleted file mode 100644
index 908b8cdb4650..000000000000
--- a/misc/zaptel/files/patch-ztdummy::ztdummy.c
+++ /dev/null
@@ -1,112 +0,0 @@
---- ztdummy/ztdummy.c.orig Mon Jul 30 15:11:25 2007
-+++ ztdummy/ztdummy.c Mon Jul 30 15:11:32 2007
-@@ -22,6 +22,10 @@
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
-+ * Rewritten to use the time of day clock (which should be ntp synced
-+ * for this to work perfectly) by David G. Lawrence <dg@dglawrence.com>.
-+ * July 27th, 2007.
-+ *
- */
-
- #include <sys/cdefs.h>
-@@ -45,26 +49,82 @@
-
- MALLOC_DEFINE(M_ZTD, "ztdummy", "ztdummy interface data structures");
-
-+#ifndef timersub
-+#define timersub(tvp, uvp, vvp) \
-+ do { \
-+ (vvp)->tv_sec = (tvp)->tv_sec - (uvp)->tv_sec; \
-+ (vvp)->tv_usec = (tvp)->tv_usec - (uvp)->tv_usec; \
-+ if ((vvp)->tv_usec < 0) { \
-+ (vvp)->tv_sec--; \
-+ (vvp)->tv_usec += 1000000; \
-+ } \
-+ } while (0)
-+#endif
-
- static struct callout_handle ztdummy_timer_handle = CALLOUT_HANDLE_INITIALIZER(&ztdummy_timer_handle);
-
- static struct ztdummy *ztd;
-
- static int debug = 0;
-+static struct timeval basetime, curtime, sleeptime;
-
- static __inline void ztdummy_timer(void* arg )
- {
-- int i,j;
-+ int i, ticks;
-
-- j = max(1, 1000/hz);
--
-- for(i=0; i < j; i++) {
-+loop:
-+ for (i = 0; i < hz / 100; i++) {
- zt_receive(&ztd->span);
- zt_transmit(&ztd->span);
- }
--
-- ztdummy_timer_handle = timeout(ztdummy_timer, NULL, hz/1000);
-
-+fixtime:
-+ microtime(&curtime);
-+
-+ /*
-+ * Sleep until the next 10ms boundry.
-+ */
-+ basetime.tv_usec += 10000;
-+ if (basetime.tv_usec >= 1000000) {
-+ basetime.tv_sec++;
-+ basetime.tv_usec -= 1000000;
-+ }
-+ timersub(&basetime, &curtime, &sleeptime);
-+
-+ /*
-+ * Detect if we've gotten behind and need to start our processing
-+ * immediately.
-+ */
-+ if (sleeptime.tv_sec < 0 || sleeptime.tv_usec == 0) {
-+ /*
-+ * Limit how far we can get behind to something reasonable (1 sec)
-+ * so that we don't go nuts when something (ntp or admin) sets the
-+ * clock forward by a large amount.
-+ */
-+ if (sleeptime.tv_sec < -1) {
-+ basetime.tv_sec = curtime.tv_sec;
-+ basetime.tv_usec = curtime.tv_usec;
-+ goto fixtime;
-+ }
-+ goto loop;
-+ }
-+ /*
-+ * Detect if something is messing with the system clock by
-+ * checking that the sleep time is no more than 20ms and
-+ * resetting our base time if it is. This case will occur if
-+ * the system clock has been reset to an earlier time.
-+ */
-+ if (sleeptime.tv_sec > 0 || sleeptime.tv_usec > 20000) {
-+ basetime.tv_sec = curtime.tv_sec;
-+ basetime.tv_usec = curtime.tv_usec;
-+ goto fixtime;
-+ }
-+
-+ ticks = sleeptime.tv_usec * hz / 1000000;
-+ if (ticks == 0)
-+ goto loop;
-+
-+ ztdummy_timer_handle = timeout(ztdummy_timer, NULL, ticks);
- }
-
- static int ztdummy_initialize(struct ztdummy *ztd)
-@@ -102,7 +162,8 @@
- return -ENODEV;
- }
-
-- ztdummy_timer_handle = timeout(ztdummy_timer, NULL, hz/1000);
-+ microtime(&basetime);
-+ ztdummy_timer_handle = timeout(ztdummy_timer, NULL, 1);
-
- if (debug)
- printf("ztdummy: init() finished\n");