summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJeff Dike <jdike@addtoit.com>2007-10-16 10:27:23 +0200
committerLinus Torvalds <torvalds@woody.linux-foundation.org>2007-10-16 18:43:08 +0200
commitd83d2aa9485d996cfd89f04389b419c6727faacb (patch)
tree261bd8162d132ae1855127314bf33de7c130511d
parentuml: separate timer initialization (diff)
downloadlinux-d83d2aa9485d996cfd89f04389b419c6727faacb.tar.xz
linux-d83d2aa9485d996cfd89f04389b419c6727faacb.zip
uml: GENERIC_TIME support
Enable CONFIG_GENERIC_TIME. As a side-effect of this, the UML implementations of do_gettimeofday and do_settimeofday go away, as these are provided by generic code. set_time also goes away since it was only used by do_settimeofday. Signed-off-by: Jeff Dike <jdike@linux.intel.com> Cc: Thomas Gleixner <tglx@linutronix.de> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
-rw-r--r--arch/um/Kconfig5
-rw-r--r--arch/um/kernel/ksyms.c3
-rw-r--r--arch/um/kernel/time.c40
3 files changed, 5 insertions, 43 deletions
diff --git a/arch/um/Kconfig b/arch/um/Kconfig
index 4aabb334a84e..53597bbcd7b0 100644
--- a/arch/um/Kconfig
+++ b/arch/um/Kconfig
@@ -55,6 +55,10 @@ config GENERIC_BUG
default y
depends on BUG
+config GENERIC_TIME
+ bool
+ default y
+
# Used in kernel/irq/manage.c and include/linux/irq.h
config IRQ_RELEASE_METHOD
bool
@@ -75,6 +79,7 @@ config STATIC_LINK
source "arch/um/Kconfig.arch"
source "mm/Kconfig"
+source "kernel/time/Kconfig"
config LD_SCRIPT_STATIC
bool
diff --git a/arch/um/kernel/ksyms.c b/arch/um/kernel/ksyms.c
index 4b750014925d..1b388b41d95d 100644
--- a/arch/um/kernel/ksyms.c
+++ b/arch/um/kernel/ksyms.c
@@ -67,9 +67,6 @@ EXPORT_SYMBOL(run_helper);
EXPORT_SYMBOL(start_thread);
EXPORT_SYMBOL(dump_thread);
-EXPORT_SYMBOL(do_gettimeofday);
-EXPORT_SYMBOL(do_settimeofday);
-
#ifdef CONFIG_SMP
/* required for SMP */
diff --git a/arch/um/kernel/time.c b/arch/um/kernel/time.c
index 758d4f9cb22a..7678bcf830ba 100644
--- a/arch/um/kernel/time.c
+++ b/arch/um/kernel/time.c
@@ -123,46 +123,6 @@ void time_init(void)
late_time_init = register_timer;
}
-void do_gettimeofday(struct timeval *tv)
-{
-#ifdef CONFIG_UML_REAL_TIME_CLOCK
- unsigned long long nsecs = get_time();
-#else
- unsigned long long nsecs = (unsigned long long) xtime.tv_sec * BILLION +
- xtime.tv_nsec;
-#endif
- tv->tv_sec = nsecs / NSEC_PER_SEC;
- /*
- * Careful about calculations here - this was originally done as
- * (nsecs - tv->tv_sec * NSEC_PER_SEC) / NSEC_PER_USEC
- * which gave bogus (> 1000000) values. Dunno why, suspect gcc
- * (4.0.0) miscompiled it, or there's a subtle 64/32-bit conversion
- * problem that I missed.
- */
- nsecs -= tv->tv_sec * NSEC_PER_SEC;
- tv->tv_usec = (unsigned long) nsecs / NSEC_PER_USEC;
-}
-
-static inline void set_time(unsigned long long nsecs)
-{
- unsigned long long now;
- unsigned long flags;
-
- spin_lock_irqsave(&timer_spinlock, flags);
- now = os_nsecs();
- local_offset = nsecs - now;
- spin_unlock_irqrestore(&timer_spinlock, flags);
-
- clock_was_set();
-}
-
-int do_settimeofday(struct timespec *tv)
-{
- set_time((unsigned long long) tv->tv_sec * NSEC_PER_SEC + tv->tv_nsec);
-
- return 0;
-}
-
void timer_handler(int sig, struct uml_pt_regs *regs)
{
if (current_thread->cpu == 0)