// 1.每个cpu都具有一个tick_device,维护周期时钟。
// 2.tick_device依赖一个clockevent设备,提供周期事件。
// 3.cpu电源状态的改变会影响tick_device,通过tick_notifier监听电源状态。
// 4.全局广播设备接管进入省电模式cpu的周期时间维护。
// 4.broadcast_mask保存开启广播模式的cpu, broadcast_oneshot_mask保存进入省电模式的cpu。
// 监听clockevent设备状态
// 调用路径:start_kernel->tick_init
1.1 void __init tick_init(void)
{
clockevents_register_notifier(&tick_notifier);
}
// 监听clockevent设备,cpu的状态变化
1.2 static int tick_notify(struct notifier_block *nb, unsigned long reason,
void *dev)
{
switch (reason) {
//新eventclock设备注册
case CLOCK_EVT_NOTIFY_ADD:
return tick_check_new_device(dev);
//cpu开启\关闭广播模式
case CLOCK_EVT_NOTIFY_BROADCAST_ON:
case CLOCK_EVT_NOTIFY_BROADCAST_OFF:
case CLOCK_EVT_NOTIFY_BROADCAST_FORCE:
tick_broadcast_on_off(reason, dev);
break;
//cpu进入\离开广播模式
case CLOCK_EVT_NOTIFY_BROADCAST_ENTER:
case CLOCK_EVT_NOTIFY_BROADCAST_EXIT:
tick_broadcast_oneshot_control(reason);
break;
//选择do_timer的cpu
case CLOCK_EVT_NOTIFY_CPU_DYING:
tick_handover_do_timer(dev);
break;
//停用dead cpu的clockevent
case CLOCK_EVT_NOTIFY_CPU_DEAD:
tick_shutdown_broadcast_oneshot(dev);
tick_shutdown_broadcast(dev);
tick_shutdown(dev);
break;
//挂起cpu的clockevent
case CLOCK_EVT_NOTIFY_SUSPEND:
tick_suspend();
tick_suspend_broadcast();
break;
//恢复cpu的clockevent
case CLOCK_EVT_NOTIFY_RESUME:
tick_resume();
break;
default:
break;
}
return NOTIFY_OK;
}
// 向clockevents_chain通知clockevents事件
// 函数主要任务:
// 1.通知clockevents_chain
// 2.当cpu offline时,清空clockevents_released链表,删除与此cpu相关的clockevent
// 注:clockevents_released保存所有fail-to-add/replace-out的clockevent
// clockevent_devices保存所有有效的clockevent
1.3 void clockevents_notify(unsigned long reason, void *arg)
{
struct clock_event_device *dev, *tmp;
unsigned long flags;
int cpu;
raw_spin_lock_irqsave(&clockevents_lock, flags);
//封装标准通知链操作raw_notifier_call_chain
clockevents_do_notify(reason, arg);
switch (reason) {
case CLOCK_EVT_
时间子系统2_tick device管理机制
最新推荐文章于 2023-05-26 09:10:00 发布
本文档详细介绍了Linux内核中时间子系统的Tick Device管理机制,包括CPU如何开启和关闭广播模式,以及如何处理电源状态变化。内容涵盖tick_init、tick_notify、clockevents_notify等关键函数,阐述了CPU进入和离开广播模式、广播设备如何接管进入省电模式CPU的时间维护等核心流程。
摘要由CSDN通过智能技术生成