// 使能hard lockup探测
// 调用路径:watchdog_enable->watchdog_nmi_enable
// 函数任务:
// 1.初始化hard lockup检测事件
// 2.hard lockup阈值为10s
// 2.向performance monitoring子系统注册hard lockup检测事件
// 3.使能hard lockup检测事件
// 注:
// performance monitoring,x86中的硬件设备,当cpu clock经过了指定个周期后发出一个NMI中断。
1.1 static int watchdog_nmi_enable(unsigned int cpu)
{
//hard lockup事件
struct perf_event_attr *wd_attr;
struct perf_event *event = per_cpu(watchdog_ev, cpu);
....
wd_attr = &wd_hw_attr;
//hard lockup检测周期,10s
wd_attr->sample_period = hw_nmi_get_sample_period(watchdog_thresh);
//向performance monitoring注册hard lockup检测事件
event = perf_event_create_kernel_counter(wd_attr, cpu, NULL, watchdog_overflow_callback, NULL);
....
//使能hard lockup的检测
per_cpu(watchdog_ev, cpu) = event;
perf_event_enable(per_cpu(watchdog_ev, cpu));
return 0;
}
// 换算hard lockup检测周期到cpu频率
1.2 u64 hw_nmi_get_sample_period(int watchdog_thresh)
{
return (u64)(cpu_khz) * 1000 * watchdog_thresh;
}
// har
时间子系统17_hard lockup机制
最新推荐文章于 2025-06-19 21:45:22 发布