Messages in this thread | | | Date | Mon, 7 Jan 2019 14:52:15 +0100 | From | Peter Zijlstra <> | Subject | Re: kernel BUG at kernel/sched/core.c:3490! |
| |
On Tue, Jan 01, 2019 at 12:44:35AM -0500, Qian Cai wrote: > Running some mmap() workloads to put the system on low memory situation with > swapping and OOM, and then it trigger this BUG(), > > void __noreturn do_task_dead(void) > { > /* Causes final put_task_struct in finish_task_switch(): */ > set_special_state(TASK_DEAD); > > /* Tell freezer to ignore us: */ > current->flags |= PF_NOFREEZE; > > __schedule(false); > BUG(); > > /* Avoid "noreturn function does return" - but don't continue if BUG() > is a NOP: */ > for (;;) > cpu_relax(); > }
This would mean that we somehow loose the TASK_DEAD state before hitting schedule(), but that is something that should be avoided by set_special_state(), which is supposed to serialize against concurrent wake-ups.
Also see commit: b5bf9a90bbeb ("sched/core: Introduce set_special_state()")
How readily does this reproduce?
| |