netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* Re: [atmdrvr zatm] Remove obsolete EXACT_TS support
       [not found] <20030728071323.GT32831@gaz.sfgoth.com>
@ 2003-07-29 17:15 ` chas williams
  2003-07-30  5:30   ` David S. Miller
  0 siblings, 1 reply; 2+ messages in thread
From: chas williams @ 2003-07-29 17:15 UTC (permalink / raw)
  To: Mitchell Blank Jr; +Cc: davem, netdev

dave, please apply the following patch (hopefully one will arrive
shortly that removes cli() et al from zatm as well):

In message <20030728071323.GT32831@gaz.sfgoth.com>,Mitchell Blank Jr writes:
>Chas - here's another 2.6 atm driver patch.  Please push it upstream.
>
>This removes the obsolete "exact timestamp" support from the zatm driver.
>My understanding is that it was part of a research thing Werner did 8 or
>so years ago.  It has no purpose for any production use.  I think 2.6 is
>its time to die.
>
>Besides, these days we use do_gettimeofday() instead of xtime so we should
>have a reasonably accurate timestamp anyways.
>
>The only program that uses the ZATM_GETTHIST ioctl is the src/debug/znth.c
>from the userland distribution.  This isn't even compiled as part of the
>make process so I don't feel any guilt about breaking it.  It should
>probably also just go away.
>
>I don't have the hardware (and really doubt anyone else does either, but
>that's another matter entirely) but it still compiles and insmod's.
>
>Patch is versus 2.6.0-test2.


# This is a BitKeeper generated patch for the following project:
# Project Name: Linux kernel tree
# This patch format is intended for GNU patch command version 2.5 or higher.
# This patch includes the following deltas:
#	           ChangeSet	1.1596  -> 1.1597 
#	  drivers/atm/zatm.c	1.12    -> 1.13   
#	 drivers/atm/Kconfig	1.5     -> 1.6    
#	  drivers/atm/zatm.h	1.1     -> 1.2    
#	include/linux/atm_zatm.h	1.1     -> 1.2    
#
# The following is the BitKeeper ChangeSet Log
# --------------------------------------------
# 03/07/28	chas@relax.cmf.nrl.navy.mil	1.1597
# remove EXACT_TS remove from zatm (untested)
# --------------------------------------------
#
diff -Nru a/drivers/atm/Kconfig b/drivers/atm/Kconfig
--- a/drivers/atm/Kconfig	Tue Jul 29 13:15:41 2003
+++ b/drivers/atm/Kconfig	Tue Jul 29 13:15:41 2003
@@ -164,18 +164,6 @@
 	  Note that extended debugging may create certain race conditions
 	  itself. Enable this ONLY if you suspect problems with the driver.
 
-config ATM_ZATM_EXACT_TS
-	bool "Enable usec resolution timestamps"
-	depends on ATM_ZATM && X86
-	help
-	  The uPD98401 SAR chip supports a high-resolution timer (approx. 30
-	  MHz) that is used for very accurate reception timestamps. Because
-	  that timer overflows after 140 seconds, and also to avoid timer
-	  drift, time measurements need to be periodically synchronized with
-	  the normal system time. Enabling this feature will add some general
-	  overhead for timer synchronization and also per-packet overhead for
-	  time conversion.
-
 #   bool 'Rolfs TI TNETA1570' CONFIG_ATM_TNETA1570 y
 #   if [ "$CONFIG_ATM_TNETA1570" = "y" ]; then
 #      bool '  Enable extended debugging' CONFIG_ATM_TNETA1570_DEBUG n
diff -Nru a/drivers/atm/zatm.c b/drivers/atm/zatm.c
--- a/drivers/atm/zatm.c	Tue Jul 29 13:15:41 2003
+++ b/drivers/atm/zatm.c	Tue Jul 29 13:15:41 2003
@@ -52,13 +52,6 @@
 #define DPRINTK(format,args...)
 #endif
 
-#ifndef __i386__
-#ifdef CONFIG_ATM_ZATM_EXACT_TS
-#warning Precise timestamping only available on i386 platform
-#undef CONFIG_ATM_ZATM_EXACT_TS
-#endif
-#endif
-
 #ifndef CONFIG_ATM_ZATM_DEBUG
 
 
@@ -347,150 +340,6 @@
 	restore_flags(flags);
 }
 
