Tetsuo Handa
7f1a169b88
sched/fair: Fix RCU stall upon -ENOMEM in sched_create_group()
When alloc_fair_sched_group() in sched_create_group() fails,
free_sched_group() is called, and free_fair_sched_group() is called by
free_sched_group(). Since destroy_cfs_bandwidth() is called by
free_fair_sched_group() without calling init_cfs_bandwidth(),
RCU stall occurs at hrtimer_cancel():
INFO: rcu_sched self-detected stall on CPU { 1} (t=60000 jiffies g=13074 c=13073 q=0)
Task dump for CPU 1:
(fprintd) R running task 0 6249 1 0x00000088
...
Call Trace:
<IRQ> [<ffffffff81094988>] sched_show_task+0xa8/0x110
[<ffffffff81097acd>] dump_cpu_task+0x3d/0x50
[<ffffffff810c3a80>] rcu_dump_cpu_stacks+0x90/0xd0
[<ffffffff810c7751>] rcu_check_callbacks+0x491/0x700
[<ffffffff810cbf2b>] update_process_times+0x4b/0x80
[<ffffffff810db046>] tick_sched_handle.isra.20+0x36/0x50
[<ffffffff810db0a2>] tick_sched_timer+0x42/0x70
[<ffffffff810ccb19>] __run_hrtimer+0x69/0x1a0
[<ffffffff810db060>] ? tick_sched_handle.isra.20+0x50/0x50
[<ffffffff810ccedf>] hrtimer_interrupt+0xef/0x230
[<ffffffff810452cb>] local_apic_timer_interrupt+0x3b/0x70
[<ffffffff8164a465>] smp_apic_timer_interrupt+0x45/0x60
[<ffffffff816485bd>] apic_timer_interrupt+0x6d/0x80
<EOI> [<ffffffff810cc588>] ? lock_hrtimer_base.isra.23+0x18/0x50
[<ffffffff81193cf1>] ? __kmalloc+0x211/0x230
[<ffffffff810cc9d2>] hrtimer_try_to_cancel+0x22/0xd0
[<ffffffff81193cf1>] ? __kmalloc+0x211/0x230
[<ffffffff810ccaa2>] hrtimer_cancel+0x22/0x30
[<ffffffff810a3cb5>] free_fair_sched_group+0x25/0xd0
[<ffffffff8108df46>] free_sched_group+0x16/0x40
[<ffffffff810971bb>] sched_create_group+0x4b/0x80
[<ffffffff810aa383>] sched_autogroup_create_attach+0x43/0x1c0
[<ffffffff8107dc9c>] sys_setsid+0x7c/0x110
[<ffffffff81647729>] system_call_fastpath+0x12/0x17
Check whether init_cfs_bandwidth() was called before calling
destroy_cfs_bandwidth().
Signed-off-by: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
[ Move the check into destroy_cfs_bandwidth() to aid compilability. ]
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Cc: Paul Turner <pjt@google.com>
Cc: Ben Segall <bsegall@google.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Link: http://lkml.kernel.org/r/201412252210.GCC30204.SOMVFFOtQJFLOH@I-love.SAKURA.ne.jp
Signed-off-by: Ingo Molnar <mingo@kernel.org>
|
2015-01-09 11:19:00 +01:00 |
| .. |
|
auto_group.c
|
sched: Change autogroup_move_group() to use for_each_thread()
|
2014-08-20 09:47:18 +02:00 |
|
auto_group.h
|
Revert "sched/autogroup: Fix crash on reboot when autogroup is disabled"
|
2012-12-11 10:23:45 +01:00 |
|
clock.c
|
time: Replace __get_cpu_var uses
|
2014-08-26 13:45:44 -04:00 |
|
completion.c
|
sched/completion: Document when to use wait_for_completion_io_*()
|
2014-11-16 10:58:54 +01:00 |
|
core.c
|
sched: Fix KMALLOC_MAX_SIZE overflow during cpumask allocation
|
2014-12-23 11:43:48 +01:00 |
|
cpuacct.c
|
cgroup: rename cgroup_subsys->base_cftypes to ->legacy_cftypes
|
2014-07-15 11:05:09 -04:00 |
|
cpuacct.h
|
sched/cpuacct: Initialize root cpuacct earlier
|
2013-04-10 13:54:20 +02:00 |
|
cpudeadline.c
|
sched/deadline: Fix inter- exclusive cpusets migrations
|
2014-09-24 14:46:57 +02:00 |
|
cpudeadline.h
|
sched/deadline: Remove unnecessary definitions in cpudeadline.h
|
2014-11-16 10:59:00 +01:00 |
|
cpupri.c
|
Merge commit '3cf2f34' into sched/core, to fix build error
|
2014-06-12 13:46:37 +02:00 |
|
cpupri.h
|
sched/cpupri: Remove unnecessary definitions in cpupri.h
|
2014-11-16 10:58:59 +01:00 |
|
cputime.c
|
sched, time: Fix build error with 64 bit cputime_t on 32 bit systems
|
2014-10-03 05:46:55 +02:00 |
|
deadline.c
|
sched/deadline: Avoid double-accounting in case of missed deadlines
|
2015-01-09 11:18:57 +01:00 |
|
debug.c
|
sched: Refactor task_struct to use numa_faults instead of numa_* pointers
|
2014-11-04 07:17:57 +01:00 |
|
fair.c
|
sched/fair: Fix RCU stall upon -ENOMEM in sched_create_group()
|
2015-01-09 11:19:00 +01:00 |
|
features.h
|
sched: Rename capacity related flags
|
2014-06-05 11:52:32 +02:00 |
|
idle.c
|
sched: Let the scheduler see CPU idle states
|
2014-09-24 14:46:58 +02:00 |
|
idle_task.c
|
sched: Provide update_curr callbacks for stop/idle scheduling classes
|
2014-11-23 14:14:40 -08:00 |
|
Makefile
|
sched/idle: Move cpu/idle.c to sched/idle.c
|
2014-02-11 09:58:30 +01:00 |
|
proc.c
|
cpuidle: menu: Lookup CPU runqueues less
|
2014-08-06 21:17:45 +02:00 |
|
rt.c
|
sched: Move p->nr_cpus_allowed check to select_task_rq()
|
2014-11-16 10:58:55 +01:00 |
|
sched.h
|
Merge branch 'sched/urgent' into sched/core, to pick up fixes before applying more changes
|
2014-11-16 10:50:25 +01:00 |
|
stats.c
|
kernel: audit/fix non-modular users of module_init in core code
|
2014-04-03 16:21:07 -07:00 |
|
stats.h
|
sched: Micro-optimize by dropping unnecessary task_rq() calls
|
2013-09-25 13:51:06 +02:00 |
|
stop_task.c
|
sched: Provide update_curr callbacks for stop/idle scheduling classes
|
2014-11-23 14:14:40 -08:00 |
|
wait.c
|
sched/wait: Fix a kthread race with wait_woken()
|
2014-11-04 07:17:44 +01:00 |