Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c7f40ff1 authored by John Stultz's avatar John Stultz Committed by Linus Torvalds
Browse files

[PATCH] i386: Kill references to xtime



Remove all references to xtime in i386 and replace them w/
get/set_timeofday().  Requires some ugly and uncertain changes to APM, but
has been lightly tested to work.

Signed-off-by: default avatarJohn Stultz <johnstul@us.ibm.com>
Acked-by: default avatarIngo Molnar <mingo@elte.hu>
Acked-by: default avatarMikael Pettersson <mikpe@it.uu.se>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 0f0f1b40
Loading
Loading
Loading
Loading
+5 −12
Original line number Diff line number Diff line
@@ -1154,9 +1154,11 @@ static void queue_event(apm_event_t event, struct apm_user *sender)

static void set_time(void)
{
	struct timespec ts;
	if (got_clock_diff) {	/* Must know time zone in order to set clock */
		xtime.tv_sec = get_cmos_time() + clock_cmos_diff;
		xtime.tv_nsec = 0; 
		ts.tv_sec = get_cmos_time() + clock_cmos_diff;
		ts.tv_nsec = 0;
		do_settimeofday(&ts);
	} 
}

@@ -1232,13 +1234,8 @@ static int suspend(int vetoable)
	restore_processor_state();

	local_irq_disable();
	write_seqlock(&xtime_lock);
	spin_lock(&i8253_lock);
	reinit_timer();
	set_time();

	spin_unlock(&i8253_lock);
	write_sequnlock(&xtime_lock);
	reinit_timer();

	if (err == APM_NO_ERROR)
		err = APM_SUCCESS;
@@ -1365,9 +1362,7 @@ static void check_events(void)
			ignore_bounce = 1;
			if ((event != APM_NORMAL_RESUME)
			    || (ignore_normal_resume == 0)) {
				write_seqlock_irq(&xtime_lock);
				set_time();
				write_sequnlock_irq(&xtime_lock);
				device_resume();
				pm_send_all(PM_RESUME, (void *)0);
				queue_event(event, NULL);
@@ -1383,9 +1378,7 @@ static void check_events(void)
			break;

		case APM_UPDATE_TIME:
			write_seqlock_irq(&xtime_lock);
			set_time();
			write_sequnlock_irq(&xtime_lock);
			break;

		case APM_CRITICAL_SUSPEND:
+15 −11
Original line number Diff line number Diff line
@@ -288,7 +288,7 @@ static int timer_resume(struct sys_device *dev)
	unsigned long flags;
	unsigned long sec;
	unsigned long sleep_length;

	struct timespec ts;
#ifdef CONFIG_HPET_TIMER
	if (is_hpet_enabled())
		hpet_reenable();
@@ -296,9 +296,11 @@ static int timer_resume(struct sys_device *dev)
	setup_pit_timer();
	sec = get_cmos_time() + clock_cmos_diff;
	sleep_length = (get_cmos_time() - sleep_start) * HZ;

	ts.tv_sec = sec;
	ts.tv_nsec = 0;
	do_settimeofday(&ts);
	write_seqlock_irqsave(&xtime_lock, flags);
	xtime.tv_sec = sec;
	xtime.tv_nsec = 0;
	jiffies_64 += sleep_length;
	wall_jiffies += sleep_length;
	write_sequnlock_irqrestore(&xtime_lock, flags);
@@ -334,10 +336,11 @@ extern void (*late_time_init)(void);
/* Duplicate of time_init() below, with hpet_enable part added */
static void __init hpet_time_init(void)
{
	xtime.tv_sec = get_cmos_time();
	xtime.tv_nsec = (INITIAL_JIFFIES % HZ) * (NSEC_PER_SEC / HZ);
	set_normalized_timespec(&wall_to_monotonic,
		-xtime.tv_sec, -xtime.tv_nsec);
	struct timespec ts;
	ts.tv_sec = get_cmos_time();
	ts.tv_nsec = (INITIAL_JIFFIES % HZ) * (NSEC_PER_SEC / HZ);

	do_settimeofday(&ts);

	if ((hpet_enable() >= 0) && hpet_use_timer) {
		printk("Using HPET for base-timer\n");
@@ -349,6 +352,7 @@ static void __init hpet_time_init(void)

void __init time_init(void)
{
	struct timespec ts;
#ifdef CONFIG_HPET_TIMER
	if (is_hpet_capable()) {
		/*
@@ -359,10 +363,10 @@ void __init time_init(void)
		return;
	}
#endif
	xtime.tv_sec = get_cmos_time();
	xtime.tv_nsec = (INITIAL_JIFFIES % HZ) * (NSEC_PER_SEC / HZ);
	set_normalized_timespec(&wall_to_monotonic,
		-xtime.tv_sec, -xtime.tv_nsec);
	ts.tv_sec = get_cmos_time();
	ts.tv_nsec = (INITIAL_JIFFIES % HZ) * (NSEC_PER_SEC / HZ);

	do_settimeofday(&ts);

	time_init_hook();
}