diff options
| -rw-r--r-- | arch/um/include/kern_util.h | 13 | ||||
| -rw-r--r-- | arch/um/kernel/time_kern.c | 10 | ||||
| -rw-r--r-- | arch/um/os-Linux/time.c | 10 |
3 files changed, 13 insertions, 20 deletions
diff --git a/arch/um/include/kern_util.h b/arch/um/include/kern_util.h index efa3d33c0be6..310980b32173 100644 --- a/arch/um/include/kern_util.h +++ b/arch/um/include/kern_util.h | |||
| @@ -120,20 +120,11 @@ extern int is_syscall(unsigned long addr); | |||
| 120 | extern void free_irq(unsigned int, void *); | 120 | extern void free_irq(unsigned int, void *); |
| 121 | extern int cpu(void); | 121 | extern int cpu(void); |
| 122 | 122 | ||
| 123 | extern void time_init_kern(void); | ||
| 124 | |||
| 123 | /* Are we disallowed to sleep? Used to choose between GFP_KERNEL and GFP_ATOMIC. */ | 125 | /* Are we disallowed to sleep? Used to choose between GFP_KERNEL and GFP_ATOMIC. */ |
| 124 | extern int __cant_sleep(void); | 126 | extern int __cant_sleep(void); |
| 125 | extern void segv_handler(int sig, union uml_pt_regs *regs); | 127 | extern void segv_handler(int sig, union uml_pt_regs *regs); |
| 126 | extern void sigio_handler(int sig, union uml_pt_regs *regs); | 128 | extern void sigio_handler(int sig, union uml_pt_regs *regs); |
| 127 | 129 | ||
| 128 | #endif | 130 | #endif |
| 129 | |||
| 130 | /* | ||
| 131 | * Overrides for Emacs so that we follow Linus's tabbing style. | ||
| 132 | * Emacs will notice this stuff at the end of the file and automatically | ||
| 133 | * adjust the settings for this buffer only. This must remain at the end | ||
| 134 | * of the file. | ||
| 135 | * --------------------------------------------------------------------------- | ||
| 136 | * Local variables: | ||
| 137 | * c-file-style: "linux" | ||
| 138 | * End: | ||
| 139 | */ | ||
diff --git a/arch/um/kernel/time_kern.c b/arch/um/kernel/time_kern.c index 528cf623f8b4..86f51d04c98d 100644 --- a/arch/um/kernel/time_kern.c +++ b/arch/um/kernel/time_kern.c | |||
| @@ -84,6 +84,16 @@ void timer_irq(union uml_pt_regs *regs) | |||
| 84 | } | 84 | } |
| 85 | } | 85 | } |
| 86 | 86 | ||
| 87 | |||
| 88 | void time_init_kern(void) | ||
| 89 | { | ||
| 90 | unsigned long long nsecs; | ||
| 91 | |||
| 92 | nsecs = os_nsecs(); | ||
| 93 | set_normalized_timespec(&wall_to_monotonic, -nsecs / BILLION, | ||
| 94 | -nsecs % BILLION); | ||
| 95 | } | ||
| 96 | |||
| 87 | void do_boot_timer_handler(struct sigcontext * sc) | 97 | void do_boot_timer_handler(struct sigcontext * sc) |
| 88 | { | 98 | { |
| 89 | struct pt_regs regs; | 99 | struct pt_regs regs; |
diff --git a/arch/um/os-Linux/time.c b/arch/um/os-Linux/time.c index 6f7626775acb..280c4fb9b585 100644 --- a/arch/um/os-Linux/time.c +++ b/arch/um/os-Linux/time.c | |||
| @@ -81,20 +81,12 @@ void uml_idle_timer(void) | |||
| 81 | set_interval(ITIMER_REAL); | 81 | set_interval(ITIMER_REAL); |
| 82 | } | 82 | } |
| 83 | 83 | ||
| 84 | extern void ktime_get_ts(struct timespec *ts); | ||
| 85 | #define do_posix_clock_monotonic_gettime(ts) ktime_get_ts(ts) | ||
| 86 | |||
| 87 | void time_init(void) | 84 | void time_init(void) |
| 88 | { | 85 | { |
| 89 | struct timespec now; | ||
| 90 | |||
| 91 | if(signal(SIGVTALRM, boot_timer_handler) == SIG_ERR) | 86 | if(signal(SIGVTALRM, boot_timer_handler) == SIG_ERR) |
| 92 | panic("Couldn't set SIGVTALRM handler"); | 87 | panic("Couldn't set SIGVTALRM handler"); |
| 93 | set_interval(ITIMER_VIRTUAL); | 88 | set_interval(ITIMER_VIRTUAL); |
| 94 | 89 | time_init_kern(); | |
| 95 | do_posix_clock_monotonic_gettime(&now); | ||
| 96 | wall_to_monotonic.tv_sec = -now.tv_sec; | ||
| 97 | wall_to_monotonic.tv_nsec = -now.tv_nsec; | ||
| 98 | } | 90 | } |
| 99 | 91 | ||
| 100 | unsigned long long os_nsecs(void) | 92 | unsigned long long os_nsecs(void) |
