Skip to content

Commit 7c4a5b8

Browse files
pietroborrelloPeter Zijlstra
authored andcommitted
sched/rt: pick_next_rt_entity(): check list_entry
Commit 326587b ("sched: fix goto retry in pick_next_task_rt()") removed any path which could make pick_next_rt_entity() return NULL. However, BUG_ON(!rt_se) in _pick_next_task_rt() (the only caller of pick_next_rt_entity()) still checks the error condition, which can never happen, since list_entry() never returns NULL. Remove the BUG_ON check, and instead emit a warning in the only possible error condition here: the queue being empty which should never happen. Fixes: 326587b ("sched: fix goto retry in pick_next_task_rt()") Signed-off-by: Pietro Borrello <[email protected]> Signed-off-by: Peter Zijlstra (Intel) <[email protected]> Reviewed-by: Phil Auld <[email protected]> Reviewed-by: Steven Rostedt (Google) <[email protected]> Link: https://lore.kernel.org/r/20230128-list-entry-null-check-sched-v3-1-b1a71bd1ac6b@diag.uniroma1.it
1 parent 7ea98df commit 7c4a5b8

File tree

1 file changed

+4
-1
lines changed

1 file changed

+4
-1
lines changed

kernel/sched/rt.c

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1777,6 +1777,8 @@ static struct sched_rt_entity *pick_next_rt_entity(struct rt_rq *rt_rq)
17771777
BUG_ON(idx >= MAX_RT_PRIO);
17781778

17791779
queue = array->queue + idx;
1780+
if (SCHED_WARN_ON(list_empty(queue)))
1781+
return NULL;
17801782
next = list_entry(queue->next, struct sched_rt_entity, run_list);
17811783

17821784
return next;
@@ -1789,7 +1791,8 @@ static struct task_struct *_pick_next_task_rt(struct rq *rq)
17891791

17901792
do {
17911793
rt_se = pick_next_rt_entity(rt_rq);
1792-
BUG_ON(!rt_se);
1794+
if (unlikely(!rt_se))
1795+
return NULL;
17931796
rt_rq = group_rt_rq(rt_se);
17941797
} while (rt_rq);
17951798

0 commit comments

Comments
 (0)