Skip to content

Commit

Permalink
[PATCH] introduce setup_timer() helper
Browse files Browse the repository at this point in the history
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.

Signed-off-by: Oleg Nesterov <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
  • Loading branch information
Oleg Nesterov authored and Linus Torvalds committed Oct 31, 2005
1 parent 9e4e23b commit a8db2db
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 10 deletions.
8 changes: 4 additions & 4 deletions arch/x86_64/kernel/i8259.c
Original file line number Diff line number Diff line change
Expand Up @@ -494,7 +494,7 @@ void invalidate_interrupt7(void);
void thermal_interrupt(void);
void i8254_timer_resume(void);

static void setup_timer(void)
static void setup_timer_hardware(void)
{
outb_p(0x34,0x43); /* binary, mode 2, LSB/MSB, ch 0 */
udelay(10);
Expand All @@ -505,13 +505,13 @@ static void setup_timer(void)

static int timer_resume(struct sys_device *dev)
{
setup_timer();
setup_timer_hardware();
return 0;
}

void i8254_timer_resume(void)
{
setup_timer();
setup_timer_hardware();
}

static struct sysdev_class timer_sysclass = {
Expand Down Expand Up @@ -594,7 +594,7 @@ void __init init_IRQ(void)
* Set the clock to HZ Hz, we already have a valid
* vector now:
*/
setup_timer();
setup_timer_hardware();

if (!acpi_ioapic)
setup_irq(2, &irq2);
Expand Down
9 changes: 9 additions & 0 deletions include/linux/timer.h
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,15 @@ extern struct timer_base_s __init_timer_base;

void fastcall init_timer(struct timer_list * timer);

static inline void setup_timer(struct timer_list * timer,
void (*function)(unsigned long),
unsigned long data)
{
timer->function = function;
timer->data = data;
init_timer(timer);
}

/***
* timer_pending - is a timer pending?
* @timer: the timer in question
Expand Down
8 changes: 2 additions & 6 deletions kernel/timer.c
Original file line number Diff line number Diff line change
Expand Up @@ -1146,12 +1146,8 @@ fastcall signed long __sched schedule_timeout(signed long timeout)

expire = timeout + jiffies;

init_timer(&timer);
timer.expires = expire;
timer.data = (unsigned long) current;
timer.function = process_timeout;

add_timer(&timer);
setup_timer(&timer, process_timeout, (unsigned long)current);
__mod_timer(&timer, expire);
schedule();
del_singleshot_timer_sync(&timer);

Expand Down

0 comments on commit a8db2db

Please sign in to comment.