History

timer: add on-stack deferrable timer interfaces

In some cases (for instance with kernel threads) it may be desireable to use on-stack deferrable timers to get their power saving benefits. Add interfaces to support this for the IPS driver.

Jesse Barnes committed 16 years ago

Commit 8cadd281 parent 81f61482 files · +28 −0Browse files

Unified · Split

2 files
  1. include/linux/timer.h +15 −0
  2. kernel/timer.c +13 −0
include/linux/timer.h+15−0
@@ -100,6 +100,13 @@ void init_timer_deferrable_key(struct timer_list *timer, · 99 unmodified lines
100100 setup_timer_on_stack_key((timer), #timer, &__key, \
101101 (fn), (data)); \
102102 } while (0)
103+#define setup_deferrable_timer_on_stack(timer, fn, data) \
104+ do { \
105+ static struct lock_class_key __key; \
106+ setup_deferrable_timer_on_stack_key((timer), #timer, \
107+ &__key, (fn), \
108+ (data)); \
109+ } while (0)
103110 #else
104111 #define init_timer(timer)\
105112 init_timer_key((timer), NULL, NULL)
@@ -111,6 +118,8 @@ void init_timer_deferrable_key(struct timer_list *timer, · 5 unmodified lines
111118 setup_timer_key((timer), NULL, NULL, (fn), (data))
112119 #define setup_timer_on_stack(timer, fn, data)\
113120 setup_timer_on_stack_key((timer), NULL, NULL, (fn), (data))
121+#define setup_deferrable_timer_on_stack(timer, fn, data)\
122+ setup_deferrable_timer_on_stack_key((timer), NULL, NULL, (fn), (data))
114123 #endif
115124
116125 #ifdef CONFIG_DEBUG_OBJECTS_TIMERS
@@ -150,6 +159,12 @@ static inline void setup_timer_on_stack_key(struct timer_list *timer, · 33 unmodified lines
150159 init_timer_on_stack_key(timer, name, key);
151160 }
152161
162+extern void setup_deferrable_timer_on_stack_key(struct timer_list *timer,
163+ const char *name,
164+ struct lock_class_key *key,
165+ void (*function)(unsigned long),
166+ unsigned long data);
167+
153168 /**
154169 * timer_pending - is a timer pending?
155170 * @timer: the timer in question
kernel/timer.c+13−0
@@ -577,6 +577,19 @@ static void __init_timer(struct timer_list *timer, · 576 unmodified lines
577577 lockdep_init_map(&timer->lockdep_map, name, key, 0);
578578 }
579579
580+void setup_deferrable_timer_on_stack_key(struct timer_list *timer,
581+ const char *name,
582+ struct lock_class_key *key,
583+ void (*function)(unsigned long),
584+ unsigned long data)
585+{
586+ timer->function = function;
587+ timer->data = data;
588+ init_timer_on_stack_key(timer, name, key);
589+ timer_set_deferrable(timer);
590+}
591+EXPORT_SYMBOL_GPL(setup_deferrable_timer_on_stack_key);
592+
580593 /**
581594 * init_timer_key - initialize a timer
582595 * @timer: the timer to be initialized

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t