From 311ea500ef4b1c53f9997dd5b693fbc27ffaf5db Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Wed, 26 Jul 2017 12:56:45 -0700 Subject: [PATCH] 4.12-stable patches added patches: sched-cputime-don-t-use-smp_processor_id-in-preemptible-context.patch --- ..._processor_id-in-preemptible-context.patch | 84 +++++++++++++++++++ queue-4.12/series | 1 + 2 files changed, 85 insertions(+) create mode 100644 queue-4.12/sched-cputime-don-t-use-smp_processor_id-in-preemptible-context.patch diff --git a/queue-4.12/sched-cputime-don-t-use-smp_processor_id-in-preemptible-context.patch b/queue-4.12/sched-cputime-don-t-use-smp_processor_id-in-preemptible-context.patch new file mode 100644 index 00000000000..1c53ab54579 --- /dev/null +++ b/queue-4.12/sched-cputime-don-t-use-smp_processor_id-in-preemptible-context.patch @@ -0,0 +1,84 @@ +From 0e4097c3354e2f5a5ad8affd9dc7f7f7d00bb6b9 Mon Sep 17 00:00:00 2001 +From: Wanpeng Li +Date: Sun, 9 Jul 2017 00:40:28 -0700 +Subject: sched/cputime: Don't use smp_processor_id() in preemptible context + +From: Wanpeng Li + +commit 0e4097c3354e2f5a5ad8affd9dc7f7f7d00bb6b9 upstream. + +Recent kernels trigger this warning: + + BUG: using smp_processor_id() in preemptible [00000000] code: 99-trinity/181 + caller is debug_smp_processor_id+0x17/0x19 + CPU: 0 PID: 181 Comm: 99-trinity Not tainted 4.12.0-01059-g2a42eb9 #1 + Call Trace: + dump_stack+0x82/0xb8 + check_preemption_disabled() + debug_smp_processor_id() + vtime_delta() + task_cputime() + thread_group_cputime() + thread_group_cputime_adjusted() + wait_consider_task() + do_wait() + SYSC_wait4() + do_syscall_64() + entry_SYSCALL64_slow_path() + +As Frederic pointed out: + +| Although those sched_clock_cpu() things seem to only matter when the +| sched_clock() is unstable. And that stability is a condition for nohz_full +| to work anyway. So probably sched_clock() alone would be enough. + +This patch fixes it by replacing sched_clock_cpu() with sched_clock() to +avoid calling smp_processor_id() in a preemptible context. + +Reported-by: Xiaolong Ye +Signed-off-by: Wanpeng Li +Cc: Frederic Weisbecker +Cc: Linus Torvalds +Cc: Luiz Capitulino +Cc: Peter Zijlstra +Cc: Rik van Riel +Cc: Thomas Gleixner +Link: http://lkml.kernel.org/r/1499586028-7402-1-git-send-email-wanpeng.li@hotmail.com +[ Prettified the changelog. ] +Signed-off-by: Ingo Molnar +Signed-off-by: Mel Gorman +Signed-off-by: Greg Kroah-Hartman + +--- + kernel/sched/cputime.c | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +--- a/kernel/sched/cputime.c ++++ b/kernel/sched/cputime.c +@@ -683,7 +683,7 @@ static u64 vtime_delta(struct vtime *vti + { + unsigned long long clock; + +- clock = sched_clock_cpu(smp_processor_id()); ++ clock = sched_clock(); + if (clock < vtime->starttime) + return 0; + +@@ -814,7 +814,7 @@ void arch_vtime_task_switch(struct task_ + + write_seqcount_begin(&vtime->seqcount); + vtime->state = VTIME_SYS; +- vtime->starttime = sched_clock_cpu(smp_processor_id()); ++ vtime->starttime = sched_clock(); + write_seqcount_end(&vtime->seqcount); + } + +@@ -826,7 +826,7 @@ void vtime_init_idle(struct task_struct + local_irq_save(flags); + write_seqcount_begin(&vtime->seqcount); + vtime->state = VTIME_SYS; +- vtime->starttime = sched_clock_cpu(cpu); ++ vtime->starttime = sched_clock(); + write_seqcount_end(&vtime->seqcount); + local_irq_restore(flags); + } diff --git a/queue-4.12/series b/queue-4.12/series index f5e16996c2f..01fde0af989 100644 --- a/queue-4.12/series +++ b/queue-4.12/series @@ -195,3 +195,4 @@ drm-i915-reintroduce-vlv-chv-pfi-programming-power-domain-workaround.patch smp-hotplug-move-unparking-of-percpu-threads-to-the-control-cpu.patch smp-hotplug-replace-bug_on-and-react-useful.patch alarmtimer-don-t-rate-limit-one-shot-timers.patch +sched-cputime-don-t-use-smp_processor_id-in-preemptible-context.patch -- 2.47.3