Lines Matching +full:soft +full:- +full:start

1 // SPDX-License-Identifier: GPL-2.0
3 * hrtimers - High-resolution kernel timers
19 #include <linux/percpu-defs.h>
26 * HRTIMER_MODE_ABS - Time value is absolute
27 * HRTIMER_MODE_REL - Time value is relative to now
28 * HRTIMER_MODE_PINNED - Timer is bound to CPU (is only considered
30 * HRTIMER_MODE_SOFT - Timer callback function will be executed in
31 * soft irq context
32 * HRTIMER_MODE_HARD - Timer callback function will be executed in
66 * The callback state is not part of the timer->state because clearing it would
72 * timer->base->cpu_base->running == timer
80 * All state transitions are protected by cpu_base->lock.
86 * struct hrtimer_sleeper - simple sleeper structure
99 timer->node.expires = time; in hrtimer_set_expires()
100 timer->_softexpires = time; in hrtimer_set_expires()
105 timer->_softexpires = time; in hrtimer_set_expires_range()
106 timer->node.expires = ktime_add_safe(time, delta); in hrtimer_set_expires_range()
111 timer->_softexpires = time; in hrtimer_set_expires_range_ns()
112 timer->node.expires = ktime_add_safe(time, ns_to_ktime(delta)); in hrtimer_set_expires_range_ns()
117 timer->node.expires = tv64; in hrtimer_set_expires_tv64()
118 timer->_softexpires = tv64; in hrtimer_set_expires_tv64()
123 timer->node.expires = ktime_add_safe(timer->node.expires, time); in hrtimer_add_expires()
124 timer->_softexpires = ktime_add_safe(timer->_softexpires, time); in hrtimer_add_expires()
129 timer->node.expires = ktime_add_ns(timer->node.expires, ns); in hrtimer_add_expires_ns()
130 timer->_softexpires = ktime_add_ns(timer->_softexpires, ns); in hrtimer_add_expires_ns()
135 return timer->node.expires; in hrtimer_get_expires()
140 return timer->_softexpires; in hrtimer_get_softexpires()
145 return timer->node.expires; in hrtimer_get_expires_tv64()
149 return timer->_softexpires; in hrtimer_get_softexpires_tv64()
154 return ktime_to_ns(timer->node.expires); in hrtimer_get_expires_ns()
161 return ktime_sub(timer->node.expires, hrtimer_cb_get_time(timer)); in hrtimer_expires_remaining()
167 timer->base->cpu_base->hres_active : 0; in hrtimer_is_hres_active()
186 ktime_t rem = ktime_sub(timer->node.expires, now); in __hrtimer_expires_remaining_adjusted()
192 if (IS_ENABLED(CONFIG_TIME_LOW_RES) && timer->is_rel) in __hrtimer_expires_remaining_adjusted()
193 rem -= hrtimer_resolution; in __hrtimer_expires_remaining_adjusted()
249 * hrtimer_start - (re)start an hrtimer
269 ktime_t soft, hard; in hrtimer_start_expires() local
270 soft = hrtimer_get_softexpires(timer); in hrtimer_start_expires()
272 delta = ktime_to_ns(ktime_sub(hard, soft)); in hrtimer_start_expires()
273 hrtimer_start_range_ns(timer, soft, delta, mode); in hrtimer_start_expires()
288 * hrtimer_get_remaining - get remaining time for the timer
302 * hrtimer_is_queued - check, whether the timer is on one of the queues
311 /* The READ_ONCE pairs with the update functions of timer->state */ in hrtimer_is_queued()
312 return !!(READ_ONCE(timer->state) & HRTIMER_STATE_ENQUEUED); in hrtimer_is_queued()
321 return timer->base->running == timer; in hrtimer_callback_running()
325 * hrtimer_update_function - Update the timer's callback function
336 guard(raw_spinlock_irqsave)(&timer->base->cpu_base->lock); in hrtimer_update_function()
352 * hrtimer_forward_now() - forward the timer expiry so it expires after now
379 /* Soft interrupt function to run the hrtimer queues: */