Skip to content

Commit

Permalink
x86_64: Use generic xtime init
Browse files Browse the repository at this point in the history
xtime can be initialized including the cmos update from the generic
timekeeping code. Remove the arch specific implementation.

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Chris Wright <chrisw@sous-sol.org>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Andi Kleen <ak@suse.de>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
  • Loading branch information
Thomas Gleixner authored and Linus Torvalds committed Jul 22, 2007
1 parent af74522 commit ef81ab2
Showing 1 changed file with 1 addition and 39 deletions.
40 changes: 1 addition & 39 deletions arch/x86_64/kernel/time.c
Original file line number Diff line number Diff line change
Expand Up @@ -193,7 +193,7 @@ static irqreturn_t timer_interrupt(int irq, void *dev_id)
return IRQ_HANDLED;
}

static unsigned long get_cmos_time(void)
unsigned long read_persistent_clock(void)
{
unsigned int year, mon, day, hour, min, sec;
unsigned long flags;
Expand Down Expand Up @@ -367,11 +367,6 @@ void __init time_init(void)
{
if (nohpet)
hpet_address = 0;
xtime.tv_sec = get_cmos_time();
xtime.tv_nsec = 0;

set_normalized_timespec(&wall_to_monotonic,
-xtime.tv_sec, -xtime.tv_nsec);

if (hpet_arch_init())
hpet_address = 0;
Expand Down Expand Up @@ -409,54 +404,21 @@ void __init time_init(void)
setup_irq(0, &irq0);
}


static long clock_cmos_diff;
static unsigned long sleep_start;

/*
* sysfs support for the timer.
*/

static int timer_suspend(struct sys_device *dev, pm_message_t state)
{
/*
* Estimate time zone so that set_time can update the clock
*/
long cmos_time = get_cmos_time();

clock_cmos_diff = -cmos_time;
clock_cmos_diff += get_seconds();
sleep_start = cmos_time;
return 0;
}

static int timer_resume(struct sys_device *dev)
{
unsigned long flags;
unsigned long sec;
unsigned long ctime = get_cmos_time();
long sleep_length = (ctime - sleep_start) * HZ;

if (sleep_length < 0) {
printk(KERN_WARNING "Time skew detected in timer resume!\n");
/* The time after the resume must not be earlier than the time
* before the suspend or some nasty things will happen
*/
sleep_length = 0;
ctime = sleep_start;
}
if (hpet_address)
hpet_reenable();
else
i8254_timer_resume();

sec = ctime + clock_cmos_diff;
write_seqlock_irqsave(&xtime_lock,flags);
xtime.tv_sec = sec;
xtime.tv_nsec = 0;
jiffies += sleep_length;
write_sequnlock_irqrestore(&xtime_lock,flags);
touch_softlockup_watchdog();
return 0;
}

Expand Down

0 comments on commit ef81ab2

Please sign in to comment.