diff options
Diffstat (limited to 'include')
-rw-r--r-- | include/linux/hrtimer.h | 31 |
1 files changed, 30 insertions, 1 deletions
diff --git a/include/linux/hrtimer.h b/include/linux/hrtimer.h index 485a634fd6e2..28259c336679 100644 --- a/include/linux/hrtimer.h +++ b/include/linux/hrtimer.h | |||
@@ -112,6 +112,7 @@ enum hrtimer_cb_mode { | |||
112 | struct hrtimer { | 112 | struct hrtimer { |
113 | struct rb_node node; | 113 | struct rb_node node; |
114 | ktime_t _expires; | 114 | ktime_t _expires; |
115 | ktime_t _softexpires; | ||
115 | enum hrtimer_restart (*function)(struct hrtimer *); | 116 | enum hrtimer_restart (*function)(struct hrtimer *); |
116 | struct hrtimer_clock_base *base; | 117 | struct hrtimer_clock_base *base; |
117 | unsigned long state; | 118 | unsigned long state; |
@@ -220,20 +221,37 @@ static inline int hrtimer_is_hres_active(struct hrtimer *timer) | |||
220 | static inline void hrtimer_set_expires(struct hrtimer *timer, ktime_t time) | 221 | static inline void hrtimer_set_expires(struct hrtimer *timer, ktime_t time) |
221 | { | 222 | { |
222 | timer->_expires = time; | 223 | timer->_expires = time; |
224 | timer->_softexpires = time; | ||
223 | } | 225 | } |
226 | |||
227 | static inline void hrtimer_set_expires_range(struct hrtimer *timer, ktime_t time, ktime_t delta) | ||
228 | { | ||
229 | timer->_softexpires = time; | ||
230 | timer->_expires = ktime_add_safe(time, delta); | ||
231 | } | ||
232 | |||
233 | static inline void hrtimer_set_expires_range_ns(struct hrtimer *timer, ktime_t time, unsigned long delta) | ||
234 | { | ||
235 | timer->_softexpires = time; | ||
236 | timer->_expires = ktime_add_safe(time, ns_to_ktime(delta)); | ||
237 | } | ||
238 | |||
224 | static inline void hrtimer_set_expires_tv64(struct hrtimer *timer, s64 tv64) | 239 | static inline void hrtimer_set_expires_tv64(struct hrtimer *timer, s64 tv64) |
225 | { | 240 | { |
226 | timer->_expires.tv64 = tv64; | 241 | timer->_expires.tv64 = tv64; |
242 | timer->_softexpires.tv64 = tv64; | ||
227 | } | 243 | } |
228 | 244 | ||
229 | static inline void hrtimer_add_expires(struct hrtimer *timer, ktime_t time) | 245 | static inline void hrtimer_add_expires(struct hrtimer *timer, ktime_t time) |
230 | { | 246 | { |
231 | timer->_expires = ktime_add_safe(timer->_expires, time); | 247 | timer->_expires = ktime_add_safe(timer->_expires, time); |
248 | timer->_softexpires = ktime_add_safe(timer->_softexpires, time); | ||
232 | } | 249 | } |
233 | 250 | ||
234 | static inline void hrtimer_add_expires_ns(struct hrtimer *timer, unsigned long ns) | 251 | static inline void hrtimer_add_expires_ns(struct hrtimer *timer, unsigned long ns) |
235 | { | 252 | { |
236 | timer->_expires = ktime_add_ns(timer->_expires, ns); | 253 | timer->_expires = ktime_add_ns(timer->_expires, ns); |
254 | timer->_softexpires = ktime_add_ns(timer->_softexpires, ns); | ||
237 | } | 255 | } |
238 | 256 | ||
239 | static inline ktime_t hrtimer_get_expires(const struct hrtimer *timer) | 257 | static inline ktime_t hrtimer_get_expires(const struct hrtimer *timer) |
@@ -241,10 +259,19 @@ static inline ktime_t hrtimer_get_expires(const struct hrtimer *timer) | |||
241 | return timer->_expires; | 259 | return timer->_expires; |
242 | } | 260 | } |
243 | 261 | ||
262 | static inline ktime_t hrtimer_get_softexpires(const struct hrtimer *timer) | ||
263 | { | ||
264 | return timer->_softexpires; | ||
265 | } | ||
266 | |||
244 | static inline s64 hrtimer_get_expires_tv64(const struct hrtimer *timer) | 267 | static inline s64 hrtimer_get_expires_tv64(const struct hrtimer *timer) |
245 | { | 268 | { |
246 | return timer->_expires.tv64; | 269 | return timer->_expires.tv64; |
247 | } | 270 | } |
271 | static inline s64 hrtimer_get_softexpires_tv64(const struct hrtimer *timer) | ||
272 | { | ||
273 | return timer->_softexpires.tv64; | ||
274 | } | ||
248 | 275 | ||
249 | static inline s64 hrtimer_get_expires_ns(const struct hrtimer *timer) | 276 | static inline s64 hrtimer_get_expires_ns(const struct hrtimer *timer) |
250 | { | 277 | { |
@@ -334,7 +361,7 @@ static inline int hrtimer_start_expires(struct hrtimer *timer, | |||
334 | 361 | ||
335 | static inline int hrtimer_restart(struct hrtimer *timer) | 362 | static inline int hrtimer_restart(struct hrtimer *timer) |
336 | { | 363 | { |
337 | return hrtimer_start(timer, timer->_expires, HRTIMER_MODE_ABS); | 364 | return hrtimer_start_expires(timer, HRTIMER_MODE_ABS); |
338 | } | 365 | } |
339 | 366 | ||
340 | /* Query timers: */ | 367 | /* Query timers: */ |
@@ -391,6 +418,8 @@ extern long hrtimer_nanosleep_restart(struct restart_block *restart_block); | |||
391 | extern void hrtimer_init_sleeper(struct hrtimer_sleeper *sl, | 418 | extern void hrtimer_init_sleeper(struct hrtimer_sleeper *sl, |
392 | struct task_struct *tsk); | 419 | struct task_struct *tsk); |
393 | 420 | ||
421 | extern int schedule_hrtimeout_range(ktime_t *expires, unsigned long delta, | ||
422 | const enum hrtimer_mode mode); | ||
394 | extern int schedule_hrtimeout(ktime_t *expires, const enum hrtimer_mode mode); | 423 | extern int schedule_hrtimeout(ktime_t *expires, const enum hrtimer_mode mode); |
395 | 424 | ||
396 | /* Soft interrupt function to run the hrtimer queues: */ | 425 | /* Soft interrupt function to run the hrtimer queues: */ |