lkml.org 
[lkml]   [2007]   [Jun]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[patch-mm 09/25] clockevents: Fix device replacement
    When a device is replaced by a better rated device, then the broadcast
    mode needs to be evaluated again. When the new device has no requirement
    for broadcasting, then the broadcast bits for the CPU must be cleared.

    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>

    ---
    kernel/time/tick-broadcast.c | 29 ++++++++++++++++++++++++++++-
    1 file changed, 28 insertions(+), 1 deletion(-)

    Index: linux-2.6.22-rc4-mm/kernel/time/tick-broadcast.c
    ===================================================================
    --- linux-2.6.22-rc4-mm.orig/kernel/time/tick-broadcast.c 2007-06-16 12:10:23.000000000 +0200
    +++ linux-2.6.22-rc4-mm/kernel/time/tick-broadcast.c 2007-06-16 12:10:23.000000000 +0200
    @@ -31,6 +31,12 @@ struct tick_device tick_broadcast_device
    static cpumask_t tick_broadcast_mask;
    static DEFINE_SPINLOCK(tick_broadcast_lock);

    +#ifdef CONFIG_TICK_ONESHOT
    +static void tick_broadcast_clear_oneshot(int cpu);
    +#else
    +static inline void tick_broadcast_clear_oneshot(int cpu) { }
    +#endif
    +
    /*
    * Debugging: see timer_list.c
    */
    @@ -99,8 +105,19 @@ int tick_device_uses_broadcast(struct cl
    cpu_set(cpu, tick_broadcast_mask);
    tick_broadcast_start_periodic(tick_broadcast_device.evtdev);
    ret = 1;
    - }
    + } else {
    + /*
    + * When the new device is not affected by the stop
    + * feature and the cpu is marked in the broadcast mask
    + * then clear the broadcast bit.
    + */
    + if (!(dev->features & CLOCK_EVT_FEAT_C3STOP)) {
    + int cpu = smp_processor_id();

    + cpu_clear(cpu, tick_broadcast_mask);
    + tick_broadcast_clear_oneshot(cpu);
    + }
    + }
    spin_unlock_irqrestore(&tick_broadcast_lock, flags);
    return ret;
    }
    @@ -487,6 +504,16 @@ out:
    spin_unlock_irqrestore(&tick_broadcast_lock, flags);
    }

    +/*
    + * Reset the one shot broadcast for a cpu
    + *
    + * Called with tick_broadcast_lock held
    + */
    +static void tick_broadcast_clear_oneshot(int cpu)
    +{
    + cpu_clear(cpu, tick_broadcast_oneshot_mask);
    +}
    +
    /**
    * tick_broadcast_setup_highres - setup the broadcast device for highres
    */
    --

    -
    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-06-16 12:31    [W:0.020 / U:0.056 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site