All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] sched/fair: Update rq clock before changing a task's CPU affinity
@ 2017-02-22  7:52 Wanpeng Li
  2017-02-22  9:33 ` Matt Fleming
  2017-02-24  9:16 ` [tip:sched/urgent] " tip-bot for Wanpeng Li
  0 siblings, 2 replies; 3+ messages in thread
From: Wanpeng Li @ 2017-02-22  7:52 UTC (permalink / raw)
  To: linux-kernel
  Cc: Wanpeng Li, Peter Zijlstra, Thomas Gleixner, Ingo Molnar, Matt Fleming

From: Wanpeng Li <wanpeng.li@hotmail.com>

 ------------[ cut here ]------------
 WARNING: CPU: 6 PID: 81 at kernel/sched/sched.h:812 set_next_entity+0x11d/0x380
 rq->clock_update_flags < RQCF_ACT_SKIP
 CPU: 6 PID: 81 Comm: torture_shuffle Not tainted 4.10.0+ #1
 Hardware name: LENOVO ThinkCentre M8500t-N000/SHARKBAY, BIOS FBKTC1AUS 02/16/2016
 Call Trace:
  dump_stack+0x85/0xc2
  __warn+0xcb/0xf0
  warn_slowpath_fmt+0x5f/0x80
  set_next_entity+0x11d/0x380
  set_curr_task_fair+0x2b/0x60
  do_set_cpus_allowed+0x139/0x180
  __set_cpus_allowed_ptr+0x113/0x260
  set_cpus_allowed_ptr+0x10/0x20
  torture_shuffle+0xfd/0x180
  kthread+0x10f/0x150
  ? torture_shutdown_init+0x60/0x60
  ? kthread_create_on_node+0x60/0x60
  ret_from_fork+0x31/0x40
 ---[ end trace dd94d92344cea9c6 ]---

This is triggered during boot when CONFIG_SCHED_DEBUG is enabled. The 
task is running && !queued, so there is no rq clock update before calling 
set_curr_task.

This patch fixes it by updating rq clock after holding rq->lock/pi_lock 
just as what other dequeue + put_prev + enqueue + set_curr story does.

Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Ingo Molnar <mingo@kernel.org>
Cc: Matt Fleming <matt@codeblueprint.co.uk>
Signed-off-by: Wanpeng Li <wanpeng.li@hotmail.com>
---
 kernel/sched/core.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/kernel/sched/core.c b/kernel/sched/core.c
