All of lore.kernel.org
 help / color / mirror / Atom feed
* adjtimex system man page EINVAL
@ 2009-05-22 11:17 naresh kamboju
  2009-06-02  5:07 ` Michael Kerrisk
  0 siblings, 1 reply; 6+ messages in thread
From: naresh kamboju @ 2009-05-22 11:17 UTC (permalink / raw)
  To: ziegler, akpm, johnstul, zippel; +Cc: mtk.manpages, linux-kernel, naresh.kernel

[-- Attachment #1: Type: text/plain, Size: 426 bytes --]

Hi,

Regarding adjtimex system man page,

Since there are modifications noticed in
/kerel/time/ntp.c
/include/linux/timex.h

compared with /kerel/time/ntp.c 2.6.23 and 2.6.29 and above i have
attached adjtimex_2.6.23_vs_2.6.29.log : line number 330.

In adjtimex (2) man page under the EINVAL Error check section changes
are required w.r.t buf.offset.
Could you conform and update the man page.


Best regards,
Naresh Kamboju

[-- Attachment #2: adjtimex_2.6.23_vs_2.6.29.log --]
[-- Type: application/octet-stream, Size: 17705 bytes --]

--- linux-2.6.23/kernel/time/ntp.c	2009-02-17 15:27:41.000000000 +0530
+++ linux-2.6.29/kernel/time/ntp.c	2009-05-11 15:58:31.000000000 +0530
@@ -10,12 +10,13 @@
 
 #include <linux/mm.h>
 #include <linux/time.h>
-#include <linux/timer.h>
 #include <linux/timex.h>
 #include <linux/jiffies.h>
 #include <linux/hrtimer.h>
 #include <linux/capability.h>
-#include <asm/div64.h>
+#include <linux/math64.h>
+#include <linux/clocksource.h>
+#include <linux/workqueue.h>
 #include <asm/timex.h>
 
 /*
@@ -23,11 +24,14 @@
  */
 unsigned long tick_usec = TICK_USEC; 		/* USER_HZ period (usec) */
 unsigned long tick_nsec;			/* ACTHZ period (nsec) */
-static u64 tick_length, tick_length_base;
+u64 tick_length;
+static u64 tick_length_base;
+
+static struct hrtimer leap_timer;
 
 #define MAX_TICKADJ		500		/* microsecs */
 #define MAX_TICKADJ_SCALED	(((u64)(MAX_TICKADJ * NSEC_PER_USEC) << \
-				  TICK_LENGTH_SHIFT) / NTP_INTERVAL_FREQ)
+				  NTP_SCALE_SHIFT) / NTP_INTERVAL_FREQ)
 
 /*
  * phase-lock loop variables
@@ -35,31 +39,69 @@
 /* TIME_ERROR prevents overwriting the CMOS clock */
 static int time_state = TIME_OK;	/* clock synchronization status	*/
 int time_status = STA_UNSYNC;		/* clock status bits		*/
+static long time_tai;			/* TAI offset (s)		*/
 static s64 time_offset;		/* time adjustment (ns)		*/
 static long time_constant = 2;		/* pll time constant		*/
 long time_maxerror = NTP_PHASE_LIMIT;	/* maximum error (us)		*/
 long time_esterror = NTP_PHASE_LIMIT;	/* estimated error (us)		*/
-long time_freq;				/* frequency offset (scaled ppm)*/
+static s64 time_freq;			/* frequency offset (scaled ns/s)*/
 static long time_reftime;		/* time at last adjustment (s)	*/
 long time_adjust;
-
-#define CLOCK_TICK_OVERFLOW	(LATCH * HZ - CLOCK_TICK_RATE)
-#define CLOCK_TICK_ADJUST	(((s64)CLOCK_TICK_OVERFLOW * NSEC_PER_SEC) / \
-					(s64)CLOCK_TICK_RATE)
+static long ntp_tick_adj;
 
 static void ntp_update_frequency(void)
 {
 	u64 second_length = (u64)(tick_usec * NSEC_PER_USEC * USER_HZ)
-				<< TICK_LENGTH_SHIFT;
-	second_length += (s64)CLOCK_TICK_ADJUST << TICK_LENGTH_SHIFT;
-	second_length += (s64)time_freq << (TICK_LENGTH_SHIFT - SHIFT_NSEC);
+				<< NTP_SCALE_SHIFT;
+	second_length += (s64)ntp_tick_adj << NTP_SCALE_SHIFT;
+	second_length += time_freq;
 
 	tick_length_base = second_length;
 
-	do_div(second_length, HZ);
-	tick_nsec = second_length >> TICK_LENGTH_SHIFT;
+	tick_nsec = div_u64(second_length, HZ) >> NTP_SCALE_SHIFT;
+	tick_length_base = div_u64(tick_length_base, NTP_INTERVAL_FREQ);
+}
+
+static void ntp_update_offset(long offset)
+{
+	long mtemp;
+	s64 freq_adj;
+
+	if (!(time_status & STA_PLL))
+		return;
+
+	if (!(time_status & STA_NANO))
+		offset *= NSEC_PER_USEC;
 
-	do_div(tick_length_base, NTP_INTERVAL_FREQ);
+	/*
+	 * Scale the phase adjustment and
+	 * clamp to the operating range.
+	 */
+	offset = min(offset, MAXPHASE);
+	offset = max(offset, -MAXPHASE);
+
+	/*
+	 * Select how the frequency is to be controlled
+	 * and in which mode (PLL or FLL).
+	 */
+	if (time_status & STA_FREQHOLD || time_reftime == 0)
+		time_reftime = xtime.tv_sec;
+	mtemp = xtime.tv_sec - time_reftime;
+	time_reftime = xtime.tv_sec;
+
+	freq_adj = (s64)offset * mtemp;
+	freq_adj <<= NTP_SCALE_SHIFT - 2 * (SHIFT_PLL + 2 + time_constant);
+	time_status &= ~STA_MODE;
+	if (mtemp >= MINSEC && (time_status & STA_FLL || mtemp > MAXSEC)) {
+		freq_adj += div_s64((s64)offset << (NTP_SCALE_SHIFT - SHIFT_FLL),
+				    mtemp);
+		time_status |= STA_MODE;
+	}
+	freq_adj += time_freq;
+	freq_adj = min(freq_adj, MAXFREQ_SCALED);
+	time_freq = max(freq_adj, -MAXFREQ_SCALED);
+
+	time_offset = div_s64((s64)offset << NTP_SCALE_SHIFT, NTP_INTERVAL_FREQ);
 }
 
 /**
@@ -81,62 +123,69 @@
 }
 
 /*
- * this routine handles the overflow of the microsecond field
- *
- * The tricky bits of code to handle the accurate clock support
- * were provided by Dave Mills (Mills@UDEL.EDU) of NTP fame.
- * They were originally developed for SUN and DEC kernels.
- * All the kudos should go to Dave for this stuff.
+ * Leap second processing. If in leap-insert state at the end of the
+ * day, the system clock is set back one second; if in leap-delete
+ * state, the system clock is set ahead one second.
  */
-void second_overflow(void)
+static enum hrtimer_restart ntp_leap_second(struct hrtimer *timer)
 {
-	long time_adj;
+	enum hrtimer_restart res = HRTIMER_NORESTART;
 
-	/* Bump the maxerror field */
-	time_maxerror += MAXFREQ >> SHIFT_USEC;
-	if (time_maxerror > NTP_PHASE_LIMIT) {
-		time_maxerror = NTP_PHASE_LIMIT;
-		time_status |= STA_UNSYNC;
-	}
+	write_seqlock(&xtime_lock);
 
-	/*
-	 * Leap second processing. If in leap-insert state at the end of the
-	 * day, the system clock is set back one second; if in leap-delete
-	 * state, the system clock is set ahead one second. The microtime()
-	 * routine or external clock driver will insure that reported time is
-	 * always monotonic. The ugly divides should be replaced.
-	 */
 	switch (time_state) {
 	case TIME_OK:
-		if (time_status & STA_INS)
-			time_state = TIME_INS;
-		else if (time_status & STA_DEL)
-			time_state = TIME_DEL;
 		break;
 	case TIME_INS:
-		if (xtime.tv_sec % 86400 == 0) {
 			xtime.tv_sec--;
 			wall_to_monotonic.tv_sec++;
 			time_state = TIME_OOP;
-			printk(KERN_NOTICE "Clock: inserting leap second "
-					"23:59:60 UTC\n");
-		}
+		printk(KERN_NOTICE "Clock: "
+		       "inserting leap second 23:59:60 UTC\n");
+		hrtimer_add_expires_ns(&leap_timer, NSEC_PER_SEC);
+		res = HRTIMER_RESTART;
 		break;
 	case TIME_DEL:
-		if ((xtime.tv_sec + 1) % 86400 == 0) {
 			xtime.tv_sec++;
+		time_tai--;
 			wall_to_monotonic.tv_sec--;
 			time_state = TIME_WAIT;
-			printk(KERN_NOTICE "Clock: deleting leap second "
-					"23:59:59 UTC\n");
-		}
+		printk(KERN_NOTICE "Clock: "
+		       "deleting leap second 23:59:59 UTC\n");
 		break;
 	case TIME_OOP:
+		time_tai++;
 		time_state = TIME_WAIT;
-		break;
+		/* fall through */
 	case TIME_WAIT:
 		if (!(time_status & (STA_INS | STA_DEL)))
 		time_state = TIME_OK;
+		break;
+	}
+	update_vsyscall(&xtime, clock);
+
+	write_sequnlock(&xtime_lock);
+
+	return res;
+}
+
+/*
+ * this routine handles the overflow of the microsecond field
+ *
+ * The tricky bits of code to handle the accurate clock support
+ * were provided by Dave Mills (Mills@UDEL.EDU) of NTP fame.
+ * They were originally developed for SUN and DEC kernels.
+ * All the kudos should go to Dave for this stuff.
+ */
+void second_overflow(void)
+{
+	s64 time_adj;
+
+	/* Bump the maxerror field */
+	time_maxerror += MAXFREQ / NSEC_PER_USEC;
+	if (time_maxerror > NTP_PHASE_LIMIT) {
+		time_maxerror = NTP_PHASE_LIMIT;
+		time_status |= STA_UNSYNC;
 	}
 
 	/*
@@ -146,7 +195,7 @@
 	tick_length = tick_length_base;
 	time_adj = shift_right(time_offset, SHIFT_PLL + time_constant);
 	time_offset -= time_adj;
-	tick_length += (s64)time_adj << (TICK_LENGTH_SHIFT - SHIFT_UPDATE);
+	tick_length += time_adj;
 
 	if (unlikely(time_adjust)) {
 		if (time_adjust > MAX_TICKADJ) {
@@ -157,35 +206,22 @@
 			tick_length -= MAX_TICKADJ_SCALED;
 		} else {
 			tick_length += (s64)(time_adjust * NSEC_PER_USEC /
-					NTP_INTERVAL_FREQ) << TICK_LENGTH_SHIFT;
+					NTP_INTERVAL_FREQ) << NTP_SCALE_SHIFT;
 			time_adjust = 0;
 		}
 	}
 }
 
-/*
- * Return how long ticks are at the moment, that is, how much time
- * update_wall_time_one_tick will add to xtime next time we call it
- * (assuming no calls to do_adjtimex in the meantime).
- * The return value is in fixed-point nanoseconds shifted by the
- * specified number of bits to the right of the binary point.
- * This function has no side-effects.
- */
-u64 current_tick_length(void)
-{
-	return tick_length;
-}
-
 #ifdef CONFIG_GENERIC_CMOS_UPDATE
 
 /* Disable the cmos update - used by virtualization and embedded */
 int no_sync_cmos_clock  __read_mostly;
 
-static void sync_cmos_clock(unsigned long dummy);
+static void sync_cmos_clock(struct work_struct *work);
 
-static DEFINE_TIMER(sync_cmos_timer, sync_cmos_clock, 0, 0);
+static DECLARE_DELAYED_WORK(sync_cmos_work, sync_cmos_clock);
 
-static void sync_cmos_clock(unsigned long dummy)
+static void sync_cmos_clock(struct work_struct *work)
 {
 	struct timespec now, next;
 	int fail = 1;
@@ -208,7 +244,7 @@
 	if (abs(now.tv_nsec - (NSEC_PER_SEC / 2)) <= tick_nsec / 2)
 		fail = update_persistent_clock(now);
 
-	next.tv_nsec = (NSEC_PER_SEC / 2) - now.tv_nsec;
+	next.tv_nsec = (NSEC_PER_SEC / 2) - now.tv_nsec - (TICK_NSEC / 2);
 	if (next.tv_nsec <= 0)
 		next.tv_nsec += NSEC_PER_SEC;
 
@@ -221,13 +257,13 @@
 		next.tv_sec++;
 		next.tv_nsec -= NSEC_PER_SEC;
 	}
-	mod_timer(&sync_cmos_timer, jiffies + timespec_to_jiffies(&next));
+	schedule_delayed_work(&sync_cmos_work, timespec_to_jiffies(&next));
 }
 
 static void notify_cmos_timer(void)
 {
 	if (!no_sync_cmos_clock)
-		mod_timer(&sync_cmos_timer, jiffies + 1);
+		schedule_delayed_work(&sync_cmos_work, 0);
 }
 
 #else
@@ -239,153 +275,146 @@
  */
 int do_adjtimex(struct timex *txc)
 {
-	long mtemp, save_adjust, rem;
-	s64 freq_adj, temp64;
+	struct timespec ts;
 	int result;
 
+	/* Validate the data before disabling interrupts */
+	if (txc->modes & ADJ_ADJTIME) {
+		/* singleshot must not be used with any other mode bits */
+		if (!(txc->modes & ADJ_OFFSET_SINGLESHOT))
+			return -EINVAL;
+		if (!(txc->modes & ADJ_OFFSET_READONLY) &&
+		    !capable(CAP_SYS_TIME))
+			return -EPERM;
+	} else {
 	/* In order to modify anything, you gotta be super-user! */
 	if (txc->modes && !capable(CAP_SYS_TIME))
 		return -EPERM;
 
-	/* Now we validate the data before disabling interrupts */
-
-	if ((txc->modes & ADJ_OFFSET_SINGLESHOT) == ADJ_OFFSET_SINGLESHOT)
-	  /* singleshot must not be used with any other mode bits */
-		if (txc->modes != ADJ_OFFSET_SINGLESHOT)
+		/* if the quartz is off by more than 10% something is VERY wrong! */
+		if (txc->modes & ADJ_TICK &&
+		    (txc->tick <  900000/USER_HZ ||
+		     txc->tick > 1100000/USER_HZ))
 			return -EINVAL;
 
-	if (txc->modes != ADJ_OFFSET_SINGLESHOT && (txc->modes & ADJ_OFFSET))
-	  /* adjustment Offset limited to +- .512 seconds */
-		if (txc->offset <= - MAXPHASE || txc->offset >= MAXPHASE )
-			return -EINVAL;
+		if (txc->modes & ADJ_STATUS && time_state != TIME_OK)
+			hrtimer_cancel(&leap_timer);
+	}
 
-	/* if the quartz is off by more than 10% something is VERY wrong ! */
-	if (txc->modes & ADJ_TICK)
-		if (txc->tick <  900000/USER_HZ ||
-		    txc->tick > 1100000/USER_HZ)
-			return -EINVAL;
+	getnstimeofday(&ts);
 
 	write_seqlock_irq(&xtime_lock);
-	result = time_state;	/* mostly `TIME_OK' */
 
