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)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。
舉報投訴
相關(guān)推薦
前言 在鴻蒙內(nèi)核中,廣義上可理解為一個Task就是一個線程 一、怎么理解Task 1. 官方文檔是怎么描述線程 基本概念 從系統(tǒng)的角度看,線程是競爭系統(tǒng)資源的最小運行單元。
發(fā)表于 10-18 10:42
?2211次閱讀
有新的連接到來,然后調(diào)用線程回調(diào)函數(shù)建立新的線程來處理這個新的accpet的socket通道(還會判斷是否有空閑的線程隊列而不需要新建立新的
發(fā)表于 08-05 07:55
信號的到達(dá),事實上,線程也不知道信號到底什么時候到達(dá)。線程之間可以互相通過調(diào)用 rt_thread_kill 發(fā)送信號。以上畫線部分是我特意要大家注意的,我們要看待中斷回調(diào)函數(shù)那樣,看
發(fā)表于 03-16 10:14
代碼示例 接下來看一下回調(diào)的代碼示例,代碼模擬的是這樣一種場景:老師問學(xué)生問題,學(xué)生思考完畢回答老師。 首先定義一個回調(diào)接口,只有一個方法tellAnswer(int answer),
發(fā)表于 09-28 13:14
?0次下載
回調(diào)函數(shù)是系統(tǒng)框架設(shè)計中非常重要的一種手段,所謂回調(diào)函數(shù)(callback )是指一個通過函數(shù)指針調(diào)用的函數(shù)。回
發(fā)表于 05-03 16:54
?1.1w次閱讀
異步事件的處理,首先將異步事件發(fā)生時需要執(zhí)行的代碼編寫成一個函數(shù),并將該函數(shù)注冊成為回調(diào)函數(shù),這樣當(dāng)該異步事件發(fā)生時,系統(tǒng)會自動調(diào)用事先注冊好的回調(diào)函數(shù)。
發(fā)表于 02-28 08:00
?6次下載
來源:嵌入式客棧 1 什么是回調(diào)函數(shù)?首先什么是回調(diào)呢? 我的理解是:把一段可執(zhí)行的代碼像參數(shù)傳遞那樣傳給其他代碼,而這段代碼會在某個時刻被調(diào)用執(zhí)行,這就叫做回
發(fā)表于 09-11 09:57
?4129次閱讀
本文力求與完整介紹完內(nèi)核線程的整個生命周期,如內(nèi)核線程的創(chuàng)建、調(diào)度等等,當(dāng)然本文還是主要從內(nèi)存管理和進(jìn)程調(diào)度兩個維度來解析,且不會涉及到具體的內(nèi)核
發(fā)表于 04-28 16:26
?2045次閱讀
本文介紹了 Alluxio Master 的線程池結(jié)構(gòu)與每個線程的功能。在調(diào)優(yōu)過程中,利用分析結(jié)果調(diào)整審計日志的 blocking queue,調(diào)整 UFS-SYNC-PREFETCH 線程
發(fā)表于 11-11 11:36
?599次閱讀
通過事件回調(diào)注冊函數(shù)(Register Event Callback)注冊一個回調(diào)VI,在事件發(fā)生時會運行該回調(diào)VI,通常用于注冊和處理.N
發(fā)表于 11-24 09:15
?2277次閱讀
了解開發(fā)語言的朋友應(yīng)該都會對回調(diào)函數(shù)有所了解,在很多的程序開發(fā)語言中都能看到回調(diào)的身影。很多場景下,當(dāng)某個條件成立以后我們希望代碼執(zhí)行某些指定的部分,這個時候可以考慮使用回
發(fā)表于 04-10 15:08
?1101次閱讀
某一線程在開始運行前等待n個線程執(zhí)行完畢。 將CountDownLatch的計數(shù)器初始化為new CountDownLatch(n),每當(dāng)一個任務(wù)線程執(zhí)行完畢,就將計數(shù)器減1 countdownLatch.countDown()
發(fā)表于 05-08 11:01
?462次閱讀
回調(diào)函數(shù)是個高級操作技巧,也是日常項目中常常使用到的技能。之所以說回調(diào)函數(shù)是個高級操作技巧,是因為它讓異步操作更加方便,眾所周知程序執(zhí)行分為同步操作和異步操作,同步操作故名思意就是按代
發(fā)表于 07-10 10:34
?1304次閱讀
介紹LabVIEW中事件回調(diào)的使用方法,可以用于處理執(zhí)行時間較長的異步事件
發(fā)表于 08-24 16:38
?4380次閱讀
回調(diào)函數(shù)是一種特殊的函數(shù),它作為參數(shù)傳遞給另一個函數(shù),并在被調(diào)用函數(shù)執(zhí)行完畢后被調(diào)用。回調(diào)函數(shù)通常用于事件處理、異步編程和處理各種操作系統(tǒng)和框架的API。
發(fā)表于 03-12 11:46
?2909次閱讀
評論