On 18/11/20 10:19 am, Joel Fernandes (Google) wrote:A little more context on this crash in v8 is here:
From: Peter Zijlstra <peterz@xxxxxxxxxxxxx>It is not clear from the changelog as to what does put_prev_task() do to prevent
pick_next_entity() is passed curr == NULL during core-scheduling. Due to
this, if the rbtree is empty, the 'left' variable is set to NULL within
the function. This can cause crashes within the function.
This is not an issue if put_prev_task() is invoked on the currently
running task before calling pick_next_entity(). However, in core
scheduling, it is possible that a sibling CPU picks for another RQ in
the core, via pick_task_fair(). This remote sibling would not get any
opportunities to do a put_prev_task().
Fix it by refactoring pick_task_fair() such that pick_next_entity() is
called with the cfs_rq->curr. This will prevent pick_next_entity() from
crashing if its rbtree is empty.
Also this fixes another possible bug where update_curr() would not be
called on the cfs_rq hierarchy if the rbtree is empty. This could effect
cross-cpu comparison of vruntime.
the crash from occuring? Why did we pass NULL as curr in the first place to
pick_next_entity?