aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/sched/cputime.c
diff options
context:
space:
mode:
authorFrederic Weisbecker <fweisbec@gmail.com>2012-10-24 12:05:51 -0400
committerFrederic Weisbecker <fweisbec@gmail.com>2012-10-29 16:31:31 -0400
commit11113334d1c5dd5355c86e531c29f1202a855c86 (patch)
tree259c7c3344733444ca39263b1a79f40b243b155f /kernel/sched/cputime.c
parentdcbf832e5823156e8f155359b47bd108cac8ad68 (diff)
vtime: Make vtime_account_system() irqsafe
vtime_account_system() currently has only one caller with vtime_account() which is irq safe. Now we are going to call it from other places like kvm where irqs are not always disabled by the time we account the cputime. So let's make it irqsafe. The arch implementation part is now prefixed with "__". vtime_account_idle() arch implementation is prefixed accordingly to stay consistent. Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Ingo Molnar <mingo@kernel.org> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: Steven Rostedt <rostedt@goodmis.org> Cc: Paul Gortmaker <paul.gortmaker@windriver.com> Cc: Tony Luck <tony.luck@intel.com> Cc: Fenghua Yu <fenghua.yu@intel.com> Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org> Cc: Paul Mackerras <paulus@samba.org> Cc: Martin Schwidefsky <schwidefsky@de.ibm.com> Cc: Heiko Carstens <heiko.carstens@de.ibm.com>
Diffstat (limited to 'kernel/sched/cputime.c')
-rw-r--r--kernel/sched/cputime.c16
1 files changed, 13 insertions, 3 deletions
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
436void 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}
444EXPORT_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}