| From foo@baz Thu Nov 9 09:48:01 CET 2017 |
| From: Peter Zijlstra <peterz@infradead.org> |
| Date: Mon, 23 Jan 2017 16:05:55 +0100 |
| Subject: sched/core: Add missing update_rq_clock() call in sched_move_task() |
| |
| From: Peter Zijlstra <peterz@infradead.org> |
| |
| |
| [ Upstream commit 1b1d62254df0fe42a711eb71948f915918987790 ] |
| |
| Bug was noticed via this warning: |
| |
| WARNING: CPU: 6 PID: 1 at kernel/sched/sched.h:804 detach_task_cfs_rq+0x8e8/0xb80 |
| rq->clock_update_flags < RQCF_ACT_SKIP |
| Modules linked in: |
| CPU: 6 PID: 1 Comm: systemd Not tainted 4.10.0-rc5-00140-g0874170baf55-dirty #1 |
| Hardware name: Supermicro SYS-4048B-TRFT/X10QBi, BIOS 1.0 04/11/2014 |
| Call Trace: |
| dump_stack+0x4d/0x65 |
| __warn+0xcb/0xf0 |
| warn_slowpath_fmt+0x5f/0x80 |
| detach_task_cfs_rq+0x8e8/0xb80 |
| ? allocate_cgrp_cset_links+0x59/0x80 |
| task_change_group_fair+0x27/0x150 |
| sched_change_group+0x48/0xf0 |
| sched_move_task+0x53/0x150 |
| cpu_cgroup_attach+0x36/0x70 |
| cgroup_taskset_migrate+0x175/0x300 |
| cgroup_migrate+0xab/0xd0 |
| cgroup_attach_task+0xf0/0x190 |
| __cgroup_procs_write+0x1ed/0x2f0 |
| cgroup_procs_write+0x14/0x20 |
| cgroup_file_write+0x3f/0x100 |
| kernfs_fop_write+0x104/0x180 |
| __vfs_write+0x37/0x140 |
| vfs_write+0xb8/0x1b0 |
| SyS_write+0x55/0xc0 |
| do_syscall_64+0x61/0x170 |
| entry_SYSCALL64_slow_path+0x25/0x25 |
| |
| Reported-by: Ingo Molnar <mingo@kernel.org> |
| Reported-by: Borislav Petkov <bp@alien8.de> |
| Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> |
| Cc: Linus Torvalds <torvalds@linux-foundation.org> |
| Cc: Mike Galbraith <efault@gmx.de> |
| Cc: Peter Zijlstra <peterz@infradead.org> |
| Cc: Thomas Gleixner <tglx@linutronix.de> |
| Signed-off-by: Ingo Molnar <mingo@kernel.org> |
| Signed-off-by: Sasha Levin <alexander.levin@verizon.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| kernel/sched/core.c | 1 + |
| 1 file changed, 1 insertion(+) |
| |
| --- a/kernel/sched/core.c |
| +++ b/kernel/sched/core.c |
| @@ -7961,6 +7961,7 @@ void sched_move_task(struct task_struct |
| struct rq *rq; |
| |
| rq = task_rq_lock(tsk, &rf); |
| + update_rq_clock(rq); |
| |
| running = task_current(rq, tsk); |
| queued = task_on_rq_queued(tsk); |