tick_init();

/**
 * tick_init - initialize the tick control
 *
 * Register the notifier with the clockevents framework
 */
void __init tick_init(void)
{
	clockevents_register_notifier(&tick_notifier);//这里用到了通知链技术,可以参考博文“内核通知链机制的原理及实现”
}


static struct notifier_block tick_notifier = {
    .notifier_call = tick_notify,
};



/**
 * clockevents_register_notifier - register a clock events change listener
 */
int clockevents_register_notifier(struct notifier_block *nb)    
{
    unsigned long flags;
    int ret;

    raw_spin_lock_irqsave(&clockevents_lock, flags);            //get the spin lock 
    ret = raw_notifier_chain_register(&clockevents_chain, nb);    //register
    raw_spin_unlock_irqrestore(&clockevents_lock, flags);        //unlock

    return ret;
}


/*
 *    Raw notifier chain routines.  There is no protection;
 *    the caller must provide it.  Use at your own risk!
 */

/**
 *    raw_notifier_chain_register - Add notifier to a raw notifier chain
 *    @nh: Pointer to head of the raw notifier chain
 *    @n: New entry in notifier chain
 *
 *    Adds a notifier to a raw notifier chain.
 *    All locking must be provided by the caller.
 *
 *    Currently always returns zero.
 */
int raw_notifier_chain_register(struct raw_notifier_head *nh,
        struct notifier_block *n)
{
    return notifier_chain_register(&nh->head, n);
}
 

可以看到,tick_init的作用就是调用 clockevents_register_notifier 函数向 clockevents_chain 通知链注册元素: tick_notifier。这个元素的回调函数指明了当时钟事件设备信息发生

变化(例如新加入一个时钟事件设备等等)时,应该执行的操作,该回调函数为 tick_notify。


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值