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

//函数所在文件

//  kernel\time\tick-common.c

/**

* tick_init - initialize the tick control
 *
 * Register the notifier with the clockevents framework
 */
void __init tick_init(void)
{
clockevents_register_notifier(& tick_notifier);

}

/**
 * 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);
ret = raw_notifier_chain_register(&clockevents_chain, nb);
raw_spin_unlock_irqrestore(&clockevents_lock, flags);

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);
}

/*
 * Notifier chain core routines.  The exported routines below
 * are layered on top of these, with appropriate locking added.
 */

static int notifier_chain_register(struct notifier_block **nl,
struct notifier_block *n)
{
while ((*nl) != NULL) {
if (n->priority > (*nl)->priority)
break;
nl = &((*nl)->next);
}
n->next = *nl;
rcu_assign_pointer(*nl, n);
return 0;
}

可以看到,tick_init的作用就是调用 clockevents_register_notifier 函数向 clockevents_chain 通知链注册元素: tick_notifier。这个元素的回调函数指明了,时钟事件设备信息发生变化时(例如新加入一个时钟事件设备等等),应该执行的操作,该回调函数为 tick_notify。

tick_init 函数相关推荐

  1. arm Linux系统启动之----start_kernel函数

    head-common.S ---具体做了哪些动作 ---跳转到init/main.c ---b start_kernel //关于start_kernel的强文深入理解linux内核,第八章 mai ...

  2. Linux内部的时钟处理机制全面剖析

    Linux内部的时钟处理机制全面剖析 在 Linux 操作系统中,很多活动都和时间有关,例如:进程调度和网络处理等等.所以说,了解 Linux 操作系统中的时钟处理机制有助于更好地了解 Linux 操 ...

  3. (转)start_kernel 代码分析

    head-common.S ---具体做了哪些动作 ---跳转到init/main.c ---b start_kernel //关于start_kernel的强文深入理解linux内核,第八章 mai ...

  4. 【SemiDrive源码分析】【X9芯片启动流程】30 - AP1 Android Kernel 启动流程 start_kernel 函数详细分析(一)

    [SemiDrive源码分析][X9芯片启动流程]30 - AP1 Android Kernel 启动流程 start_kernel 函数详细分析(一) 一.Android Kernel 启动流程分析 ...

  5. kernel 启动过程之三, start_kernel()函数 概叙!init/main.c

    http://blog.csdn.net/pottichu/article/details/4261228 核心数据结构初始化--内核引导第一部分 start_kernel()中调用了一系列初始化函数 ...

  6. tick_init();

    /*** tick_init - initialize the tick control** Register the notifier with the clockevents framework* ...

  7. 数据库中自定义排序规则,Mysql中自定义字段排序规则,Oracle中自定义字段排序规则,decode函数的用法,field函数的用法

    数据库中自定义排序 场景:有一张banner表,表中有一个status字段,有0, 1, 2三个状态位,我想要 1,0,2的自定义排序(这里是重点),然后再进行之上对sequence字段进行二次排序( ...

  8. Mysql函数group_concat、find_in_set 多值分隔字符字段进行数据库字段值翻译

    Mysql函数group_concat.find_in_set进行数据库字段值翻译 场景 配方表:记录包含的原料 sources表示原料,字段值之间用逗号分隔 原料表:对应原料id和原料名称 现需要查 ...

  9. C++ 笔记(34)— C++ exit 函数

    当遇到 main 函数中的 return 语句时,C++ 程序将停止执行.但其他函数结束时,程序并不会停止.程序的控制将返回到函数调用之后的位置.然而,有时候会出现一些非常少见的情况,使得程序有必要在 ...

  10. C++ 笔记(30)— 友元函数与友元类

    我们知道类的私有成员只能在类的成员函数内部访问,如果想在别处访问对象的私有成员,只能通过类提供的接口(成员函数)间接地进行.这固然能够带来数据隐藏的好处,利于将来程序的扩充,但也会增加程序书写的麻烦. ...

最新文章

  1. 深入理解Eureka之源码解析
  2. 一个二维码能装10T电影?看样子我也能改变世界了
  3. 探讨mutex与semaphore
  4. SAP云平台和SAP HANA Enterprise Cloud(HEC)的区别
  5. 正在读取软件包列表... 有错误!
  6. 硬核!国外开发者用 25 美元做了个区块链警佩相机!
  7. 好用≠滥用,人脸识别的公共应用边界在哪里?
  8. 第21批符合道路运输车辆卫星定位系统标准 及规范的车载终端
  9. jquery ajax 参数放到 request playload 中
  10. Proximal Policy Optimization近端策略优化(PPO)
  11. Activiti表结构
  12. 【ENOVIA 服务包】知识重用解决方案 | 达索系统百世慧®
  13. Inferring Motion Direction using Commodity Wi-Fi for Interactive Exergames (WiDrancd)论文翻译
  14. AD怎么输入坐标_如何把CAD图纸坐标转换成现场坐标?
  15. 赏析:滕王阁序(唐代:王勃)
  16. idea中找不到maven projects的集中解决办法
  17. 2020.11.02 使用OpenCV进行图像水平和垂直线提取 【OpenCV C++】
  18. 1年时间业务量疯长40倍,谈人人车的平台架构演进之路
  19. VirtualBox找不到桥接网卡问题解决
  20. Egret中使用TiledMap

热门文章

  1. 现代程序设计 作业1
  2. eclipse jre 参数
  3. IE游览器的扩展事件
  4. mac 备份android 手机通讯录导入iphone,iphone如何导出通讯录(轻松教你iPhone备份通讯录的方法)...
  5. mongodb系列之--mongodb 主从配置与说明
  6. ganglia集群监控搭建步骤
  7. 130242014049-魏俊斌-《电商系统分类模块》
  8. 利用 Kubernetes Service 的 selector 无痛运维在线 pod
  9. nginx自签ssl证书
  10. Apache编译注释(二)