lkml.org 
[lkml]   [2012]   [Mar]   [6]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 2/5] ia64: Use common fork_idle_from_wq in smpboot
    Date
    Cleanup. Instead of reimplementing fork_idle on wq and idle task caching,
    use fork_idle_from_wq().

    Signed-off-by: Venkatesh Pallipadi <venki@google.com>
    ---
    arch/ia64/kernel/smpboot.c | 49 +++----------------------------------------
    1 files changed, 4 insertions(+), 45 deletions(-)

    diff --git a/arch/ia64/kernel/smpboot.c b/arch/ia64/kernel/smpboot.c
    index 5590979..b9026fa 100644
    --- a/arch/ia64/kernel/smpboot.c
    +++ b/arch/ia64/kernel/smpboot.c
    @@ -95,13 +95,8 @@ struct sal_to_os_boot *sal_state_for_booting_cpu = &sal_boot_rendez_state[0];

    #define set_brendez_area(x) (sal_state_for_booting_cpu = &sal_boot_rendez_state[(x)]);

    -#define get_idle_for_cpu(x) (idle_thread_array[(x)])
    -#define set_idle_for_cpu(x,p) (idle_thread_array[(x)] = (p))
    -
    #else

    -#define get_idle_for_cpu(x) (NULL)
    -#define set_idle_for_cpu(x,p)
    #define set_brendez_area(x)
    #endif

    @@ -481,53 +476,17 @@ struct pt_regs * __cpuinit idle_regs(struct pt_regs *regs)
    return NULL;
    }

    -struct create_idle {
    - struct work_struct work;
    - struct task_struct *idle;
    - struct completion done;
    - int cpu;
    -};
    -
    -void __cpuinit
    -do_fork_idle(struct work_struct *work)
    -{
    - struct create_idle *c_idle =
    - container_of(work, struct create_idle, work);
    -
    - c_idle->idle = fork_idle(c_idle->cpu);
    - complete(&c_idle->done);
    -}
    -
    static int __cpuinit
    do_boot_cpu (int sapicid, int cpu)
    {
    int timeout;
    - struct create_idle c_idle = {
    - .work = __WORK_INITIALIZER(c_idle.work, do_fork_idle),
    - .cpu = cpu,
    - .done = COMPLETION_INITIALIZER(c_idle.done),
    - };
    -
    - /*
    - * We can't use kernel_thread since we must avoid to
    - * reschedule the child.
    - */
    - c_idle.idle = get_idle_for_cpu(cpu);
    - if (c_idle.idle) {
    - init_idle(c_idle.idle, cpu);
    - goto do_rest;
    - }
    -
    - schedule_work(&c_idle.work);
    - wait_for_completion(&c_idle.done);
    + struct task_struct *idle;

    - if (IS_ERR(c_idle.idle))
    + idle = fork_idle_from_wq(cpu);
    + if (IS_ERR(idle))
    panic("failed fork for CPU %d", cpu);

    - set_idle_for_cpu(cpu, c_idle.idle);
    -
    -do_rest:
    - task_for_booting_cpu = c_idle.idle;
    + task_for_booting_cpu = idle;

    Dprintk("Sending wakeup vector %lu to AP 0x%x/0x%x.\n", ap_wakeup_vector, cpu, sapicid);

    --
    1.7.7.3


    \
     
     \ /
      Last update: 2012-03-06 22:45    [W:0.027 / U:0.264 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site