Lines Matching refs:timer

3  *    Virtual cpu timer based timer functions.
39 u64 timer;
42 " stpt %0\n" /* Store current cpu timer value */
44 : "=Q" (timer) : "Q" (expires));
45 lc->system_timer += lc->last_update_timer - timer;
120 u64 timer, clock, user, guest, system, hardirq, softirq;
123 timer = lc->last_update_timer;
126 " stpt %0\n" /* Store current cpu timer value */
132 timer -= lc->last_update_timer;
135 lc->hardirq_timer += timer;
137 lc->system_timer += timer;
222 u64 timer = lc->last_update_timer;
225 return timer - lc->last_update_timer;
268 static void list_add_sorted(struct vtimer_list *timer, struct list_head *head)
273 if (tmp->expires > timer->expires) {
274 list_add_tail(&timer->entry, &tmp->entry);
278 list_add_tail(&timer->entry, head);
282 * Handler for expired virtual CPU timer.
286 struct vtimer_list *timer, *tmp;
290 /* walk timer list, fire all expired timers */
293 list_for_each_entry_safe(timer, tmp, &virt_timer_list, entry) {
294 if (timer->expires < elapsed)
295 /* move expired timer to the callback queue */
296 list_move_tail(&timer->entry, &cb_list);
298 timer->expires -= elapsed;
301 timer = list_first_entry(&virt_timer_list,
303 atomic64_set(&virt_timer_current, timer->expires);
309 list_for_each_entry_safe(timer, tmp, &cb_list, entry) {
310 list_del_init(&timer->entry);
311 timer->function(timer->data);
312 if (timer->interval) {
313 /* Recharge interval timer */
314 timer->expires = timer->interval +
317 list_add_sorted(timer, &virt_timer_list);
323 void init_virt_timer(struct vtimer_list *timer)
325 timer->function = NULL;
326 INIT_LIST_HEAD(&timer->entry);
330 static inline int vtimer_pending(struct vtimer_list *timer)
332 return !list_empty(&timer->entry);
335 static void internal_add_vtimer(struct vtimer_list *timer)
338 /* First timer, just program it. */
339 atomic64_set(&virt_timer_current, timer->expires);
341 list_add(&timer->entry, &virt_timer_list);
343 /* Update timer against current base. */
344 timer->expires += atomic64_read(&virt_timer_elapsed);
345 if (likely((s64) timer->expires <
347 /* The new timer expires before the current timer. */
348 atomic64_set(&virt_timer_current, timer->expires);
349 /* Insert new timer into the list. */
350 list_add_sorted(timer, &virt_timer_list);
354 static void __add_vtimer(struct vtimer_list *timer, int periodic)
358 timer->interval = periodic ? timer->expires : 0;
360 internal_add_vtimer(timer);
365 * add_virt_timer - add a oneshot virtual CPU timer
367 void add_virt_timer(struct vtimer_list *timer)
369 __add_vtimer(timer, 0);
374 * add_virt_timer_int - add an interval virtual CPU timer
376 void add_virt_timer_periodic(struct vtimer_list *timer)
378 __add_vtimer(timer, 1);
382 static int __mod_vtimer(struct vtimer_list *timer, u64 expires, int periodic)
387 BUG_ON(!timer->function);
389 if (timer->expires == expires && vtimer_pending(timer))
392 rc = vtimer_pending(timer);
394 list_del_init(&timer->entry);
395 timer->interval = periodic ? expires : 0;
396 timer->expires = expires;
397 internal_add_vtimer(timer);
403 * returns whether it has modified a pending timer (1) or not (0)
405 int mod_virt_timer(struct vtimer_list *timer, u64 expires)
407 return __mod_vtimer(timer, expires, 0);
412 * returns whether it has modified a pending timer (1) or not (0)
414 int mod_virt_timer_periodic(struct vtimer_list *timer, u64 expires)
416 return __mod_vtimer(timer, expires, 1);
421 * Delete a virtual timer.
423 * returns whether the deleted timer was pending (1) or not (0)
425 int del_virt_timer(struct vtimer_list *timer)
429 if (!vtimer_pending(timer))
432 list_del_init(&timer->entry);
439 * Start the virtual CPU timer on the current CPU.
443 /* set initial cpu timer */