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/powerpc | |
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/powerpc')
-rw-r--r-- | arch/powerpc/kernel/time.c | 19 |
1 files changed, 12 insertions, 7 deletions
diff --git a/arch/powerpc/kernel/time.c b/arch/powerpc/kernel/time.c index a180b4f9a4f6..465e498bcb33 100644 --- a/arch/powerpc/kernel/time.c +++ b/arch/powerpc/kernel/time.c | |||
@@ -774,11 +774,12 @@ int update_persistent_clock(struct timespec now) | |||
774 | return ppc_md.set_rtc_time(&tm); | 774 | return ppc_md.set_rtc_time(&tm); |
775 | } | 775 | } |
776 | 776 | ||
777 | unsigned long read_persistent_clock(void) | 777 | void read_persistent_clock(struct timespec *ts) |
778 | { | 778 | { |
779 | struct rtc_time tm; | 779 | struct rtc_time tm; |
780 | static int first = 1; | 780 | static int first = 1; |
781 | 781 | ||
782 | ts->tv_nsec = 0; | ||
782 | /* XXX this is a litle fragile but will work okay in the short term */ | 783 | /* XXX this is a litle fragile but will work okay in the short term */ |
783 | if (first) { | 784 | if (first) { |
784 | first = 0; | 785 | first = 0; |
@@ -786,14 +787,18 @@ unsigned long read_persistent_clock(void) | |||
786 | timezone_offset = ppc_md.time_init(); | 787 | timezone_offset = ppc_md.time_init(); |
787 | 788 | ||
788 | /* get_boot_time() isn't guaranteed to be safe to call late */ | 789 | /* get_boot_time() isn't guaranteed to be safe to call late */ |
789 | if (ppc_md.get_boot_time) | 790 | if (ppc_md.get_boot_time) { |
790 | return ppc_md.get_boot_time() -timezone_offset; | 791 | ts->tv_sec = ppc_md.get_boot_time() - timezone_offset; |
792 | return; | ||
793 | } | ||
794 | } | ||
795 | if (!ppc_md.get_rtc_time) { | ||
796 | ts->tv_sec = 0; | ||
797 | return; | ||
791 | } | 798 | } |
792 | if (!ppc_md.get_rtc_time) | ||
793 | return 0; | ||
794 | ppc_md.get_rtc_time(&tm); | 799 | ppc_md.get_rtc_time(&tm); |
795 | return mktime(tm.tm_year+1900, tm.tm_mon+1, tm.tm_mday, | 800 | ts->tv_sec = mktime(tm.tm_year+1900, tm.tm_mon+1, tm.tm_mday, |
796 | tm.tm_hour, tm.tm_min, tm.tm_sec); | 801 | tm.tm_hour, tm.tm_min, tm.tm_sec); |
797 | } | 802 | } |
798 | 803 | ||
799 | /* clocksource code */ | 804 | /* clocksource code */ |