AP核MAILBOX地址的初始化和启动过程(基于ARM64 的 APCI Parking protocol)
2016-03-03 16:34
786 查看
ARM64 AP核MAILBOX地址的初始化和启动过程(Parking protocol)
start_kernel
-> setup_arch
-> smp_init_cpus
-> acpi_table_parse_madt(ACPI_MADT_TYPE_GENERIC_INTERRUPT,acpi_parse_gic_cpu_interface, 0);
-> acpi_table_parse_entries(ACPI_SIG_MADT)
-> acpi_parse_entries
-> 遍历ACPI中标明的所有CORE,对每个core调用handler(entry, table_end) 也就是acpi_parse_gic_cpu_interface
acpi_parse_gic_cpu_interface
-> acpi_map_gic_cpu_interface
-> arm64_cpu_parking_addr[cpu_count] = processor->parked_address; //将当前处理器的mailbox地址初始化为parked_address;
在smp_init中,会对每个AP核调用boot_secondary
boot_secondary
-> cpu_ops[cpu]->cpu_boot(cpu); //对于Parking protocol,调用smp_parking_protocol_cpu_boot
-> mailbox = ioremap_cache(arm64_cpu_parking_addr[cpu], sizeof(*mailbox)); //得到mailbox映射的虚拟地址
writeq(__pa(secondary_entry), &mailbox->entry_point); //写入AP核启动地址
writel(cpu, &mailbox->cpu_id); // 写入目标AP核
__smp_boot_wakeup(cpu);//对于GICV3 在gic_smp_init中初始化为 gic_wakeup_parked_cpu,也就是调用gic_wakeup_parked_cpu
gic_wakeup_parked_cpu
-> gic_raise_softirq(cpumask_of(cpu), 0); //发送软中断,通知AP核启动
start_kernel
-> setup_arch
-> smp_init_cpus
-> acpi_table_parse_madt(ACPI_MADT_TYPE_GENERIC_INTERRUPT,acpi_parse_gic_cpu_interface, 0);
-> acpi_table_parse_entries(ACPI_SIG_MADT)
-> acpi_parse_entries
-> 遍历ACPI中标明的所有CORE,对每个core调用handler(entry, table_end) 也就是acpi_parse_gic_cpu_interface
acpi_parse_gic_cpu_interface
-> acpi_map_gic_cpu_interface
-> arm64_cpu_parking_addr[cpu_count] = processor->parked_address; //将当前处理器的mailbox地址初始化为parked_address;
在smp_init中,会对每个AP核调用boot_secondary
boot_secondary
-> cpu_ops[cpu]->cpu_boot(cpu); //对于Parking protocol,调用smp_parking_protocol_cpu_boot
-> mailbox = ioremap_cache(arm64_cpu_parking_addr[cpu], sizeof(*mailbox)); //得到mailbox映射的虚拟地址
writeq(__pa(secondary_entry), &mailbox->entry_point); //写入AP核启动地址
writel(cpu, &mailbox->cpu_id); // 写入目标AP核
__smp_boot_wakeup(cpu);//对于GICV3 在gic_smp_init中初始化为 gic_wakeup_parked_cpu,也就是调用gic_wakeup_parked_cpu
gic_wakeup_parked_cpu
-> gic_raise_softirq(cpumask_of(cpu), 0); //发送软中断,通知AP核启动
相关文章推荐
- 线程 WebContainer 已保持活动状态 N 毫秒,此线程可能已挂起
- retain和copy还有assign的区别,atomic和nonatomic的用途
- # _http_outgoing JS的错误: The header content contains invalid characters
- AIR客户端-高效处理图片缩略图的解决思路1
- VR开发中性能问题—OculusWaitForGPU
- VR开发中性能问题—OculusWaitForGPU
- 1090. Highest Price in Supply Chain (25)
- codeforces 627B B. Factory Repairs(线段树)
- data Mining with Weka: Trailer More Data Mining with Weka 用weka 进行数据挖掘 Weka 用weka 进行更多数据挖掘
- 永远不要在循环之外调用wait方法
- 永远不要在循环之外调用wait方法
- DLL中dllmain重定义的解决办法
- Fatal: the Postfix mail system is already running 的解决方案
- List对于自定义类型,使用contains
- Email 下载音频附件完成后播放不显示名称
- wait_event_interruptible 使用方法
- 如何: 如何提供自己 DllMain MFC 的规则 DLL 中
- 【转】traits技术及模板偏特化
- 运行目录和工作目录 http://blog.csdn.net/ghevinn/article/details/17399001
- 游戏 人工智能