cpu操作函數(shù)
cpu_ops函數(shù)由bringup_cpu調(diào)用,以觸發(fā)secondary cpu啟動。它是根據(jù)設備樹中解析出的enable-method屬性確定的。
int __init init_cpu_ops(int cpu)
{
const char *enable_method = cpu_read_enable_method(cpu); (1)
…
cpu_ops[cpu] = cpu_get_ops(enable_method); (2)
…
}
(1)獲取該cpu enable-method屬性的值
(2)根據(jù)其enable-method獲取其對應的cpu_ops回調(diào)
其中spin-table啟動方式的回調(diào)如下:
const struct cpu_operations smp_spin_table_ops = {
.name = "spin-table",
.cpu_init = smp_spin_table_cpu_init,
.cpu_prepare = smp_spin_table_cpu_prepare,
.cpu_boot = smp_spin_table_cpu_boot,
}
觸發(fā)secondary cpu啟動
以上流程都準備完成后,觸發(fā)secondary cpu啟動就非常簡單了。只需調(diào)用其cpu_ops回調(diào)函數(shù),向其對應的spin_table_cpu_release_addr位置寫入secondary cpu入口地址即可。以下為其調(diào)用流程:
其中smp_spin_table_cpu_boot的實現(xiàn)如下:
static int smp_spin_table_cpu_boot(unsigned int cpu)
{
write_pen_release(cpu_logical_map(cpu)); (1)
sev(); (2)
return 0;
}
(1)向給定地址寫入內(nèi)核entry
(2)通過sev指令喚醒secondary cpu啟動
此后,該線程將等待cpu啟動完成,并在完成后將其設置為online狀態(tài)
-
cpu
+關注
關注
68文章
10863瀏覽量
211782 -
SMP
+關注
關注
0文章
74瀏覽量
19667 -
函數(shù)
+關注
關注
3文章
4331瀏覽量
62622 -
設備樹
+關注
關注
0文章
38瀏覽量
3126
發(fā)布評論請先 登錄
相關推薦
評論