mirror of
https://github.com/torvalds/linux.git
synced 2024-11-23 12:42:02 +00:00
hrtimer: add a hrtimer_start_range() function
this patch adds a _range version of hrtimer_start() so that range timers can be created; the hrtimer_start() function is just a wrapper around this. In addition, hrtimer_start_expires() will now preserve existing ranges. Signed-off-by: Arjan van de Ven <arjan@linux.intel.com>
This commit is contained in:
parent
2ec02270c0
commit
da8f2e170e
@ -350,13 +350,20 @@ static inline void destroy_hrtimer_on_stack(struct hrtimer *timer) { }
|
||||
/* Basic timer operations: */
|
||||
extern int hrtimer_start(struct hrtimer *timer, ktime_t tim,
|
||||
const enum hrtimer_mode mode);
|
||||
extern int hrtimer_start_range_ns(struct hrtimer *timer, ktime_t tim,
|
||||
unsigned long range_ns, const enum hrtimer_mode mode);
|
||||
extern int hrtimer_cancel(struct hrtimer *timer);
|
||||
extern int hrtimer_try_to_cancel(struct hrtimer *timer);
|
||||
|
||||
static inline int hrtimer_start_expires(struct hrtimer *timer,
|
||||
enum hrtimer_mode mode)
|
||||
{
|
||||
return hrtimer_start(timer, hrtimer_get_expires(timer), mode);
|
||||
unsigned long delta;
|
||||
ktime_t soft, hard;
|
||||
soft = hrtimer_get_softexpires(timer);
|
||||
hard = hrtimer_get_expires(timer);
|
||||
delta = ktime_to_ns(ktime_sub(hard, soft));
|
||||
return hrtimer_start_range_ns(timer, hrtimer_get_expires(timer), delta, mode);
|
||||
}
|
||||
|
||||
static inline int hrtimer_restart(struct hrtimer *timer)
|
||||
|
@ -945,9 +945,10 @@ remove_hrtimer(struct hrtimer *timer, struct hrtimer_clock_base *base)
|
||||
}
|
||||
|
||||
/**
|
||||
* hrtimer_start - (re)start an relative timer on the current CPU
|
||||
* hrtimer_start_range_ns - (re)start an relative timer on the current CPU
|
||||
* @timer: the timer to be added
|
||||
* @tim: expiry time
|
||||
* @delta_ns: "slack" range for the timer
|
||||
* @mode: expiry mode: absolute (HRTIMER_ABS) or relative (HRTIMER_REL)
|
||||
*
|
||||
* Returns:
|
||||
@ -955,7 +956,8 @@ remove_hrtimer(struct hrtimer *timer, struct hrtimer_clock_base *base)
|
||||
* 1 when the timer was active
|
||||
*/
|
||||
int
|
||||
hrtimer_start(struct hrtimer *timer, ktime_t tim, const enum hrtimer_mode mode)
|
||||
hrtimer_start_range_ns(struct hrtimer *timer, ktime_t tim, unsigned long delta_ns,
|
||||
const enum hrtimer_mode mode)
|
||||
{
|
||||
struct hrtimer_clock_base *base, *new_base;
|
||||
unsigned long flags;
|
||||
@ -983,7 +985,7 @@ hrtimer_start(struct hrtimer *timer, ktime_t tim, const enum hrtimer_mode mode)
|
||||
#endif
|
||||
}
|
||||
|
||||
hrtimer_set_expires(timer, tim);
|
||||
hrtimer_set_expires_range_ns(timer, tim, delta_ns);
|
||||
|
||||
timer_stats_hrtimer_set_start_info(timer);
|
||||
|
||||
@ -1016,8 +1018,26 @@ hrtimer_start(struct hrtimer *timer, ktime_t tim, const enum hrtimer_mode mode)
|
||||
|
||||
return ret;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(hrtimer_start_range_ns);
|
||||
|
||||
/**
|
||||
* hrtimer_start - (re)start an relative timer on the current CPU
|
||||
* @timer: the timer to be added
|
||||
* @tim: expiry time
|
||||
* @mode: expiry mode: absolute (HRTIMER_ABS) or relative (HRTIMER_REL)
|
||||
*
|
||||
* Returns:
|
||||
* 0 on success
|
||||
* 1 when the timer was active
|
||||
*/
|
||||
int
|
||||
hrtimer_start(struct hrtimer *timer, ktime_t tim, const enum hrtimer_mode mode)
|
||||
{
|
||||
return hrtimer_start_range_ns(timer, tim, 0, mode);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(hrtimer_start);
|
||||
|
||||
|
||||
/**
|
||||
* hrtimer_try_to_cancel - try to deactivate a timer
|
||||
* @timer: hrtimer to stop
|
||||
|
Loading…
Reference in New Issue
Block a user