Lines Matching full:timer

3  *    Virtual cpu timer based timer functions.
39 u64 timer; in set_vtimer() local
42 " stpt %0\n" /* Store current cpu timer value */ in set_vtimer()
44 : "=Q" (timer) : "Q" (expires)); in set_vtimer()
45 lc->system_timer += lc->last_update_timer - timer; in set_vtimer()
119 u64 timer, clock, user, guest, system, hardirq, softirq; in do_account_vtime() local
122 timer = lc->last_update_timer; in do_account_vtime()
125 " stpt %0\n" /* Store current cpu timer value */ in do_account_vtime()
131 timer -= lc->last_update_timer; in do_account_vtime()
134 lc->hardirq_timer += timer; in do_account_vtime()
136 lc->system_timer += timer; in do_account_vtime()
214 u64 timer = lc->last_update_timer; in vtime_delta() local
217 return timer - lc->last_update_timer; in vtime_delta()
246 static void list_add_sorted(struct vtimer_list *timer, struct list_head *head) in list_add_sorted() argument
251 if (tmp->expires > timer->expires) { in list_add_sorted()
252 list_add_tail(&timer->entry, &tmp->entry); in list_add_sorted()
256 list_add_tail(&timer->entry, head); in list_add_sorted()
260 * Handler for expired virtual CPU timer.
264 struct vtimer_list *timer, *tmp; in virt_timer_expire() local
268 /* walk timer list, fire all expired timers */ in virt_timer_expire()
271 list_for_each_entry_safe(timer, tmp, &virt_timer_list, entry) { in virt_timer_expire()
272 if (timer->expires < elapsed) in virt_timer_expire()
273 /* move expired timer to the callback queue */ in virt_timer_expire()
274 list_move_tail(&timer->entry, &cb_list); in virt_timer_expire()
276 timer->expires -= elapsed; in virt_timer_expire()
279 timer = list_first_entry(&virt_timer_list, in virt_timer_expire()
281 atomic64_set(&virt_timer_current, timer->expires); in virt_timer_expire()
287 list_for_each_entry_safe(timer, tmp, &cb_list, entry) { in virt_timer_expire()
288 list_del_init(&timer->entry); in virt_timer_expire()
289 timer->function(timer->data); in virt_timer_expire()
290 if (timer->interval) { in virt_timer_expire()
291 /* Recharge interval timer */ in virt_timer_expire()
292 timer->expires = timer->interval + in virt_timer_expire()
295 list_add_sorted(timer, &virt_timer_list); in virt_timer_expire()
301 void init_virt_timer(struct vtimer_list *timer) in init_virt_timer() argument
303 timer->function = NULL; in init_virt_timer()
304 INIT_LIST_HEAD(&timer->entry); in init_virt_timer()
308 static inline int vtimer_pending(struct vtimer_list *timer) in vtimer_pending() argument
310 return !list_empty(&timer->entry); in vtimer_pending()
313 static void internal_add_vtimer(struct vtimer_list *timer) in internal_add_vtimer() argument
316 /* First timer, just program it. */ in internal_add_vtimer()
317 atomic64_set(&virt_timer_current, timer->expires); in internal_add_vtimer()
319 list_add(&timer->entry, &virt_timer_list); in internal_add_vtimer()
321 /* Update timer against current base. */ in internal_add_vtimer()
322 timer->expires += atomic64_read(&virt_timer_elapsed); in internal_add_vtimer()
323 if (likely((s64) timer->expires < in internal_add_vtimer()
325 /* The new timer expires before the current timer. */ in internal_add_vtimer()
326 atomic64_set(&virt_timer_current, timer->expires); in internal_add_vtimer()
327 /* Insert new timer into the list. */ in internal_add_vtimer()
328 list_add_sorted(timer, &virt_timer_list); in internal_add_vtimer()
332 static void __add_vtimer(struct vtimer_list *timer, int periodic) in __add_vtimer() argument
336 timer->interval = periodic ? timer->expires : 0; in __add_vtimer()
338 internal_add_vtimer(timer); in __add_vtimer()
343 * add_virt_timer - add a oneshot virtual CPU timer
345 void add_virt_timer(struct vtimer_list *timer) in add_virt_timer() argument
347 __add_vtimer(timer, 0); in add_virt_timer()
352 * add_virt_timer_int - add an interval virtual CPU timer
354 void add_virt_timer_periodic(struct vtimer_list *timer) in add_virt_timer_periodic() argument
356 __add_vtimer(timer, 1); in add_virt_timer_periodic()
360 static int __mod_vtimer(struct vtimer_list *timer, u64 expires, int periodic) in __mod_vtimer() argument
365 BUG_ON(!timer->function); in __mod_vtimer()
367 if (timer->expires == expires && vtimer_pending(timer)) in __mod_vtimer()
370 rc = vtimer_pending(timer); in __mod_vtimer()
372 list_del_init(&timer->entry); in __mod_vtimer()
373 timer->interval = periodic ? expires : 0; in __mod_vtimer()
374 timer->expires = expires; in __mod_vtimer()
375 internal_add_vtimer(timer); in __mod_vtimer()
381 * returns whether it has modified a pending timer (1) or not (0)
383 int mod_virt_timer(struct vtimer_list *timer, u64 expires) in mod_virt_timer() argument
385 return __mod_vtimer(timer, expires, 0); in mod_virt_timer()
390 * returns whether it has modified a pending timer (1) or not (0)
392 int mod_virt_timer_periodic(struct vtimer_list *timer, u64 expires) in mod_virt_timer_periodic() argument
394 return __mod_vtimer(timer, expires, 1); in mod_virt_timer_periodic()
399 * Delete a virtual timer.
401 * returns whether the deleted timer was pending (1) or not (0)
403 int del_virt_timer(struct vtimer_list *timer) in del_virt_timer() argument
407 if (!vtimer_pending(timer)) in del_virt_timer()
410 list_del_init(&timer->entry); in del_virt_timer()
417 * Start the virtual CPU timer on the current CPU.
421 /* set initial cpu timer */ in vtime_init()