diff options
Diffstat (limited to 'arch/s390/kernel/time.c')
-rw-r--r-- | arch/s390/kernel/time.c | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/arch/s390/kernel/time.c b/arch/s390/kernel/time.c index 4bf66cc4a267..2c8c690688cb 100644 --- a/arch/s390/kernel/time.c +++ b/arch/s390/kernel/time.c | |||
@@ -34,6 +34,7 @@ | |||
34 | #include <asm/s390_ext.h> | 34 | #include <asm/s390_ext.h> |
35 | #include <asm/div64.h> | 35 | #include <asm/div64.h> |
36 | #include <asm/irq.h> | 36 | #include <asm/irq.h> |
37 | #include <asm/irq_regs.h> | ||
37 | #include <asm/timer.h> | 38 | #include <asm/timer.h> |
38 | 39 | ||
39 | /* change this if you have some constant time drift */ | 40 | /* change this if you have some constant time drift */ |
@@ -150,9 +151,9 @@ EXPORT_SYMBOL(do_settimeofday); | |||
150 | 151 | ||
151 | 152 | ||
152 | #ifdef CONFIG_PROFILING | 153 | #ifdef CONFIG_PROFILING |
153 | #define s390_do_profile(regs) profile_tick(CPU_PROFILING, regs) | 154 | #define s390_do_profile() profile_tick(CPU_PROFILING) |
154 | #else | 155 | #else |
155 | #define s390_do_profile(regs) do { ; } while(0) | 156 | #define s390_do_profile() do { ; } while(0) |
156 | #endif /* CONFIG_PROFILING */ | 157 | #endif /* CONFIG_PROFILING */ |
157 | 158 | ||
158 | 159 | ||
@@ -160,7 +161,7 @@ EXPORT_SYMBOL(do_settimeofday); | |||
160 | * timer_interrupt() needs to keep up the real-time clock, | 161 | * timer_interrupt() needs to keep up the real-time clock, |
161 | * as well as call the "do_timer()" routine every clocktick | 162 | * as well as call the "do_timer()" routine every clocktick |
162 | */ | 163 | */ |
163 | void account_ticks(struct pt_regs *regs) | 164 | void account_ticks(void) |
164 | { | 165 | { |
165 | __u64 tmp; | 166 | __u64 tmp; |
166 | __u32 ticks; | 167 | __u32 ticks; |
@@ -221,10 +222,10 @@ void account_ticks(struct pt_regs *regs) | |||
221 | account_tick_vtime(current); | 222 | account_tick_vtime(current); |
222 | #else | 223 | #else |
223 | while (ticks--) | 224 | while (ticks--) |
224 | update_process_times(user_mode(regs)); | 225 | update_process_times(user_mode(get_irq_regs())); |
225 | #endif | 226 | #endif |
226 | 227 | ||
227 | s390_do_profile(regs); | 228 | s390_do_profile(); |
228 | } | 229 | } |
229 | 230 | ||
230 | #ifdef CONFIG_NO_IDLE_HZ | 231 | #ifdef CONFIG_NO_IDLE_HZ |
@@ -285,9 +286,11 @@ static inline void stop_hz_timer(void) | |||
285 | */ | 286 | */ |
286 | static inline void start_hz_timer(void) | 287 | static inline void start_hz_timer(void) |
287 | { | 288 | { |
289 | BUG_ON(!in_interrupt()); | ||
290 | |||
288 | if (!cpu_isset(smp_processor_id(), nohz_cpu_mask)) | 291 | if (!cpu_isset(smp_processor_id(), nohz_cpu_mask)) |
289 | return; | 292 | return; |
290 | account_ticks(task_pt_regs(current)); | 293 | account_ticks(); |
291 | cpu_clear(smp_processor_id(), nohz_cpu_mask); | 294 | cpu_clear(smp_processor_id(), nohz_cpu_mask); |
292 | } | 295 | } |
293 | 296 | ||