index 34e2291..2c51bdf 100644
--- a/kernel/sched/core.c
+++ b/kernel/sched/core.c
@@ -1087,6 +1087,7 @@ static int __set_cpus_allowed_ptr(struct task_struct *p,
 	int ret = 0;
 
 	rq = task_rq_lock(p, &rf);
+	update_rq_clock(rq);
 
 	if (p->flags & PF_KTHREAD) {
 		/*
-- 
2.7.4

^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH] sched/fair: Update rq clock before changing a task's CPU affinity
  2017-02-22  7:52 [PATCH] sched/fair: Update rq clock before changing a task's CPU affinity Wanpeng Li
@ 2017-02-22  9:33 ` Matt Fleming
  2017-02-24  9:16 ` [tip:sched/urgent] " tip-bot for Wanpeng Li
  1 sibling, 0 replies; 3+ messages in thread
From: Matt Fleming @ 2017-02-22  9:33 UTC (permalink / raw)
  To: Wanpeng Li
  Cc: linux-kernel, Wanpeng Li, Peter Zijlstra, Thomas Gleixner, Ingo Molnar

On Tue, 21 Feb, at 11:52:55PM, Wanpeng Li wrote:
> From: Wanpeng Li <wanpeng.li@hotmail.com>
> 
>  ------------[ cut here ]------------
>  WARNING: CPU: 6 PID: 81 at kernel/sched/sched.h:812 set_next_entity+0x11d/0x380
>  rq->clock_update_flags < RQCF_ACT_SKIP
>  CPU: 6 PID: 81 Comm: torture_shuffle Not tainted 4.10.0+ #1
>  Hardware name: LENOVO ThinkCentre M8500t-N000/SHARKBAY, BIOS FBKTC1AUS 02/16/2016
>  Call Trace:
>   dump_stack+0x85/0xc2
>   __warn+0xcb/0xf0
>   warn_slowpath_fmt+0x5f/0x80
>   set_next_entity+0x11d/0x380
>   set_curr_task_fair+0x2b/0x60
>   do_set_cpus_allowed+0x139/0x180
>   __set_cpus_allowed_ptr+0x113/0x260
>   set_cpus_allowed_ptr+0x10/0x20
>   torture_shuffle+0xfd/0x180
>   kthread+0x10f/0x150
>   ? torture_shutdown_init+0x60/0x60
>   ? kthread_create_on_node+0x60/0x60
>   ret_from_fork+0x31/0x40
>  ---[ end trace dd94d92344cea9c6 ]---
> 
> This is triggered during boot when CONFIG_SCHED_DEBUG is enabled. The 
> task is running && !queued, so there is no rq clock update before calling 
> set_curr_task.
> 
> This patch fixes it by updating rq clock after holding rq->lock/pi_lock 
> just as what other dequeue + put_prev + enqueue + set_curr story does.
> 
> Cc: Peter Zijlstra <peterz@infradead.org>
> Cc: Thomas Gleixner <tglx@linutronix.de>
> Cc: Ingo Molnar <mingo@kernel.org>
> Cc: Matt Fleming <matt@codeblueprint.co.uk>
> Signed-off-by: Wanpeng Li <wanpeng.li@hotmail.com>
> ---
>  kernel/sched/core.c | 1 +
>  1 file changed, 1 insertion(+)

This looks correct. Thanks for doing it.

Reviewed-by: Matt Fleming <matt@codeblueprint.co.uk>

^ permalink raw reply	[flat|nested] 3+ messages in thread

* [tip:sched/urgent] sched/fair: Update rq clock before changing a task's CPU affinity
  2017-02-22  7:52 [PATCH] sched/fair: Update rq clock before changing a task's CPU affinity Wanpeng Li
  2017-02-22  9:33 ` Matt Fleming
@ 2017-02-24  9:16 ` tip-bot for Wanpeng Li
  1 sibling, 0 replies; 3+ messages in thread
From: tip-bot for Wanpeng Li @ 2017-02-24  9:16 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: tglx, matt, linux-kernel, hpa, efault, wanpeng.li, mingo,
	torvalds, peterz

Commit-ID:  a499c3ead88ccf147fc50689e85a530ad923ce36
Gitweb:     http://git.kernel.org/tip/a499c3ead88ccf147fc50689e85a530ad923ce36
Author:     Wanpeng Li <wanpeng.li@hotmail.com>
AuthorDate: Tue, 21 Feb 2017 23:52:55 -0800
Committer:  Ingo Molnar <mingo@kernel.org>
CommitDate: Fri, 24 Feb 2017 08:58:33 +0100

sched/fair: Update rq clock before changing a task's CPU affinity

This is triggered during boot when CONFIG_SCHED_DEBUG is enabled:

 ------------[ cut here ]------------
 WARNING: CPU: 6 PID: 81 at kernel/sched/sched.h:812 set_next_entity+0x11d/0x380
 rq->clock_update_flags < RQCF_ACT_SKIP
 CPU: 6 PID: 81 Comm: torture_shuffle Not tainted 4.10.0+ #1
 Hardware name: LENOVO ThinkCentre M8500t-N000/SHARKBAY, BIOS FBKTC1AUS 02/16/2016
 Call Trace:
  dump_stack+0x85/0xc2
  __warn+0xcb/0xf0
  warn_slowpath_fmt+0x5f/0x80
  set_next_entity+0x11d/0x380
  set_curr_task_fair+0x2b/0x60
  do_set_cpus_allowed+0x139/0x180
  __set_cpus_allowed_ptr+0x113/0x260
  set_cpus_allowed_ptr+0x10/0x20
  torture_shuffle+0xfd/0x180
  kthread+0x10f/0x150
  ? torture_shutdown_init+0x60/0x60
  ? kthread_create_on_node+0x60/0x60
  ret_from_fork+0x31/0x40
 ---[ end trace dd94d92344cea9c6 ]---

The task is running && !queued, so there is no rq clock update before calling
set_curr_task().

This patch fixes it by updating rq clock after holding rq->lock/pi_lock
just as what other dequeue + put_prev + enqueue + set_curr story does.

Signed-off-by: Wanpeng Li <wanpeng.li@hotmail.com>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Reviewed-by: Matt Fleming <matt@codeblueprint.co.uk>
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>
Link: http://lkml.kernel.org/r/1487749975-5994-1-git-send-email-wanpeng.li@hotmail.com
Signed-off-by: Ingo Molnar <mingo@kernel.org>
---
 kernel/sched/core.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/kernel/sched/core.c b/kernel/sched/core.c
index 2d6e828..cc1e3e0 100644
--- a/kernel/sched/core.c
+++ b/kernel/sched/core.c
@@ -1087,6 +1087,7 @@ static int __set_cpus_allowed_ptr(struct task_struct *p,
 	int ret = 0;
 
 	rq = task_rq_lock(p, &rf);
+	update_rq_clock(rq);
 
 	if (p->flags & PF_KTHREAD) {
 		/*

^ permalink raw reply related	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2017-02-24  9:18 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-02-22  7:52 [PATCH] sched/fair: Update rq clock before changing a task's CPU affinity Wanpeng Li
2017-02-22  9:33 ` Matt Fleming
2017-02-24  9:16 ` [tip:sched/urgent] " tip-bot for Wanpeng Li

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.