smp_setup_processor_id

来源:互联网 发布:java类的命名规则 编辑:程序博客网 时间:2024/05/07 23:50

[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)

0 0
原创粉丝点击