lkml.org 
[lkml]   [2009]   [Aug]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    SubjectRe: [patch 00/15] clocksource / timekeeping rework V4 (resend V3 + bug fix)
    On Sat, 15 Aug 2009, Ingo Molnar wrote:
    > Yeah, nice cleanups!
    >
    > I gave it some brief testing in tip:master and there's the new
    > lockdep assert below. Config and full bootlog attached.

    Yeah, we need to call clocksource_change_rating() outside of watchdog
    lock. Spotted a missing _irqrestore as well.

    Thanks,

    tglx
    ---

    diff --git a/kernel/time/clocksource.c b/kernel/time/clocksource.c
    index a1657b5..02dc22d 100644
    --- a/kernel/time/clocksource.c
    +++ b/kernel/time/clocksource.c
    @@ -307,16 +307,23 @@ static void clocksource_watchdog_work(struct work_struct *work)
    {
    struct clocksource *cs, *tmp;
    unsigned long flags;
    + LIST_HEAD(unstable);

    spin_lock_irqsave(&watchdog_lock, flags);
    list_for_each_entry_safe(cs, tmp, &watchdog_list, wd_list)
    if (cs->flags & CLOCK_SOURCE_UNSTABLE) {
    list_del_init(&cs->wd_list);
    - clocksource_change_rating(cs, 0);
    + list_add(&cs->wd_list, &unstable);
    }
    /* Check if the watchdog timer needs to be stopped. */
    clocksource_stop_watchdog();
    - spin_unlock(&watchdog_lock);
    + spin_unlock_irqrestore(&watchdog_lock, flags);
    +
    + /* Needs to be done outside of watchdog lock */
    + list_for_each_entry_safe(cs, tmp, &unstable, wd_list) {
    + list_del_init(&cs->wd_list);
    + clocksource_change_rating(cs, 0);
    + }
    }

    #else /* CONFIG_CLOCKSOURCE_WATCHDOG */

    \
     
     \ /
      Last update: 2009-08-15 12:11    [W:0.031 / U:0.808 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site