lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Date: Fri, 26 Aug 2022 11:11:43 +0800 From: Shang XiaoJing <shangxiaojing@...wei.com> To: <mingo@...hat.com>, <peterz@...radead.org>, <juri.lelli@...hat.com>, <vincent.guittot@...aro.org>, <dietmar.eggemann@....com>, <rostedt@...dmis.org>, <bsegall@...gle.com>, <mgorman@...e.de>, <bristot@...hat.com>, <vschneid@...hat.com>, <linux-kernel@...r.kernel.org> CC: <shangxiaojing@...wei.com> Subject: [PATCH -next] sched/deadline: Add compare_task_rq helper Wrap repeated code in helper function compare_task_rq, which return true if there is no deadline task on the rq at all, or task's deadline earlier than the rq. Signed-off-by: Shang XiaoJing <shangxiaojing@...wei.com> --- kernel/sched/deadline.c | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/kernel/sched/deadline.c b/kernel/sched/deadline.c index d116d2b9d2f9..4a40a462717c 100644 --- a/kernel/sched/deadline.c +++ b/kernel/sched/deadline.c @@ -1810,6 +1810,13 @@ static void yield_task_dl(struct rq *rq) #ifdef CONFIG_SMP +static inline bool compare_task_rq(struct task_struct *p, struct rq *rq) +{ + return (!rq->dl.dl_nr_running || + dl_time_before(p->dl.deadline, + rq->dl.earliest_dl.curr)); +} + static int find_later_rq(struct task_struct *task); static int @@ -1852,9 +1859,7 @@ select_task_rq_dl(struct task_struct *p, int cpu, int flags) int target = find_later_rq(p); if (target != -1 && - (dl_time_before(p->dl.deadline, - cpu_rq(target)->dl.earliest_dl.curr) || - (cpu_rq(target)->dl.dl_nr_running == 0))) + compare_task_rq(p, cpu_rq(target))) cpu = target; } rcu_read_unlock(); @@ -2221,9 +2226,7 @@ static struct rq *find_lock_later_rq(struct task_struct *task, struct rq *rq) later_rq = cpu_rq(cpu); - if (later_rq->dl.dl_nr_running && - !dl_time_before(task->dl.deadline, - later_rq->dl.earliest_dl.curr)) { + if (!compare_task_rq(task, later_rq)) { /* * Target rq has tasks of equal or earlier deadline, * retrying does not release any lock and is unlikely @@ -2251,9 +2254,7 @@ static struct rq *find_lock_later_rq(struct task_struct *task, struct rq *rq) * its earliest one has a later deadline than our * task, the rq is a good one. */ - if (!later_rq->dl.dl_nr_running || - dl_time_before(task->dl.deadline, - later_rq->dl.earliest_dl.curr)) + if (compare_task_rq(task, later_rq)) break; /* Otherwise we try again. */ @@ -2424,9 +2425,7 @@ static void pull_dl_task(struct rq *this_rq) * - it will preempt the last one we pulled (if any). */ if (p && dl_time_before(p->dl.deadline, dmin) && - (!this_rq->dl.dl_nr_running || - dl_time_before(p->dl.deadline, - this_rq->dl.earliest_dl.curr))) { + compare_task_rq(p, this_rq)) { WARN_ON(p == src_rq->curr); WARN_ON(!task_on_rq_queued(p)); -- 2.17.1
Powered by blists - more mailing lists