Skip to content

Commit

Permalink
timer: Split out timer function call
Browse files Browse the repository at this point in the history
The ident level is starting to be annoying. More white space than
actual code. Split out the timer function call into its own function.

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
  • Loading branch information
Thomas Gleixner committed Mar 12, 2010
1 parent 06f71b9 commit 576da12
Showing 1 changed file with 36 additions and 36 deletions.
72 changes: 36 additions & 36 deletions kernel/timer.c
Original file line number Diff line number Diff line change
Expand Up @@ -953,6 +953,41 @@ static int cascade(struct tvec_base *base, struct tvec *tv, int index)
return index;
}

static void call_timer_fn(struct timer_list *timer, void (*fn)(unsigned long),
unsigned long data)
{
int preempt_count = preempt_count();

#ifdef CONFIG_LOCKDEP
/*
* It is permissible to free the timer from inside the
* function that is called from it, this we need to take into
* account for lockdep too. To avoid bogus "held lock freed"
* warnings as well as problems when looking into
* timer->lockdep_map, make a copy and use that here.
*/
struct lockdep_map lockdep_map = timer->lockdep_map;
#endif
/*
* Couple the lock chain with the lock chain at
* del_timer_sync() by acquiring the lock_map around the fn()
* call here and in del_timer_sync().
*/
lock_map_acquire(&lockdep_map);

trace_timer_expire_entry(timer);
fn(data);
trace_timer_expire_exit(timer);

lock_map_release(&lockdep_map);

if (preempt_count != preempt_count()) {
printk(KERN_ERR "timer: %pF preempt leak: %08x -> %08x\n",
fn, preempt_count, preempt_count());
BUG();
}
}

#define INDEX(N) ((base->timer_jiffies >> (TVR_BITS + (N) * TVN_BITS)) & TVN_MASK)

/**
Expand Down Expand Up @@ -996,42 +1031,7 @@ static inline void __run_timers(struct tvec_base *base)
detach_timer(timer, 1);

spin_unlock_irq(&base->lock);
{
int preempt_count = preempt_count();

#ifdef CONFIG_LOCKDEP
/*
* It is permissible to free the timer from
* inside the function that is called from
* it, this we need to take into account for
* lockdep too. To avoid bogus "held lock
* freed" warnings as well as problems when
* looking into timer->lockdep_map, make a
* copy and use that here.
*/
struct lockdep_map lockdep_map =
timer->lockdep_map;
#endif
/*
* Couple the lock chain with the lock chain at
* del_timer_sync() by acquiring the lock_map
* around the fn() call here and in
* del_timer_sync().
*/
lock_map_acquire(&lockdep_map);

trace_timer_expire_entry(timer);
fn(data);
trace_timer_expire_exit(timer);

lock_map_release(&lockdep_map);

if (preempt_count != preempt_count()) {
printk(KERN_ERR "timer: %pF preempt leak: %08x -> %08x\n",
fn, preempt_count, preempt_count());
BUG();
}
}
call_timer_fn(timer, fn, data);
spin_lock_irq(&base->lock);
}
}
Expand Down

0 comments on commit 576da12

Please sign in to comment.