lkml.org 
[lkml]   [2012]   [Mar]   [26]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patches in this message
    /
    From
    Subject[PATCH 21/39] autonuma: fix selecting task runqueue
    Date
    From: Hillf Danton <dhillf@gmail.com>

    Without coments, the following three hunks, I guess,
    ======
    @@ -2788,6 +2801,7 @@ select_task_rq_fair(struct task_struct *p,
    goto unlock;
    }

    + prev_cpu = new_cpu;
    while (sd) {
    int load_idx = sd->forkexec_idx;
    struct sched_group *group;
    @@ -2811,6 +2825,7 @@ select_task_rq_fair(struct task_struct *p,
    if (new_cpu == -1 || new_cpu == cpu) {
    /* Now try balancing at a lower domain level of cpu */
    sd = sd->child;
    + new_cpu = prev_cpu;
    continue;
    }

    @@ -2826,6 +2841,7 @@ select_task_rq_fair(struct task_struct *p,
    }
    /* while loop will break here if sd == NULL */
    }
    + BUG_ON(new_cpu < 0);
    unlock:
    rcu_read_unlock();

    ======
    were added for certain that selected cpu is valid, based on BUG_ON.
    But question raised, why prev_cpu is changed?

    Andrea's answer: yes the BUG_ON was introduced to verify the function
    wouldn't return -1. This patch fixes the problem too.

    Signed-off-by: Hillf Danton <dhillf@gmail.com>
    Signed-off-by: Andrea Arcangeli <aarcange@redhat.com>
    ---
    kernel/sched/fair.c | 6 ++++--
    1 files changed, 4 insertions(+), 2 deletions(-)
    diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
    index 25e9e5b..a8498e0 100644
    --- a/kernel/sched/fair.c
    +++ b/kernel/sched/fair.c
    @@ -2769,7 +2769,6 @@ select_task_rq_fair(struct task_struct *p, int sd_flag, int wake_flags)
    goto unlock;
    }

    - prev_cpu = new_cpu;
    while (sd) {
    int load_idx = sd->forkexec_idx;
    struct sched_group *group;
    @@ -2793,7 +2792,10 @@ select_task_rq_fair(struct task_struct *p, int sd_flag, int wake_flags)
    if (new_cpu == -1 || new_cpu == cpu) {
    /* Now try balancing at a lower domain level of cpu */
    sd = sd->child;
    - new_cpu = prev_cpu;
    + if (new_cpu == -1) {
    + /* Only for certain that new cpu is valid */
    + new_cpu = prev_cpu;
    + }
    continue;
    }


    \
     
     \ /
      Last update: 2012-03-26 21:01    [W:0.043 / U:34.564 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site