diff options
| -rw-r--r-- | arch/x86_64/kernel/i8259.c | 8 | ||||
| -rw-r--r-- | include/linux/timer.h | 9 | ||||
| -rw-r--r-- | kernel/timer.c | 8 |
3 files changed, 15 insertions, 10 deletions
diff --git a/arch/x86_64/kernel/i8259.c b/arch/x86_64/kernel/i8259.c index b2a238b5a1..c6c9791d77 100644 --- a/arch/x86_64/kernel/i8259.c +++ b/arch/x86_64/kernel/i8259.c | |||
| @@ -494,7 +494,7 @@ void invalidate_interrupt7(void); | |||
| 494 | void thermal_interrupt(void); | 494 | void thermal_interrupt(void); |
| 495 | void i8254_timer_resume(void); | 495 | void i8254_timer_resume(void); |
| 496 | 496 | ||
| 497 | static void setup_timer(void) | 497 | static void setup_timer_hardware(void) |
| 498 | { | 498 | { |
| 499 | outb_p(0x34,0x43); /* binary, mode 2, LSB/MSB, ch 0 */ | 499 | outb_p(0x34,0x43); /* binary, mode 2, LSB/MSB, ch 0 */ |
| 500 | udelay(10); | 500 | udelay(10); |
| @@ -505,13 +505,13 @@ static void setup_timer(void) | |||
| 505 | 505 | ||
| 506 | static int timer_resume(struct sys_device *dev) | 506 | static int timer_resume(struct sys_device *dev) |
| 507 | { | 507 | { |
| 508 | setup_timer(); | 508 | setup_timer_hardware(); |
| 509 | return 0; | 509 | return 0; |
| 510 | } | 510 | } |
| 511 | 511 | ||
| 512 | void i8254_timer_resume(void) | 512 | void i8254_timer_resume(void) |
| 513 | { | 513 | { |
| 514 | setup_timer(); | 514 | setup_timer_hardware(); |
| 515 | } | 515 | } |
| 516 | 516 | ||
| 517 | static struct sysdev_class timer_sysclass = { | 517 | static struct sysdev_class timer_sysclass = { |
| @@ -594,7 +594,7 @@ void __init init_IRQ(void) | |||
| 594 | * Set the clock to HZ Hz, we already have a valid | 594 | * Set the clock to HZ Hz, we already have a valid |
| 595 | * vector now: | 595 | * vector now: |
| 596 | */ | 596 | */ |
| 597 | setup_timer(); | 597 | setup_timer_hardware(); |
| 598 | 598 | ||
| 599 | if (!acpi_ioapic) | 599 | if (!acpi_ioapic) |
| 600 | setup_irq(2, &irq2); | 600 | setup_irq(2, &irq2); |
diff --git a/include/linux/timer.h b/include/linux/timer.h index 3340f3bd13..ddd5bbe1fc 100644 --- a/include/linux/timer.h +++ b/include/linux/timer.h | |||
| @@ -38,6 +38,15 @@ extern struct timer_base_s __init_timer_base; | |||
| 38 | 38 | ||
| 39 | void fastcall init_timer(struct timer_list * timer); | 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 | * timer_pending - is a timer pending? | 51 | * timer_pending - is a timer pending? |
| 43 | * @timer: the timer in question | 52 | * @timer: the timer in question |
diff --git a/kernel/timer.c b/kernel/timer.c index 6a2e5f8dc7..6ed1a826e5 100644 --- a/kernel/timer.c +++ b/kernel/timer.c | |||
| @@ -1146,12 +1146,8 @@ fastcall signed long __sched schedule_timeout(signed long timeout) | |||
| 1146 | 1146 | ||
| 1147 | expire = timeout + jiffies; | 1147 | expire = timeout + jiffies; |
| 1148 | 1148 | ||
| 1149 | init_timer(&timer); | 1149 | setup_timer(&timer, process_timeout, (unsigned long)current); |
| 1150 | timer.expires = expire; | 1150 | __mod_timer(&timer, expire); |
| 1151 | timer.data = (unsigned long) current; | ||
| 1152 | timer.function = process_timeout; | ||
| 1153 | |||
| 1154 | add_timer(&timer); | ||
| 1155 | schedule(); | 1151 | schedule(); |
| 1156 | del_singleshot_timer_sync(&timer); | 1152 | del_singleshot_timer_sync(&timer); |
| 1157 | 1153 | ||
