* whichever comes first. */ sched->lflags &= ~XNHDEFER; timer = container_of(h, struct xntimer, aplink); if (unlikely(timer == &sched->htimer)) { if (xnsched_resched_p(sched) || !xnthread_test_state(sched->curr, XNROOT)) { h = xntimerq_second(&tmd->q); if (h) { sched->lflags |= XNHDEFER; timer = container_of(h, struct xntimer, aplink); } } } delay = xntimerh_date(&timer->aplink) - xnclock_core_read_raw(); if (delay < 0) delay = 0; else if (delay > ULONG_MAX) delay = ULONG_MAX; xntrace_tick((unsigned)delay); ipipe_timer_set(delay); } #ifdef CONFIG_SMP void xnclock_core_remote_shot(struct xnsched *sched) { cpumask_t mask = cpumask_of_cpu(xnsched_cpu(sched)); ipipe_send_ipi(IPIPE_HRTIMER_IPI, mask);
*/ sched->lflags &= ~XNHDEFER; timer = container_of(h, struct xntimer, aplink); if (unlikely(timer == &sched->htimer)) { if (xnsched_resched_p(sched) || !xnthread_test_state(sched->curr, XNROOT)) { h = xntimerq_it_next(&tmd->q, &it, h); if (h) { sched->lflags |= XNHDEFER; timer = container_of(h, struct xntimer, aplink); } } } delay = xntimerh_date(&timer->aplink) - (xnclock_core_read_raw() + nkclock.gravity); if (delay < 0) delay = 0; else if (delay > ULONG_MAX) delay = ULONG_MAX; xntrace_tick((unsigned)delay); ipipe_timer_set(delay); } #ifdef CONFIG_SMP void xnclock_core_remote_shot(struct xnsched *sched) { cpumask_t mask = cpumask_of_cpu(xnsched_cpu(sched));