Vincent Guittot
2d935df7b2
sched/fair: Fix insertion in rq->leaf_cfs_rq_list
...
commit f6783319737f28e4436a69611853a5a098cbe974 upstream.
Sargun reported a crash:
"I picked up c40f7d74c741a907cfaeb73a7697081881c497d0 sched/fair: Fix
infinite loop in update_blocked_averages() by reverting a9e7f6544b
and put it on top of 4.19.13. In addition to this, I uninlined
list_add_leaf_cfs_rq for debugging.
This revealed a new bug that we didn't get to because we kept getting
crashes from the previous issue. When we are running with cgroups that
are rapidly changing, with CFS bandwidth control, and in addition
using the cpusets cgroup, we see this crash. Specifically, it seems to
occur with cgroups that are throttled and we change the allowed
cpuset."
The algorithm used to order cfs_rq in rq->leaf_cfs_rq_list assumes that
it will walk down to root the 1st time a cfs_rq is used and we will finish
to add either a cfs_rq without parent or a cfs_rq with a parent that is
already on the list. But this is not always true in presence of throttling.
Because a cfs_rq can be throttled even if it has never been used but other CPUs
of the cgroup have already used all the bandwdith, we are not sure to go down to
the root and add all cfs_rq in the list.
Ensure that all cfs_rq will be added in the list even if they are throttled.
[ mingo: Fix !CGROUPS build. ]
Reported-by: Sargun Dhillon <sargun@sargun.me>
Signed-off-by: Vincent Guittot <vincent.guittot@linaro.org>
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>
Cc: tj@kernel.org
Fixes: 9c2791f936 ("Fix hierarchical order in rq->leaf_cfs_rq_list")
Link: https://lkml.kernel.org/r/1548825767-10799-1-git-send-email-vincent.guittot@linaro.org
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Cc: Janne Huttunen <janne.huttunen@nokia.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2020-02-01 09:37:10 +00:00
..
bpf
bpf, offload: Unlock on error in bpf_offload_dev_create()
2020-01-27 14:51:20 +01:00
cgroup
cgroup: pids: use atomic64_t for pids->limit
2019-12-17 20:34:56 +01:00
configs
kconfig: tinyconfig: remove stale stack protector fixups
2018-06-15 07:15:28 +09:00
debug
kdb: do a sanity check on the cpu in kdb_per_cpu()
2020-01-27 14:50:48 +01:00
dma
dma-debug: add a schedule point in debug_dma_dump_mappings()
2020-01-04 19:12:43 +01:00
events
perf/ioctl: Add check for the sample_period value
2020-01-27 14:50:57 +01:00
gcov
gcov: remove CONFIG_GCOV_FORMAT_AUTODETECT
2018-06-08 18:56:02 +09:00
irq
irqdomain: Add the missing assignment of domain->fwnode for named fwnode
2020-01-27 14:51:09 +01:00
livepatch
livepatch: Nullify obj->mod in klp_module_coming()'s error path
2019-10-07 18:57:10 +02:00
locking
locking/spinlock/debug: Fix various data races
2020-01-12 12:17:05 +01:00
power
PM / hibernate: memory_bm_find_bit(): Tighten node optimisation
2020-01-09 10:18:58 +01:00
printk
printk: fix integer overflow in setup_log_buf()
2019-12-01 09:16:14 +01:00
rcu
rcuperf: Fix cleanup path for invalid perf_type strings
2019-05-31 06:46:30 -07:00
sched
sched/fair: Fix insertion in rq->leaf_cfs_rq_list
2020-02-01 09:37:10 +00:00
time
tick/sched: Annotate lockless access to last_jiffies_update
2020-01-23 08:21:37 +01:00
trace
tracing: Fix histogram code when expression has same var as value
2020-01-29 16:43:23 +01:00
.gitignore
acct.c
acct_on(): don't mess with freeze protection
2019-05-31 06:46:05 -07:00
async.c
kernel/async.c: revert "async: simplify lowest_in_progress()"
2018-02-06 18:32:44 -08:00
audit.c
audit: use ktime_get_coarse_real_ts64() for timestamps
2018-07-17 14:45:08 -04:00
audit.h
audit: track the owner of the command mutex ourselves
2018-02-23 11:22:22 -05:00
audit_fsnotify.c
fsnotify: add fsnotify_add_inode_mark() wrappers
2018-05-18 14:58:22 +02:00
audit_tree.c
audit: Embed key into chunk
2019-12-13 08:51:11 +01:00
audit_watch.c
audit_get_nd(): don't unlock parent too early
2019-12-13 08:51:02 +01:00
auditfilter.c
audit: fix a memory leak bug
2019-05-31 06:46:17 -07:00
auditsc.c
audit: print empty EXECVE args
2019-12-01 09:17:17 +01:00
backtracetest.c
bounds.c
kbuild: fix kernel/bounds.c 'W=1' warning
2018-11-13 11:08:47 -08:00
capability.c
LSM: generalize flag passing to security_capable
2020-01-23 08:21:29 +01:00
compat.c
time: Enable get/put_compat_itimerspec64 always
2018-06-24 14:39:47 +02:00
configs.c
context_tracking.c
cpu.c
cpu/SMT: State SMT is disabled even with nosmt and without "=force"
2019-11-24 08:20:18 +01:00
cpu_pm.c
crash_core.c
kernel/crash_core.c: print timestamp using time64_t
2018-08-22 10:52:47 -07:00
crash_dump.c
cred.c
memcg: account security cred as well to kmemcg
2020-01-09 10:19:00 +01:00
delayacct.c
delayacct: Use raw_spinlocks
2018-04-27 14:34:51 +02:00
dma.c
proc: introduce proc_create_single{,_data}
2018-05-16 07:23:35 +02:00
elfcore.c
kernel/elfcore.c: include proper prototypes
2019-10-11 18:21:23 +02:00
exec_domain.c
proc: introduce proc_create_single{,_data}
2018-05-16 07:23:35 +02:00
exit.c
exit: panic before exit_mm() on global init exit
2020-01-09 10:19:02 +01:00
extable.c
extable: Make init_kernel_text() global
2018-02-21 16:54:06 +01:00
fail_function.c
bpf/error-inject/kprobes: Clear current_kprobe and enable preempt in kprobe
2018-06-21 12:33:19 +02:00
fork.c
fork,memcg: alloc_thread_stack_node needs to set tsk->stack
2020-01-27 14:50:58 +01:00
freezer.c
PM / reboot: Eliminate race between reboot and suspend
2018-08-06 12:35:20 +02:00
futex.c
futex: Prevent robust futex exit race
2019-12-01 09:17:38 +01:00
groups.c
kernel: make groups_sort calling a responsibility group_info allocators
2017-12-14 16:00:49 -08:00
hung_task.c
kernel: hung_task.c: disable on suspend
2019-04-20 09:16:02 +02:00
iomem.c
memremap: split devm_memremap_pages() and memremap() infrastructure
2018-05-15 23:08:33 -07:00
irq_work.c
irq_work: Do not raise an IPI when queueing work on the local CPU
2019-05-31 06:46:19 -07:00
jump_label.c
jump_label: move 'asm goto' support test to Kconfig
2019-06-04 08:02:34 +02:00
kallsyms.c
kallsyms: Don't let kallsyms_lookup_size_offset() fail on retrieving the first symbol
2019-09-21 07:17:02 +02:00
kcmp.c
Kconfig.freezer
Kconfig.hz
Kconfig.locks
Kconfig.preempt
kconfig: include kernel/Kconfig.preempt from init/Kconfig
2018-08-02 08:06:54 +09:00
kcov.c
kernel/kcov.c: mark write_comp_data() as notrace
2019-02-12 19:47:20 +01:00
kexec.c
kexec: add call to LSM hook in original kexec_load syscall
2018-07-16 12:31:57 -07:00
kexec_core.c
kexec: Allocate decrypted control pages for kdump if SME is enabled
2019-11-24 08:20:29 +01:00
kexec_file.c
treewide: Use array_size() in vzalloc()
2018-06-12 16:19:22 -07:00
kexec_internal.h
kmod.c
kprobes.c
kprobes: Blacklist symbols in arch-defined prohibited area
2019-12-05 09:20:26 +01:00
ksysfs.c
kthread.c
Merge branch 'sched-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
2018-08-13 11:25:07 -07:00
latencytop.c
Makefile
y2038: futex: Move compat implementation into futex.c
2019-12-01 09:17:38 +01:00
memremap.c
mm/memory_hotplug: shrink zones when offlining memory
2020-01-29 16:43:27 +01:00
module-internal.h
modsign: log module name in the event of an error
2018-07-02 11:36:17 +02:00
module.c
kernel/module.c: wakeup processes in module_wq on module unload
2019-12-17 20:35:57 +01:00
module_signing.c
modsign: log module name in the event of an error
2018-07-02 11:36:17 +02:00
notifier.c
nsproxy.c
padata.c
padata: use smp_mb in padata_reorder to avoid orphaned padata jobs
2019-07-26 09:14:25 +02:00
panic.c
kernel/panic.c: do not append newline to the stack protector panic string
2019-12-01 09:17:10 +01:00
params.c
kernel/params.c: downgrade warning for unsafe parameters
2018-04-11 10:28:37 -07:00
pid.c
Fix failure path in alloc_pid()
2019-01-13 09:51:06 +01:00
pid_namespace.c
signal/pid_namespace: Fix reboot_pid_ns to use send_sig not force_sig
2019-07-26 09:14:01 +02:00
profile.c
ptrace.c
ptrace: reintroduce usage of subjective credentials in ptrace_has_cap()
2020-01-23 08:21:29 +01:00
range.c
reboot.c
PM / reboot: Eliminate race between reboot and suspend
2018-08-06 12:35:20 +02:00
relay.c
relay: check return of create_buf_file() properly
2019-03-13 14:02:35 -07:00
resource.c
resource: fix locking in find_next_iomem_res()
2019-09-16 08:22:20 +02:00
rseq.c
rseq: uapi: Declare rseq_cs field as union, update includes
2018-07-10 22:18:52 +02:00
seccomp.c
LSM: generalize flag passing to security_capable
2020-01-23 08:21:29 +01:00
signal.c
signal: Allow cifs and drbd to receive their terminating signals
2020-01-27 14:51:05 +01:00
smp.c
cpu/hotplug: Fix "SMT disabled by BIOS" detection for KVM
2019-02-12 19:47:25 +01:00
smpboot.c
smpboot: Remove cpumask from the API
2018-07-03 09:20:44 +02:00
smpboot.h
softirq.c
nohz: Fix missing tick reprogram when interrupting an inline softirq
2018-08-03 15:52:10 +02:00
stacktrace.c
stop_machine.c
Merge branch 'sched-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
2018-08-13 11:25:07 -07:00
sys.c
kernel/sys.c: prctl: fix false positive in validate_prctl_map()
2019-06-15 11:54:01 +02:00
sys_ni.c
Merge branch 'core-rseq-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
2018-06-10 10:17:09 -07:00
sysctl.c
kernel: sysctl: make drop_caches write-only
2020-01-04 19:13:17 +01:00
sysctl_binary.c
staging: irda: remove remaining remants of irda code removal
2018-04-16 11:26:49 +02:00
task_work.c
locking/barriers: Convert users of lockless_dereference() to READ_ONCE()
2017-12-17 13:57:15 +01:00
taskstats.c
taskstats: fix data-race
2020-01-09 10:18:59 +01:00
test_kprobes.c
kprobes: Remove jprobe API implementation
2018-06-21 12:33:05 +02:00
torture.c
torture: Keep old-school dmesg format
2018-06-25 11:30:10 -07:00
tracepoint.c
tracepoint: Fix tracepoint array element size mismatch
2018-10-17 15:35:29 -04:00
tsacct.c
ucount.c
headers: untangle kmemleak.h from mm.h
2018-04-05 21:36:27 -07:00
uid16.c
fs: add do_fchownat(), ksys_fchown() helpers and ksys_{,l}chown() wrappers
2018-04-02 20:15:59 +02:00
uid16.h
kernel: provide ksys_*() wrappers for syscalls called by kernel/uid16.c
2018-04-02 20:15:30 +02:00
umh.c
umh: fix race condition
2018-06-07 16:56:28 -04:00
up.c
user-return-notifier.c
user.c
userns: use irqsave variant of refcount_dec_and_lock()
2018-08-22 10:52:47 -07:00
user_namespace.c
userns: also map extents in the reverse map to kernel IDs
2018-11-13 11:09:00 -08:00
utsname.c
uts: create "struct uts_namespace" from kmem_cache
2018-04-11 10:28:35 -07:00
utsname_sysctl.c
sys: don't hold uts_sem while accessing userspace memory
2018-08-11 02:05:53 -05:00
watchdog.c
watchdog: Respect watchdog cpumask on CPU hotplug
2019-04-03 06:26:29 +02:00
watchdog_hld.c
watchdog: Mark watchdog touch functions as notrace
2018-08-30 12:56:40 +02:00
workqueue.c
workqueue: Fix missing kfree(rescuer) in destroy_workqueue()
2019-12-17 20:35:50 +01:00
workqueue_internal.h
workqueue: Set worker->desc to workqueue name by default
2018-05-18 08:47:13 -07:00