hotplug回調(diào)線程喚醒
內(nèi)核使用以下流程喚醒特定cpu的hotplug線程,用于執(zhí)行實(shí)際的cpu啟動(dòng)流程:
由于cpu啟動(dòng)時(shí)需要與一系列模塊交互以執(zhí)行相應(yīng)的準(zhǔn)備工作,為此內(nèi)核為其定義了一組hotplug狀態(tài),用于表示cpu在啟動(dòng)或關(guān)閉時(shí)分別需要執(zhí)行的流程。以下為個(gè)階段狀態(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,
},
}
以上每個(gè)階段都可包含startup.single和teardown.single兩個(gè)回調(diào)函數(shù),分別表示cpu啟動(dòng)和關(guān)閉時(shí)需要執(zhí)行的流程。其中在cpu啟動(dòng)時(shí),將會(huì)從CPUHP_OFFLINE狀態(tài)開始,依次執(zhí)行各個(gè)階段的startup.single回調(diào)函數(shù)。其中CPUHP_BRINGUP_CPU及之前的階段都在secondary cpu啟動(dòng)之前執(zhí)行。
而CPUHP_BRINGUP_CPU階段的回調(diào)函數(shù)bringup_cpu,會(huì)實(shí)際觸發(fā)secondary cpu的啟動(dòng)流程。它將通過cpu_ops接口調(diào)用spin-table函數(shù),啟動(dòng)secondary cpu,并等待其啟動(dòng)完成。
當(dāng)secondary cpu啟動(dòng)完成后,將喚醒hotplug線程,其將繼續(xù)執(zhí)行CPUHP_BRINGUP_CPU之后階段相關(guān)的回調(diào)函數(shù)。
-
內(nèi)核
+關(guān)注
關(guān)注
4文章
1476瀏覽量
43101 -
cpu
+關(guān)注
關(guān)注
68文章
11335瀏覽量
226005 -
SMP
+關(guān)注
關(guān)注
0文章
82瀏覽量
20969 -
線程
+關(guān)注
關(guān)注
0文章
510瀏覽量
20876
發(fā)布評(píng)論請(qǐng)先 登錄
鴻蒙內(nèi)核源碼Task/線程技術(shù)分析
MYSQL在UNIX上建立線程的回調(diào)函數(shù)
rt-thread的信號(hào)回調(diào)函數(shù)對(duì)內(nèi)核有何影響呢
詳解java 回調(diào)機(jī)制
LabWindows/CVI 程序 回調(diào)函數(shù)設(shè)計(jì)
回調(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ī)制注冊(cè)事件并處理回調(diào)VI
函數(shù)指針和回調(diào)函數(shù)的使用方法
多線程事務(wù)的回滾是怎么結(jié)合進(jìn)去的?
內(nèi)核hotplug回調(diào)線程喚醒
評(píng)論