Re: [PATCH v2 7/7] sched: Change task_struct::state

From: Daniel Bristot de Oliveira
Date: Wed Jun 16 2021 - 09:24:25 EST


On 6/11/21 10:28 AM, Peter Zijlstra wrote:
> --- a/kernel/sched/deadline.c
> +++ b/kernel/sched/deadline.c
> @@ -348,10 +348,10 @@ static void task_non_contending(struct t
> if ((zerolag_time < 0) || hrtimer_active(&dl_se->inactive_timer)) {
> if (dl_task(p))
> sub_running_bw(dl_se, dl_rq);
> - if (!dl_task(p) || p->state == TASK_DEAD) {
> + if (!dl_task(p) || READ_ONCE(p->__state) == TASK_DEAD) {
> struct dl_bw *dl_b = dl_bw_of(task_cpu(p));
>
> - if (p->state == TASK_DEAD)
> + if (READ_ONCE(p->__state) == TASK_DEAD)
> sub_rq_bw(&p->dl, &rq->dl);
> raw_spin_lock(&dl_b->lock);
> __dl_sub(dl_b, p->dl.dl_bw, dl_bw_cpus(task_cpu(p)));
> @@ -1355,10 +1355,10 @@ static enum hrtimer_restart inactive_tas
> sched_clock_tick();
> update_rq_clock(rq);
>
> - if (!dl_task(p) || p->state == TASK_DEAD) {
> + if (!dl_task(p) || READ_ONCE(p->__state) == TASK_DEAD) {
> struct dl_bw *dl_b = dl_bw_of(task_cpu(p));
>
> - if (p->state == TASK_DEAD && dl_se->dl_non_contending) {
> + if (READ_ONCE(p->__state) == TASK_DEAD && dl_se->dl_non_contending) {
> sub_running_bw(&p->dl, dl_rq_of_se(&p->dl));
> sub_rq_bw(&p->dl, dl_rq_of_se(&p->dl));
> dl_se->dl_non_contending = 0;
> @@ -1722,7 +1722,7 @@ static void migrate_task_rq_dl(struct ta
> {
> struct rq *rq;
>
> - if (p->state != TASK_WAKING)
> + if (READ_ONCE(p->__state) != TASK_WAKING)
> return;
>
> rq = task_rq(p);

Reviewed-by: Daniel Bristot de Oliveira <bristot@xxxxxxxxxx>

Feel free to add it to the other patches as well.

Thanks!
-- Daniel