]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/blobdiff - kernel/time/timer.c
timer: Pass timer_list pointer to callbacks unconditionally
[mirror_ubuntu-bionic-kernel.git] / kernel / time / timer.c
index af0b8bae45027042ff153172522b659fb605cf1d..a07eb124332f0a9e0ee49a4ee411a0a896a8e7ce 100644 (file)
@@ -1107,12 +1107,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 +1284,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)(unsigned long))
 {
        int count = preempt_count();
 
@@ -1309,7 +1308,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_DATA_TYPE)timer);
        trace_timer_expire_exit(timer);
 
        lock_map_release(&lockdep_map);
@@ -1332,7 +1331,6 @@ 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;
 
                timer = hlist_entry(head->first, struct timer_list, entry);
 
@@ -1340,15 +1338,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);
                }
        }