-
-/*----------------------- high-precision timestamps -------------------------*/
-
-
-#ifdef CONFIG_ATM_ZATM_EXACT_TS
-
-static struct timer_list sync_timer;
-
-
-/*
- * Note: the exact time is not normalized, i.e. tv_usec can be > 1000000.
- * This must be handled by higher layers.
- */
-
-static inline struct timeval exact_time(struct zatm_dev *zatm_dev,u32 ticks)
-{
-	struct timeval tmp;
-
-	tmp = zatm_dev->last_time;
-	tmp.tv_usec += ((s64) (ticks-zatm_dev->last_clk)*
-	    (s64) zatm_dev->factor) >> TIMER_SHIFT;
-	return tmp;
-}
-
-
-static void zatm_clock_sync(unsigned long dummy)
-{
-	struct atm_dev *atm_dev;
-	struct zatm_dev *zatm_dev;
-
-	for (atm_dev = zatm_boards; atm_dev; atm_dev = zatm_dev->more) {
-		unsigned long flags,interval;
-		int diff;
-		struct timeval now,expected;
-		u32 ticks;
-
-		zatm_dev = ZATM_DEV(atm_dev);
-		save_flags(flags);
-		cli();
-		ticks = zpeekl(zatm_dev,uPD98401_TSR);
-		do_gettimeofday(&now);
-		restore_flags(flags);
-		expected = exact_time(zatm_dev,ticks);
-		diff = 1000000*(expected.tv_sec-now.tv_sec)+
-		    (expected.tv_usec-now.tv_usec);
-		zatm_dev->timer_history[zatm_dev->th_curr].real = now;
-		zatm_dev->timer_history[zatm_dev->th_curr].expected = expected;
-		zatm_dev->th_curr = (zatm_dev->th_curr+1) &
-		    (ZATM_TIMER_HISTORY_SIZE-1);
-		interval = 1000000*(now.tv_sec-zatm_dev->last_real_time.tv_sec)
-		    +(now.tv_usec-zatm_dev->last_real_time.tv_usec);
-		if (diff >= -ADJ_REP_THRES && diff <= ADJ_REP_THRES)
-			zatm_dev->timer_diffs = 0;
-		else
-#ifndef AGGRESSIVE_DEBUGGING
-			if (++zatm_dev->timer_diffs >= ADJ_MSG_THRES)
-#endif
-			{
-			zatm_dev->timer_diffs = 0;
-			printk(KERN_INFO DEV_LABEL ": TSR update after %ld us:"
-			    " calculation differed by %d us\n",interval,diff);
-#ifdef AGGRESSIVE_DEBUGGING
-			printk(KERN_DEBUG "  %d.%08d -> %d.%08d (%lu)\n",
-			    zatm_dev->last_real_time.tv_sec,
-			    zatm_dev->last_real_time.tv_usec,
-			    now.tv_sec,now.tv_usec,interval);
-			printk(KERN_DEBUG "  %u -> %u (%d)\n",
-			    zatm_dev->last_clk,ticks,ticks-zatm_dev->last_clk);
-			printk(KERN_DEBUG "  factor %u\n",zatm_dev->factor);
-#endif
-		}
-		if (diff < -ADJ_IGN_THRES || diff > ADJ_IGN_THRES) {
-		    /* filter out any major changes (e.g. time zone setup and
-		       such) */
-			zatm_dev->last_time = now;
-			zatm_dev->factor =
-			    (1000 << TIMER_SHIFT)/(zatm_dev->khz+1);
-		}
-		else {
-			zatm_dev->last_time = expected;
-			/*
-			 * Is the accuracy of udelay really only about 1:300 on
-			 * a 90 MHz Pentium ? Well, the following line avoids
-			 * the problem, but ...
-			 *
-			 * What it does is simply:
-			 *
-			 * zatm_dev->factor = (interval << TIMER_SHIFT)/
-			 *     (ticks-zatm_dev->last_clk);
-			 */
-#define S(x) #x		/* "stringification" ... */
-#define SX(x) S(x)
-			asm("movl %2,%%ebx\n\t"
-			    "subl %3,%%ebx\n\t"
-			    "xorl %%edx,%%edx\n\t"
-			    "shldl $" SX(TIMER_SHIFT) ",%1,%%edx\n\t"
-			    "shl $" SX(TIMER_SHIFT) ",%1\n\t"
-			    "divl %%ebx\n\t"
-			    : "=a" (zatm_dev->factor)
-			    : "0" (interval-diff),"g" (ticks),
-			      "g" (zatm_dev->last_clk)
-			    : "ebx","edx","cc");
-#undef S
-#undef SX
-#ifdef AGGRESSIVE_DEBUGGING
-			printk(KERN_DEBUG "  (%ld << %d)/(%u-%u) = %u\n",
-			    interval,TIMER_SHIFT,ticks,zatm_dev->last_clk,
-			    zatm_dev->factor);
-#endif
-		}
-		zatm_dev->last_real_time = now;
-		zatm_dev->last_clk = ticks;
-	}
-	mod_timer(&sync_timer,sync_timer.expires+POLL_INTERVAL*HZ);
-}
-
-
-static void __init zatm_clock_init(struct zatm_dev *zatm_dev)
-{
-	static int start_timer = 1;
-	unsigned long flags;
-
-	zatm_dev->factor = (1000 << TIMER_SHIFT)/(zatm_dev->khz+1);
-	zatm_dev->timer_diffs = 0;
-	memset(zatm_dev->timer_history,0,sizeof(zatm_dev->timer_history));
-	zatm_dev->th_curr = 0;
-	save_flags(flags);
-	cli();
-	do_gettimeofday(&zatm_dev->last_time);
-	zatm_dev->last_clk = zpeekl(zatm_dev,uPD98401_TSR);
-	if (start_timer) {
-		start_timer = 0;
-		init_timer(&sync_timer);
-		sync_timer.expires = jiffies+POLL_INTERVAL*HZ;
-		sync_timer.function = zatm_clock_sync;
-		add_timer(&sync_timer);
-	}
-	restore_flags(flags);
-}
-
-
-#endif
-
-
 /*----------------------------------- RX ------------------------------------*/
 
 
