Skip to content

Commit

Permalink
time: Remove xtime_cache
Browse files Browse the repository at this point in the history
With the prior logarithmic time accumulation patch, xtime will now
always be within one "tick" of the current time, instead of
possibly half a second off.

This removes the need for the xtime_cache value, which always
stored the time at the last interrupt, so this patch cleans that up
removing the xtime_cache related code.

This is a bit simpler, but still could use some wider testing.

Signed-off-by: John Stultz <johnstul@us.ibm.com>
Acked-by: Thomas Gleixner <tglx@linutronix.de>
Reviewed-by: John Kacur <jkacur@redhat.com>
Cc: Clark Williams <williams@redhat.com>
Cc: Martin Schwidefsky <schwidefsky@de.ibm.com>
Cc: Andrew Morton <akpm@linux-foundation.org>
LKML-Reference: <1254525855.7741.95.camel@localhost.localdomain>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
  • Loading branch information
john stultz authored and Ingo Molnar committed Oct 5, 2009
1 parent a092ff0 commit 7bc7d63
Show file tree
Hide file tree
Showing 2 changed files with 4 additions and 24 deletions.
1 change: 0 additions & 1 deletion kernel/time.c
Original file line number Diff line number Diff line change
Expand Up @@ -136,7 +136,6 @@ static inline void warp_clock(void)
write_seqlock_irq(&xtime_lock);
wall_to_monotonic.tv_sec -= sys_tz.tz_minuteswest * 60;
xtime.tv_sec += sys_tz.tz_minuteswest * 60;
update_xtime_cache(0);
write_sequnlock_irq(&xtime_lock);
clock_was_set();
}
Expand Down
27 changes: 4 additions & 23 deletions kernel/time/timekeeping.c
Original file line number Diff line number Diff line change
Expand Up @@ -164,13 +164,6 @@ struct timespec raw_time;
/* flag for if timekeeping is suspended */
int __read_mostly timekeeping_suspended;

static struct timespec xtime_cache __attribute__ ((aligned (16)));
void update_xtime_cache(u64 nsec)
{
xtime_cache = xtime;
timespec_add_ns(&xtime_cache, nsec);
}

/* must hold xtime_lock */
void timekeeping_leap_insert(int leapsecond)
{
Expand Down Expand Up @@ -331,8 +324,6 @@ int do_settimeofday(struct timespec *tv)

xtime = *tv;

update_xtime_cache(0);

timekeeper.ntp_error = 0;
ntp_clear();

Expand Down Expand Up @@ -547,7 +538,6 @@ void __init timekeeping_init(void)
}
set_normalized_timespec(&wall_to_monotonic,
-boot.tv_sec, -boot.tv_nsec);
update_xtime_cache(0);
total_sleep_time.tv_sec = 0;
total_sleep_time.tv_nsec = 0;
write_sequnlock_irqrestore(&xtime_lock, flags);
Expand Down Expand Up @@ -581,7 +571,6 @@ static int timekeeping_resume(struct sys_device *dev)
wall_to_monotonic = timespec_sub(wall_to_monotonic, ts);
total_sleep_time = timespec_add_safe(total_sleep_time, ts);
}
update_xtime_cache(0);
/* re-base the last cycle value */
timekeeper.clock->cycle_last = timekeeper.clock->read(timekeeper.clock);
timekeeper.ntp_error = 0;
Expand Down Expand Up @@ -721,7 +710,6 @@ static void timekeeping_adjust(s64 offset)
timekeeper.ntp_error_shift;
}


/**
* logarithmic_accumulation - shifted accumulation of cycles
*
Expand Down Expand Up @@ -765,7 +753,6 @@ static cycle_t logarithmic_accumulation(cycle_t offset, int shift)
return offset;
}


/**
* update_wall_time - Uses the current clocksource to increment the wall time
*
Expand All @@ -775,7 +762,6 @@ void update_wall_time(void)
{
struct clocksource *clock;
cycle_t offset;
u64 nsecs;
int shift = 0, maxshift;

/* Make sure we're fully resumed: */
Expand Down Expand Up @@ -841,9 +827,6 @@ void update_wall_time(void)
timekeeper.ntp_error += timekeeper.xtime_nsec <<
timekeeper.ntp_error_shift;

nsecs = clocksource_cyc2ns(offset, timekeeper.mult, timekeeper.shift);
update_xtime_cache(nsecs);

/* check to see if there is a new clocksource to use */
update_vsyscall(&xtime, timekeeper.clock);
}
Expand Down Expand Up @@ -880,13 +863,13 @@ void monotonic_to_bootbased(struct timespec *ts)

unsigned long get_seconds(void)
{
return xtime_cache.tv_sec;
return xtime.tv_sec;
}
EXPORT_SYMBOL(get_seconds);

struct timespec __current_kernel_time(void)
{
return xtime_cache;
return xtime;
}

struct timespec current_kernel_time(void)
Expand All @@ -896,8 +879,7 @@ struct timespec current_kernel_time(void)

do {
seq = read_seqbegin(&xtime_lock);

now = xtime_cache;
now = xtime;
} while (read_seqretry(&xtime_lock, seq));

return now;
Expand All @@ -911,8 +893,7 @@ struct timespec get_monotonic_coarse(void)

do {
seq = read_seqbegin(&xtime_lock);

now = xtime_cache;
now = xtime;
mono = wall_to_monotonic;
} while (read_seqretry(&xtime_lock, seq));

Expand Down

0 comments on commit 7bc7d63

Please sign in to comment.