-	/* Save for later - semantics of adjtime is to return old value */
-	save_adjust = time_adjust;
-
-#if 0	/* STA_CLOCKERR is never set yet */
-	time_status &= ~STA_CLOCKERR;		/* reset STA_CLOCKERR */
-#endif
 	/* If there are input parameters, then process them */
-	if (txc->modes)
-	{
-	    if (txc->modes & ADJ_STATUS)	/* only set allowed bits */
-		time_status =  (txc->status & ~STA_RONLY) |
-			      (time_status & STA_RONLY);
-
-	    if (txc->modes & ADJ_FREQUENCY) {	/* p. 22 */
-		if (txc->freq > MAXFREQ || txc->freq < -MAXFREQ) {
-		    result = -EINVAL;
-		    goto leave;
-		}
-		time_freq = ((s64)txc->freq * NSEC_PER_USEC)
-				>> (SHIFT_USEC - SHIFT_NSEC);
-	    }
-
-	    if (txc->modes & ADJ_MAXERROR) {
-		if (txc->maxerror < 0 || txc->maxerror >= NTP_PHASE_LIMIT) {
-		    result = -EINVAL;
-		    goto leave;
+	if (txc->modes & ADJ_ADJTIME) {
+		long save_adjust = time_adjust;
+
+		if (!(txc->modes & ADJ_OFFSET_READONLY)) {
+			/* adjtime() is independent from ntp_adjtime() */
+			time_adjust = txc->offset;
+			ntp_update_frequency();
 		}
-		time_maxerror = txc->maxerror;
+		txc->offset = save_adjust;
+		goto adj_done;
 	    }
+	if (txc->modes) {
+		long sec;
 
-	    if (txc->modes & ADJ_ESTERROR) {
-		if (txc->esterror < 0 || txc->esterror >= NTP_PHASE_LIMIT) {
-		    result = -EINVAL;
-		    goto leave;
-		}
-		time_esterror = txc->esterror;
+		if (txc->modes & ADJ_STATUS) {
+			if ((time_status & STA_PLL) &&
+			    !(txc->status & STA_PLL)) {
+				time_state = TIME_OK;
+				time_status = STA_UNSYNC;
 	    }
+			/* only set allowed bits */
+			time_status &= STA_RONLY;
+			time_status |= txc->status & ~STA_RONLY;
 
-	    if (txc->modes & ADJ_TIMECONST) {	/* p. 24 */
-		if (txc->constant < 0) {	/* NTP v4 uses values > 6 */
-		    result = -EINVAL;
-		    goto leave;
+			switch (time_state) {
+			case TIME_OK:
+			start_timer:
+				sec = ts.tv_sec;
+				if (time_status & STA_INS) {
+					time_state = TIME_INS;
+					sec += 86400 - sec % 86400;
+					hrtimer_start(&leap_timer, ktime_set(sec, 0), HRTIMER_MODE_ABS);
+				} else if (time_status & STA_DEL) {
+					time_state = TIME_DEL;
+					sec += 86400 - (sec + 1) % 86400;
+					hrtimer_start(&leap_timer, ktime_set(sec, 0), HRTIMER_MODE_ABS);
+				}
+				break;
+			case TIME_INS:
+			case TIME_DEL:
+				time_state = TIME_OK;
+				goto start_timer;
+				break;
+			case TIME_WAIT:
+				if (!(time_status & (STA_INS | STA_DEL)))
+					time_state = TIME_OK;
+				break;
+			case TIME_OOP:
+				hrtimer_restart(&leap_timer);
+				break;
 		}
-		time_constant = min(txc->constant + 4, (long)MAXTC);
 	    }
 
-	    if (txc->modes & ADJ_OFFSET) {	/* values checked earlier */
-		if (txc->modes == ADJ_OFFSET_SINGLESHOT) {
-		    /* adjtime() is independent from ntp_adjtime() */
-		    time_adjust = txc->offset;
+		if (txc->modes & ADJ_NANO)
+			time_status |= STA_NANO;
+		if (txc->modes & ADJ_MICRO)
+			time_status &= ~STA_NANO;
+
+		if (txc->modes & ADJ_FREQUENCY) {
+			time_freq = (s64)txc->freq * PPM_SCALE;
+			time_freq = min(time_freq, MAXFREQ_SCALED);
+			time_freq = max(time_freq, -MAXFREQ_SCALED);
 		}
-		else if (time_status & STA_PLL) {
-		    time_offset = txc->offset * NSEC_PER_USEC;
 
-		    /*
-		     * Scale the phase adjustment and
-		     * clamp to the operating range.
-		     */
-		    time_offset = min(time_offset, (s64)MAXPHASE * NSEC_PER_USEC);
-		    time_offset = max(time_offset, (s64)-MAXPHASE * NSEC_PER_USEC);
+		if (txc->modes & ADJ_MAXERROR)
+			time_maxerror = txc->maxerror;
+		if (txc->modes & ADJ_ESTERROR)
+			time_esterror = txc->esterror;
 
-		    /*
-		     * Select whether the frequency is to be controlled
-		     * and in which mode (PLL or FLL). Clamp to the operating
-		     * range. Ugly multiply/divide should be replaced someday.
-		     */
+		if (txc->modes & ADJ_TIMECONST) {
+			time_constant = txc->constant;
+			if (!(time_status & STA_NANO))
+				time_constant += 4;
+			time_constant = min(time_constant, (long)MAXTC);
+			time_constant = max(time_constant, 0l);
+		}
 
-		    if (time_status & STA_FREQHOLD || time_reftime == 0)
-		        time_reftime = xtime.tv_sec;
-		    mtemp = xtime.tv_sec - time_reftime;
-		    time_reftime = xtime.tv_sec;
+		if (txc->modes & ADJ_TAI && txc->constant > 0)
+			time_tai = txc->constant;
 
-		    freq_adj = time_offset * mtemp;
-		    freq_adj = shift_right(freq_adj, time_constant * 2 +
-					   (SHIFT_PLL + 2) * 2 - SHIFT_NSEC);
-		    if (mtemp >= MINSEC && (time_status & STA_FLL || mtemp > MAXSEC)) {
-			temp64 = time_offset << (SHIFT_NSEC - SHIFT_FLL);
-			if (time_offset < 0) {
-			    temp64 = -temp64;
-			    do_div(temp64, mtemp);
-			    freq_adj -= temp64;
-			} else {
-			    do_div(temp64, mtemp);
-			    freq_adj += temp64;
-			}
-		    }
-		    freq_adj += time_freq;
-		    freq_adj = min(freq_adj, (s64)MAXFREQ_NSEC);
-		    time_freq = max(freq_adj, (s64)-MAXFREQ_NSEC);
-		    time_offset = div_long_long_rem_signed(time_offset,
-							   NTP_INTERVAL_FREQ,
-							   &rem);
-		    time_offset <<= SHIFT_UPDATE;
-		} /* STA_PLL */
-	    } /* txc->modes & ADJ_OFFSET */
+		if (txc->modes & ADJ_OFFSET)
+			ntp_update_offset(txc->offset);
 	    if (txc->modes & ADJ_TICK)
 		tick_usec = txc->tick;
 
 	    if (txc->modes & (ADJ_TICK|ADJ_FREQUENCY|ADJ_OFFSET))
 		    ntp_update_frequency();
-	} /* txc->modes */
-leave:	if ((time_status & (STA_UNSYNC|STA_CLOCKERR)) != 0)
+	}
+
+	txc->offset = shift_right(time_offset * NTP_INTERVAL_FREQ,
+				  NTP_SCALE_SHIFT);
+	if (!(time_status & STA_NANO))
+		txc->offset /= NSEC_PER_USEC;
+
+adj_done:
+	result = time_state;	/* mostly `TIME_OK' */
+	if (time_status & (STA_UNSYNC|STA_CLOCKERR))
 		result = TIME_ERROR;
 
-	if ((txc->modes & ADJ_OFFSET_SINGLESHOT) == ADJ_OFFSET_SINGLESHOT)
-		txc->offset = save_adjust;
-	else
-		txc->offset = ((long)shift_right(time_offset, SHIFT_UPDATE)) *
-	    			NTP_INTERVAL_FREQ / 1000;
-	txc->freq	   = (time_freq / NSEC_PER_USEC) <<
-				(SHIFT_USEC - SHIFT_NSEC);
+	txc->freq	   = shift_right((time_freq >> PPM_SCALE_INV_SHIFT) *
+					 (s64)PPM_SCALE_INV, NTP_SCALE_SHIFT);
 	txc->maxerror	   = time_maxerror;
 	txc->esterror	   = time_esterror;
 	txc->status	   = time_status;
 	txc->constant	   = time_constant;
 	txc->precision	   = 1;
-	txc->tolerance	   = MAXFREQ;
+	txc->tolerance	   = MAXFREQ_SCALED / PPM_SCALE;
 	txc->tick	   = tick_usec;
+	txc->tai	   = time_tai;
 
 	/* PPS is not implemented, so these are zero */
 	txc->ppsfreq	   = 0;
@@ -397,7 +426,28 @@
 	txc->errcnt	   = 0;
 	txc->stbcnt	   = 0;
 	write_sequnlock_irq(&xtime_lock);
-	do_gettimeofday(&txc->time);
+
+	txc->time.tv_sec = ts.tv_sec;
+	txc->time.tv_usec = ts.tv_nsec;
+	if (!(time_status & STA_NANO))
+		txc->time.tv_usec /= NSEC_PER_USEC;
+
 	notify_cmos_timer();
-	return(result);
+
+	return result;
+}
+
+static int __init ntp_tick_adj_setup(char *str)
+{
+	ntp_tick_adj = simple_strtol(str, NULL, 0);
+	return 1;
+}
+
+__setup("ntp_tick_adj=", ntp_tick_adj_setup);
+
+void __init ntp_init(void)
+{
+	ntp_clear();
+	hrtimer_init(&leap_timer, CLOCK_REALTIME, HRTIMER_MODE_ABS);
+	leap_timer.function = ntp_leap_second;
 }

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

* Re: adjtimex system man page EINVAL
  2009-05-22 11:17 adjtimex system man page EINVAL naresh kamboju
@ 2009-06-02  5:07 ` Michael Kerrisk
  2009-06-04 11:14   ` naresh kamboju
  0 siblings, 1 reply; 6+ messages in thread
From: Michael Kerrisk @ 2009-06-02  5:07 UTC (permalink / raw)
  To: naresh kamboju; +Cc: ziegler, akpm, johnstul, zippel, linux-kernel

Naresh,

On Fri, May 22, 2009 at 1:17 PM, naresh kamboju <naresh.kernel@gmail.com> wrote:
> Hi,
>
> Regarding adjtimex system man page,
>
> Since there are modifications noticed in
> /kerel/time/ntp.c
> /include/linux/timex.h
>
> compared with /kerel/time/ntp.c 2.6.23 and 2.6.29 and above i have
> attached adjtimex_2.6.23_vs_2.6.29.log : line number 330.
>
> In adjtimex (2) man page under the EINVAL Error check section changes
> are required w.r.t buf.offset.
> Could you conform and update the man page.

Could you please summarize in a couple of sentence what the actual
changes are that you think are required.

Cheers,

Michael


-- 
Michael Kerrisk
Linux man-pages maintainer; http://www.kernel.org/doc/man-pages/
git://git.kernel.org/pub/scm/docs/man-pages/man-pages.git
man-pages online: http://www.kernel.org/doc/man-pages/online_pages.html
Found a bug? http://www.kernel.org/doc/man-pages/reporting_bugs.html

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

* Re: adjtimex system man page EINVAL
  2009-06-02  5:07 ` Michael Kerrisk
@ 2009-06-04 11:14   ` naresh kamboju
  2009-07-17  7:07     ` naresh kamboju
  0 siblings, 1 reply; 6+ messages in thread
From: naresh kamboju @ 2009-06-04 11:14 UTC (permalink / raw)
  To: mtk.manpages; +Cc: ziegler, akpm, johnstul, zippel, linux-kernel, saji.kumar

[-- Attachment #1: Type: text/plain, Size: 2245 bytes --]

Dear Michael Kerrisk,

After comparing the changes between 2.6.25 and 2.6.29 kernels
As per my understanding EINVAL error check is removed with
timex.offset after 2.6.25 kernels and above.

To make sure the offset value following lines are added in
linux-2.6.29/kernel/time/ntp.c +80


+       /*
+        * Scale the phase adjustment and
+        * clamp to the operating range.
+        */
+       offset = min(offset, MAXPHASE);
+       offset = max(offset, -MAXPHASE);
+


I have attached patch as adjtimex_man.patch


Best wishes,
Naresh Kamboju

Signed-off-by: Naresh Kamboju < naresh.kernel@gmail.com >
diff -Naurb man-pages-3.21/man2/adjtimex.2 man-pages-3.21_mod/man2/adjtimex.2
--- man-pages-3.21/man2/adjtimex.2      2009-04-15 21:35:32.000000000 +0530
+++ man-pages-3.21_mod/man2/adjtimex.2  2009-06-04 14:19:34.000000000 +0530
@@ -118,7 +118,8 @@
 .B EINVAL
 An attempt is made to set
 .I buf.offset
-to a value outside the range \-131071 to +131071,
+to a value outside the range \-131071 to +131071 applicable upto 2.6.25
+kernels, EINVAL error check with buf.offset been removed from 2.6.25 and above,
 or to set
 .I buf.status
 to a value other than those listed above,





On Tue, Jun 2, 2009 at 10:37 AM, Michael Kerrisk
<mtk.manpages@googlemail.com> wrote:
> Naresh,
>
> On Fri, May 22, 2009 at 1:17 PM, naresh kamboju <naresh.kernel@gmail.com> wrote:
>> Hi,
>>
>> Regarding adjtimex system man page,
>>
>> Since there are modifications noticed in
>> /kerel/time/ntp.c
>> /include/linux/timex.h
>>
>> compared with /kerel/time/ntp.c 2.6.23 and 2.6.29 and above i have
>> attached adjtimex_2.6.23_vs_2.6.29.log : line number 330.
>>
>> In adjtimex (2) man page under the EINVAL Error check section changes
>> are required w.r.t buf.offset.
>> Could you conform and update the man page.
>
> Could you please summarize in a couple of sentence what the actual
> changes are that you think are required.
>
> Cheers,
>
> Michael
>
>
> --
> Michael Kerrisk
> Linux man-pages maintainer; http://www.kernel.org/doc/man-pages/
> git://git.kernel.org/pub/scm/docs/man-pages/man-pages.git
> man-pages online: http://www.kernel.org/doc/man-pages/online_pages.html
> Found a bug? http://www.kernel.org/doc/man-pages/reporting_bugs.html
>

[-- Attachment #2: adjtimex_man.patch --]
[-- Type: application/octet-stream, Size: 572 bytes --]

diff -Naurb man-pages-3.21/man2/adjtimex.2 man-pages-3.21_mod/man2/adjtimex.2
--- man-pages-3.21/man2/adjtimex.2	2009-04-15 21:35:32.000000000 +0530
+++ man-pages-3.21_mod/man2/adjtimex.2	2009-06-04 14:19:34.000000000 +0530
@@ -118,7 +118,8 @@
 .B EINVAL
 An attempt is made to set
 .I buf.offset
-to a value outside the range \-131071 to +131071,
+to a value outside the range \-131071 to +131071 applicable upto 2.6.25 
+kernels, EINVAL error check with buf.offset been removed from 2.6.25 and above,
 or to set
 .I buf.status
 to a value other than those listed above,

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

* Re: adjtimex system man page EINVAL
  2009-06-04 11:14   ` naresh kamboju
@ 2009-07-17  7:07     ` naresh kamboju
  2009-07-29  8:22         ` [LTP] " naresh kamboju
  0 siblings, 1 reply; 6+ messages in thread
From: naresh kamboju @ 2009-07-17  7:07 UTC (permalink / raw)
  To: mtk.manpages; +Cc: ziegler, akpm, johnstul, zippel, linux-kernel, saji.kumar

Dear Michael Kerrisk,

As per our discussion … I have sent below mail explaining the issue
with adjtimex man page.
Is that information and patch  OK?

When would be the next man page release?

Please let me know if there are any issues.

Best regards
Naresh Kamboju



On Thu, Jun 4, 2009 at 4:44 PM, naresh kamboju<naresh.kernel@gmail.com> wrote:
> Dear Michael Kerrisk,
>
> After comparing the changes between 2.6.25 and 2.6.29 kernels
> As per my understanding EINVAL error check is removed with
> timex.offset after 2.6.25 kernels and above.
>
> To make sure the offset value following lines are added in
> linux-2.6.29/kernel/time/ntp.c +80
>
>
> +       /*
> +        * Scale the phase adjustment and
> +        * clamp to the operating range.
> +        */
> +       offset = min(offset, MAXPHASE);
> +       offset = max(offset, -MAXPHASE);
> +
>
>
> I have attached patch as adjtimex_man.patch
>
>
> Best wishes,
> Naresh Kamboju
>
> Signed-off-by: Naresh Kamboju < naresh.kernel@gmail.com >
> diff -Naurb man-pages-3.21/man2/adjtimex.2 man-pages-3.21_mod/man2/adjtimex.2
> --- man-pages-3.21/man2/adjtimex.2      2009-04-15 21:35:32.000000000 +0530
> +++ man-pages-3.21_mod/man2/adjtimex.2  2009-06-04 14:19:34.000000000 +0530
> @@ -118,7 +118,8 @@
>  .B EINVAL
>  An attempt is made to set
>  .I buf.offset
> -to a value outside the range \-131071 to +131071,
> +to a value outside the range \-131071 to +131071 applicable upto 2.6.25
> +kernels, EINVAL error check with buf.offset been removed from 2.6.25 and above,
>  or to set
>  .I buf.status
>  to a value other than those listed above,
>
>
>
>
>
> On Tue, Jun 2, 2009 at 10:37 AM, Michael Kerrisk
> <mtk.manpages@googlemail.com> wrote:
>> Naresh,
>>
>> On Fri, May 22, 2009 at 1:17 PM, naresh kamboju <naresh.kernel@gmail.com> wrote:
>>> Hi,
>>>
>>> Regarding adjtimex system man page,
>>>
>>> Since there are modifications noticed in
>>> /kerel/time/ntp.c
>>> /include/linux/timex.h
>>>
>>> compared with /kerel/time/ntp.c 2.6.23 and 2.6.29 and above i have
>>> attached adjtimex_2.6.23_vs_2.6.29.log : line number 330.
>>>
>>> In adjtimex (2) man page under the EINVAL Error check section changes
>>> are required w.r.t buf.offset.
>>> Could you conform and update the man page.
>>
>> Could you please summarize in a couple of sentence what the actual
>> changes are that you think are required.
>>
>> Cheers,
>>
>> Michael
>>
>>
>> --
>> Michael Kerrisk
>> Linux man-pages maintainer; http://www.kernel.org/doc/man-pages/
>> git://git.kernel.org/pub/scm/docs/man-pages/man-pages.git
>> man-pages online: http://www.kernel.org/doc/man-pages/online_pages.html
>> Found a bug? http://www.kernel.org/doc/man-pages/reporting_bugs.html
>>
>

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

* Re: adjtimex system man page EINVAL
  2009-07-17  7:07     ` naresh kamboju
@ 2009-07-29  8:22         ` naresh kamboju
  0 siblings, 0 replies; 6+ messages in thread
From: naresh kamboju @ 2009-07-29  8:22 UTC (permalink / raw)
  To: mtk.manpages
  Cc: mtk.manpages, ziegler, akpm, johnstul, zippel, linux-kernel,
	saji.kumar, ltp-list, michal.simek, Garrett Cooper,
	Mike Frysinger, Subrata Modak

[-- Attachment #1: Type: text/plain, Size: 4825 bytes --]

Hi  Michael Kerrisk,

With reference to the LTP (Linux Test Project) test cases
ltp/testcases/kernel/syscalls/adjtimex/adjtimex02.c

GIT commit:
http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commitdiff;h=eea83d896e318bda54be2d2770d2c5d6668d11db

There are changes noticed in latest kernel from 2.6.26 and above.
adjtimex EINVAL error check for offset is removed from 2.6.26 and above kernels

Kernels source lines are

To make sure the offset value following lines are added in
linux/kernel/time/ntp.c

+       /*
+        * Scale the phase adjustment and
+        * clamp to the operating range.
+        */
+       offset = min(offset, MAXPHASE);
+       offset = max(offset, -MAXPHASE);
+

Please review the patch.
If you have any issues please let me know.

Ref Links:

GIT commit:
http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commitdiff;h=eea83d896e318bda54be2d2770d2c5d6668d11db

LTP:
http://www.mail-archive.com/ltp-list@lists.sourceforge.net/msg02498.html

http://ltp.cvs.sourceforge.net/viewvc/ltp/ltp/testcases/kernel/syscalls/adjtimex/adjtimex02.c?view=log

Best regards,
Naresh Kamboju

Signed-off-by: Naresh Kamboju < naresh.kernel@gmail.com >

diff -Naurb man-pages-3.21/man2/adjtimex.2 man-pages-3.21_mod/man2/adjtimex.2
--- man-pages-3.21/man2/adjtimex.2	2009-04-15 21:35:32.000000000 +0530
+++ man-pages-3.21_mod/man2/adjtimex.2	2009-06-04 14:19:34.000000000 +0530
@@ -118,7 +118,8 @@
 .B EINVAL
 An attempt is made to set
 .I buf.offset
-to a value outside the range \-131071 to +131071,
+to a value outside the range \-131071 to +131071 applicable upto 2.6.25
+kernels, EINVAL error check with buf.offset been removed from 2.6.25 and above,
 or to set
 .I buf.status
 to a value other than those listed above,



On Fri, Jul 17, 2009 at 12:37 PM, naresh kamboju<naresh.kernel@gmail.com> wrote:
> Dear Michael Kerrisk,
>
> As per our discussion … I have sent below mail explaining the issue
> with adjtimex man page.
> Is that information and patch  OK?
>
> When would be the next man page release?
>
> Please let me know if there are any issues.
>
> Best regards
> Naresh Kamboju
>
>
>
> On Thu, Jun 4, 2009 at 4:44 PM, naresh kamboju<naresh.kernel@gmail.com> wrote:
>> Dear Michael Kerrisk,
>>
>> After comparing the changes between 2.6.25 and 2.6.29 kernels
>> As per my understanding EINVAL error check is removed with
>> timex.offset after 2.6.25 kernels and above.
>>
>> To make sure the offset value following lines are added in
>> linux-2.6.29/kernel/time/ntp.c +80
>>
>>
>> +       /*
>> +        * Scale the phase adjustment and
>> +        * clamp to the operating range.
>> +        */
>> +       offset = min(offset, MAXPHASE);
>> +       offset = max(offset, -MAXPHASE);
>> +
>>
>>
>> I have attached patch as adjtimex_man.patch
>>
>>
>> Best wishes,
>> Naresh Kamboju
>>
>> Signed-off-by: Naresh Kamboju < naresh.kernel@gmail.com >
>> diff -Naurb man-pages-3.21/man2/adjtimex.2 man-pages-3.21_mod/man2/adjtimex.2
>> --- man-pages-3.21/man2/adjtimex.2      2009-04-15 21:35:32.000000000 +0530
>> +++ man-pages-3.21_mod/man2/adjtimex.2  2009-06-04 14:19:34.000000000 +0530
>> @@ -118,7 +118,8 @@
>>  .B EINVAL
>>  An attempt is made to set
>>  .I buf.offset
>> -to a value outside the range \-131071 to +131071,
>> +to a value outside the range \-131071 to +131071 applicable upto 2.6.25
>> +kernels, EINVAL error check with buf.offset been removed from 2.6.25 and above,
>>  or to set
>>  .I buf.status
>>  to a value other than those listed above,
>>
>>
>>
>>
>>
>> On Tue, Jun 2, 2009 at 10:37 AM, Michael Kerrisk
>> <mtk.manpages@googlemail.com> wrote:
>>> Naresh,
>>>
>>> On Fri, May 22, 2009 at 1:17 PM, naresh kamboju <naresh.kernel@gmail.com> wrote:
>>>> Hi,
>>>>
>>>> Regarding adjtimex system man page,
>>>>
>>>> Since there are modifications noticed in
>>>> /kerel/time/ntp.c
>>>> /include/linux/timex.h
>>>>
>>>> compared with /kerel/time/ntp.c 2.6.23 and 2.6.29 and above i have
>>>> attached adjtimex_2.6.23_vs_2.6.29.log : line number 330.
>>>>
>>>> In adjtimex (2) man page under the EINVAL Error check section changes
>>>> are required w.r.t buf.offset.
>>>> Could you conform and update the man page.
>>>
>>> Could you please summarize in a couple of sentence what the actual
>>> changes are that you think are required.
>>>
>>> Cheers,
>>>
>>> Michael
>>>
>>>
>>> --
>>> Michael Kerrisk
>>> Linux man-pages maintainer; http://www.kernel.org/doc/man-pages/
>>> git://git.kernel.org/pub/scm/docs/man-pages/man-pages.git
>>> man-pages online: http://www.kernel.org/doc/man-pages/online_pages.html
>>> Found a bug? http://www.kernel.org/doc/man-pages/reporting_bugs.html
>>>
>>
>

[-- Attachment #2: adjtimex_man.patch --]
[-- Type: application/octet-stream, Size: 572 bytes --]

diff -Naurb man-pages-3.21/man2/adjtimex.2 man-pages-3.21_mod/man2/adjtimex.2
--- man-pages-3.21/man2/adjtimex.2	2009-04-15 21:35:32.000000000 +0530
+++ man-pages-3.21_mod/man2/adjtimex.2	2009-06-04 14:19:34.000000000 +0530
@@ -118,7 +118,8 @@
 .B EINVAL
 An attempt is made to set
 .I buf.offset
-to a value outside the range \-131071 to +131071,
+to a value outside the range \-131071 to +131071 applicable upto 2.6.25 
+kernels, EINVAL error check with buf.offset been removed from 2.6.25 and above,
 or to set
 .I buf.status
 to a value other than those listed above,

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

* Re: [LTP] adjtimex system man page EINVAL
@ 2009-07-29  8:22         ` naresh kamboju
  0 siblings, 0 replies; 6+ messages in thread
From: naresh kamboju @ 2009-07-29  8:22 UTC (permalink / raw)
  To: mtk.manpages
  Cc: ltp-list, Mike Frysinger, zippel, johnstul, linux-kernel,
	saji.kumar, ziegler, akpm

[-- Attachment #1: Type: text/plain, Size: 4825 bytes --]

Hi  Michael Kerrisk,

With reference to the LTP (Linux Test Project) test cases
ltp/testcases/kernel/syscalls/adjtimex/adjtimex02.c

GIT commit:
http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commitdiff;h=eea83d896e318bda54be2d2770d2c5d6668d11db

There are changes noticed in latest kernel from 2.6.26 and above.
adjtimex EINVAL error check for offset is removed from 2.6.26 and above kernels

Kernels source lines are

To make sure the offset value following lines are added in
linux/kernel/time/ntp.c

+       /*
+        * Scale the phase adjustment and
+        * clamp to the operating range.
+        */
+       offset = min(offset, MAXPHASE);
+       offset = max(offset, -MAXPHASE);
+

Please review the patch.
If you have any issues please let me know.

Ref Links:

GIT commit:
http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commitdiff;h=eea83d896e318bda54be2d2770d2c5d6668d11db

LTP:
http://www.mail-archive.com/ltp-list@lists.sourceforge.net/msg02498.html

http://ltp.cvs.sourceforge.net/viewvc/ltp/ltp/testcases/kernel/syscalls/adjtimex/adjtimex02.c?view=log

Best regards,
Naresh Kamboju

Signed-off-by: Naresh Kamboju < naresh.kernel@gmail.com >

diff -Naurb man-pages-3.21/man2/adjtimex.2 man-pages-3.21_mod/man2/adjtimex.2
--- man-pages-3.21/man2/adjtimex.2	2009-04-15 21:35:32.000000000 +0530
+++ man-pages-3.21_mod/man2/adjtimex.2	2009-06-04 14:19:34.000000000 +0530
@@ -118,7 +118,8 @@
 .B EINVAL
 An attempt is made to set
 .I buf.offset
-to a value outside the range \-131071 to +131071,
+to a value outside the range \-131071 to +131071 applicable upto 2.6.25
+kernels, EINVAL error check with buf.offset been removed from 2.6.25 and above,
 or to set
 .I buf.status
 to a value other than those listed above,



On Fri, Jul 17, 2009 at 12:37 PM, naresh kamboju<naresh.kernel@gmail.com> wrote:
> Dear Michael Kerrisk,
>
> As per our discussion … I have sent below mail explaining the issue
> with adjtimex man page.
> Is that information and patch  OK?
>
> When would be the next man page release?
>
> Please let me know if there are any issues.
>
> Best regards
> Naresh Kamboju
>
>
>
> On Thu, Jun 4, 2009 at 4:44 PM, naresh kamboju<naresh.kernel@gmail.com> wrote:
>> Dear Michael Kerrisk,
>>
>> After comparing the changes between 2.6.25 and 2.6.29 kernels
>> As per my understanding EINVAL error check is removed with
>> timex.offset after 2.6.25 kernels and above.
>>
>> To make sure the offset value following lines are added in
>> linux-2.6.29/kernel/time/ntp.c +80
>>
>>
>> +       /*
>> +        * Scale the phase adjustment and
>> +        * clamp to the operating range.
>> +        */
>> +       offset = min(offset, MAXPHASE);
>> +       offset = max(offset, -MAXPHASE);
>> +
>>
>>
>> I have attached patch as adjtimex_man.patch
>>
>>
>> Best wishes,
>> Naresh Kamboju
>>
>> Signed-off-by: Naresh Kamboju < naresh.kernel@gmail.com >
>> diff -Naurb man-pages-3.21/man2/adjtimex.2 man-pages-3.21_mod/man2/adjtimex.2
>> --- man-pages-3.21/man2/adjtimex.2      2009-04-15 21:35:32.000000000 +0530
>> +++ man-pages-3.21_mod/man2/adjtimex.2  2009-06-04 14:19:34.000000000 +0530
>> @@ -118,7 +118,8 @@
>>  .B EINVAL
>>  An attempt is made to set
>>  .I buf.offset
>> -to a value outside the range \-131071 to +131071,
>> +to a value outside the range \-131071 to +131071 applicable upto 2.6.25
>> +kernels, EINVAL error check with buf.offset been removed from 2.6.25 and above,
>>  or to set
>>  .I buf.status
>>  to a value other than those listed above,
>>
>>
>>
>>
>>
>> On Tue, Jun 2, 2009 at 10:37 AM, Michael Kerrisk
>> <mtk.manpages@googlemail.com> wrote:
>>> Naresh,
>>>
>>> On Fri, May 22, 2009 at 1:17 PM, naresh kamboju <naresh.kernel@gmail.com> wrote:
>>>> Hi,
>>>>
>>>> Regarding adjtimex system man page,
>>>>
>>>> Since there are modifications noticed in
>>>> /kerel/time/ntp.c
>>>> /include/linux/timex.h
>>>>
>>>> compared with /kerel/time/ntp.c 2.6.23 and 2.6.29 and above i have
>>>> attached adjtimex_2.6.23_vs_2.6.29.log : line number 330.
>>>>
>>>> In adjtimex (2) man page under the EINVAL Error check section changes
>>>> are required w.r.t buf.offset.
>>>> Could you conform and update the man page.
>>>
>>> Could you please summarize in a couple of sentence what the actual
>>> changes are that you think are required.
>>>
>>> Cheers,
>>>
>>> Michael
>>>
>>>
>>> --
>>> Michael Kerrisk
>>> Linux man-pages maintainer; http://www.kernel.org/doc/man-pages/
>>> git://git.kernel.org/pub/scm/docs/man-pages/man-pages.git
>>> man-pages online: http://www.kernel.org/doc/man-pages/online_pages.html
>>> Found a bug? http://www.kernel.org/doc/man-pages/reporting_bugs.html
>>>
>>
>

[-- Attachment #2: adjtimex_man.patch --]
[-- Type: application/octet-stream, Size: 572 bytes --]

diff -Naurb man-pages-3.21/man2/adjtimex.2 man-pages-3.21_mod/man2/adjtimex.2
--- man-pages-3.21/man2/adjtimex.2	2009-04-15 21:35:32.000000000 +0530
+++ man-pages-3.21_mod/man2/adjtimex.2	2009-06-04 14:19:34.000000000 +0530
@@ -118,7 +118,8 @@
 .B EINVAL
 An attempt is made to set
 .I buf.offset
-to a value outside the range \-131071 to +131071,
+to a value outside the range \-131071 to +131071 applicable upto 2.6.25 
+kernels, EINVAL error check with buf.offset been removed from 2.6.25 and above,
 or to set
 .I buf.status
 to a value other than those listed above,

[-- Attachment #3: Type: text/plain, Size: 355 bytes --]

------------------------------------------------------------------------------
Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day 
trial. Simplify your report design, integration and deployment - and focus on 
what you do best, core application coding. Discover what's new with 
Crystal Reports now.  http://p.sf.net/sfu/bobj-july

[-- Attachment #4: Type: text/plain, Size: 155 bytes --]

_______________________________________________
Ltp-list mailing list
Ltp-list@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ltp-list

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

end of thread, other threads:[~2009-07-29  8:23 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2009-05-22 11:17 adjtimex system man page EINVAL naresh kamboju
2009-06-02  5:07 ` Michael Kerrisk
2009-06-04 11:14   ` naresh kamboju
2009-07-17  7:07     ` naresh kamboju
2009-07-29  8:22       ` naresh kamboju
2009-07-29  8:22         ` [LTP] " naresh kamboju

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.