diff options
Diffstat (limited to 'include/linux/timer.h')
| -rw-r--r-- | include/linux/timer.h | 40 | 
1 files changed, 30 insertions, 10 deletions
| diff --git a/include/linux/timer.h b/include/linux/timer.h index 20ac746f3eb3..51d601f192d4 100644 --- a/include/linux/timer.h +++ b/include/linux/timer.h @@ -19,7 +19,6 @@ struct timer_list {  	void			(*function)(unsigned long);  	unsigned long		data;  	u32			flags; -	int			slack;  #ifdef CONFIG_TIMER_STATS  	int			start_pid; @@ -58,11 +57,14 @@ struct timer_list {   * workqueue locking issues. It's not meant for executing random crap   * with interrupts disabled. Abuse is monitored!   */ -#define TIMER_CPUMASK		0x0007FFFF -#define TIMER_MIGRATING		0x00080000 +#define TIMER_CPUMASK		0x0003FFFF +#define TIMER_MIGRATING		0x00040000  #define TIMER_BASEMASK		(TIMER_CPUMASK | TIMER_MIGRATING) -#define TIMER_DEFERRABLE	0x00100000 +#define TIMER_DEFERRABLE	0x00080000 +#define TIMER_PINNED		0x00100000  #define TIMER_IRQSAFE		0x00200000 +#define TIMER_ARRAYSHIFT	22 +#define TIMER_ARRAYMASK		0xFFC00000  #define __TIMER_INITIALIZER(_function, _expires, _data, _flags) { \  		.entry = { .next = TIMER_ENTRY_STATIC },	\ @@ -70,7 +72,6 @@ struct timer_list {  		.expires = (_expires),				\  		.data = (_data),				\  		.flags = (_flags),				\ -		.slack = -1,					\  		__TIMER_LOCKDEP_MAP_INITIALIZER(		\  			__FILE__ ":" __stringify(__LINE__))	\  	} @@ -78,9 +79,15 @@ struct timer_list {  #define TIMER_INITIALIZER(_function, _expires, _data)		\  	__TIMER_INITIALIZER((_function), (_expires), (_data), 0) +#define TIMER_PINNED_INITIALIZER(_function, _expires, _data)	\ +	__TIMER_INITIALIZER((_function), (_expires), (_data), TIMER_PINNED) +  #define TIMER_DEFERRED_INITIALIZER(_function, _expires, _data)	\  	__TIMER_INITIALIZER((_function), (_expires), (_data), TIMER_DEFERRABLE) +#define TIMER_PINNED_DEFERRED_INITIALIZER(_function, _expires, _data)	\ +	__TIMER_INITIALIZER((_function), (_expires), (_data), TIMER_DEFERRABLE | TIMER_PINNED) +  #define DEFINE_TIMER(_name, _function, _expires, _data)		\  	struct timer_list _name =				\  		TIMER_INITIALIZER(_function, _expires, _data) @@ -124,8 +131,12 @@ static inline void init_timer_on_stack_key(struct timer_list *timer,  #define init_timer(timer)						\  	__init_timer((timer), 0) +#define init_timer_pinned(timer)					\ +	__init_timer((timer), TIMER_PINNED)  #define init_timer_deferrable(timer)					\  	__init_timer((timer), TIMER_DEFERRABLE) +#define init_timer_pinned_deferrable(timer)				\ +	__init_timer((timer), TIMER_DEFERRABLE | TIMER_PINNED)  #define init_timer_on_stack(timer)					\  	__init_timer_on_stack((timer), 0) @@ -145,12 +156,20 @@ static inline void init_timer_on_stack_key(struct timer_list *timer,  #define setup_timer(timer, fn, data)					\  	__setup_timer((timer), (fn), (data), 0) +#define setup_pinned_timer(timer, fn, data)				\ +	__setup_timer((timer), (fn), (data), TIMER_PINNED)  #define setup_deferrable_timer(timer, fn, data)				\  	__setup_timer((timer), (fn), (data), TIMER_DEFERRABLE) +#define setup_pinned_deferrable_timer(timer, fn, data)			\ +	__setup_timer((timer), (fn), (data), TIMER_DEFERRABLE | TIMER_PINNED)  #define setup_timer_on_stack(timer, fn, data)				\  	__setup_timer_on_stack((timer), (fn), (data), 0) +#define setup_pinned_timer_on_stack(timer, fn, data)			\ +	__setup_timer_on_stack((timer), (fn), (data), TIMER_PINNED)  #define setup_deferrable_timer_on_stack(timer, fn, data)		\  	__setup_timer_on_stack((timer), (fn), (data), TIMER_DEFERRABLE) +#define setup_pinned_deferrable_timer_on_stack(timer, fn, data)		\ +	__setup_timer_on_stack((timer), (fn), (data), TIMER_DEFERRABLE | TIMER_PINNED)  /**   * timer_pending - is a timer pending? @@ -171,12 +190,7 @@ extern void add_timer_on(struct timer_list *timer, int cpu);  extern int del_timer(struct timer_list * timer);  extern int mod_timer(struct timer_list *timer, unsigned long expires);  extern int mod_timer_pending(struct timer_list *timer, unsigned long expires); -extern int mod_timer_pinned(struct timer_list *timer, unsigned long expires); - -extern void set_timer_slack(struct timer_list *time, int slack_hz); -#define TIMER_NOT_PINNED	0 -#define TIMER_PINNED		1  /*   * The jiffies value which is added to now, when there is no timer   * in the timer wheel: @@ -259,4 +273,10 @@ unsigned long __round_jiffies_up_relative(unsigned long j, int cpu);  unsigned long round_jiffies_up(unsigned long j);  unsigned long round_jiffies_up_relative(unsigned long j); +#ifdef CONFIG_HOTPLUG_CPU +int timers_dead_cpu(unsigned int cpu); +#else +#define timers_dead_cpu NULL +#endif +  #endif |