hotplug回調線程喚醒
內核使用以下流程喚醒特定cpu的hotplug線程,用于執行實際的cpu啟動流程:
由于cpu啟動時需要與一系列模塊交互以執行相應的準備工作,為此內核為其定義了一組hotplug狀態,用于表示cpu在啟動或關閉時分別需要執行的流程。以下為個階段狀態定義示例(由于該數組較長,故只截了一小段):
static struct cpuhp_step cpuhp_hp_states[] = {
[CPUHP_OFFLINE] = {
.name = "offline",
.startup.single = NULL,
.teardown.single = NULL,
},
…
[CPUHP_BRINGUP_CPU] = {
.name = "cpu:bringup",
.startup.single = bringup_cpu,
.teardown.single = finish_cpu,
.cant_stop = true,
}
…
[CPUHP_ONLINE] = {
.name = "online",
.startup.single = NULL,
.teardown.single = NULL,
},
}
以上每個階段都可包含startup.single和teardown.single兩個回調函數,分別表示cpu啟動和關閉時需要執行的流程。其中在cpu啟動時,將會從CPUHP_OFFLINE狀態開始,依次執行各個階段的startup.single回調函數。其中CPUHP_BRINGUP_CPU及之前的階段都在secondary cpu啟動之前執行。
而CPUHP_BRINGUP_CPU階段的回調函數bringup_cpu,會實際觸發secondary cpu的啟動流程。它將通過cpu_ops接口調用spin-table函數,啟動secondary cpu,并等待其啟動完成。
當secondary cpu啟動完成后,將喚醒hotplug線程,其將繼續執行CPUHP_BRINGUP_CPU之后階段相關的回調函數。
-
內核
+關注
關注
3文章
1408瀏覽量
41089 -
cpu
+關注
關注
68文章
11031瀏覽量
215955 -
SMP
+關注
關注
0文章
78瀏覽量
20161 -
線程
+關注
關注
0文章
507瀏覽量
20071
發布評論請先 登錄
鴻蒙內核源碼Task/線程技術分析

MYSQL在UNIX上建立線程的回調函數
rt-thread的信號回調函數對內核有何影響呢
詳解java 回調機制
LabWindows/CVI 程序 回調函數設計

回調函數的詳細資料說明

C語言函數的回調函數
Alluxio線程池結構與吞吐量調優
根據回調機制注冊事件并處理回調VI
函數指針和回調函數的使用方法
多線程事務的回滾是怎么結合進去的?

評論