diff options
-rw-r--r-- | arch/ia64/kernel/time.c | 8 | ||||
-rw-r--r-- | arch/powerpc/kernel/time.c | 4 | ||||
-rw-r--r-- | arch/s390/kernel/vtime.c | 4 | ||||
-rw-r--r-- | include/linux/vtime.h | 4 | ||||
-rw-r--r-- | kernel/sched/cputime.c | 16 |
5 files changed, 26 insertions, 10 deletions
diff --git a/arch/ia64/kernel/time.c b/arch/ia64/kernel/time.c index f6388216080d..5e4850305d3f 100644 --- a/arch/ia64/kernel/time.c +++ b/arch/ia64/kernel/time.c | |||
@@ -106,9 +106,9 @@ void vtime_task_switch(struct task_struct *prev) | |||
106 | struct thread_info *ni = task_thread_info(current); | 106 | struct thread_info *ni = task_thread_info(current); |
107 | 107 | ||
108 | if (idle_task(smp_processor_id()) != prev) | 108 | if (idle_task(smp_processor_id()) != prev) |
109 | vtime_account_system(prev); | 109 | __vtime_account_system(prev); |
110 | else | 110 | else |
111 | vtime_account_idle(prev); | 111 | __vtime_account_idle(prev); |
112 | 112 | ||
113 | vtime_account_user(prev); | 113 | vtime_account_user(prev); |
114 | 114 | ||
@@ -135,14 +135,14 @@ static cputime_t vtime_delta(struct task_struct *tsk) | |||
135 | return delta_stime; | 135 | return delta_stime; |
136 | } | 136 | } |
137 | 137 | ||
138 | void vtime_account_system(struct task_struct *tsk) | 138 | void __vtime_account_system(struct task_struct *tsk) |
139 | { | 139 | { |
140 | cputime_t delta = vtime_delta(tsk); | 140 | cputime_t delta = vtime_delta(tsk); |
141 | 141 | ||
142 | account_system_time(tsk, 0, delta, delta); | 142 | account_system_time(tsk, 0, delta, delta); |
143 | } | 143 | } |
144 | 144 | ||
145 | void vtime_account_idle(struct task_struct *tsk) | 145 | void __vtime_account_idle(struct task_struct *tsk) |
146 | { | 146 | { |
147 | account_idle_time(vtime_delta(tsk)); | 147 | account_idle_time(vtime_delta(tsk)); |
148 | } | 148 | } |
diff --git a/arch/powerpc/kernel/time.c b/arch/powerpc/kernel/time.c index ce4cb772dc78..0db456f30d45 100644 --- a/arch/powerpc/kernel/time.c +++ b/arch/powerpc/kernel/time.c | |||
@@ -336,7 +336,7 @@ static u64 vtime_delta(struct task_struct *tsk, | |||
336 | return delta; | 336 | return delta; |
337 | } | 337 | } |
338 | 338 | ||
339 | void vtime_account_system(struct task_struct *tsk) | 339 | void __vtime_account_system(struct task_struct *tsk) |
340 | { | 340 | { |
341 | u64 delta, sys_scaled, stolen; | 341 | u64 delta, sys_scaled, stolen; |
342 | 342 | ||
@@ -346,7 +346,7 @@ void vtime_account_system(struct task_struct *tsk) | |||
346 | account_steal_time(stolen); | 346 | account_steal_time(stolen); |
347 | } | 347 | } |
348 | 348 | ||
349 | void vtime_account_idle(struct task_struct *tsk) | 349 | void __vtime_account_idle(struct task_struct *tsk) |
350 | { | 350 | { |
351 | u64 delta, sys_scaled, stolen; | 351 | u64 delta, sys_scaled, stolen; |
352 | 352 | ||
diff --git a/arch/s390/kernel/vtime.c b/arch/s390/kernel/vtime.c index 790334427895..783e988c4e1e 100644 --- a/arch/s390/kernel/vtime.c +++ b/arch/s390/kernel/vtime.c | |||
@@ -140,6 +140,10 @@ void vtime_account(struct task_struct *tsk) | |||
140 | } | 140 | } |
141 | EXPORT_SYMBOL_GPL(vtime_account); | 141 | EXPORT_SYMBOL_GPL(vtime_account); |
142 | 142 | ||
143 | void __vtime_account_system(struct task_struct *tsk) | ||
144 | __attribute__((alias("vtime_account"))); | ||
145 | EXPORT_SYMBOL_GPL(__vtime_account_system); | ||
146 | |||
143 | void __kprobes vtime_stop_cpu(void) | 147 | void __kprobes vtime_stop_cpu(void) |
144 | { | 148 | { |
145 | struct s390_idle_data *idle = &__get_cpu_var(s390_idle); | 149 | struct s390_idle_data *idle = &__get_cpu_var(s390_idle); |
diff --git a/include/linux/vtime.h b/include/linux/vtime.h index 7199c24c8204..b9fc4f9ab470 100644 --- a/include/linux/vtime.h +++ b/include/linux/vtime.h | |||
@@ -5,10 +5,12 @@ struct task_struct; | |||
5 | 5 | ||
6 | #ifdef CONFIG_VIRT_CPU_ACCOUNTING | 6 | #ifdef CONFIG_VIRT_CPU_ACCOUNTING |
7 | extern void vtime_task_switch(struct task_struct *prev); | 7 | extern void vtime_task_switch(struct task_struct *prev); |
8 | extern void __vtime_account_system(struct task_struct *tsk); | ||
8 | extern void vtime_account_system(struct task_struct *tsk); | 9 | extern void vtime_account_system(struct task_struct *tsk); |
9 | extern void vtime_account_idle(struct task_struct *tsk); | 10 | extern void __vtime_account_idle(struct task_struct *tsk); |
10 | #else | 11 | #else |
11 | static inline void vtime_task_switch(struct task_struct *prev) { } | 12 | static inline void vtime_task_switch(struct task_struct *prev) { } |
13 | static inline void vtime_account_system(struct task_struct *tsk) { } | ||
12 | #endif | 14 | #endif |
13 | 15 | ||
14 | #if !defined(CONFIG_VIRT_CPU_ACCOUNTING) && !defined(CONFIG_IRQ_TIME_ACCOUNTING) | 16 | #if !defined(CONFIG_VIRT_CPU_ACCOUNTING) && !defined(CONFIG_IRQ_TIME_ACCOUNTING) |
diff --git a/kernel/sched/cputime.c b/kernel/sched/cputime.c index 81b763ba58a6..0359f47b0ae4 100644 --- a/kernel/sched/cputime.c +++ b/kernel/sched/cputime.c | |||
@@ -433,10 +433,20 @@ void thread_group_times(struct task_struct *p, cputime_t *ut, cputime_t *st) | |||
433 | *st = cputime.stime; | 433 | *st = cputime.stime; |
434 | } | 434 | } |
435 | 435 | ||
436 | void vtime_account_system(struct task_struct *tsk) | ||
437 | { | ||
438 | unsigned long flags; | ||
439 | |||
440 | local_irq_save(flags); | ||
441 | __vtime_account_system(tsk); | ||
442 | local_irq_restore(flags); | ||
443 | } | ||
444 | EXPORT_SYMBOL_GPL(vtime_account_system); | ||
445 | |||
436 | /* | 446 | /* |
437 | * Archs that account the whole time spent in the idle task | 447 | * Archs that account the whole time spent in the idle task |
438 | * (outside irq) as idle time can rely on this and just implement | 448 | * (outside irq) as idle time can rely on this and just implement |
439 | * vtime_account_system() and vtime_account_idle(). Archs that | 449 | * __vtime_account_system() and __vtime_account_idle(). Archs that |
440 | * have other meaning of the idle time (s390 only includes the | 450 | * have other meaning of the idle time (s390 only includes the |
441 | * time spent by the CPU when it's in low power mode) must override | 451 | * time spent by the CPU when it's in low power mode) must override |
442 | * vtime_account(). | 452 | * vtime_account(). |
@@ -449,9 +459,9 @@ void vtime_account(struct task_struct *tsk) | |||
449 | local_irq_save(flags); | 459 | local_irq_save(flags); |
450 | 460 | ||
451 | if (in_interrupt() || !is_idle_task(tsk)) | 461 | if (in_interrupt() || !is_idle_task(tsk)) |
452 | vtime_account_system(tsk); | 462 | __vtime_account_system(tsk); |
453 | else | 463 | else |
454 | vtime_account_idle(tsk); | 464 | __vtime_account_idle(tsk); |
455 | 465 | ||
456 | local_irq_restore(flags); | 466 | local_irq_restore(flags); |
457 | } | 467 | } |