Every user of init_timer() also needs to initialize ->function and ->data fields. This patch adds a simple setup_timer() helper for that. The schedule_timeout() is patched as an example of usage.
Unified · Split
| @@ -494,7 +494,7 @@ void invalidate_interrupt7(void); · 493 unmodified lines | ||
| 494 | 494 | void thermal_interrupt(void); |
| 495 | 495 | void i8254_timer_resume(void); |
| 496 | 496 | |
| 497 | −static void setup_timer(void) | |
| 497 | +static void setup_timer_hardware(void) | |
| 498 | 498 | { |
| 499 | 499 | outb_p(0x34,0x43); /* binary, mode 2, LSB/MSB, ch 0 */ |
| 500 | 500 | udelay(10); |
| @@ -505,13 +505,13 @@ static void setup_timer(void) · 4 unmodified lines | ||
| 505 | 505 | |
| 506 | 506 | static int timer_resume(struct sys_device *dev) |
| 507 | 507 | { |
| 508 | − setup_timer(); | |
| 508 | + setup_timer_hardware(); | |
| 509 | 509 | return 0; |
| 510 | 510 | } |
| 511 | 511 | |
| 512 | 512 | void i8254_timer_resume(void) |
| 513 | 513 | { |
| 514 | − setup_timer(); | |
| 514 | + setup_timer_hardware(); | |
| 515 | 515 | } |
| 516 | 516 | |
| 517 | 517 | static struct sysdev_class timer_sysclass = { |
| @@ -594,7 +594,7 @@ void __init init_IRQ(void) · 76 unmodified lines | ||
| 594 | 594 | * Set the clock to HZ Hz, we already have a valid |
| 595 | 595 | * vector now: |
| 596 | 596 | */ |
| 597 | − setup_timer(); | |
| 597 | + setup_timer_hardware(); | |
| 598 | 598 | |
| 599 | 599 | if (!acpi_ioapic) |
| 600 | 600 | setup_irq(2, &irq2); |
| @@ -38,6 +38,15 @@ extern struct timer_base_s __init_timer_base; · 37 unmodified lines | ||
| 38 | 38 | |
| 39 | 39 | void fastcall init_timer(struct timer_list * timer); |
| 40 | 40 | |
| 41 | +static inline void setup_timer(struct timer_list * timer, | |
| 42 | + void (*function)(unsigned long), | |
| 43 | + unsigned long data) | |
| 44 | +{ | |
| 45 | + timer->function = function; | |
| 46 | + timer->data = data; | |
| 47 | + init_timer(timer); | |
| 48 | +} | |
| 49 | + | |
| 41 | 50 | /*** |
| 42 | 51 | * timer_pending - is a timer pending? |
| 43 | 52 | * @timer: the timer in question |
| @@ -1146,12 +1146,8 @@ fastcall signed long __sched schedule_timeout(signed long timeout) · 1145 unmodified lines | ||
| 1146 | 1146 | |
| 1147 | 1147 | expire = timeout + jiffies; |
| 1148 | 1148 | |
| 1149 | − init_timer(&timer); | |
| 1150 | − timer.expires = expire; | |
| 1151 | − timer.data = (unsigned long) current; | |
| 1152 | − timer.function = process_timeout; | |
| 1153 | − | |
| 1154 | − add_timer(&timer); | |
| 1149 | + setup_timer(&timer, process_timeout, (unsigned long)current); | |
| 1150 | + __mod_timer(&timer, expire); | |
| 1155 | 1151 | schedule(); |
| 1156 | 1152 | del_singleshot_timer_sync(&timer); |
| 1157 | 1153 | |