Commit 8ef38609 authored by Atsushi Nemoto's avatar Atsushi Nemoto Committed by Linus Torvalds

[PATCH] kill wall_jiffies

With 2.6.18-rc4-mm2, now wall_jiffies will always be the same as jiffies.
So we can kill wall_jiffies completely.

This is just a cleanup and logically should not change any real behavior
except for one thing: RTC updating code in (old) ppc and xtensa use a
condition "jiffies - wall_jiffies == 1".  This condition is never met so I
suppose it is just a bug.  I just remove that condition only instead of
kill the whole "if" block.

[heiko.carstens@de.ibm.com: s390 build fix and cleanup]
Signed-off-by: default avatarAtsushi Nemoto <anemo@mba.ocn.ne.jp>
Cc: Andi Kleen <ak@muc.de>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Cc: Richard Henderson <rth@twiddle.net>
Cc: Ivan Kokshaysky <ink@jurassic.park.msu.ru>
Cc: Russell King <rmk@arm.linux.org.uk>
Cc: Ian Molton <spyro@f2s.com>
Cc: Mikael Starvik <starvik@axis.com>
Cc: David Howells <dhowells@redhat.com>
Cc: Yoshinori Sato <ysato@users.sourceforge.jp>
Cc: Hirokazu Takata <takata.hirokazu@renesas.com>
Cc: Ralf Baechle <ralf@linux-mips.org>
Cc: Kyle McMartin <kyle@mcmartin.ca>
Cc: Heiko Carstens <heiko.carstens@de.ibm.com>
Cc: Martin Schwidefsky <schwidefsky@de.ibm.com>
Cc: Paul Mundt <lethal@linux-sh.org>
Cc: Kazumoto Kojima <kkojima@rr.iij4u.or.jp>
Cc: Richard Curnow <rc@rc0.org.uk>
Cc: William Lee Irwin III <wli@holomorphy.com>
Cc: "David S. Miller" <davem@davemloft.net>
Cc: Jeff Dike <jdike@addtoit.com>
Cc: Paolo 'Blaisorblade' Giarrusso <blaisorblade@yahoo.it>
Cc: Miles Bader <uclinux-v850@lsi.nec.co.jp>
Cc: Chris Zankel <chris@zankel.net>
Cc: "Luck, Tony" <tony.luck@intel.com>
Cc: Geert Uytterhoeven <geert@linux-m68k.org>
Cc: Roman Zippel <zippel@linux-m68k.org>
Signed-off-by: default avatarHeiko Carstens <heiko.carstens@de.ibm.com>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 70bc42f9
...@@ -54,8 +54,6 @@ ...@@ -54,8 +54,6 @@
#include "proto.h" #include "proto.h"
#include "irq_impl.h" #include "irq_impl.h"
extern unsigned long wall_jiffies; /* kernel/timer.c */
static int set_rtc_mmss(unsigned long); static int set_rtc_mmss(unsigned long);
DEFINE_SPINLOCK(rtc_lock); DEFINE_SPINLOCK(rtc_lock);
...@@ -413,7 +411,7 @@ void ...@@ -413,7 +411,7 @@ void
do_gettimeofday(struct timeval *tv) do_gettimeofday(struct timeval *tv)
{ {
unsigned long flags; unsigned long flags;
unsigned long sec, usec, lost, seq; unsigned long sec, usec, seq;
unsigned long delta_cycles, delta_usec, partial_tick; unsigned long delta_cycles, delta_usec, partial_tick;
do { do {
...@@ -423,14 +421,13 @@ do_gettimeofday(struct timeval *tv) ...@@ -423,14 +421,13 @@ do_gettimeofday(struct timeval *tv)
sec = xtime.tv_sec; sec = xtime.tv_sec;
usec = (xtime.tv_nsec / 1000); usec = (xtime.tv_nsec / 1000);
partial_tick = state.partial_tick; partial_tick = state.partial_tick;
lost = jiffies - wall_jiffies;
} while (read_seqretry_irqrestore(&xtime_lock, seq, flags)); } while (read_seqretry_irqrestore(&xtime_lock, seq, flags));
#ifdef CONFIG_SMP #ifdef CONFIG_SMP
/* Until and unless we figure out how to get cpu cycle counters /* Until and unless we figure out how to get cpu cycle counters
in sync and keep them there, we can't use the rpcc tricks. */ in sync and keep them there, we can't use the rpcc tricks. */
delta_usec = lost * (1000000 / HZ); delta_usec = 0;
#else #else
/* /*
* usec = cycles * ticks_per_cycle * 2**48 * 1e6 / (2**48 * ticks) * usec = cycles * ticks_per_cycle * 2**48 * 1e6 / (2**48 * ticks)
...@@ -446,8 +443,7 @@ do_gettimeofday(struct timeval *tv) ...@@ -446,8 +443,7 @@ do_gettimeofday(struct timeval *tv)
*/ */
delta_usec = (delta_cycles * state.scaled_ticks_per_cycle delta_usec = (delta_cycles * state.scaled_ticks_per_cycle
+ partial_tick + partial_tick) * 15625;
+ (lost << FIX_SHIFT)) * 15625;
delta_usec = ((delta_usec / ((1UL << (FIX_SHIFT-6-1)) * HZ)) + 1) / 2; delta_usec = ((delta_usec / ((1UL << (FIX_SHIFT-6-1)) * HZ)) + 1) / 2;
#endif #endif
...@@ -480,12 +476,11 @@ do_settimeofday(struct timespec *tv) ...@@ -480,12 +476,11 @@ do_settimeofday(struct timespec *tv)
time. Without this, a full-tick error is possible. */ time. Without this, a full-tick error is possible. */
#ifdef CONFIG_SMP #ifdef CONFIG_SMP
delta_nsec = (jiffies - wall_jiffies) * (NSEC_PER_SEC / HZ); delta_nsec = 0;
#else #else
delta_nsec = rpcc() - state.last_time; delta_nsec = rpcc() - state.last_time;
delta_nsec = (delta_nsec * state.scaled_ticks_per_cycle delta_nsec = (delta_nsec * state.scaled_ticks_per_cycle
+ state.partial_tick + state.partial_tick) * 15625;
+ ((jiffies - wall_jiffies) << FIX_SHIFT)) * 15625;
delta_nsec = ((delta_nsec / ((1UL << (FIX_SHIFT-6-1)) * HZ)) + 1) / 2; delta_nsec = ((delta_nsec / ((1UL << (FIX_SHIFT-6-1)) * HZ)) + 1) / 2;
delta_nsec *= 1000; delta_nsec *= 1000;
#endif #endif
......
...@@ -37,8 +37,6 @@ ...@@ -37,8 +37,6 @@
*/ */
struct sys_timer *system_timer; struct sys_timer *system_timer;
extern unsigned long wall_jiffies;
/* this needs a better home */ /* this needs a better home */
DEFINE_SPINLOCK(rtc_lock); DEFINE_SPINLOCK(rtc_lock);
...@@ -237,16 +235,11 @@ void do_gettimeofday(struct timeval *tv) ...@@ -237,16 +235,11 @@ void do_gettimeofday(struct timeval *tv)
{ {
unsigned long flags; unsigned long flags;
unsigned long seq; unsigned long seq;
unsigned long usec, sec, lost; unsigned long usec, sec;
do { do {
seq = read_seqbegin_irqsave(&xtime_lock, flags); seq = read_seqbegin_irqsave(&xtime_lock, flags);
usec = system_timer->offset(); usec = system_timer->offset();
lost = jiffies - wall_jiffies;
if (lost)
usec += lost * USECS_PER_JIFFY;
sec = xtime.tv_sec; sec = xtime.tv_sec;
usec += xtime.tv_nsec / 1000; usec += xtime.tv_nsec / 1000;
} while (read_seqretry_irqrestore(&xtime_lock, seq, flags)); } while (read_seqretry_irqrestore(&xtime_lock, seq, flags));
...@@ -279,7 +272,6 @@ int do_settimeofday(struct timespec *tv) ...@@ -279,7 +272,6 @@ int do_settimeofday(struct timespec *tv)
* done, and then undo it! * done, and then undo it!
*/ */
nsec -= system_timer->offset() * NSEC_PER_USEC; nsec -= system_timer->offset() * NSEC_PER_USEC;
nsec -= (jiffies - wall_jiffies) * TICK_NSEC;
wtm_sec = wall_to_monotonic.tv_sec + (xtime.tv_sec - sec); wtm_sec = wall_to_monotonic.tv_sec + (xtime.tv_sec - sec);
wtm_nsec = wall_to_monotonic.tv_nsec + (xtime.tv_nsec - nsec); wtm_nsec = wall_to_monotonic.tv_nsec + (xtime.tv_nsec - nsec);
......
...@@ -33,8 +33,6 @@ ...@@ -33,8 +33,6 @@
#include <asm/irq.h> #include <asm/irq.h>
#include <asm/ioc.h> #include <asm/ioc.h>
extern unsigned long wall_jiffies;
/* this needs a better home */ /* this needs a better home */
DEFINE_SPINLOCK(rtc_lock); DEFINE_SPINLOCK(rtc_lock);
...@@ -136,16 +134,11 @@ void do_gettimeofday(struct timeval *tv) ...@@ -136,16 +134,11 @@ void do_gettimeofday(struct timeval *tv)
{ {
unsigned long flags; unsigned long flags;
unsigned long seq; unsigned long seq;
unsigned long usec, sec, lost; unsigned long usec, sec;
do { do {
seq = read_seqbegin_irqsave(&xtime_lock, flags); seq = read_seqbegin_irqsave(&xtime_lock, flags);
usec = gettimeoffset(); usec = gettimeoffset();
lost = jiffies - wall_jiffies;
if (lost)
usec += lost * USECS_PER_JIFFY;
sec = xtime.tv_sec; sec = xtime.tv_sec;
usec += xtime.tv_nsec / 1000; usec += xtime.tv_nsec / 1000;
} while (read_seqretry_irqrestore(&xtime_lock, seq, flags)); } while (read_seqretry_irqrestore(&xtime_lock, seq, flags));
...@@ -174,8 +167,7 @@ int do_settimeofday(struct timespec *tv) ...@@ -174,8 +167,7 @@ int do_settimeofday(struct timespec *tv)
* wall time. Discover what correction gettimeofday() would have * wall time. Discover what correction gettimeofday() would have
* done, and then undo it! * done, and then undo it!
*/ */
tv->tv_nsec -= 1000 * (gettimeoffset() + tv->tv_nsec -= 1000 * gettimeoffset();
(jiffies - wall_jiffies) * USECS_PER_JIFFY);
while (tv->tv_nsec < 0) { while (tv->tv_nsec < 0) {
tv->tv_nsec += NSEC_PER_SEC; tv->tv_nsec += NSEC_PER_SEC;
......
...@@ -37,7 +37,6 @@ int have_rtc; /* used to remember if we have an RTC or not */; ...@@ -37,7 +37,6 @@ int have_rtc; /* used to remember if we have an RTC or not */;
#define TICK_SIZE tick #define TICK_SIZE tick
extern unsigned long wall_jiffies;
extern unsigned long loops_per_jiffy; /* init/main.c */ extern unsigned long loops_per_jiffy; /* init/main.c */
unsigned long loops_per_usec; unsigned long loops_per_usec;
...@@ -58,11 +57,6 @@ void do_gettimeofday(struct timeval *tv) ...@@ -58,11 +57,6 @@ void do_gettimeofday(struct timeval *tv)
local_irq_save(flags); local_irq_save(flags);
local_irq_disable(); local_irq_disable();
usec = do_gettimeoffset(); usec = do_gettimeoffset();
{
unsigned long lost = jiffies - wall_jiffies;
if (lost)
usec += lost * (1000000 / HZ);
}
/* /*
* If time_adjust is negative then NTP is slowing the clock * If time_adjust is negative then NTP is slowing the clock
...@@ -103,7 +97,6 @@ int do_settimeofday(struct timespec *tv) ...@@ -103,7 +97,6 @@ int do_settimeofday(struct timespec *tv)
* made, and then undo it! * made, and then undo it!
*/ */
nsec -= do_gettimeoffset() * NSEC_PER_USEC; nsec -= do_gettimeoffset() * NSEC_PER_USEC;
nsec -= (jiffies - wall_jiffies) * TICK_NSEC;
wtm_sec = wall_to_monotonic.tv_sec + (xtime.tv_sec - sec); wtm_sec = wall_to_monotonic.tv_sec + (xtime.tv_sec - sec);
wtm_nsec = wall_to_monotonic.tv_nsec + (xtime.tv_nsec - nsec); wtm_nsec = wall_to_monotonic.tv_nsec + (xtime.tv_nsec - nsec);
......
...@@ -76,8 +76,6 @@ int pit_latch_buggy; /* extern */ ...@@ -76,8 +76,6 @@ int pit_latch_buggy; /* extern */
unsigned int cpu_khz; /* Detected as we calibrate the TSC */ unsigned int cpu_khz; /* Detected as we calibrate the TSC */
EXPORT_SYMBOL(cpu_khz); EXPORT_SYMBOL(cpu_khz);
extern unsigned long wall_jiffies;
DEFINE_SPINLOCK(rtc_lock); DEFINE_SPINLOCK(rtc_lock);
EXPORT_SYMBOL(rtc_lock); EXPORT_SYMBOL(rtc_lock);
...@@ -329,7 +327,6 @@ static int timer_resume(struct sys_device *dev) ...@@ -329,7 +327,6 @@ static int timer_resume(struct sys_device *dev)
do_settimeofday(&ts); do_settimeofday(&ts);
write_seqlock_irqsave(&xtime_lock, flags); write_seqlock_irqsave(&xtime_lock, flags);
jiffies_64 += sleep_length; jiffies_64 += sleep_length;
wall_jiffies += sleep_length;
write_sequnlock_irqrestore(&xtime_lock, flags); write_sequnlock_irqrestore(&xtime_lock, flags);
touch_softlockup_watchdog(); touch_softlockup_watchdog();
return 0; return 0;
......
...@@ -29,8 +29,6 @@ ...@@ -29,8 +29,6 @@
#include <asm/sections.h> #include <asm/sections.h>
#include <asm/system.h> #include <asm/system.h>
extern unsigned long wall_jiffies;
volatile int time_keeper_id = 0; /* smp_processor_id() of time-keeper */ volatile int time_keeper_id = 0; /* smp_processor_id() of time-keeper */
#ifdef CONFIG_IA64_DEBUG_IRQ #ifdef CONFIG_IA64_DEBUG_IRQ
......
...@@ -38,7 +38,6 @@ extern void send_IPI_allbutself(int, int); ...@@ -38,7 +38,6 @@ extern void send_IPI_allbutself(int, int);
extern void smp_local_timer_interrupt(struct pt_regs *); extern void smp_local_timer_interrupt(struct pt_regs *);
#endif #endif
extern unsigned long wall_jiffies;
#define TICK_SIZE (tick_nsec / 1000) #define TICK_SIZE (tick_nsec / 1000)
/* /*
...@@ -108,24 +107,17 @@ void do_gettimeofday(struct timeval *tv) ...@@ -108,24 +107,17 @@ void do_gettimeofday(struct timeval *tv)
unsigned long max_ntp_tick = tick_usec - tickadj; unsigned long max_ntp_tick = tick_usec - tickadj;
do { do {
unsigned long lost;
seq = read_seqbegin(&xtime_lock); seq = read_seqbegin(&xtime_lock);
usec = do_gettimeoffset(); usec = do_gettimeoffset();
lost = jiffies - wall_jiffies;
/* /*
* If time_adjust is negative then NTP is slowing the clock * If time_adjust is negative then NTP is slowing the clock
* so make sure not to go into next possible interval. * so make sure not to go into next possible interval.
* Better to lose some accuracy than have time go backwards.. * Better to lose some accuracy than have time go backwards..
*/ */
if (unlikely(time_adjust < 0)) { if (unlikely(time_adjust < 0))
usec = min(usec, max_ntp_tick); usec = min(usec, max_ntp_tick);
if (lost)
usec += lost * max_ntp_tick;
} else if (unlikely(lost))
usec += lost * tick_usec;
sec = xtime.tv_sec; sec = xtime.tv_sec;
usec += (xtime.tv_nsec / 1000); usec += (xtime.tv_nsec / 1000);
...@@ -158,7 +150,6 @@ int do_settimeofday(struct timespec *tv) ...@@ -158,7 +150,6 @@ int do_settimeofday(struct timespec *tv)
* made, and then undo it! * made, and then undo it!
*/ */
nsec -= do_gettimeoffset() * NSEC_PER_USEC; nsec -= do_gettimeoffset() * NSEC_PER_USEC;
nsec -= (jiffies - wall_jiffies) * TICK_NSEC;
wtm_sec = wall_to_monotonic.tv_sec + (xtime.tv_sec - sec); wtm_sec = wall_to_monotonic.tv_sec + (xtime.tv_sec - sec);
wtm_nsec = wall_to_monotonic.tv_nsec + (xtime.tv_nsec - nsec); wtm_nsec = wall_to_monotonic.tv_nsec + (xtime.tv_nsec - nsec);
......
...@@ -96,31 +96,23 @@ void time_init(void) ...@@ -96,31 +96,23 @@ void time_init(void)
void do_gettimeofday(struct timeval *tv) void do_gettimeofday(struct timeval *tv)
{ {
unsigned long flags; unsigned long flags;
extern unsigned long wall_jiffies;
unsigned long seq; unsigned long seq;
unsigned long usec, sec, lost; unsigned long usec, sec;
unsigned long max_ntp_tick = tick_usec - tickadj; unsigned long max_ntp_tick = tick_usec - tickadj;
do { do {
seq = read_seqbegin_irqsave(&xtime_lock, flags); seq = read_seqbegin_irqsave(&xtime_lock, flags);
usec = mach_gettimeoffset(); usec = mach_gettimeoffset();
lost = jiffies - wall_jiffies;
/* /*
* If time_adjust is negative then NTP is slowing the clock * If time_adjust is negative then NTP is slowing the clock
* so make sure not to go into next possible interval. * so make sure not to go into next possible interval.
* Better to lose some accuracy than have time go backwards.. * Better to lose some accuracy than have time go backwards..
*/ */
if (unlikely(time_adjust < 0)) { if (unlikely(time_adjust < 0))
usec = min(usec, max_ntp_tick); usec = min(usec, max_ntp_tick);
if (lost)
usec += lost * max_ntp_tick;
}
else if (unlikely(lost))
usec += lost * tick_usec;
sec = xtime.tv_sec; sec = xtime.tv_sec;
usec += xtime.tv_nsec/1000; usec += xtime.tv_nsec/1000;
} while (read_seqretry_irqrestore(&xtime_lock, seq, flags)); } while (read_seqretry_irqrestore(&xtime_lock, seq, flags));
...@@ -141,7 +133,6 @@ int do_settimeofday(struct timespec *tv) ...@@ -141,7 +133,6 @@ int do_settimeofday(struct timespec *tv)
{ {
time_t wtm_sec, sec = tv->tv_sec; time_t wtm_sec, sec = tv->tv_sec;
long wtm_nsec, nsec = tv->tv_nsec; long wtm_nsec, nsec = tv->tv_nsec;
extern unsigned long wall_jiffies;
if ((unsigned long)tv->tv_nsec >= NSEC_PER_SEC) if ((unsigned long)tv->tv_nsec >= NSEC_PER_SEC)
return -EINVAL; return -EINVAL;
...@@ -153,8 +144,7 @@ int do_settimeofday(struct timespec *tv) ...@@ -153,8 +144,7 @@ int do_settimeofday(struct timespec *tv)
* Discover what correction gettimeofday * Discover what correction gettimeofday
* would have done, and then undo it! * would have done, and then undo it!
*/ */
nsec -= 1000 * (mach_gettimeoffset() + nsec -= 1000 * mach_gettimeoffset();
(jiffies - wall_jiffies) * (1000000 / HZ));
wtm_sec = wall_to_monotonic.tv_sec + (xtime.tv_sec - sec); wtm_sec = wall_to_monotonic.tv_sec + (xtime.tv_sec - sec);
wtm_nsec = wall_to_monotonic.tv_nsec + (xtime.tv_nsec - nsec); wtm_nsec = wall_to_monotonic.tv_nsec + (xtime.tv_nsec - nsec);
......
...@@ -26,8 +26,6 @@ ...@@ -26,8 +26,6 @@
#define TICK_SIZE (tick_nsec / 1000) #define TICK_SIZE (tick_nsec / 1000)
extern unsigned long wall_jiffies;
static inline int set_rtc_mmss(unsigned long nowtime) static inline int set_rtc_mmss(unsigned long nowtime)
{ {
...@@ -124,15 +122,12 @@ void time_init(void) ...@@ -124,15 +122,12 @@ void time_init(void)
void do_gettimeofday(struct timeval *tv) void do_gettimeofday(struct timeval *tv)
{ {
unsigned long flags; unsigned long flags;
unsigned long lost, seq; unsigned long seq;
unsigned long usec, sec; unsigned long usec, sec;
do { do {
seq = read_seqbegin_irqsave(&xtime_lock, flags); seq = read_seqbegin_irqsave(&xtime_lock, flags);
usec = mach_gettimeoffset ? mach_gettimeoffset() : 0; usec = mach_gettimeoffset ? mach_gettimeoffset() : 0;
lost = jiffies - wall_jiffies;
if (lost)
usec += lost * (1000000 / HZ);
sec = xtime.tv_sec; sec = xtime.tv_sec;
usec += (xtime.tv_nsec / 1000); usec += (xtime.tv_nsec / 1000);
} while (read_seqretry_irqrestore(&xtime_lock, seq, flags)); } while (read_seqretry_irqrestore(&xtime_lock, seq, flags));
......
...@@ -47,8 +47,6 @@ ...@@ -47,8 +47,6 @@
/* /*
* forward reference * forward reference
*/ */
extern volatile unsigned long wall_jiffies;
DEFINE_SPINLOCK(rtc_lock); DEFINE_SPINLOCK(rtc_lock);
/* /*
...@@ -159,7 +157,6 @@ void (*mips_hpt_init)(unsigned int); ...@@ -159,7 +157,6 @@ void (*mips_hpt_init)(unsigned int);
void do_gettimeofday(struct timeval *tv) void do_gettimeofday(struct timeval *tv)
{ {
unsigned long seq; unsigned long seq;
unsigned long lost;
unsigned long usec, sec; unsigned long usec, sec;
unsigned long max_ntp_tick; unsigned long max_ntp_tick;
...@@ -168,8 +165,6 @@ void do_gettimeofday(struct timeval *tv) ...@@ -168,8 +165,6 @@ void do_gettimeofday(struct timeval *tv)
usec = do_gettimeoffset(); usec = do_gettimeoffset();
lost = jiffies - wall_jiffies;
/* /*
* If time_adjust is negative then NTP is slowing the clock * If time_adjust is negative then NTP is slowing the clock
* so make sure not to go into next possible interval. * so make sure not to go into next possible interval.
...@@ -178,11 +173,7 @@ void do_gettimeofday(struct timeval *tv) ...@@ -178,11 +173,7 @@ void do_gettimeofday(struct timeval *tv)
if (unlikely(time_adjust < 0)) { if (unlikely(time_adjust < 0)) {
max_ntp_tick = (USEC_PER_SEC / HZ) - tickadj; max_ntp_tick = (USEC_PER_SEC / HZ) - tickadj;
usec = min(usec, max_ntp_tick); usec = min(usec, max_ntp_tick);
}
if (lost)
usec += lost * max_ntp_tick;
} else if (unlikely(lost))
usec += lost * (USEC_PER_SEC / HZ);
sec = xtime.tv_sec; sec = xtime.tv_sec;
usec += (xtime.tv_nsec / 1000); usec += (xtime.tv_nsec / 1000);
...@@ -217,7 +208,6 @@ int do_settimeofday(struct timespec *tv) ...@@ -217,7 +208,6 @@ int do_settimeofday(struct timespec *tv)
* made, and then undo it! * made, and then undo it!
*/ */
nsec -= do_gettimeoffset() * NSEC_PER_USEC; nsec -= do_gettimeoffset() * NSEC_PER_USEC;
nsec -= (jiffies - wall_jiffies) * tick_nsec;
wtm_sec = wall_to_monotonic.tv_sec + (xtime.tv_sec - sec); wtm_sec = wall_to_monotonic.tv_sec + (xtime.tv_sec - sec);
wtm_nsec = wall_to_monotonic.tv_nsec + (xtime.tv_nsec - nsec); wtm_nsec = wall_to_monotonic.tv_nsec + (xtime.tv_nsec - nsec);
......
...@@ -42,8 +42,6 @@ ...@@ -42,8 +42,6 @@
static unsigned long ct_cur[NR_CPUS]; /* What counter should be at next timer irq */ static unsigned long ct_cur[NR_CPUS]; /* What counter should be at next timer irq */
static long last_rtc_update; /* Last time the rtc clock got updated */ static long last_rtc_update; /* Last time the rtc clock got updated */
extern volatile unsigned long wall_jiffies;
#if 0 #if 0
static int set_rtc_mmss(unsigned long nowtime) static int set_rtc_mmss(unsigned long nowtime)
{ {
......
...@@ -32,9 +32,6 @@ ...@@ -32,9 +32,6 @@
#include <linux/timex.h> #include <linux/timex.h>
/* xtime and wall_jiffies keep wall-clock time */
extern unsigned long wall_jiffies;
static long clocktick __read_mostly; /* timer cycles per tick */ static long clocktick __read_mostly; /* timer cycles per tick */
static long halftick __read_mostly; static long halftick __read_mostly;
...@@ -112,7 +109,7 @@ EXPORT_SYMBOL(profile_pc); ...@@ -112,7 +109,7 @@ EXPORT_SYMBOL(profile_pc);
/*** converted from ia64 ***/ /*** converted from ia64 ***/
/* /*
* Return the number of micro-seconds that elapsed since the last * Return the number of micro-seconds that elapsed since the last
* update to wall time (aka xtime aka wall_jiffies). The xtime_lock * update to wall time (aka xtime). The xtime_lock
* must be at least read-locked when calling this routine. * must be at least read-locked when calling this routine.
*/ */
static inline unsigned long static inline unsigned long
......
...@@ -117,8 +117,6 @@ unsigned tb_to_ns_shift; ...@@ -117,8 +117,6 @@ unsigned tb_to_ns_shift;
struct gettimeofday_struct do_gtod; struct gettimeofday_struct do_gtod;
extern unsigned long wall_jiffies;
extern struct timezone sys_tz; extern struct timezone sys_tz;
static long timezone_offset; static long timezone_offset;
...@@ -816,11 +814,6 @@ int do_settimeofday(struct timespec *tv) ...@@ -816,11 +814,6 @@ int do_settimeofday(struct timespec *tv)
/* /*
* Subtract off the number of nanoseconds since the * Subtract off the number of nanoseconds since the
* beginning of the last tick. * beginning of the last tick.
* Note that since we don't increment jiffies_64 anywhere other
* than in do_timer (since we don't have a lost tick problem),
* wall_jiffies will always be the same as jiffies,
* and therefore the (jiffies - wall_jiffies) computation
* has been removed.
*/ */
tb_delta = tb_ticks_since(tb_last_jiffy); tb_delta = tb_ticks_since(tb_last_jiffy);
tb_delta = mulhdu(tb_delta, do_gtod.varp->tb_to_xs); /* in xsec */ tb_delta = mulhdu(tb_delta, do_gtod.varp->tb_to_xs); /* in xsec */
......
...@@ -80,8 +80,6 @@ unsigned tb_to_us; ...@@ -80,8 +80,6 @@ unsigned tb_to_us;
unsigned tb_last_stamp; unsigned tb_last_stamp;
unsigned long tb_to_ns_scale; unsigned long tb_to_ns_scale;
extern unsigned long wall_jiffies;
/* used for timezone offset */ /* used for timezone offset */
static long timezone_offset; static long timezone_offset;
...@@ -173,8 +171,7 @@ void timer_interrupt(struct pt_regs * regs) ...@@ -173,8 +171,7 @@ void timer_interrupt(struct pt_regs * regs)
*/ */
if ( ppc_md.set_rtc_time && ntp_synced() && if ( ppc_md.set_rtc_time && ntp_synced() &&
xtime.tv_sec - last_rtc_update >= 659 && xtime.tv_sec - last_rtc_update >= 659 &&
abs((xtime.tv_nsec / 1000) - (1000000-1000000/HZ)) < 500000/HZ && abs((xtime.tv_nsec / 1000) - (1000000-1000000/HZ)) < 500000/HZ) {
jiffies - wall_jiffies == 1) {
if (ppc_md.set_rtc_time(xtime.tv_sec+1 + timezone_offset) == 0) if (ppc_md.set_rtc_time(xtime.tv_sec+1 + timezone_offset) == 0)
last_rtc_update = xtime.tv_sec+1; last_rtc_update = xtime.tv_sec+1;
else else
...@@ -200,7 +197,7 @@ void do_gettimeofday(struct timeval *tv) ...@@ -200,7 +197,7 @@ void do_gettimeofday(struct timeval *tv)
{ {
unsigned long flags; unsigned long flags;
unsigned long seq; unsigned long seq;
unsigned delta, lost_ticks, usec, sec; unsigned delta, usec, sec;
do { do {
seq = read_seqbegin_irqsave(&xtime_lock, flags); seq = read_seqbegin_irqsave(&xtime_lock, flags);
...@@ -214,10 +211,9 @@ void do_gettimeofday(struct timeval *tv) ...@@ -214,10 +211,9 @@ void do_gettimeofday(struct timeval *tv)
if (!smp_tb_synchronized) if (!smp_tb_synchronized)
delta = 0; delta = 0;
#endif /* CONFIG_SMP */ #endif /* CONFIG_SMP */
lost_ticks = jiffies - wall_jiffies;
} while (read_seqretry_irqrestore(&xtime_lock, seq, flags)); } while (read_seqretry_irqrestore(&xtime_lock, seq, flags));
usec += mulhwu(tb_to_us, tb_ticks_per_jiffy * lost_ticks + delta); usec += mulhwu(tb_to_us, delta);
while (usec >= 1000000) { while (usec >= 1000000) {
sec++; sec++;
usec -= 1000000; usec -= 1000000;
...@@ -258,7 +254,6 @@ int do_settimeofday(struct timespec *tv) ...@@ -258,7 +254,6 @@ int do_settimeofday(struct timespec *tv)
* still reasonable when gettimeofday resolution is 1 jiffy. * still reasonable when gettimeofday resolution is 1 jiffy.
*/ */
tb_delta = tb_ticks_since(last_jiffy_stamp(smp_processor_id())); tb_delta = tb_ticks_since(last_jiffy_stamp(smp_processor_id()));
tb_delta += (jiffies - wall_jiffies) * tb_ticks_per_jiffy;
new_nsec -= 1000 * mulhwu(tb_to_us, tb_delta); new_nsec -= 1000 * mulhwu(tb_to_us, tb_delta);
......
...@@ -53,8 +53,6 @@ static u64 init_timer_cc; ...@@ -53,8 +53,6 @@ static u64 init_timer_cc;
static u64 jiffies_timer_cc; static u64 jiffies_timer_cc;
static u64 xtime_cc; static u64 xtime_cc;
extern unsigned long wall_jiffies;
/* /*
* Scheduler clock - returns current time in nanosec units. * Scheduler clock - returns current time in nanosec units.
*/ */
...@@ -87,9 +85,8 @@ static inline unsigned long do_gettimeoffset(void) ...@@ -87,9 +85,8 @@ static inline unsigned long do_gettimeoffset(void)
{ {
__u64 now; __u64 now;
now = (get_clock() - jiffies_timer_cc) >> 12; now = (get_clock() - jiffies_timer_cc) >> 12;
/* We require the offset from the latest update of xtime */ now -= (__u64) jiffies * USECS_PER_JIFFY;
now -= (__u64) wall_jiffies*USECS_PER_JIFFY;
return (unsigned long) now; return (unsigned long) now;
} }
......
...@@ -18,7 +18,6 @@ ...@@ -18,7 +18,6 @@
#include <asm/timer.h> #include <asm/timer.h>
#include <asm/kgdb.h> #include <asm/kgdb.h>
extern unsigned long wall_jiffies;
struct sys_timer *sys_timer; struct sys_timer *sys_timer;
/* Move this somewhere more sensible.. */ /* Move this somewhere more sensible.. */
...@@ -52,16 +51,10 @@ void do_gettimeofday(struct timeval *tv) ...@@ -52,16 +51,10 @@ void do_gettimeofday(struct timeval *tv)
{ {
unsigned long seq; unsigned long seq;
unsigned long usec, sec; unsigned long usec, sec;
unsigned long lost;
do { do {
seq = read_seqbegin(&xtime_lock); seq = read_seqbegin(&xtime_lock);
usec = get_timer_offset(); usec = get_timer_offset();
lost = jiffies - wall_jiffies;
if (lost)
usec += lost * (1000000 / HZ);
sec = xtime.tv_sec; sec = xtime.tv_sec;
usec += xtime.tv_nsec / 1000; usec += xtime.tv_nsec / 1000;
} while (read_seqretry(&xtime_lock, seq)); } while (read_seqretry(&xtime_lock, seq));
...@@ -91,8 +84,7 @@ int do_settimeofday(struct timespec *tv) ...@@ -91,8 +84,7 @@ int do_settimeofday(struct timespec *tv)
* wall time. Discover what correction gettimeofday() would have * wall time. Discover what correction gettimeofday() would have
* made, and then undo it! * made, and then undo it!
*/ */
nsec -= 1000 * (get_timer_offset() + nsec -= 1000 * get_timer_offset();
(jiffies - wall_jiffies) * (1000000 / HZ));
wtm_sec = wall_to_monotonic.tv_sec + (xtime.tv_sec - sec); wtm_sec = wall_to_monotonic.tv_sec + (xtime.tv_sec - sec);
wtm_nsec = wall_to_monotonic.tv_nsec + (xtime.tv_nsec - nsec); wtm_nsec = wall_to_monotonic.tv_nsec + (xtime.tv_nsec - nsec);
......
...@@ -107,8 +107,6 @@ ...@@ -107,8 +107,6 @@
#define TICK_SIZE (tick_nsec / 1000) #define TICK_SIZE (tick_nsec / 1000)
extern unsigned long wall_jiffies;
static unsigned long tmu_base, rtc_base; static unsigned long tmu_base, rtc_base;
unsigned long cprc_base; unsigned long cprc_base;
...@@ -194,13 +192,6 @@ void do_gettimeofday(struct timeval *tv) ...@@ -194,13 +192,6 @@ void do_gettimeofday(struct timeval *tv)
do { do {
seq = read_seqbegin_irqsave(&xtime_lock, flags); seq = read_seqbegin_irqsave(&xtime_lock, flags);
usec = usecs_since_tick(); usec = usecs_since_tick();
{
unsigned long lost = jiffies - wall_jiffies;
if (lost)
usec += lost * (1000000 / HZ);
}
sec = xtime.tv_sec; sec = xtime.tv_sec;
usec += xtime.tv_nsec / 1000; usec += xtime.tv_nsec / 1000;
} while (read_seqretry_irqrestore(&xtime_lock, seq, flags)); } while (read_seqretry_irqrestore(&xtime_lock, seq, flags));
...@@ -229,8 +220,7 @@ int do_settimeofday(struct timespec *tv) ...@@ -229,8 +220,7 @@ int do_settimeofday(struct timespec *tv)
* wall time. Discover what correction gettimeofday() would have * wall time. Discover what correction gettimeofday() would have
* made, and then undo it! * made, and then undo it!
*/ */
nsec -= 1000 * (usecs_since_tick() + nsec -= 1000 * usecs_since_tick();
(jiffies - wall_jiffies) * (1000000 / HZ));
wtm_sec = wall_to_monotonic.tv_sec + (xtime.tv_sec - sec); wtm_sec = wall_to_monotonic.tv_sec + (xtime.tv_sec - sec);
wtm_nsec = wall_to_monotonic.tv_nsec + (xtime.tv_nsec - nsec); wtm_nsec = wall_to_monotonic.tv_nsec + (xtime.tv_nsec - nsec);
......
...@@ -765,8 +765,6 @@ static __inline__ unsigned long do_gettimeoffset(void) ...@@ -765,8 +765,6 @@ static __inline__ unsigned long do_gettimeoffset(void)
return count; return count;
} }
extern unsigned long wall_jiffies;
static void pci_do_gettimeofday(struct timeval *tv) static void pci_do_gettimeofday(struct timeval *tv)
{ {
unsigned long flags; unsigned long flags;
...@@ -775,26 +773,17 @@ static void pci_do_gettimeofday(struct timeval *tv) ...@@ -775,26 +773,17 @@ static void pci_do_gettimeofday(struct timeval *tv)
unsigned long max_ntp_tick = tick_usec - tickadj; unsigned long max_ntp_tick = tick_usec - tickadj;
do { do {
unsigned long lost;
seq = read_seqbegin_irqsave(&xtime_lock, flags); seq = read_seqbegin_irqsave(&xtime_lock, flags);
usec = do_gettimeoffset(); usec = do_gettimeoffset();
lost = jiffies - wall_jiffies;
/* /*
* If time_adjust is negative then NTP is slowing the clock * If time_adjust is negative then NTP is slowing the clock
* so make sure not to go into next possible interval. * so make sure not to go into next possible interval.
* Better to lose some accuracy than have time go backwards.. * Better to lose some accuracy than have time go backwards..
*/ */
if (unlikely(time_adjust < 0)) { if (unlikely(time_adjust < 0))
usec = min(usec, max_ntp_tick); usec = min(usec, max_ntp_tick);
if (lost)
usec += lost * max_ntp_tick;
}
else if (unlikely(lost))
usec += lost * tick_usec;
sec = xtime.tv_sec; sec = xtime.tv_sec;
usec += (xtime.tv_nsec / 1000); usec += (xtime.tv_nsec / 1000);
} while (read_seqretry_irqrestore(&xtime_lock, seq, flags)); } while (read_seqretry_irqrestore(&xtime_lock, seq, flags));
...@@ -819,8 +808,7 @@ static int pci_do_settimeofday(struct timespec *tv) ...@@ -819,8 +808,7 @@ static int pci_do_settimeofday(struct timespec *tv)
* wall time. Discover what correction gettimeofday() would have * wall time. Discover what correction gettimeofday() would have
* made, and then undo it! * made, and then undo it!
*/ */
tv->tv_nsec -= 1000 * (do_gettimeoffset() + tv->tv_nsec -= 1000 * do_gettimeoffset();
(jiffies - wall_jiffies) * (USEC_PER_SEC / HZ));
while (tv->tv_nsec < 0) { while (tv->tv_nsec < 0) {
tv->tv_nsec += NSEC_PER_SEC; tv->tv_nsec += NSEC_PER_SEC;
tv->tv_sec--; tv->tv_sec--;
......
...@@ -43,8 +43,6 @@ ...@@ -43,8 +43,6 @@
#include <asm/pcic.h> #include <asm/pcic.h>
#include <asm/of_device.h> #include <asm/of_device.h>
extern unsigned long wall_jiffies;
DEFINE_SPINLOCK(rtc_lock); DEFINE_SPINLOCK(rtc_lock);
enum sparc_clock_type sp_clock_typ; enum sparc_clock_type sp_clock_typ;
DEFINE_SPINLOCK(mostek_lock); DEFINE_SPINLOCK(mostek_lock);
...@@ -449,7 +447,7 @@ unsigned long long sched_clock(void) ...@@ -449,7 +447,7 @@ unsigned long long sched_clock(void)
/* Ok, my cute asm atomicity trick doesn't work anymore. /* Ok, my cute asm atomicity trick doesn't work anymore.
* There are just too many variables that need to be protected * There are just too many variables that need to be protected
* now (both members of xtime, wall_jiffies, et al.) * now (both members of xtime, et al.)
*/ */
void do_gettimeofday(struct timeval *tv) void do_gettimeofday(struct timeval *tv)
{ {
...@@ -459,26 +457,17 @@ void do_gettimeofday(struct timeval *tv) ...@@ -459,26 +457,17 @@ void do_gettimeofday(struct timeval *tv)
unsigned long max_ntp_tick = tick_usec - tickadj; unsigned long max_ntp_tick = tick_usec - tickadj;
do { do {
unsigned long lost;
seq = read_seqbegin_irqsave(&xtime_lock, flags); seq = read_seqbegin_irqsave(&xtime_lock, flags);
usec = do_gettimeoffset(); usec = do_gettimeoffset();
lost = jiffies - wall_jiffies;
/* /*
* If time_adjust is negative then NTP is slowing the clock * If time_adjust is negative then NTP is slowing the clock
* so make sure not to go into next possible interval. * so make sure not to go into next possible interval.
* Better to lose some accuracy than have time go backwards.. * Better to lose some accuracy than have time go backwards..
*/ */
if (unlikely(time_adjust < 0)) { if (unlikely(time_adjust < 0))
usec = min(usec, max_ntp_tick); usec = min(usec, max_ntp_tick);
if (lost)
usec += lost * max_ntp_tick;
}
else if (unlikely(lost))
usec += lost * tick_usec;
sec = xtime.tv_sec; sec = xtime.tv_sec;
usec += (xtime.tv_nsec / 1000); usec += (xtime.tv_nsec / 1000);
} while (read_seqretry_irqrestore(&xtime_lock, seq, flags)); } while (read_seqretry_irqrestore(&xtime_lock, seq, flags));
...@@ -521,8 +510,7 @@ static int sbus_do_settimeofday(struct timespec *tv) ...@@ -521,8 +510,7 @@ static int sbus_do_settimeofday(struct timespec *tv)
* wall time. Discover what correction gettimeofday() would have * wall time. Discover what correction gettimeofday() would have
* made, and then undo it! * made, and then undo it!
*/ */
nsec -= 1000 * (do_gettimeoffset() + nsec -= 1000 * do_gettimeoffset();
(jiffies - wall_jiffies) * (USEC_PER_SEC / HZ));
wtm_sec = wall_to_monotonic.tv_sec + (xtime.tv_sec - sec); wtm_sec = wall_to_monotonic.tv_sec + (xtime.tv_sec - sec);
wtm_nsec = wall_to_monotonic.tv_nsec + (xtime.tv_nsec - nsec); wtm_nsec = wall_to_monotonic.tv_nsec + (xtime.tv_nsec - nsec);
......
...@@ -53,8 +53,6 @@ void __iomem *mstk48t02_regs = NULL; ...@@ -53,8 +53,6 @@ void __iomem *mstk48t02_regs = NULL;
unsigned long ds1287_regs = 0UL; unsigned long ds1287_regs = 0UL;
#endif #endif
extern unsigned long wall_jiffies;
static void __iomem *mstk48t08_regs; static void __iomem *mstk48t08_regs;
static void __iomem *mstk48t59_regs; static void __iomem *mstk48t59_regs;
......
...@@ -77,7 +77,6 @@ unsigned long long monotonic_base; ...@@ -77,7 +77,6 @@ unsigned long long monotonic_base;
struct vxtime_data __vxtime __section_vxtime; /* for vsyscalls */ struct vxtime_data __vxtime __section_vxtime; /* for vsyscalls */
volatile unsigned long __jiffies __section_jiffies = INITIAL_JIFFIES; volatile unsigned long __jiffies __section_jiffies = INITIAL_JIFFIES;
unsigned long __wall_jiffies __section_wall_jiffies = INITIAL_JIFFIES;
struct timespec __xtime __section_xtime; struct timespec __xtime __section_xtime;
struct timezone __sys_tz __section_sys_tz; struct timezone __sys_tz __section_sys_tz;
...@@ -119,7 +118,7 @@ unsigned int (*do_gettimeoffset)(void) = do_gettimeoffset_tsc; ...@@ -119,7 +118,7 @@ unsigned int (*do_gettimeoffset)(void) = do_gettimeoffset_tsc;
void do_gettimeofday(struct timeval *tv) void do_gettimeofday(struct timeval *tv)
{ {
unsigned long seq, t; unsigned long seq;
unsigned int sec, usec; unsigned int sec, usec;
do { do {
...@@ -136,10 +135,7 @@ void do_gettimeofday(struct timeval *tv) ...@@ -136,10 +135,7 @@ void do_gettimeofday(struct timeval *tv)
be found. Note when you fix it here you need to do the same be found. Note when you fix it here you need to do the same
in arch/x86_64/kernel/vsyscall.c and export all needed in arch/x86_64/kernel/vsyscall.c and export all needed
variables in vmlinux.lds. -AK */ variables in vmlinux.lds. -AK */
usec += do_gettimeoffset();
t = (jiffies - wall_jiffies) * USEC_PER_TICK +
do_gettimeoffset();
usec += t;
} while (read_seqretry(&xtime_lock, seq)); } while (read_seqretry(&xtime_lock, seq));
...@@ -165,8 +161,7 @@ int do_settimeofday(struct timespec *tv) ...@@ -165,8 +161,7 @@ int do_settimeofday(struct timespec *tv)
write_seqlock_irq(&xtime_lock); write_seqlock_irq(&xtime_lock);
nsec -= do_gettimeoffset() * NSEC_PER_USEC + nsec -= do_gettimeoffset() * NSEC_PER_USEC;
(jiffies - wall_jiffies) * NSEC_PER_TICK;
wtm_sec = wall_to_monotonic.tv_sec + (xtime.tv_sec - sec); wtm_sec = wall_to_monotonic.tv_sec + (xtime.tv_sec - sec);
wtm_nsec = wall_to_monotonic.tv_nsec + (xtime.tv_nsec - nsec); wtm_nsec = wall_to_monotonic.tv_nsec + (xtime.tv_nsec - nsec);
...@@ -1071,7 +1066,6 @@ static int timer_resume(struct sys_device *dev) ...@@ -1071,7 +1066,6 @@ static int timer_resume(struct sys_device *dev)
vxtime.last_tsc = get_cycles_sync(); vxtime.last_tsc = get_cycles_sync();
write_sequnlock_irqrestore(&xtime_lock,flags); write_sequnlock_irqrestore(&xtime_lock,flags);
jiffies += sleep_length; jiffies += sleep_length;
wall_jiffies += sleep_length;
monotonic_base += sleep_length * (NSEC_PER_SEC/HZ); monotonic_base += sleep_length * (NSEC_PER_SEC/HZ);
touch_softlockup_watchdog(); touch_softlockup_watchdog();
return 0; return 0;
......
...@@ -101,9 +101,6 @@ SECTIONS ...@@ -101,9 +101,6 @@ SECTIONS
.vgetcpu_mode : AT(VLOAD(.vgetcpu_mode)) { *(.vgetcpu_mode) } .vgetcpu_mode : AT(VLOAD(.vgetcpu_mode)) { *(.vgetcpu_mode) }
vgetcpu_mode = VVIRT(.vgetcpu_mode); vgetcpu_mode = VVIRT(.vgetcpu_mode);
.wall_jiffies : AT(VLOAD(.wall_jiffies)) { *(.wall_jiffies) }
wall_jiffies = VVIRT(.wall_jiffies);
.sys_tz : AT(VLOAD(.sys_tz)) { *(.sys_tz) } .sys_tz : AT(VLOAD(.sys_tz)) { *(.sys_tz) }
sys_tz = VVIRT(.sys_tz); sys_tz = VVIRT(.sys_tz);
......
...@@ -66,8 +66,7 @@ static __always_inline void do_vgettimeofday(struct timeval * tv) ...@@ -66,8 +66,7 @@ static __always_inline void do_vgettimeofday(struct timeval * tv)
sequence = read_seqbegin(&__xtime_lock); sequence = read_seqbegin(&__xtime_lock);
sec = __xtime.tv_sec; sec = __xtime.tv_sec;
usec = (__xtime.tv_nsec / 1000) + usec = __xtime.tv_nsec / 1000;
(__jiffies - __wall_jiffies) * (1000000 / HZ);
if (__vxtime.mode != VXTIME_HPET) { if (__vxtime.mode != VXTIME_HPET) {
t = get_cycles_sync(); t = get_cycles_sync();
......
...@@ -26,8 +26,6 @@ ...@@ -26,8 +26,6 @@
#include <asm/platform.h> #include <asm/platform.h>
extern volatile unsigned long wall_jiffies;
DEFINE_SPINLOCK(rtc_lock); DEFINE_SPINLOCK(rtc_lock);
EXPORT_SYMBOL(rtc_lock); EXPORT_SYMBOL(rtc_lock);
...@@ -110,7 +108,6 @@ int do_settimeofday(struct timespec *tv) ...@@ -110,7 +108,6 @@ int do_settimeofday(struct timespec *tv)
*/ */
ccount = get_ccount(); ccount = get_ccount();
nsec -= (ccount - last_ccount_stamp) * CCOUNT_NSEC; nsec -= (ccount - last_ccount_stamp) * CCOUNT_NSEC;
nsec -= (jiffies - wall_jiffies) * CCOUNT_PER_JIFFY * CCOUNT_NSEC;
wtm_sec = wall_to_monotonic.tv_sec + (xtime.tv_sec - sec); wtm_sec = wall_to_monotonic.tv_sec + (xtime.tv_sec - sec);
wtm_nsec = wall_to_monotonic.tv_nsec + (xtime.tv_nsec - nsec); wtm_nsec = wall_to_monotonic.tv_nsec + (xtime.tv_nsec - nsec);
...@@ -129,7 +126,7 @@ EXPORT_SYMBOL(do_settimeofday); ...@@ -129,7 +126,7 @@ EXPORT_SYMBOL(do_settimeofday);
void do_gettimeofday(struct timeval *tv) void do_gettimeofday(struct timeval *tv)
{ {
unsigned long flags; unsigned long flags;
unsigned long sec, usec, delta, lost, seq; unsigned long sec, usec, delta, seq;
do { do {
seq = read_seqbegin_irqsave(&xtime_lock, flags); seq = read_seqbegin_irqsave(&xtime_lock, flags);
...@@ -137,12 +134,9 @@ void do_gettimeofday(struct timeval *tv) ...@@ -137,12 +134,9 @@ void do_gettimeofday(struct timeval *tv)
delta = get_ccount() - last_ccount_stamp; delta = get_ccount() - last_ccount_stamp;
sec = xtime.tv_sec; sec = xtime.tv_sec;
usec = (xtime.tv_nsec / NSEC_PER_USEC); usec = (xtime.tv_nsec / NSEC_PER_USEC);
lost = jiffies - wall_jiffies;
} while (read_seqretry_irqrestore(&xtime_lock, seq, flags)); } while (read_seqretry_irqrestore(&xtime_lock, seq, flags));
usec += lost * (1000000UL/HZ) + (delta * CCOUNT_NSEC) / NSEC_PER_USEC; usec += (delta * CCOUNT_NSEC) / NSEC_PER_USEC;
for (; usec >= 1000000; sec++, usec -= 1000000) for (; usec >= 1000000; sec++, usec -= 1000000)
; ;
...@@ -179,8 +173,7 @@ irqreturn_t timer_interrupt (int irq, void *dev_id, struct pt_regs *regs) ...@@ -179,8 +173,7 @@ irqreturn_t timer_interrupt (int irq, void *dev_id, struct pt_regs *regs)
if (ntp_synced() && if (ntp_synced() &&
xtime.tv_sec - last_rtc_update >= 659 && xtime.tv_sec - last_rtc_update >= 659 &&
abs((xtime.tv_nsec/1000)-(1000000-1000000/HZ))<5000000/HZ && abs((xtime.tv_nsec/1000)-(1000000-1000000/HZ))<5000000/HZ) {
jiffies - wall_jiffies == 1) {
if (platform_set_rtc_time(xtime.tv_sec+1) == 0) if (platform_set_rtc_time(xtime.tv_sec+1) == 0)
last_rtc_update = xtime.tv_sec+1; last_rtc_update = xtime.tv_sec+1;
......
...@@ -17,7 +17,6 @@ enum vsyscall_num { ...@@ -17,7 +17,6 @@ enum vsyscall_num {
#define __section_vxtime __attribute__ ((unused, __section__ (".vxtime"), aligned(16))) #define __section_vxtime __attribute__ ((unused, __section__ (".vxtime"), aligned(16)))
#define __section_vgetcpu_mode __attribute__ ((unused, __section__ (".vgetcpu_mode"), aligned(16))) #define __section_vgetcpu_mode __attribute__ ((unused, __section__ (".vgetcpu_mode"), aligned(16)))
#define __section_wall_jiffies __attribute__ ((unused, __section__ (".wall_jiffies"), aligned(16)))
#define __section_jiffies __attribute__ ((unused, __section__ (".jiffies"), aligned(16))) #define __section_jiffies __attribute__ ((unused, __section__ (".jiffies"), aligned(16)))
#define __section_sys_tz __attribute__ ((unused, __section__ (".sys_tz"), aligned(16))) #define __section_sys_tz __attribute__ ((unused, __section__ (".sys_tz"), aligned(16)))
#define __section_sysctl_vsyscall __attribute__ ((unused, __section__ (".sysctl_vsyscall"), aligned(16))) #define __section_sysctl_vsyscall __attribute__ ((unused, __section__ (".sysctl_vsyscall"), aligned(16)))
...@@ -48,14 +47,12 @@ extern struct vxtime_data __vxtime; ...@@ -48,14 +47,12 @@ extern struct vxtime_data __vxtime;
extern int __vgetcpu_mode; extern int __vgetcpu_mode;
extern struct timespec __xtime; extern struct timespec __xtime;
extern volatile unsigned long __jiffies; extern volatile unsigned long __jiffies;
extern unsigned long __wall_jiffies;
extern struct timezone __sys_tz; extern struct timezone __sys_tz;
extern seqlock_t __xtime_lock; extern seqlock_t __xtime_lock;
/* kernel space (writeable) */ /* kernel space (writeable) */
extern struct vxtime_data vxtime; extern struct vxtime_data vxtime;
extern int vgetcpu_mode; extern int vgetcpu_mode;
extern unsigned long wall_jiffies;
extern struct timezone sys_tz; extern struct timezone sys_tz;
extern int sysctl_vsyscall; extern int sysctl_vsyscall;
extern seqlock_t xtime_lock; extern seqlock_t xtime_lock;
......
...@@ -768,7 +768,7 @@ static int timekeeping_suspended; ...@@ -768,7 +768,7 @@ static int timekeeping_suspended;
* @dev: unused * @dev: unused
* *
* This is for the generic clocksource timekeeping. * This is for the generic clocksource timekeeping.
* xtime/wall_to_monotonic/jiffies/wall_jiffies/etc are * xtime/wall_to_monotonic/jiffies/etc are
* still managed by arch specific suspend/resume code. * still managed by arch specific suspend/resume code.
*/ */
static int timekeeping_resume(struct sys_device *dev) static int timekeeping_resume(struct sys_device *dev)
...@@ -1016,9 +1016,6 @@ static inline void calc_load(unsigned long ticks) ...@@ -1016,9 +1016,6 @@ static inline void calc_load(unsigned long ticks)
} }
} }
/* jiffies at the most recent update of wall time */
unsigned long wall_jiffies = INITIAL_JIFFIES;
/* /*
* This read-write spinlock protects us from races in SMP while * This read-write spinlock protects us from races in SMP while
* playing with xtime and avenrun. * playing with xtime and avenrun.
...@@ -1056,7 +1053,6 @@ void run_local_timers(void) ...@@ -1056,7 +1053,6 @@ void run_local_timers(void)
*/ */
static inline void update_times(unsigned long ticks) static inline void update_times(unsigned long ticks)
{ {
wall_jiffies += ticks;
update_wall_time(); update_wall_time();
calc_load(ticks); calc_load(ticks);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment