diff options
| author | Thomas Gleixner <tglx@linutronix.de> | 2011-02-01 13:52:07 +0000 | 
|---|---|---|
| committer | Thomas Gleixner <tglx@linutronix.de> | 2011-02-02 15:28:17 +0100 | 
| commit | 6761c6702e2c647582e1829abe8cf90794f61d9d (patch) | |
| tree | 10efe955348f5271fdf657b82d6ccd01c26dbe08 /kernel/posix-timers.c | |
| parent | a7319fa253a549c4c6528fb550ae6e72a9c83811 (diff) | |
| download | olio-linux-3.10-6761c6702e2c647582e1829abe8cf90794f61d9d.tar.xz olio-linux-3.10-6761c6702e2c647582e1829abe8cf90794f61d9d.zip  | |
posix-timers: Convert timer_delete() to clockid_to_kclock()
Set the common function for CLOCK_MONOTONIC and CLOCK_REALTIME kclocks
and use the new decoding function.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Acked-by: John Stultz <johnstul@us.ibm.com>
Tested-by: Richard Cochran <richard.cochran@omicron.at>
LKML-Reference: <20110201134419.198999420@linutronix.de>
Diffstat (limited to 'kernel/posix-timers.c')
| -rw-r--r-- | kernel/posix-timers.c | 10 | 
1 files changed, 8 insertions, 2 deletions
diff --git a/kernel/posix-timers.c b/kernel/posix-timers.c index c1e2636f9e4..ade7dec49f9 100644 --- a/kernel/posix-timers.c +++ b/kernel/posix-timers.c @@ -254,6 +254,7 @@ static __init int init_posix_timers(void)  		.timer_create	= common_timer_create,  		.timer_set	= common_timer_set,  		.timer_get	= common_timer_get, +		.timer_del	= common_timer_del,  	};  	struct k_clock clock_monotonic = {  		.clock_getres	= hrtimer_get_res, @@ -263,6 +264,7 @@ static __init int init_posix_timers(void)  		.timer_create	= common_timer_create,  		.timer_set	= common_timer_set,  		.timer_get	= common_timer_get, +		.timer_del	= common_timer_del,  	};  	struct k_clock clock_monotonic_raw = {  		.clock_getres	= hrtimer_get_res, @@ -859,7 +861,7 @@ retry:  	return error;  } -static inline int common_timer_del(struct k_itimer *timer) +static int common_timer_del(struct k_itimer *timer)  {  	timer->it.real.interval.tv64 = 0; @@ -870,7 +872,11 @@ static inline int common_timer_del(struct k_itimer *timer)  static inline int timer_delete_hook(struct k_itimer *timer)  { -	return CLOCK_DISPATCH(timer->it_clock, timer_del, (timer)); +	struct k_clock *kc = clockid_to_kclock(timer->it_clock); + +	if (WARN_ON_ONCE(!kc || !kc->timer_del)) +		return -EINVAL; +	return kc->timer_del(timer);  }  /* Delete a POSIX.1b interval timer. */  |