All of lore.kernel.org
 help / color / mirror / Atom feed
From: john stultz <johnstul@us.ibm.com>
To: zippel@linux-m68k.org
Cc: linux-kernel@vger.kernel.org, akpm@linux-foundation.org
Subject: Re: [PATCH 8/8] handle leap second via timer
Date: Fri, 14 Mar 2008 13:24:04 -0700	[thread overview]
Message-ID: <1205526244.6122.5.camel@localhost.localdomain> (raw)
In-Reply-To: <20080314195737.212526899@linux-m68k.org>


On Fri, 2008-03-14 at 19:40 +0100, zippel@linux-m68k.org wrote:
> plain text document attachment (leap_sec)
> Remove the leap second handling from second_overflow(), which doesn't
> has to check for it every second anymore. With CONFIG_NO_HZ this also
> makes sure the leap second is handled close to the full second.
> Additionally this makes it possible to abort a leap second properly
> by resetting the STA_INS/STA_DEL status bits.
> 
> Signed-off-by: Roman Zippel <zippel@linux-m68k.org>

Looks interesting. Small comment below.


> -void second_overflow(void)
> +static enum hrtimer_restart ntp_leap_second(struct hrtimer *timer)
>  {
> -	s64 time_adj;
> +	enum hrtimer_restart res = HRTIMER_NORESTART;
> 
> -	/* 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;
> -	}
> +	write_seqlock_irq(&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");
> -		}
> +		xtime.tv_sec--;
> +		wall_to_monotonic.tv_sec++;
> +		time_state = TIME_OOP;
> +		printk(KERN_NOTICE "Clock: "
> +		       "inserting leap second 23:59:60 UTC\n");
> +		leap_timer.expires = ktime_add_ns(leap_timer.expires,
> +						  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");
> -		}
> +		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");
>  		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);
> +

<snip>

> Index: linux-2.6/include/linux/clocksource.h
> ===================================================================
> --- linux-2.6.orig/include/linux/clocksource.h	2008-03-10 19:50:33.000000000 +0100
> +++ linux-2.6/include/linux/clocksource.h	2008-03-13 10:33:24.000000000 +0100
> @@ -93,6 +93,8 @@ struct clocksource {
>  #endif
>  };
> 
> +extern struct clocksource *clock;	/* current clocksource */
> +
>  /*
>   * Clock source flags bits::
>   */

Instead of exporting the clocksource making it global, could you use a
timekeeping_insert/remove_second() style interface?

That would help remove the xtime/wall_to_monotonic references in ntp.c
as well, cleaning up things nicely.

thanks
-john



  reply	other threads:[~2008-03-14 20:24 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-03-14 18:40 [PATCH 0/8] NTP updates zippel
2008-03-14 18:40 ` [PATCH 1/8] cleanup ntp.c zippel
2008-03-14 20:30   ` john stultz
2008-03-15  3:21     ` Roman Zippel
2008-03-14 18:40 ` [PATCH 2/8] NTP4 user space bits update zippel
2008-03-14 20:36   ` john stultz
2008-03-15  3:29     ` Roman Zippel
2008-03-14 18:40 ` [PATCH 3/8] increase time_freq resolution zippel
2008-03-14 18:40 ` [PATCH 4/8] increase time_offset resolution zippel
2008-03-14 18:40 ` [PATCH 5/8] support for TAI zippel
2008-03-14 20:55   ` john stultz
2008-03-14 18:40 ` [PATCH 6/8] Rename TICK_LENGTH_SHIFT to NTP_SCALE_SHIFT zippel
2008-03-14 18:40 ` [PATCH 7/8] Remove current_tick_length() zippel
2008-03-15  2:41   ` john stultz
2008-03-15  3:32     ` Roman Zippel
2008-03-15  3:48       ` john stultz
2008-03-15  4:18         ` Roman Zippel
2008-03-15 16:29           ` Ray Lee
2008-03-15 17:14             ` Roman Zippel
2008-03-18  1:01               ` john stultz
2008-03-26  1:53                 ` Roman Zippel
2008-03-14 18:40 ` [PATCH 8/8] handle leap second via timer zippel
2008-03-14 20:24   ` john stultz [this message]
2008-03-15  3:18     ` Roman Zippel
2008-03-17 22:18       ` Andrew Morton
2008-03-21 14:15         ` Thomas Gleixner
2008-03-14 23:03 ` [PATCH 0/8] NTP updates john stultz
2008-03-15  3:15   ` Roman Zippel

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1205526244.6122.5.camel@localhost.localdomain \
    --to=johnstul@us.ibm.com \
    --cc=akpm@linux-foundation.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=zippel@linux-m68k.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.