Merge tag 'for-linus-timers-conversion-final-v4.15-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/kees/linux into timers/urgent
Pull the last batch of manual timer conversions from Kees Cook: - final batch of "non trivial" timer conversions (multi-tree dependencies, things Coccinelle couldn't handle, etc). - treewide conversions via Coccinelle, in 4 steps: - DEFINE_TIMER() functions converted to struct timer_list * argument - init_timer() -> setup_timer() - setup_timer() -> timer_setup() - setup_timer() -> timer_setup() (with a single embedded structure) - deprecated timer API removals (init_timer(), setup_*timer()) - finalization of new API (remove global casts)
This commit is contained in:
@@ -171,7 +171,7 @@ void clocksource_mark_unstable(struct clocksource *cs)
|
||||
spin_unlock_irqrestore(&watchdog_lock, flags);
|
||||
}
|
||||
|
||||
static void clocksource_watchdog(unsigned long data)
|
||||
static void clocksource_watchdog(struct timer_list *unused)
|
||||
{
|
||||
struct clocksource *cs;
|
||||
u64 csnow, wdnow, cslast, wdlast, delta;
|
||||
@@ -290,8 +290,7 @@ static inline void clocksource_start_watchdog(void)
|
||||
{
|
||||
if (watchdog_running || !watchdog || list_empty(&watchdog_list))
|
||||
return;
|
||||
init_timer(&watchdog_timer);
|
||||
watchdog_timer.function = clocksource_watchdog;
|
||||
timer_setup(&watchdog_timer, clocksource_watchdog, 0);
|
||||
watchdog_timer.expires = jiffies + WATCHDOG_INTERVAL;
|
||||
add_timer_on(&watchdog_timer, cpumask_first(cpu_online_mask));
|
||||
watchdog_running = 1;
|
||||
|
@@ -707,14 +707,18 @@ static inline void debug_timer_assert_init(struct timer_list *timer)
|
||||
debug_object_assert_init(timer, &timer_debug_descr);
|
||||
}
|
||||
|
||||
static void do_init_timer(struct timer_list *timer, unsigned int flags,
|
||||
static void do_init_timer(struct timer_list *timer,
|
||||
void (*func)(struct timer_list *),
|
||||
unsigned int flags,
|
||||
const char *name, struct lock_class_key *key);
|
||||
|
||||
void init_timer_on_stack_key(struct timer_list *timer, unsigned int flags,
|
||||
void init_timer_on_stack_key(struct timer_list *timer,
|
||||
void (*func)(struct timer_list *),
|
||||
unsigned int flags,
|
||||
const char *name, struct lock_class_key *key)
|
||||
{
|
||||
debug_object_init_on_stack(timer, &timer_debug_descr);
|
||||
do_init_timer(timer, flags, name, key);
|
||||
do_init_timer(timer, func, flags, name, key);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(init_timer_on_stack_key);
|
||||
|
||||
@@ -755,10 +759,13 @@ static inline void debug_assert_init(struct timer_list *timer)
|
||||
debug_timer_assert_init(timer);
|
||||
}
|
||||
|
||||
static void do_init_timer(struct timer_list *timer, unsigned int flags,
|
||||
static void do_init_timer(struct timer_list *timer,
|
||||
void (*func)(struct timer_list *),
|
||||
unsigned int flags,
|
||||
const char *name, struct lock_class_key *key)
|
||||
{
|
||||
timer->entry.pprev = NULL;
|
||||
timer->function = func;
|
||||
timer->flags = flags | raw_smp_processor_id();
|
||||
lockdep_init_map(&timer->lockdep_map, name, key, 0);
|
||||
}
|
||||
@@ -766,6 +773,7 @@ static void do_init_timer(struct timer_list *timer, unsigned int flags,
|
||||
/**
|
||||
* init_timer_key - initialize a timer
|
||||
* @timer: the timer to be initialized
|
||||
* @func: timer callback function
|
||||
* @flags: timer flags
|
||||
* @name: name of the timer
|
||||
* @key: lockdep class key of the fake lock used for tracking timer
|
||||
@@ -774,11 +782,12 @@ static void do_init_timer(struct timer_list *timer, unsigned int flags,
|
||||
* init_timer_key() must be done to a timer prior calling *any* of the
|
||||
* other timer functions.
|
||||
*/
|
||||
void init_timer_key(struct timer_list *timer, unsigned int flags,
|
||||
void init_timer_key(struct timer_list *timer,
|
||||
void (*func)(struct timer_list *), unsigned int flags,
|
||||
const char *name, struct lock_class_key *key)
|
||||
{
|
||||
debug_init(timer);
|
||||
do_init_timer(timer, flags, name, key);
|
||||
do_init_timer(timer, func, flags, name, key);
|
||||
}
|
||||
EXPORT_SYMBOL(init_timer_key);
|
||||
|
||||
@@ -1107,12 +1116,12 @@ EXPORT_SYMBOL(timer_reduce);
|
||||
* add_timer - start a timer
|
||||
* @timer: the timer to be added
|
||||
*
|
||||
* The kernel will do a ->function(->data) callback from the
|
||||
* The kernel will do a ->function(@timer) callback from the
|
||||
* timer interrupt at the ->expires point in the future. The
|
||||
* current time is 'jiffies'.
|
||||
*
|
||||
* The timer's ->expires, ->function (and if the handler uses it, ->data)
|
||||
* fields must be set prior calling this function.
|
||||
* The timer's ->expires, ->function fields must be set prior calling this
|
||||
* function.
|
||||
*
|
||||
* Timers with an ->expires field in the past will be executed in the next
|
||||
* timer tick.
|
||||
@@ -1284,8 +1293,7 @@ int del_timer_sync(struct timer_list *timer)
|
||||
EXPORT_SYMBOL(del_timer_sync);
|
||||
#endif
|
||||
|
||||
static void call_timer_fn(struct timer_list *timer, void (*fn)(unsigned long),
|
||||
unsigned long data)
|
||||
static void call_timer_fn(struct timer_list *timer, void (*fn)(struct timer_list *))
|
||||
{
|
||||
int count = preempt_count();
|
||||
|
||||
@@ -1309,7 +1317,7 @@ static void call_timer_fn(struct timer_list *timer, void (*fn)(unsigned long),
|
||||
lock_map_acquire(&lockdep_map);
|
||||
|
||||
trace_timer_expire_entry(timer);
|
||||
fn(data);
|
||||
fn(timer);
|
||||
trace_timer_expire_exit(timer);
|
||||
|
||||
lock_map_release(&lockdep_map);
|
||||
@@ -1331,8 +1339,7 @@ static void expire_timers(struct timer_base *base, struct hlist_head *head)
|
||||
{
|
||||
while (!hlist_empty(head)) {
|
||||
struct timer_list *timer;
|
||||
void (*fn)(unsigned long);
|
||||
unsigned long data;
|
||||
void (*fn)(struct timer_list *);
|
||||
|
||||
timer = hlist_entry(head->first, struct timer_list, entry);
|
||||
|
||||
@@ -1340,15 +1347,14 @@ static void expire_timers(struct timer_base *base, struct hlist_head *head)
|
||||
detach_timer(timer, true);
|
||||
|
||||
fn = timer->function;
|
||||
data = timer->data;
|
||||
|
||||
if (timer->flags & TIMER_IRQSAFE) {
|
||||
raw_spin_unlock(&base->lock);
|
||||
call_timer_fn(timer, fn, data);
|
||||
call_timer_fn(timer, fn);
|
||||
raw_spin_lock(&base->lock);
|
||||
} else {
|
||||
raw_spin_unlock_irq(&base->lock);
|
||||
call_timer_fn(timer, fn, data);
|
||||
call_timer_fn(timer, fn);
|
||||
raw_spin_lock_irq(&base->lock);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user