hotplug回調(diào)線程喚醒
內(nèi)核使用以下流程喚醒特定cpu的hotplug線程,用于執(zhí)行實際的cpu啟動流程:
由于cpu啟動時需要與一系列模塊交互以執(zhí)行相應(yīng)的準(zhǔn)備工作,為此內(nèi)核為其定義了一組hotplug狀態(tài),用于表示cpu在啟動或關(guān)閉時分別需要執(zhí)行的流程。以下為個階段狀態(tài)定義示例(由于該數(shù)組較長,故只截了一小段):
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兩個回調(diào)函數(shù),分別表示cpu啟動和關(guān)閉時需要執(zhí)行的流程。其中在cpu啟動時,將會從CPUHP_OFFLINE狀態(tài)開始,依次執(zhí)行各個階段的startup.single回調(diào)函數(shù)。其中CPUHP_BRINGUP_CPU及之前的階段都在secondary cpu啟動之前執(zhí)行。
而CPUHP_BRINGUP_CPU階段的回調(diào)函數(shù)bringup_cpu,會實際觸發(fā)secondary cpu的啟動流程。它將通過cpu_ops接口調(diào)用spin-table函數(shù),啟動secondary cpu,并等待其啟動完成。
當(dāng)secondary cpu啟動完成后,將喚醒hotplug線程,其將繼續(xù)執(zhí)行CPUHP_BRINGUP_CPU之后階段相關(guān)的回調(diào)函數(shù)。
-
內(nèi)核
+關(guān)注
關(guān)注
4文章
1468瀏覽量
42892 -
cpu
+關(guān)注
關(guān)注
68文章
11281瀏覽量
225109 -
SMP
+關(guān)注
關(guān)注
0文章
81瀏覽量
20839 -
線程
+關(guān)注
關(guān)注
0文章
509瀏覽量
20829
發(fā)布評論請先 登錄
鴻蒙內(nèi)核源碼Task/線程技術(shù)分析
MYSQL在UNIX上建立線程的回調(diào)函數(shù)
rt-thread的信號回調(diào)函數(shù)對內(nèi)核有何影響呢
詳解java 回調(diào)機(jī)制
LabWindows/CVI 程序 回調(diào)函數(shù)設(shè)計
回調(diào)函數(shù)的詳細(xì)資料說明
C語言函數(shù)的回調(diào)函數(shù)
深入淺析Linux內(nèi)核之內(nèi)核線程(上)
Alluxio線程池結(jié)構(gòu)與吞吐量調(diào)優(yōu)
根據(jù)回調(diào)機(jī)制注冊事件并處理回調(diào)VI
函數(shù)指針和回調(diào)函數(shù)的使用方法
多線程事務(wù)的回滾是怎么結(jié)合進(jìn)去的?
內(nèi)核hotplug回調(diào)線程喚醒
評論