smp_setup_processor_id

[Author: Bo Shen <voice.shen@gmail.com>]

[Linux kernel: git: 0c0bd34]


<init/main.c>

 470 void __init smp_setup_processor_id(void)
 471 {
 472         int i;
 473         u32 mpidr = is_smp() ? read_cpuid_mpidr() & MPIDR_HWID_BITMASK : 0;
 474         u32 cpu = MPIDR_AFFINITY_LEVEL(mpidr, 0);                         
 475 
 476         cpu_logical_map(0) = cpu;
 477         for (i = 1; i < nr_cpu_ids; ++i)
 478                 cpu_logical_map(i) = i == cpu ? 0 : i;
 479 
 480         /*
 481          * clear __my_cpu_offset on boot CPU to avoid hang caused by
 482          * using percpu variable early, for example, lockdep will         
 483          * access percpu variable inside lock_release
 484          */
 485         set_my_cpu_offset(0);
 486 
 487         pr_info("Booting Linux on physical CPU 0x%x\n", mpidr);
 488 }

473: 首先判断是否是SMP (对称多处理器)。对单核SOC来说,mpidr = 0;

474: cpu = 0

476: 数组0元素赋值。

477: nr_cpu_ids的值是由NR_CPUS决定的。 if NR_CPUS == 1 那么nr_cpu_ids = 1。NR_CPUS是CONFIG_NR_CPUS决定。对单核SOC来说,没有定义CONFIG_NR_CPUS, 所以CONFIG_NR_CPUS = 1, 最后nr_cpu_ids = 1. 所以477, 488不执行。

485:<arch/arm/include/asm/percpu.h>,因为没有定义CONFIG_SMP所以为空函数。do { } while(0)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值