• F
    cputime: Use local_clock() for full dynticks cputime accounting · 7f6575f1
    Frederic Weisbecker 提交于
    Running the full dynticks cputime accounting with preemptible
    kernel debugging trigger the following warning:
    
    	[    4.488303] BUG: using smp_processor_id() in preemptible [00000000] code: init/1
    	[    4.490971] caller is native_sched_clock+0x22/0x80
    	[    4.493663] Pid: 1, comm: init Not tainted 3.8.0+ #13
    	[    4.496376] Call Trace:
    	[    4.498996]  [<ffffffff813410eb>] debug_smp_processor_id+0xdb/0xf0
    	[    4.501716]  [<ffffffff8101e642>] native_sched_clock+0x22/0x80
    	[    4.504434]  [<ffffffff8101db99>] sched_clock+0x9/0x10
    	[    4.507185]  [<ffffffff81096ccd>] fetch_task_cputime+0xad/0x120
    	[    4.509916]  [<ffffffff81096dd5>] task_cputime+0x35/0x60
    	[    4.512622]  [<ffffffff810f146e>] acct_update_integrals+0x1e/0x40
    	[    4.515372]  [<ffffffff8117d2cf>] do_execve_common+0x4ff/0x5c0
    	[    4.518117]  [<ffffffff8117cf14>] ? do_execve_common+0x144/0x5c0
    	[    4.520844]  [<ffffffff81867a10>] ? rest_init+0x160/0x160
    	[    4.523554]  [<ffffffff8117d457>] do_execve+0x37/0x40
    	[    4.526276]  [<ffffffff810021a3>] run_init_process+0x23/0x30
    	[    4.528953]  [<ffffffff81867aac>] kernel_init+0x9c/0xf0
    	[    4.531608]  [<ffffffff8188356c>] ret_from_fork+0x7c/0xb0
    
    We use sched_clock() to perform and fixup the cputime
    accounting. However we are calling it with preemption enabled
    from the read side, which trigger the bug above.
    
    To fix this up, use local_clock() instead. It takes care of
    preemption and also provide a more reliable clock source. This
    is welcome for this kind of statistic that is widely relied on
    in userspace.
    Reported-by: NThomas Gleixner <tglx@linutronix.de>
    Reported-by: NIngo Molnar <mingo@kernel.org>
    Suggested-by: NThomas Gleixner <tglx@linutronix.de>
    Signed-off-by: NFrederic Weisbecker <fweisbec@gmail.com>
    Cc: Li Zhong <zhong@linux.vnet.ibm.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Steven Rostedt <rostedt@goodmis.org>
    Cc: Kevin Hilman <khilman@linaro.org>
    Link: http://lkml.kernel.org/r/1361636925-22288-3-git-send-email-fweisbec@gmail.comSigned-off-by: NIngo Molnar <mingo@kernel.org>
    7f6575f1
cputime.c 20.3 KB