Merge branch 'timers-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip
* 'timers-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip: (34 commits) time: Prevent 32 bit overflow with set_normalized_timespec() clocksource: Delay clocksource down rating to late boot clocksource: clocksource_select must be called with mutex locked clocksource: Resolve cpu hotplug dead lock with TSC unstable, fix crash timers: Drop a function prototype clocksource: Resolve cpu hotplug dead lock with TSC unstable timer.c: Fix S/390 comments timekeeping: Fix invalid getboottime() value timekeeping: Fix up read_persistent_clock() breakage on sh timekeeping: Increase granularity of read_persistent_clock(), build fix time: Introduce CLOCK_REALTIME_COARSE x86: Do not unregister PIT clocksource on PIT oneshot setup/shutdown clocksource: Avoid clocksource watchdog circular locking dependency clocksource: Protect the watchdog rating changes with clocksource_mutex clocksource: Call clocksource_change_rating() outside of watchdog_lock timekeeping: Introduce read_boot_clock timekeeping: Increase granularity of read_persistent_clock() timekeeping: Update clocksource with stop_machine timekeeping: Add timekeeper read_clock helper functions timekeeping: Move NTP adjusted clock multiplier to struct timekeeper ... Fix trivial conflict due to MIPS lemote -> loongson renaming.
This commit is contained in:
@@ -184,12 +184,14 @@ static void timing_alert_interrupt(__u16 code)
|
||||
static void etr_reset(void);
|
||||
static void stp_reset(void);
|
||||
|
||||
unsigned long read_persistent_clock(void)
|
||||
void read_persistent_clock(struct timespec *ts)
|
||||
{
|
||||
struct timespec ts;
|
||||
tod_to_timeval(get_clock() - TOD_UNIX_EPOCH, ts);
|
||||
}
|
||||
|
||||
tod_to_timeval(get_clock() - TOD_UNIX_EPOCH, &ts);
|
||||
return ts.tv_sec;
|
||||
void read_boot_clock(struct timespec *ts)
|
||||
{
|
||||
tod_to_timeval(sched_clock_base_cc - TOD_UNIX_EPOCH, ts);
|
||||
}
|
||||
|
||||
static cycle_t read_tod_clock(struct clocksource *cs)
|
||||
@@ -207,6 +209,10 @@ static struct clocksource clocksource_tod = {
|
||||
.flags = CLOCK_SOURCE_IS_CONTINUOUS,
|
||||
};
|
||||
|
||||
struct clocksource * __init clocksource_default_clock(void)
|
||||
{
|
||||
return &clocksource_tod;
|
||||
}
|
||||
|
||||
void update_vsyscall(struct timespec *wall_time, struct clocksource *clock)
|
||||
{
|
||||
@@ -244,10 +250,6 @@ void update_vsyscall_tz(void)
|
||||
*/
|
||||
void __init time_init(void)
|
||||
{
|
||||
struct timespec ts;
|
||||
unsigned long flags;
|
||||
cycle_t now;
|
||||
|
||||
/* Reset time synchronization interfaces. */
|
||||
etr_reset();
|
||||
stp_reset();
|
||||
@@ -263,26 +265,6 @@ void __init time_init(void)
|
||||
if (clocksource_register(&clocksource_tod) != 0)
|
||||
panic("Could not register TOD clock source");
|
||||
|
||||
/*
|
||||
* The TOD clock is an accurate clock. The xtime should be
|
||||
* initialized in a way that the difference between TOD and
|
||||
* xtime is reasonably small. Too bad that timekeeping_init
|
||||
* sets xtime.tv_nsec to zero. In addition the clock source
|
||||
* change from the jiffies clock source to the TOD clock
|
||||
* source add another error of up to 1/HZ second. The same
|
||||
* function sets wall_to_monotonic to a value that is too
|
||||
* small for /proc/uptime to be accurate.
|
||||
* Reset xtime and wall_to_monotonic to sane values.
|
||||
*/
|
||||
write_seqlock_irqsave(&xtime_lock, flags);
|
||||
now = get_clock();
|
||||
tod_to_timeval(now - TOD_UNIX_EPOCH, &xtime);
|
||||
clocksource_tod.cycle_last = now;
|
||||
clocksource_tod.raw_time = xtime;
|
||||
tod_to_timeval(sched_clock_base_cc - TOD_UNIX_EPOCH, &ts);
|
||||
set_normalized_timespec(&wall_to_monotonic, -ts.tv_sec, -ts.tv_nsec);
|
||||
write_sequnlock_irqrestore(&xtime_lock, flags);
|
||||
|
||||
/* Enable TOD clock interrupts on the boot cpu. */
|
||||
init_cpu_timer();
|
||||
|
||||
|
Reference in New Issue
Block a user