To get the rq from dl_se in the old way: first use dl_rq_of_se() get dl_rq, then use rq_of_dl_rq() get rq,
dl_rq_of_se(): dl_se ==> p ==> rq ==> dl rq_of_dl_rq(): dl || rq <== rq_of_dl_rq(dl_rq_of_se()): dl_se ==> p ==> rq ==> dl || rq <== it looks a little redundant. So add rq_of_se(dl_se) to instead of rq_of_dl_rq(dl_rq_of_se(dl_se)). rq_of_se(): dl_se ==> p ==> rq Signed-off-by: Hui Su <sh_...@163.com> --- kernel/sched/deadline.c | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/kernel/sched/deadline.c b/kernel/sched/deadline.c index 6d93f4518734..b242bbf61b21 100644 --- a/kernel/sched/deadline.c +++ b/kernel/sched/deadline.c @@ -30,10 +30,16 @@ static inline struct rq *rq_of_dl_rq(struct dl_rq *dl_rq) return container_of(dl_rq, struct rq, dl); } -static inline struct dl_rq *dl_rq_of_se(struct sched_dl_entity *dl_se) +static inline struct rq *rq_of_se(struct sched_dl_entity *dl_se) { struct task_struct *p = dl_task_of(dl_se); - struct rq *rq = task_rq(p); + + return task_rq(p); +} + +static inline struct dl_rq *dl_rq_of_se(struct sched_dl_entity *dl_se) +{ + struct rq *rq = rq_of_se(dl_se); return &rq->dl; } @@ -695,8 +701,8 @@ static void check_preempt_curr_dl(struct rq *rq, struct task_struct *p, int flag */ static inline void setup_new_dl_entity(struct sched_dl_entity *dl_se) { - struct dl_rq *dl_rq = dl_rq_of_se(dl_se); - struct rq *rq = rq_of_dl_rq(dl_rq); + struct rq *rq = rq_of_se(dl_se); + WARN_ON(dl_se->dl_boosted); WARN_ON(dl_time_before(rq_clock(rq), dl_se->deadline)); @@ -739,8 +745,7 @@ static inline void setup_new_dl_entity(struct sched_dl_entity *dl_se) static void replenish_dl_entity(struct sched_dl_entity *dl_se, struct sched_dl_entity *pi_se) { - struct dl_rq *dl_rq = dl_rq_of_se(dl_se); - struct rq *rq = rq_of_dl_rq(dl_rq); + struct rq *rq = rq_of_se(dl_se); BUG_ON(pi_se->dl_runtime <= 0); @@ -925,8 +930,7 @@ static inline bool dl_is_implicit(struct sched_dl_entity *dl_se) static void update_dl_entity(struct sched_dl_entity *dl_se, struct sched_dl_entity *pi_se) { - struct dl_rq *dl_rq = dl_rq_of_se(dl_se); - struct rq *rq = rq_of_dl_rq(dl_rq); + struct rq *rq = rq_of_se(dl_se); if (dl_time_before(dl_se->deadline, rq_clock(rq)) || dl_entity_overflow(dl_se, pi_se, rq_clock(rq))) { @@ -1152,7 +1156,7 @@ void init_dl_task_timer(struct sched_dl_entity *dl_se) static inline void dl_check_constrained_dl(struct sched_dl_entity *dl_se) { struct task_struct *p = dl_task_of(dl_se); - struct rq *rq = rq_of_dl_rq(dl_rq_of_se(dl_se)); + struct rq *rq = rq_of_se(dl_se); if (dl_time_before(dl_se->deadline, rq_clock(rq)) && dl_time_before(rq_clock(rq), dl_next_period(dl_se))) { @@ -1497,8 +1501,7 @@ enqueue_dl_entity(struct sched_dl_entity *dl_se, } else if (flags & ENQUEUE_REPLENISH) { replenish_dl_entity(dl_se, pi_se); } else if ((flags & ENQUEUE_RESTORE) && - dl_time_before(dl_se->deadline, - rq_clock(rq_of_dl_rq(dl_rq_of_se(dl_se))))) { + dl_time_before(dl_se->deadline, rq_clock(rq_of_se(dl_se)))) { setup_new_dl_entity(dl_se); } -- 2.25.1