Revision 2548d546d40c0014efdde88a53bf7896e917dcce authored by Peter Zijlstra on 21 April 2016, 16:03:15 UTC, committed by Ingo Molnar on 28 April 2016, 08:28:55 UTC
Chris Metcalf reported a that sched_can_stop_tick() sometimes fails to re-enable the tick. His observed problem is that rq->cfs.nr_running can be 1 even though there are multiple runnable CFS tasks. This happens in the cgroup case, in which case cfs.nr_running is the number of runnable entities for that level. If there is a single runnable cgroup (which can have an arbitrary number of runnable child entries itself) rq->cfs.nr_running will be 1. However, looking at that function I think there's more problems with it. It seems to assume that if there's FIFO tasks, those will run. This is incorrect. The FIFO task can have a lower prio than an RR task, in which case the RR task will run. So the whole fifo_nr_running test seems misplaced, it should go after the rr_nr_running tests. That is, only if !rr_nr_running, can we use fifo_nr_running like this. Reported-by: Chris Metcalf <cmetcalf@mellanox.com> Tested-by: Chris Metcalf <cmetcalf@mellanox.com> Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com> Cc: Arnaldo Carvalho de Melo <acme@redhat.com> Cc: Christoph Lameter <cl@linux.com> Cc: Frederic Weisbecker <fweisbec@gmail.com> Cc: Jiri Olsa <jolsa@redhat.com> Cc: Luiz Capitulino <lcapitulino@redhat.com> Cc: Mike Galbraith <efault@gmx.de> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Rik van Riel <riel@redhat.com> Cc: Stephane Eranian <eranian@google.com> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: Vince Weaver <vincent.weaver@maine.edu> Cc: Viresh Kumar <viresh.kumar@linaro.org> Cc: Wanpeng Li <kernellwp@gmail.com> Fixes: 76d92ac305f2 ("sched: Migrate sched to use new tick dependency mask model") Link: http://lkml.kernel.org/r/20160421160315.GK24771@twins.programming.kicks-ass.net Signed-off-by: Ingo Molnar <mingo@kernel.org>
1 parent 02da2d7
File | Mode | Size |
---|---|---|
basic | ||
coccinelle | ||
dtc | ||
gdb | ||
genksyms | ||
kconfig | ||
ksymoops | ||
mod | ||
package | ||
selinux | ||
tracing | ||
.gitignore | -rw-r--r-- | 170 bytes |
Kbuild.include | -rw-r--r-- | 13.1 KB |
Lindent | -rwxr-xr-x | 496 bytes |
Makefile | -rw-r--r-- | 1.8 KB |
Makefile.asm-generic | -rw-r--r-- | 683 bytes |
Makefile.build | -rw-r--r-- | 14.7 KB |
Makefile.clean | -rw-r--r-- | 2.8 KB |
Makefile.dtbinst | -rw-r--r-- | 1.2 KB |
Makefile.extrawarn | -rw-r--r-- | 2.5 KB |
Makefile.fwinst | -rw-r--r-- | 2.0 KB |
Makefile.headersinst | -rw-r--r-- | 4.7 KB |
Makefile.help | -rw-r--r-- | 68 bytes |
Makefile.host | -rw-r--r-- | 4.5 KB |
Makefile.kasan | -rw-r--r-- | 934 bytes |
Makefile.lib | -rw-r--r-- | 14.4 KB |
Makefile.modbuiltin | -rw-r--r-- | 1.8 KB |
Makefile.modinst | -rw-r--r-- | 1.2 KB |
Makefile.modpost | -rw-r--r-- | 5.3 KB |
Makefile.modsign | -rw-r--r-- | 1005 bytes |
Makefile.ubsan | -rw-r--r-- | 1.0 KB |
analyze_suspend.py | -rwxr-xr-x | 117.6 KB |
asn1_compiler.c | -rw-r--r-- | 35.5 KB |
bloat-o-meter | -rwxr-xr-x | 1.9 KB |
bootgraph.pl | -rwxr-xr-x | 6.3 KB |
check-lc_ctype.c | -rw-r--r-- | 201 bytes |
check_extable.sh | -rwxr-xr-x | 4.9 KB |
checkincludes.pl | -rwxr-xr-x | 1.8 KB |
checkkconfigsymbols.py | -rwxr-xr-x | 15.4 KB |
checkpatch.pl | -rwxr-xr-x | 172.5 KB |
checkstack.pl | -rwxr-xr-x | 5.4 KB |
checksyscalls.sh | -rwxr-xr-x | 5.6 KB |
checkversion.pl | -rwxr-xr-x | 1.9 KB |
cleanfile | -rwxr-xr-x | 3.4 KB |
cleanpatch | -rwxr-xr-x | 5.0 KB |
coccicheck | -rwxr-xr-x | 4.7 KB |
config | -rwxr-xr-x | 4.5 KB |
conmakehash.c | -rw-r--r-- | 6.0 KB |
decode_stacktrace.sh | -rwxr-xr-x | 3.1 KB |
decodecode | -rwxr-xr-x | 2.1 KB |
depmod.sh | -rwxr-xr-x | 1.7 KB |
diffconfig | -rwxr-xr-x | 3.7 KB |
docproc.c | -rw-r--r-- | 13.8 KB |
export_report.pl | -rwxr-xr-x | 4.5 KB |
extract-cert.c | -rw-r--r-- | 3.5 KB |
extract-ikconfig | -rwxr-xr-x | 1.7 KB |
extract-module-sig.pl | -rwxr-xr-x | 3.6 KB |
extract-sys-certs.pl | -rwxr-xr-x | 3.7 KB |
extract-vmlinux | -rwxr-xr-x | 1.6 KB |
gcc-goto.sh | -rwxr-xr-x | 495 bytes |
gcc-ld | -rwxr-xr-x | 676 bytes |
gcc-version.sh | -rwxr-xr-x | 822 bytes |
gcc-x86_32-has-stack-protector.sh | -rwxr-xr-x | 184 bytes |
gcc-x86_64-has-stack-protector.sh | -rwxr-xr-x | 200 bytes |
gen_initramfs_list.sh | -rwxr-xr-x | 7.9 KB |
get_maintainer.pl | -rwxr-xr-x | 58.4 KB |
gfp-translate | -rwxr-xr-x | 1.7 KB |
headerdep.pl | -rwxr-xr-x | 3.5 KB |
headers.sh | -rwxr-xr-x | 477 bytes |
headers_check.pl | -rwxr-xr-x | 3.6 KB |
headers_install.sh | -rwxr-xr-x | 1.3 KB |
insert-sys-cert.c | -rw-r--r-- | 8.9 KB |
kallsyms.c | -rw-r--r-- | 18.7 KB |
kernel-doc | -rwxr-xr-x | 76.2 KB |
kernel-doc-xml-ref | -rwxr-xr-x | 4.2 KB |
ld-version.sh | -rwxr-xr-x | 252 bytes |
link-vmlinux.sh | -rwxr-xr-x | 6.0 KB |
makelst | -rwxr-xr-x | 773 bytes |
markup_oops.pl | -rwxr-xr-x | 8.1 KB |
mkcompile_h | -rwxr-xr-x | 2.5 KB |
mkmakefile | -rwxr-xr-x | 1.2 KB |
mksysmap | -rwxr-xr-x | 1.3 KB |
mkuboot.sh | -rwxr-xr-x | 379 bytes |
mkversion | -rw-r--r-- | 74 bytes |
module-common.lds | -rw-r--r-- | 833 bytes |
namespace.pl | -rwxr-xr-x | 13.1 KB |
objdiff | -rwxr-xr-x | 2.7 KB |
patch-kernel | -rwxr-xr-x | 9.9 KB |
pnmtologo.c | -rw-r--r-- | 11.9 KB |
profile2linkerlist.pl | -rwxr-xr-x | 375 bytes |
prune-kernel | -rwxr-xr-x | 673 bytes |
recordmcount.c | -rw-r--r-- | 14.9 KB |
recordmcount.h | -rw-r--r-- | 16.4 KB |
recordmcount.pl | -rwxr-xr-x | 17.9 KB |
setlocalversion | -rwxr-xr-x | 3.9 KB |
show_delta | -rwxr-xr-x | 3.0 KB |
sign-file.c | -rwxr-xr-x | 9.3 KB |
sortextable.c | -rw-r--r-- | 8.3 KB |
sortextable.h | -rw-r--r-- | 5.5 KB |
spelling.txt | -rw-r--r-- | 21.3 KB |
stackdelta | -rwxr-xr-x | 1.8 KB |
stackusage | -rwxr-xr-x | 759 bytes |
tags.sh | -rwxr-xr-x | 8.9 KB |
unifdef.c | -rw-r--r-- | 34.8 KB |
ver_linux | -rwxr-xr-x | 3.9 KB |
xen-hypercalls.sh | -rw-r--r-- | 351 bytes |
xz_wrap.sh | -rwxr-xr-x | 562 bytes |
![swh spinner](/static/img/swh-spinner.gif)
Computing file changes ...