lkml.org 
[lkml]   [2021]   [Feb]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[PATCH 3/6] sched: Collate affine_move_task() stoppers
    The SCA_MIGRATE_ENABLE and task_running() cases are almost identical,
    collapse them to avoid further duplication.

    Fixes: 6d337eab041d ("sched: Fix migrate_disable() vs set_cpus_allowed_ptr()")
    Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    ---
    kernel/sched/core.c | 23 ++++++++---------------
    1 file changed, 8 insertions(+), 15 deletions(-)

    --- a/kernel/sched/core.c
    +++ b/kernel/sched/core.c
    @@ -2239,30 +2239,23 @@ static int affine_move_task(struct rq *r
    return -EINVAL;
    }

    - if (flags & SCA_MIGRATE_ENABLE) {
    -
    - refcount_inc(&pending->refs); /* pending->{arg,stop_work} */
    - p->migration_flags &= ~MDF_PUSH;
    - task_rq_unlock(rq, p, rf);
    -
    - stop_one_cpu_nowait(cpu_of(rq), migration_cpu_stop,
    - &pending->arg, &pending->stop_work);
    -
    - return 0;
    - }
    -
    if (task_running(rq, p) || p->state == TASK_WAKING) {
    /*
    - * Lessen races (and headaches) by delegating
    - * is_migration_disabled(p) checks to the stopper, which will
    - * run on the same CPU as said p.
    + * MIGRATE_ENABLE gets here because 'p == current', but for
    + * anything else we cannot do is_migration_disabled(), punt
    + * and have the stopper function handle it all race-free.
    */
    +
    refcount_inc(&pending->refs); /* pending->{arg,stop_work} */
    + if (flags & SCA_MIGRATE_ENABLE)
    + p->migration_flags &= ~MDF_PUSH;
    task_rq_unlock(rq, p, rf);

    stop_one_cpu_nowait(cpu_of(rq), migration_cpu_stop,
    &pending->arg, &pending->stop_work);

    + if (flags & SCA_MIGRATE_ENABLE)
    + return 0;
    } else {

    if (!is_migration_disabled(p)) {

    \
     
     \ /
      Last update: 2021-02-24 15:32    [W:3.450 / U:0.044 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site