lkml.org 
[lkml]   [2007]   [Nov]   [17]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[PATCH v3 11/17] RT: Break out the search function
    From: Gregory Haskins <ghaskins@novell.com>

    Isolate the search logic into a function so that it can be used later
    in places other than find_locked_lowest_rq().

    Signed-off-by: Gregory Haskins <ghaskins@novell.com>
    Signed-off-by: Steven Rostedt <srostedt@redhat.com>
    ---

    kernel/sched_rt.c | 62 ++++++++++++++++++++++++++++++++----------------------
    1 file changed, 37 insertions(+), 25 deletions(-)

    Index: linux-compile.git/kernel/sched_rt.c
    ===================================================================
    --- linux-compile.git.orig/kernel/sched_rt.c 2007-11-16 22:23:39.000000000 -0500
    +++ linux-compile.git/kernel/sched_rt.c 2007-11-16 22:23:43.000000000 -0500
    @@ -256,43 +256,55 @@ static struct task_struct *pick_next_hig
    return next;
    }

    -/* Will lock the rq it finds */
    -static struct rq *find_lock_lowest_rq(struct task_struct *task,
    - struct rq *rq)
    +static int find_lowest_rq(struct task_struct *task)
    {
    - struct rq *lowest_rq = NULL;
    - cpumask_t cpu_mask;
    int cpu;
    - int tries;
    + cpumask_t cpu_mask;
    + struct rq *lowest_rq = NULL;

    cpus_and(cpu_mask, cpu_online_map, task->cpus_allowed);

    - for (tries = 0; tries < RT_MAX_TRIES; tries++) {
    - /*
    - * Scan each rq for the lowest prio.
    - */
    - for_each_cpu_mask(cpu, cpu_mask) {
    - struct rq *curr_rq = &per_cpu(runqueues, cpu);
    + /*
    + * Scan each rq for the lowest prio.
    + */
    + for_each_cpu_mask(cpu, cpu_mask) {
    + struct rq *rq = cpu_rq(cpu);

    - if (cpu == rq->cpu)
    - continue;
    + if (cpu == rq->cpu)
    + continue;

    - /* We look for lowest RT prio or non-rt CPU */
    - if (curr_rq->rt.highest_prio >= MAX_RT_PRIO) {
    - lowest_rq = curr_rq;
    - break;
    - }
    + /* We look for lowest RT prio or non-rt CPU */
    + if (rq->rt.highest_prio >= MAX_RT_PRIO) {
    + lowest_rq = rq;
    + break;
    + }

    - /* no locking for now */
    - if (curr_rq->rt.highest_prio > task->prio &&
    - (!lowest_rq || curr_rq->rt.highest_prio > lowest_rq->rt.highest_prio)) {
    - lowest_rq = curr_rq;
    - }
    + /* no locking for now */
    + if (rq->rt.highest_prio > task->prio &&
    + (!lowest_rq || rq->rt.highest_prio > lowest_rq->rt.highest_prio)) {
    + lowest_rq = rq;
    }
    + }
    +
    + return lowest_rq ? lowest_rq->cpu : -1;
    +}
    +
    +/* Will lock the rq it finds */
    +static struct rq *find_lock_lowest_rq(struct task_struct *task,
    + struct rq *rq)
    +{
    + struct rq *lowest_rq = NULL;
    + int cpu;
    + int tries;
    +
    + for (tries = 0; tries < RT_MAX_TRIES; tries++) {
    + cpu = find_lowest_rq(task);

    - if (!lowest_rq)
    + if (cpu == -1)
    break;

    + lowest_rq = cpu_rq(cpu);
    +
    /* if the prio of this runqueue changed, try again */
    if (double_lock_balance(rq, lowest_rq)) {
    /*
    --
    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

    \
     
     \ /
      Last update: 2007-11-17 07:31    [W:0.027 / U:29.100 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site