/* The only guaranteed locking primitive available on all Sparc *processorsis'ldstub[%reg+immediate],%dest_reg'whichatomically *placesthecurrentbyteattheeffectiveaddressintodest_regand *places0xffthereafterwards.Prettylamelockingprimitive *comparedtotheAlphaandtheIntelno?MostSparcshave'swap' *instructionwhichismuchbetter...
*/
void smp_store_cpu_info(int id)
{ int cpu_node; int mid;
void __init smp_prepare_cpus(unsignedint max_cpus)
{ int i, cpuid, extra;
printk("Entering SMP Mode...\n");
extra = 0; for (i = 0; !cpu_find_by_instance(i, NULL, &cpuid); i++) { if (cpuid >= 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);
switch(sparc_cpu_model) { case sun4m:
smp4m_boot_cpus(); break; case sun4d:
smp4d_boot_cpus(); break; case sparc_leon:
leon_boot_cpus(); break; case sun4e:
printk("SUN4E\n");
BUG(); break; case sun4u:
printk("SUN4U\n");
BUG(); break; default:
printk("UNKNOWN!\n");
BUG(); break;
}
}
/* Set this up early so that things like the scheduler can init *properly.Weusethesamecpumaskforboththepresentand *possiblecpumap.
*/ void __init smp_setup_cpu_possible_map(void)
{ int instance, mid;
void __init smp_prepare_boot_cpu(void)
{ int cpuid = hard_smp_processor_id();
if (cpuid >= NR_CPUS) {
prom_printf("Serious problem, boot cpu id >= NR_CPUS\n");
prom_halt();
} if (cpuid != 0)
printk("boot cpu id != 0, this could work but is untested\n");
int __cpu_up(unsignedint cpu, struct task_struct *tidle)
{ int ret=0;
switch(sparc_cpu_model) { case sun4m:
ret = smp4m_boot_one_cpu(cpu, tidle); break; case sun4d:
ret = smp4d_boot_one_cpu(cpu, tidle); break; case sparc_leon:
ret = leon_boot_one_cpu(cpu, tidle); break; case sun4e:
printk("SUN4E\n");
BUG(); break; case sun4u:
printk("SUN4U\n");
BUG(); break; default:
printk("UNKNOWN!\n");
BUG(); break;
}
if (!ret) {
cpumask_set_cpu(cpu, &smp_commenced_mask); while (!cpu_online(cpu))
mb();
} return ret;
}
¤ Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.0.15Bemerkung:
(vorverarbeitet am 2026-09-29)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.