* [PATCH v3] sched: pick_next_rt_entity(): check list_entry
@ 2023-02-06 22:33 Pietro Borrello
2023-02-07 12:29 ` Phil Auld
` (2 more replies)
0 siblings, 3 replies; 5+ messages in thread
From: Pietro Borrello @ 2023-02-06 22:33 UTC (permalink / raw)
To: Ingo Molnar, Peter Zijlstra, Juri Lelli, Vincent Guittot,
Dietmar Eggemann, Steven Rostedt, Phil Auld, Ben Segall,
Mel Gorman, Daniel Bristot de Oliveira, Valentin Schneider,
Dmitry Adamushko
Cc: Cristiano Giuffrida, Bos, H.J.,
Jakob Koschel, Ingo Molnar, linux-kernel, Pietro Borrello
Commit 326587b84078 ("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: 326587b84078 ("sched: fix goto retry in pick_next_task_rt()")
Signed-off-by: Pietro Borrello <borrello@diag.uniroma1.it>
---
Changes in v3:
- return NULL if the list is empty
- Link to v2: https://lore.kernel.org/r/20230128-list-entry-null-check-sched-v2-1-d8e010cce91b@diag.uniroma1.it
Changes in v2:
- pick_next_rt_entity(): emit warning instead of crashing
- Link to v1: https://lore.kernel.org/r/20230128-list-entry-null-check-sched-v1-1-c93085ee0055@diag.uniroma1.it
---
kernel/sched/rt.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/kernel/sched/rt.c b/kernel/sched/rt.c
index ed2a47e4ddae..0a11f44adee5 100644
--- a/kernel/sched/rt.c
+++ b/kernel/sched/rt.c
@@ -1777,6 +1777,8 @@ static struct sched_rt_entity *pick_next_rt_entity(struct rt_rq *rt_rq)
BUG_ON(idx >= MAX_RT_PRIO);
queue = array->queue + idx;
+ if (SCHED_WARN_ON(list_empty(queue)))
+ return NULL;
next = list_entry(queue->next, struct sched_rt_entity, run_list);
return next;
@@ -1789,7 +1791,8 @@ static struct task_struct *_pick_next_task_rt(struct rq *rq)
do {
rt_se = pick_next_rt_entity(rt_rq);
- BUG_ON(!rt_se);
+ if (unlikely(!rt_se))
+ return NULL;
rt_rq = group_rt_rq(rt_se);
} while (rt_rq);
---
base-commit: 2241ab53cbb5cdb08a6b2d4688feb13971058f65
change-id: 20230128-list-entry-null-check-sched-a3f3dfd6d468
Best regards,
--
Pietro Borrello <borrello@diag.uniroma1.it>
^ permalink raw reply [flat|nested] 5+ messages in thread* Re: [PATCH v3] sched: pick_next_rt_entity(): check list_entry
2023-02-06 22:33 [PATCH v3] sched: pick_next_rt_entity(): check list_entry Pietro Borrello
@ 2023-02-07 12:29 ` Phil Auld
2023-02-07 15:11 ` Steven Rostedt
2023-02-11 10:30 ` [tip: sched/core] sched/rt: " tip-bot2 for Pietro Borrello
2 siblings, 0 replies; 5+ messages in thread
From: Phil Auld @ 2023-02-07 12:29 UTC (permalink / raw)
To: Pietro Borrello
Cc: Ingo Molnar, Peter Zijlstra, Juri Lelli, Vincent Guittot,
Dietmar Eggemann, Steven Rostedt, Ben Segall, Mel Gorman,
Daniel Bristot de Oliveira, Valentin Schneider, Dmitry Adamushko,
Cristiano Giuffrida, Bos, H.J.,
Jakob Koschel, Ingo Molnar, linux-kernel
Hi Pietro,
On Mon, Feb 06, 2023 at 10:33:54PM +0000 Pietro Borrello wrote:
> Commit 326587b84078 ("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: 326587b84078 ("sched: fix goto retry in pick_next_task_rt()")
> Signed-off-by: Pietro Borrello <borrello@diag.uniroma1.it>
> ---
> Changes in v3:
> - return NULL if the list is empty
> - Link to v2: https://lore.kernel.org/r/20230128-list-entry-null-check-sched-v2-1-d8e010cce91b@diag.uniroma1.it
>
> Changes in v2:
> - pick_next_rt_entity(): emit warning instead of crashing
> - Link to v1: https://lore.kernel.org/r/20230128-list-entry-null-check-sched-v1-1-c93085ee0055@diag.uniroma1.it
> ---
> kernel/sched/rt.c | 5 ++++-
> 1 file changed, 4 insertions(+), 1 deletion(-)
>
> diff --git a/kernel/sched/rt.c b/kernel/sched/rt.c
> index ed2a47e4ddae..0a11f44adee5 100644
> --- a/kernel/sched/rt.c
> +++ b/kernel/sched/rt.c
> @@ -1777,6 +1777,8 @@ static struct sched_rt_entity *pick_next_rt_entity(struct rt_rq *rt_rq)
> BUG_ON(idx >= MAX_RT_PRIO);
>
> queue = array->queue + idx;
> + if (SCHED_WARN_ON(list_empty(queue)))
> + return NULL;
> next = list_entry(queue->next, struct sched_rt_entity, run_list);
>
> return next;
> @@ -1789,7 +1791,8 @@ static struct task_struct *_pick_next_task_rt(struct rq *rq)
>
> do {
> rt_se = pick_next_rt_entity(rt_rq);
> - BUG_ON(!rt_se);
> + if (unlikely(!rt_se))
> + return NULL;
> rt_rq = group_rt_rq(rt_se);
> } while (rt_rq);
>
>
> ---
> base-commit: 2241ab53cbb5cdb08a6b2d4688feb13971058f65
> change-id: 20230128-list-entry-null-check-sched-a3f3dfd6d468
>
> Best regards,
> --
> Pietro Borrello <borrello@diag.uniroma1.it>
>
Reviewed-by: Phil Auld <pauld@redhat.com>
Thanks. I think this will be useful.
Cheers,
Phil
--
^ permalink raw reply [flat|nested] 5+ messages in thread* Re: [PATCH v3] sched: pick_next_rt_entity(): check list_entry
2023-02-06 22:33 [PATCH v3] sched: pick_next_rt_entity(): check list_entry Pietro Borrello
2023-02-07 12:29 ` Phil Auld
@ 2023-02-07 15:11 ` Steven Rostedt
2023-02-11 10:30 ` [tip: sched/core] sched/rt: " tip-bot2 for Pietro Borrello
2 siblings, 0 replies; 5+ messages in thread
From: Steven Rostedt @ 2023-02-07 15:11 UTC (permalink / raw)
To: Pietro Borrello
Cc: Ingo Molnar, Peter Zijlstra, Juri Lelli, Vincent Guittot,
Dietmar Eggemann, Phil Auld, Ben Segall, Mel Gorman,
Daniel Bristot de Oliveira, Valentin Schneider, Dmitry Adamushko,
Cristiano Giuffrida, Bos, H.J.,
Jakob Koschel, Ingo Molnar, linux-kernel
On Mon, 06 Feb 2023 22:33:54 +0000
Pietro Borrello <borrello@diag.uniroma1.it> wrote:
> Commit 326587b84078 ("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: 326587b84078 ("sched: fix goto retry in pick_next_task_rt()")
> Signed-off-by: Pietro Borrello <borrello@diag.uniroma1.it>
> ---
> Changes in v3:
> - return NULL if the list is empty
> - Link to v2: https://lore.kernel.org/r/20230128-list-entry-null-check-sched-v2-1-d8e010cce91b@diag.uniroma1.it
>
> Changes in v2:
> - pick_next_rt_entity(): emit warning instead of crashing
> - Link to v1: https://lore.kernel.org/r/20230128-list-entry-null-check-sched-v1-1-c93085ee0055@diag.uniroma1.it
> ---
> kernel/sched/rt.c | 5 ++++-
> 1 file changed, 4 insertions(+), 1 deletion(-)
>
> diff --git a/kernel/sched/rt.c b/kernel/sched/rt.c
> index ed2a47e4ddae..0a11f44adee5 100644
Reviewed-by: Steven Rostedt (Google) <rostedt@goodmis.org>
-- Steve
^ permalink raw reply [flat|nested] 5+ messages in thread* [tip: sched/core] sched/rt: pick_next_rt_entity(): check list_entry
2023-02-06 22:33 [PATCH v3] sched: pick_next_rt_entity(): check list_entry Pietro Borrello
2023-02-07 12:29 ` Phil Auld
2023-02-07 15:11 ` Steven Rostedt
@ 2023-02-11 10:30 ` tip-bot2 for Pietro Borrello
2 siblings, 0 replies; 5+ messages in thread
From: tip-bot2 for Pietro Borrello @ 2023-02-11 10:30 UTC (permalink / raw)
To: linux-tip-commits
Cc: Pietro Borrello, Peter Zijlstra (Intel),
Phil Auld, Steven Rostedt (Google),
x86, linux-kernel
The following commit has been merged into the sched/core branch of tip:
Commit-ID: 7c4a5b89a0b5a57a64b601775b296abf77a9fe97
Gitweb: https://git.kernel.org/tip/7c4a5b89a0b5a57a64b601775b296abf77a9fe97
Author: Pietro Borrello <borrello@diag.uniroma1.it>
AuthorDate: Mon, 06 Feb 2023 22:33:54
Committer: Peter Zijlstra <peterz@infradead.org>
CommitterDate: Sat, 11 Feb 2023 11:18:10 +01:00
sched/rt: pick_next_rt_entity(): check list_entry
Commit 326587b84078 ("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: 326587b84078 ("sched: fix goto retry in pick_next_task_rt()")
Signed-off-by: Pietro Borrello <borrello@diag.uniroma1.it>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Reviewed-by: Phil Auld <pauld@redhat.com>
Reviewed-by: Steven Rostedt (Google) <rostedt@goodmis.org>
Link: https://lore.kernel.org/r/20230128-list-entry-null-check-sched-v3-1-b1a71bd1ac6b@diag.uniroma1.it
---
kernel/sched/rt.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/kernel/sched/rt.c b/kernel/sched/rt.c
index ed2a47e..0a11f44 100644
--- a/kernel/sched/rt.c
+++ b/kernel/sched/rt.c
@@ -1777,6 +1777,8 @@ static struct sched_rt_entity *pick_next_rt_entity(struct rt_rq *rt_rq)
BUG_ON(idx >= MAX_RT_PRIO);
queue = array->queue + idx;
+ if (SCHED_WARN_ON(list_empty(queue)))
+ return NULL;
next = list_entry(queue->next, struct sched_rt_entity, run_list);
return next;
@@ -1789,7 +1791,8 @@ static struct task_struct *_pick_next_task_rt(struct rq *rq)
do {
rt_se = pick_next_rt_entity(rt_rq);
- BUG_ON(!rt_se);
+ if (unlikely(!rt_se))
+ return NULL;
rt_rq = group_rt_rq(rt_se);
} while (rt_rq);
^ permalink raw reply [flat|nested] 5+ messages in thread
[parent not found: <8f5c938f-5c31-655b-fd8d-415fa192d705@huawei.com>]
end of thread, other threads:[~2023-03-04 10:18 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-02-06 22:33 [PATCH v3] sched: pick_next_rt_entity(): check list_entry Pietro Borrello
2023-02-07 12:29 ` Phil Auld
2023-02-07 15:11 ` Steven Rostedt
2023-02-11 10:30 ` [tip: sched/core] sched/rt: " tip-bot2 for Pietro Borrello
[not found] <8f5c938f-5c31-655b-fd8d-415fa192d705@huawei.com>
[not found] ` <d3af2533-2990-e884-eb9a-20cbbfedde23@huawei.com>
2023-03-04 10:18 ` [PATCH v3] sched: " guanjing (D)
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®