@@ -581,11 +430,7 @@
 EVENT("error code 0x%x/0x%x\n",(here[3] & uPD98401_AAL5_ES) >>
   uPD98401_AAL5_ES_SHIFT,error);
 		skb = ((struct rx_buffer_head *) bus_to_virt(here[2]))->skb;
-#ifdef CONFIG_ATM_ZATM_EXACT_TS
-		skb->stamp = exact_time(zatm_dev,here[1]);
-#else
 		do_gettimeofday(&skb->stamp);
-#endif
 #if 0
 printk("[-3..0] 0x%08lx 0x%08lx 0x%08lx 0x%08lx\n",((unsigned *) skb->data)[-3],
   ((unsigned *) skb->data)[-2],((unsigned *) skb->data)[-1],
@@ -1455,9 +1300,6 @@
 	    "MHz\n",dev->number,
 	    (zin(VER) & uPD98401_MAJOR) >> uPD98401_MAJOR_SHIFT,
             zin(VER) & uPD98401_MINOR,zatm_dev->khz/1000,zatm_dev->khz % 1000);
-#ifdef CONFIG_ATM_ZATM_EXACT_TS
-	zatm_clock_init(zatm_dev);
-#endif
 	return uPD98402_init(dev);
 }
 
@@ -1699,22 +1541,6 @@
 				restore_flags(flags);
 				return 0;
 			}
-#ifdef CONFIG_ATM_ZATM_EXACT_TS
-		case ZATM_GETTHIST:
-			{
-				int i;
-				struct zatm_t_hist hs[ZATM_TIMER_HISTORY_SIZE];
-				save_flags(flags);
-				cli();
-				for (i = 0; i < ZATM_TIMER_HISTORY_SIZE; i++)
-					hs[i] = zatm_dev->timer_history[
-					    (zatm_dev->th_curr+i) &
-					    (ZATM_TIMER_HISTORY_SIZE-1)];
-				restore_flags(flags);
-				return copy_to_user((struct zatm_t_hist *) arg,
-				    hs, sizeof(hs)) ? -EFAULT : 0;
-			}
-#endif
 		default:
         		if (!dev->phy->ioctl) return -ENOIOCTLCMD;
 		        return dev->phy->ioctl(dev,cmd,arg);
