lkml.org 
[lkml]   [2011]   [May]   [6]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 1/4] Move C3 stop test outside lock
    Date
    From: Andi Kleen <ak@linux.intel.com>

    Avoid taking locks in the idle path for systems where the timer
    doesn't stop in C3.

    Signed-off-by: Andi Kleen <ak@linux.intel.com>
    ---
    kernel/time/tick-broadcast.c | 11 ++++-------
    1 files changed, 4 insertions(+), 7 deletions(-)

    diff --git a/kernel/time/tick-broadcast.c b/kernel/time/tick-broadcast.c
    index da800ff..2fc424d 100644
    --- a/kernel/time/tick-broadcast.c
    +++ b/kernel/time/tick-broadcast.c
    @@ -456,23 +456,22 @@ void tick_broadcast_oneshot_control(unsigned long reason)
    unsigned long flags;
    int cpu;

    - raw_spin_lock_irqsave(&tick_broadcast_lock, flags);
    -
    /*
    * Periodic mode does not care about the enter/exit of power
    * states
    */
    if (tick_broadcast_device.mode == TICKDEV_MODE_PERIODIC)
    - goto out;
    + return;

    - bc = tick_broadcast_device.evtdev;
    cpu = smp_processor_id();
    + bc = tick_broadcast_device.evtdev;
    td = &per_cpu(tick_cpu_device, cpu);
    dev = td->evtdev;

    if (!(dev->features & CLOCK_EVT_FEAT_C3STOP))
    - goto out;
    + return;

    + raw_spin_lock_irqsave(&tick_broadcast_lock, flags);
    if (reason == CLOCK_EVT_NOTIFY_BROADCAST_ENTER) {
    if (!cpumask_test_cpu(cpu, tick_get_broadcast_oneshot_mask())) {
    cpumask_set_cpu(cpu, tick_get_broadcast_oneshot_mask());
    @@ -489,8 +488,6 @@ void tick_broadcast_oneshot_control(unsigned long reason)
    tick_program_event(dev->next_event, 1);
    }
    }
    -
    -out:
    raw_spin_unlock_irqrestore(&tick_broadcast_lock, flags);
    }

    --
    1.7.4.4


    \
     
     \ /
      Last update: 2011-05-06 23:43    [W:0.022 / U:0.640 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site