// 使能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檢測週期到cpu頻率
1.2 u64 hw_nmi_get_sample_period(int watchdog_thresh)
// hard lockup檢測事件發生時的nmi**函式
// 函式任務:
// 1.判斷是否發生了hard lockup
// 1.1 dump hard lockup資訊
1.3 static void watchdog_overflow_callback(struct perf_event *event,
struct perf_sample_data *data,
struct pt_regs *regs)
return;
}// 判斷是否發生hard lockup
// 注:
// 如果時鐘中斷在指定閾值範圍內為執行,核心認為可遮蔽中斷被遮蔽時間過長
1.4 static int is_hardlockup(void)
// 關閉hard lockup檢測機制
// 函式任務:
// 1.向performance monitoring子系統登出hard lockup檢測控制塊
// 2.清空per-cpu hard lockup檢測控制塊
// 3.釋放hard lock檢測控制塊
2.1 static void watchdog_nmi_disable(unsigned int cpu)
return;
}
linux時間子系統(九)
3.4.3 模擬tick事件 當系統切換到高精度模式後,tick device被高精度定時器系統接管,不再定期地產生tick事件。核心在3.0.30版本中還沒有徹底的廢除jiffies機制,系統還是依賴定期到來的tick事件,完成程序排程和時間更新等操作,大量存在的低精度定時器仍然依賴於jiffie...
linux時間子系統(六)
3.1.4 定時器處理 static inline void run timers struct tvec base base wake up base wait for running timer spin unlock irq base lock static int cascade struc...
linux時間子系統(三)
2.2.3 timekeeper初始化 void init timekeeping init void set normalized timespec wall to monotonic,boot.tv sec,boot.tv nsec total sleep time.tv sec 0 total...