diff -Nru a/drivers/atm/zatm.h b/drivers/atm/zatm.h
--- a/drivers/atm/zatm.h	Tue Jul 29 13:15:41 2003
+++ b/drivers/atm/zatm.h	Tue Jul 29 13:15:41 2003
@@ -40,31 +40,6 @@
 #define MBX_TX_0	2
 #define MBX_TX_1	3
 
-
-/*
- * mkdep doesn't spot this dependency, but that's okay, because zatm.c uses
- * CONFIG_ATM_ZATM_EXACT_TS too.
- */
-
-#ifdef CONFIG_ATM_ZATM_EXACT_TS
-#define POLL_INTERVAL	60	/* TSR poll interval in seconds; must be <=
-				   (2^31-1)/clock */
-#define TIMER_SHIFT	20	/* scale factor for fixed-point arithmetic;
-				   1 << TIMER_SHIFT must be
-				     (1)  <= (2^64-1)/(POLL_INTERVAL*clock),
-				     (2)  >> clock/10^6, and
-				     (3)  <= (2^32-1)/1000  */
-#define ADJ_IGN_THRES	1000000	/* don't adjust if we're off by more than that
-				   many usecs - this filters clock corrections,
-				   time zone changes, etc. */
-#define ADJ_REP_THRES	20000	/* report only differences of more than that
-				   many usecs (don't mention single lost timer
-				   ticks; 10 msec is only 0.03% anyway) */
-#define ADJ_MSG_THRES	5	/* issue complaints only if getting that many
-				   significant timer differences in a row */
-#endif
-
-
 struct zatm_vcc {
 	/*-------------------------------- RX part */
 	int rx_chan;			/* RX channel, 0 if none */
@@ -103,17 +78,6 @@
 	u32 pool_base;			/* Free buffer pool dsc (word addr) */
 	/*-------------------------------- ZATM links */
 	struct atm_dev *more;		/* other ZATM devices */
-#ifdef CONFIG_ATM_ZATM_EXACT_TS
-	/*-------------------------------- timestamp calculation */
-	u32 last_clk;			/* results of last poll: clock, */
-	struct timeval last_time;	/*   virtual time and */
-	struct timeval last_real_time;	/*   real time */
-	u32 factor;			/* multiplication factor */
-	int timer_diffs;		/* number of significant deviations */
-	struct zatm_t_hist timer_history[ZATM_TIMER_HISTORY_SIZE];
-					/* record of timer synchronizations */
-	int th_curr;			/* current position */
-#endif
 	/*-------------------------------- general information */
 	int mem;			/* RAM on board (in bytes) */
 	int khz;			/* timer clock */
diff -Nru a/include/linux/atm_zatm.h b/include/linux/atm_zatm.h
--- a/include/linux/atm_zatm.h	Tue Jul 29 13:15:41 2003
+++ b/include/linux/atm_zatm.h	Tue Jul 29 13:15:41 2003
@@ -21,9 +21,6 @@
 						/* get statistics and zero */
 #define ZATM_SETPOOL	_IOW('a',ATMIOC_SARPRV+3,struct atmif_sioc)
 						/* set pool parameters */
-#define ZATM_GETTHIST	_IOW('a',ATMIOC_SARPRV+4,struct atmif_sioc)
-						/* get a history of timer
-						   differences */
 
 struct zatm_pool_info {
 	int ref_count;			/* free buffer pool usage counters */

^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: [atmdrvr zatm] Remove obsolete EXACT_TS support
  2003-07-29 17:15 ` [atmdrvr zatm] Remove obsolete EXACT_TS support chas williams
@ 2003-07-30  5:30   ` David S. Miller
  0 siblings, 0 replies; 2+ messages in thread
From: David S. Miller @ 2003-07-30  5:30 UTC (permalink / raw)
  To: chas3; +Cc: chas, mitch, netdev

On Tue, 29 Jul 2003 13:15:09 -0400
chas williams <chas@cmf.nrl.navy.mil> wrote:

> dave, please apply the following patch (hopefully one will arrive
> shortly that removes cli() et al from zatm as well):

Applied to 2.6.x, thanks.

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2003-07-30  5:30 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
     [not found] <20030728071323.GT32831@gaz.sfgoth.com>
2003-07-29 17:15 ` [atmdrvr zatm] Remove obsolete EXACT_TS support chas williams
2003-07-30  5:30   ` David S. Miller

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).