Commit d83d2aa9 authored by Jeff Dike's avatar Jeff Dike Committed by Linus Torvalds

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: default avatarJeff Dike <jdike@linux.intel.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 78a26e25
...@@ -55,6 +55,10 @@ config GENERIC_BUG ...@@ -55,6 +55,10 @@ config GENERIC_BUG
default y default y
depends on BUG depends on BUG
config GENERIC_TIME
bool
default y
# Used in kernel/irq/manage.c and include/linux/irq.h # Used in kernel/irq/manage.c and include/linux/irq.h
config IRQ_RELEASE_METHOD config IRQ_RELEASE_METHOD
bool bool
...@@ -75,6 +79,7 @@ config STATIC_LINK ...@@ -75,6 +79,7 @@ config STATIC_LINK
source "arch/um/Kconfig.arch" source "arch/um/Kconfig.arch"
source "mm/Kconfig" source "mm/Kconfig"
source "kernel/time/Kconfig"
config LD_SCRIPT_STATIC config LD_SCRIPT_STATIC
bool bool
......
...@@ -67,9 +67,6 @@ EXPORT_SYMBOL(run_helper); ...@@ -67,9 +67,6 @@ EXPORT_SYMBOL(run_helper);
EXPORT_SYMBOL(start_thread); EXPORT_SYMBOL(start_thread);
EXPORT_SYMBOL(dump_thread); EXPORT_SYMBOL(dump_thread);
EXPORT_SYMBOL(do_gettimeofday);
EXPORT_SYMBOL(do_settimeofday);
#ifdef CONFIG_SMP #ifdef CONFIG_SMP
/* required for SMP */ /* required for SMP */
......
...@@ -123,46 +123,6 @@ void time_init(void) ...@@ -123,46 +123,6 @@ void time_init(void)
late_time_init = register_timer; 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) void timer_handler(int sig, struct uml_pt_regs *regs)
{ {
if (current_thread->cpu == 0) if (current_thread->cpu == 0)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment