Loading arch/sparc/kernel/setup.c +2 −0 Original line number Diff line number Diff line Loading @@ -349,6 +349,8 @@ void __init setup_arch(char **cmdline_p) init_mm.context = (unsigned long) NO_CONTEXT; init_task.thread.kregs = &fake_swapper_regs; smp_setup_cpu_possible_map(); paging_init(); } Loading arch/sparc/kernel/smp.c +22 −8 Original line number Diff line number Diff line Loading @@ -267,22 +267,18 @@ int setup_profiling_timer(unsigned int multiplier) void __init smp_prepare_cpus(unsigned int max_cpus) { extern void smp4m_boot_cpus(void); int i, cpuid, ncpus, extra; int i, cpuid, extra; BUG_ON(sparc_cpu_model != sun4m); printk("Entering SMP Mode...\n"); ncpus = 1; extra = 0; for (i = 0; !cpu_find_by_instance(i, NULL, &cpuid); i++) { if (cpuid == boot_cpu_id) continue; if (cpuid < NR_CPUS && ncpus++ < max_cpus) cpu_set(cpuid, phys_cpu_present_map); else if (cpuid >= NR_CPUS) extra++; } if (max_cpus >= NR_CPUS && extra) /* i = number of cpus */ if (extra && max_cpus > i - extra) printk("Warning: NR_CPUS is too low to start all cpus\n"); smp_store_cpu_info(boot_cpu_id); Loading @@ -290,6 +286,24 @@ void __init smp_prepare_cpus(unsigned int max_cpus) smp4m_boot_cpus(); } /* Set this up early so that things like the scheduler can init * properly. We use the same cpu mask for both the present and * possible cpu map. */ void __init smp_setup_cpu_possible_map(void) { int instance, mid; instance = 0; while (!cpu_find_by_instance(instance, NULL, &mid)) { if (mid < NR_CPUS) { cpu_set(mid, phys_cpu_present_map); cpu_set(mid, cpu_present_map); } instance++; } } void __devinit smp_prepare_boot_cpu(void) { int cpuid = hard_smp_processor_id(); Loading include/asm-sparc/smp.h +7 −1 Original line number Diff line number Diff line Loading @@ -146,6 +146,8 @@ static inline int hard_smp_processor_id(void) #define prof_multiplier(__cpu) cpu_data(__cpu).multiplier #define prof_counter(__cpu) cpu_data(__cpu).counter void smp_setup_cpu_possible_map(void); #endif /* !(__ASSEMBLY__) */ /* Sparc specific messages. */ Loading @@ -162,7 +164,11 @@ static inline int hard_smp_processor_id(void) #define MBOX_IDLECPU2 0xFD #define MBOX_STOPCPU2 0xFE #endif /* SMP */ #else /* SMP */ #define smp_setup_cpu_possible_map() do { } while (0) #endif /* !(SMP) */ #define NO_PROC_ID 0xFF Loading Loading
arch/sparc/kernel/setup.c +2 −0 Original line number Diff line number Diff line Loading @@ -349,6 +349,8 @@ void __init setup_arch(char **cmdline_p) init_mm.context = (unsigned long) NO_CONTEXT; init_task.thread.kregs = &fake_swapper_regs; smp_setup_cpu_possible_map(); paging_init(); } Loading
arch/sparc/kernel/smp.c +22 −8 Original line number Diff line number Diff line Loading @@ -267,22 +267,18 @@ int setup_profiling_timer(unsigned int multiplier) void __init smp_prepare_cpus(unsigned int max_cpus) { extern void smp4m_boot_cpus(void); int i, cpuid, ncpus, extra; int i, cpuid, extra; BUG_ON(sparc_cpu_model != sun4m); printk("Entering SMP Mode...\n"); ncpus = 1; extra = 0; for (i = 0; !cpu_find_by_instance(i, NULL, &cpuid); i++) { if (cpuid == boot_cpu_id) continue; if (cpuid < NR_CPUS && ncpus++ < max_cpus) cpu_set(cpuid, phys_cpu_present_map); else if (cpuid >= NR_CPUS) extra++; } if (max_cpus >= NR_CPUS && extra) /* i = number of cpus */ if (extra && max_cpus > i - extra) printk("Warning: NR_CPUS is too low to start all cpus\n"); smp_store_cpu_info(boot_cpu_id); Loading @@ -290,6 +286,24 @@ void __init smp_prepare_cpus(unsigned int max_cpus) smp4m_boot_cpus(); } /* Set this up early so that things like the scheduler can init * properly. We use the same cpu mask for both the present and * possible cpu map. */ void __init smp_setup_cpu_possible_map(void) { int instance, mid; instance = 0; while (!cpu_find_by_instance(instance, NULL, &mid)) { if (mid < NR_CPUS) { cpu_set(mid, phys_cpu_present_map); cpu_set(mid, cpu_present_map); } instance++; } } void __devinit smp_prepare_boot_cpu(void) { int cpuid = hard_smp_processor_id(); Loading
include/asm-sparc/smp.h +7 −1 Original line number Diff line number Diff line Loading @@ -146,6 +146,8 @@ static inline int hard_smp_processor_id(void) #define prof_multiplier(__cpu) cpu_data(__cpu).multiplier #define prof_counter(__cpu) cpu_data(__cpu).counter void smp_setup_cpu_possible_map(void); #endif /* !(__ASSEMBLY__) */ /* Sparc specific messages. */ Loading @@ -162,7 +164,11 @@ static inline int hard_smp_processor_id(void) #define MBOX_IDLECPU2 0xFD #define MBOX_STOPCPU2 0xFE #endif /* SMP */ #else /* SMP */ #define smp_setup_cpu_possible_map() do { } while (0) #endif /* !(SMP) */ #define NO_PROC_ID 0xFF Loading