https://mp.weixin.qq.com/s/cw5F3tIEdn5dx64XzCmo7Q
简单介绍smp_processor_id相关的内容。
本文目录:
1. secondary processors开始执行
2. smp_processor_id()
3. current_thread_info()->cpu何时赋值
4. __cpu_up_task_pointer
5. smp_callin
以下正文:
1. secondary processors开始执行
在head.S中定义的启动流程中,落选的cpu跳转到.Lsecondary_start处执行:
.Lsecondary_start的定义如下:
其中:
a. 把.Lsecondary_park的地址,写入到mtvec寄存器,作为异常处理的基地址;
b. a0中存放的是hartid:
将其作为偏移量,计算出相应核心对应的__cpu_up_stack_pointer和__cpu_up_task_pointer的地址;
c. 判断相应地址是否为0,如果是0,则表示还没有准备好让该核心启动;
d. 如果已经准备好,则跳转到secondary_start_common执行:
-----------------------------------------------------------------------------
这是一篇付费文章,请移步付费阅读全文,谢谢!
文章链接:https://mp.weixin.qq.com/s/cw5F3tIEdn5dx64XzCmo7Q