diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2009-09-18 12:15:24 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2009-09-18 12:15:24 -0400 |
commit | a03fdb7612874834d6847107198712d18b5242c7 (patch) | |
tree | 9ae81170509fd8b1c23d1b7e8edfa7a2203ffce3 /arch/x86/kernel/tsc.c | |
parent | 202c4675c55ddf6b443c7e057d2dff6b42ef71aa (diff) | |
parent | 12e09337fe238981cb0c87543306e23775d1a143 (diff) |
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.
Diffstat (limited to 'arch/x86/kernel/tsc.c')
-rw-r--r-- | arch/x86/kernel/tsc.c | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/arch/x86/kernel/tsc.c b/arch/x86/kernel/tsc.c index 71f4368b357e..fc3672a303d6 100644 --- a/arch/x86/kernel/tsc.c +++ b/arch/x86/kernel/tsc.c | |||
@@ -744,10 +744,16 @@ static cycle_t __vsyscall_fn vread_tsc(void) | |||
744 | } | 744 | } |
745 | #endif | 745 | #endif |
746 | 746 | ||
747 | static void resume_tsc(void) | ||
748 | { | ||
749 | clocksource_tsc.cycle_last = 0; | ||
750 | } | ||
751 | |||
747 | static struct clocksource clocksource_tsc = { | 752 | static struct clocksource clocksource_tsc = { |
748 | .name = "tsc", | 753 | .name = "tsc", |
749 | .rating = 300, | 754 | .rating = 300, |
750 | .read = read_tsc, | 755 | .read = read_tsc, |
756 | .resume = resume_tsc, | ||
751 | .mask = CLOCKSOURCE_MASK(64), | 757 | .mask = CLOCKSOURCE_MASK(64), |
752 | .shift = 22, | 758 | .shift = 22, |
753 | .flags = CLOCK_SOURCE_IS_CONTINUOUS | | 759 | .flags = CLOCK_SOURCE_IS_CONTINUOUS | |
@@ -761,12 +767,14 @@ void mark_tsc_unstable(char *reason) | |||
761 | { | 767 | { |
762 | if (!tsc_unstable) { | 768 | if (!tsc_unstable) { |
763 | tsc_unstable = 1; | 769 | tsc_unstable = 1; |
764 | printk("Marking TSC unstable due to %s\n", reason); | 770 | printk(KERN_INFO "Marking TSC unstable due to %s\n", reason); |
765 | /* Change only the rating, when not registered */ | 771 | /* Change only the rating, when not registered */ |
766 | if (clocksource_tsc.mult) | 772 | if (clocksource_tsc.mult) |
767 | clocksource_change_rating(&clocksource_tsc, 0); | 773 | clocksource_mark_unstable(&clocksource_tsc); |
768 | else | 774 | else { |
775 | clocksource_tsc.flags |= CLOCK_SOURCE_UNSTABLE; | ||
769 | clocksource_tsc.rating = 0; | 776 | clocksource_tsc.rating = 0; |
777 | } | ||
770 | } | 778 | } |
771 | } | 779 | } |
772 | 780 | ||