https://github.com/torvalds/linux
Revision 093e5840ae76f1082633503964d035f40ed0216d authored by Sebastian Andrzej Siewior on 21 December 2015, 17:17:10 UTC, committed by Ingo Molnar on 06 January 2016, 10:01:07 UTC
In the following commit:

  7675104990ed ("sched: Implement lockless wake-queues")

we gained lockless wake-queues.

The -RT kernel managed to lockup itself with those. There could be multiple
attempts for task X to enqueue it for a wakeup _even_ if task X is already
running.

The reason is that task X could be runnable but not yet on CPU. The the
task performing the wakeup did not leave the CPU it could performe
multiple wakeups.

With the proper timming task X could be running and enqueued for a
wakeup. If this happens while X is performing a fork() then its its
child will have a !NULL `wake_q` member copied.

This is not a problem as long as the child task does not participate in
lockless wakeups :)

Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Cc: Davidlohr Bueso <dbueso@suse.de>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Steven Rostedt <rostedt@goodmis.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Fixes: 7675104990ed ("sched: Implement lockless wake-queues")
Link: http://lkml.kernel.org/r/20151221171710.GA5499@linutronix.de
Signed-off-by: Ingo Molnar <mingo@kernel.org>
1 parent be958bd
History
Tip revision: 093e5840ae76f1082633503964d035f40ed0216d authored by Sebastian Andrzej Siewior on 21 December 2015, 17:17:10 UTC
sched/core: Reset task's lockless wake-queues on fork()
Tip revision: 093e584
File Mode Size
Kconfig -rw-r--r-- 23.1 KB
Makefile -rw-r--r-- 2.5 KB
act_api.c -rw-r--r-- 23.8 KB
act_bpf.c -rw-r--r-- 8.8 KB
act_connmark.c -rw-r--r-- 4.7 KB
act_csum.c -rw-r--r-- 12.9 KB
act_gact.c -rw-r--r-- 5.1 KB
act_ipt.c -rw-r--r-- 7.3 KB
act_mirred.c -rw-r--r-- 6.7 KB
act_nat.c -rw-r--r-- 6.7 KB
act_pedit.c -rw-r--r-- 5.6 KB
act_police.c -rw-r--r-- 9.0 KB
act_simple.c -rw-r--r-- 4.6 KB
act_skbedit.c -rw-r--r-- 5.2 KB
act_vlan.c -rw-r--r-- 4.6 KB
cls_api.c -rw-r--r-- 14.4 KB
cls_basic.c -rw-r--r-- 6.8 KB
cls_bpf.c -rw-r--r-- 11.8 KB
cls_cgroup.c -rw-r--r-- 4.8 KB
cls_flow.c -rw-r--r-- 16.4 KB
cls_flower.c -rw-r--r-- 18.8 KB
cls_fw.c -rw-r--r-- 9.5 KB
cls_route.c -rw-r--r-- 14.1 KB
cls_rsvp.c -rw-r--r-- 761 bytes
cls_rsvp.h -rw-r--r-- 17.4 KB
cls_rsvp6.c -rw-r--r-- 768 bytes
cls_tcindex.c -rw-r--r-- 14.4 KB
cls_u32.c -rw-r--r-- 24.0 KB
em_canid.c -rw-r--r-- 5.5 KB
em_cmp.c -rw-r--r-- 2.1 KB
em_ipset.c -rw-r--r-- 3.1 KB
em_meta.c -rw-r--r-- 22.9 KB
em_nbyte.c -rw-r--r-- 1.9 KB
em_text.c -rw-r--r-- 3.7 KB
em_u32.c -rw-r--r-- 1.4 KB
ematch.c -rw-r--r-- 14.6 KB
sch_api.c -rw-r--r-- 45.2 KB
sch_atm.c -rw-r--r-- 19.1 KB
sch_blackhole.c -rw-r--r-- 1.0 KB
sch_cbq.c -rw-r--r-- 47.2 KB
sch_choke.c -rw-r--r-- 14.0 KB
sch_codel.c -rw-r--r-- 7.8 KB
sch_drr.c -rw-r--r-- 11.4 KB
sch_dsmark.c -rw-r--r-- 11.5 KB
sch_fifo.c -rw-r--r-- 4.1 KB
sch_fq.c -rw-r--r-- 20.7 KB
sch_fq_codel.c -rw-r--r-- 16.3 KB
sch_generic.c -rw-r--r-- 23.6 KB
sch_gred.c -rw-r--r-- 14.3 KB
sch_hfsc.c -rw-r--r-- 40.9 KB
sch_hhf.c -rw-r--r-- 21.2 KB
sch_htb.c -rw-r--r-- 42.6 KB
sch_ingress.c -rw-r--r-- 2.5 KB
sch_mq.c -rw-r--r-- 5.8 KB
sch_mqprio.c -rw-r--r-- 10.5 KB
sch_multiq.c -rw-r--r-- 9.3 KB
sch_netem.c -rw-r--r-- 26.3 KB
sch_pie.c -rw-r--r-- 15.5 KB
sch_plug.c -rw-r--r-- 6.5 KB
sch_prio.c -rw-r--r-- 8.4 KB
sch_qfq.c -rw-r--r-- 42.6 KB
sch_red.c -rw-r--r-- 8.8 KB
sch_sfb.c -rw-r--r-- 16.4 KB
sch_sfq.c -rw-r--r-- 21.7 KB
sch_tbf.c -rw-r--r-- 13.9 KB
sch_teql.c -rw-r--r-- 12.0 KB

back to top