mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-22 06:32:08 +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
2 changed files with 31 additions and 4 deletions
|
@ -350,13 +350,20 @@ static inline void destroy_hrtimer_on_stack(struct hrtimer *timer) { }
|
||||||
/* Basic timer operations: */
|
/* Basic timer operations: */
|
||||||
extern int hrtimer_start(struct hrtimer *timer, ktime_t tim,
|
extern int hrtimer_start(struct hrtimer *timer, ktime_t tim,
|
||||||
const enum hrtimer_mode mode);
|
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_cancel(struct hrtimer *timer);
|
||||||
extern int hrtimer_try_to_cancel(struct hrtimer *timer);
|
extern int hrtimer_try_to_cancel(struct hrtimer *timer);
|
||||||
|
|
||||||
static inline int hrtimer_start_expires(struct hrtimer *timer,
|
static inline int hrtimer_start_expires(struct hrtimer *timer,
|
||||||
enum hrtimer_mode mode)
|
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)
|
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
|
* @timer: the timer to be added
|
||||||
* @tim: expiry time
|
* @tim: expiry time
|
||||||
|
* @delta_ns: "slack" range for the timer
|
||||||
* @mode: expiry mode: absolute (HRTIMER_ABS) or relative (HRTIMER_REL)
|
* @mode: expiry mode: absolute (HRTIMER_ABS) or relative (HRTIMER_REL)
|
||||||
*
|
*
|
||||||
* Returns:
|
* Returns:
|
||||||
|
@ -955,7 +956,8 @@ remove_hrtimer(struct hrtimer *timer, struct hrtimer_clock_base *base)
|
||||||
* 1 when the timer was active
|
* 1 when the timer was active
|
||||||
*/
|
*/
|
||||||
int
|
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;
|
struct hrtimer_clock_base *base, *new_base;
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
|
@ -983,7 +985,7 @@ hrtimer_start(struct hrtimer *timer, ktime_t tim, const enum hrtimer_mode mode)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
hrtimer_set_expires(timer, tim);
|
hrtimer_set_expires_range_ns(timer, tim, delta_ns);
|
||||||
|
|
||||||
timer_stats_hrtimer_set_start_info(timer);
|
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;
|
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);
|
EXPORT_SYMBOL_GPL(hrtimer_start);
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* hrtimer_try_to_cancel - try to deactivate a timer
|
* hrtimer_try_to_cancel - try to deactivate a timer
|
||||||
* @timer: hrtimer to stop
|
* @timer: hrtimer to stop
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue