htimer的使用与处理流程

1 注册

hrtimer->function = xxx_timer_fn;
hrtimer_start(hrtimer, ns_to_ktime(sample_period), HRTIMER_MODE_REL_PINNED);


2 时钟中断

void run_local_timers(void)
{
        struct tvec_base *base = __this_cpu_read(tvec_bases);

        hrtimer_run_queues();  //如果hrtimer->irqsafe != 0则在这个里面处理htimer->func()
                    //例如softlockup watchdog()就是这种情况
                    //否则就在HRTIMER_SOFTIRQ中处理
    ......
        raise_softirq(TIMER_SOFTIRQ);
     ......
}


3 软中断

static void run_hrtimer_softirq(struct softirq_action *h)
{
        hrtimer_rt_run_pending();
}

 

你可能感兴趣的:(linux内核)