]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
vtime: Warn if irqs aren't disabled on system time accounting APIs
authorFrederic Weisbecker <fweisbec@gmail.com>
Mon, 19 Nov 2012 16:00:24 +0000 (17:00 +0100)
committerFrederic Weisbecker <fweisbec@gmail.com>
Tue, 20 Nov 2012 14:42:51 +0000 (15:42 +0100)
System time accounting APIs such as vtime_account_system() and
vtime_account_idle() need to be irqsafe. Current callers include
irq entry, exit and kvm, all of which have been checked against that
requirement. Now it's better to grow that with an automatic check
in case we have further callers or we missed something.

Suggested-by: Steven Rostedt <rostedt@goodmis.org>
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>
arch/ia64/kernel/time.c
arch/powerpc/kernel/time.c
arch/s390/kernel/vtime.c

index c9a7d2ebe0890fd9ea441bcc63f9f178a2565c10..b1995efbfd21708f0f283f7657f16ffbb5613c83 100644 (file)
@@ -119,6 +119,8 @@ static cputime_t vtime_delta(struct task_struct *tsk)
        cputime_t delta_stime;
        __u64 now;
 
+       WARN_ON_ONCE(!irqs_disabled());
+
        now = ia64_get_itc();
 
        delta_stime = cycle_to_cputime(ti->ac_stime + (now - ti->ac_stamp));
index 3486cfad4a63fc08e974a4891ecf3397b473cd60..b3b14352b05ec3e460ca554c2475134d9185b978 100644 (file)
@@ -297,6 +297,8 @@ static u64 vtime_delta(struct task_struct *tsk,
        u64 now, nowscaled, deltascaled;
        u64 udelta, delta, user_scaled;
 
+       WARN_ON_ONCE(!irqs_disabled());
+
        now = mftb();
        nowscaled = read_spurr(now);
        get_paca()->system_time += now - get_paca()->starttime;
index 7c6d861a1a407a0da03ff6bfb1d6097fef9791e0..e84b8b68444a7289f6544361378bd00617aa9346 100644 (file)
@@ -132,6 +132,8 @@ void vtime_account(struct task_struct *tsk)
        struct thread_info *ti = task_thread_info(tsk);
        u64 timer, system;
 
+       WARN_ON_ONCE(!irqs_disabled());
+
        timer = S390_lowcore.last_update_timer;
        S390_lowcore.last_update_timer = get_vtimer();
        S390_lowcore.system_timer += timer - S390_lowcore.last_update_timer;