天天看點

riscv - kernel - smp_processor_id

簡單介紹smp_processor_id相關的内容。

riscv - kernel - smp_processor_id

本文目錄:

1. secondary processors開始執行

2. smp_processor_id()

3. current_thread_info()->cpu何時指派

4. __cpu_up_task_pointer

5. smp_callin

以下正文:

在head.S中定義的啟動流程中,落選的cpu跳轉到.Lsecondary_start處執行:

riscv - kernel - smp_processor_id

.Lsecondary_start的定義如下:

riscv - kernel - smp_processor_id

其中:

a. 把.Lsecondary_park的位址,寫入到mtvec寄存器,作為異常處理的基位址;

b. a0中存放的是hartid:

riscv - kernel - smp_processor_id

将其作為偏移量,計算出相應核心對應的__cpu_up_stack_pointer和__cpu_up_task_pointer的位址;

c. 判斷相應位址是否為0,如果是0,則表示還沒有準備好讓該核心啟動;

d. 如果已經準備好,則跳轉到secondary_start_common執行:

繼續閱讀