static int __init pseries_memory_hotplug_init(void) { if (firmware_has_feature(FW_FEATURE_LPAR)) pSeries_reconfig_notifier_register(&pseries_mem_nb); return 0; }
static int err_inject_init(void) { int err; dir = notifier_err_inject_init("pSeries-reconfig", notifier_err_inject_dir, &reconfig_err_inject, priority); if (IS_ERR(dir)) return PTR_ERR(dir); err = pSeries_reconfig_notifier_register(&reconfig_err_inject.nb); if (err) debugfs_remove_recursive(dir); return err; }
/* This is called very early */ void __init smp_init_pSeries(void) { int i; DBG(" -> smp_init_pSeries()\n"); switch (ppc64_interrupt_controller) { #ifdef CONFIG_MPIC case IC_OPEN_PIC: smp_ops = &pSeries_mpic_smp_ops; break; #endif #ifdef CONFIG_XICS case IC_PPC_XIC: smp_ops = &pSeries_xics_smp_ops; break; #endif #ifdef CONFIG_BPA_IIC case IC_BPA_IIC: smp_ops = &bpa_iic_smp_ops; break; #endif default: panic("Invalid interrupt controller"); } #ifdef CONFIG_HOTPLUG_CPU smp_ops->cpu_disable = pSeries_cpu_disable; smp_ops->cpu_die = pSeries_cpu_die; /* Processors can be added/removed only on LPAR */ if (systemcfg->platform == PLATFORM_PSERIES_LPAR) pSeries_reconfig_notifier_register(&pSeries_smp_nb); #endif /* Mark threads which are still spinning in hold loops. */ if (cpu_has_feature(CPU_FTR_SMT)) { for_each_present_cpu(i) { if (i % 2 == 0) /* * Even-numbered logical cpus correspond to * primary threads. */ cpu_set(i, of_spin_map); } } else {