int disable_nonboot_cpus(void) { int cpu, first_cpu, error = 0; cpu_maps_update_begin(); first_cpu = cpumask_first(cpu_online_mask); cpumask_clear(frozen_cpus); arch_disable_nonboot_cpus_begin(); printk("Disabling non-boot CPUs ...\n"); for_each_online_cpu(cpu) { if (cpu == first_cpu) continue; error = _cpu_down(cpu, 1); if (!error) cpumask_set_cpu(cpu, frozen_cpus); else { printk(KERN_ERR "Error taking CPU%d down: %d\n", cpu, error); break; } } arch_disable_nonboot_cpus_end(); if (!error) { BUG_ON(num_online_cpus() > 1); cpu_hotplug_disabled = 1; } else { printk(KERN_ERR "Non-boot CPUs are not disabled\n"); } cpu_maps_update_done(); return error; }
int disable_nonboot_cpus(void) { int cpu, first_cpu, error = 0; cpu_maps_update_begin(); first_cpu = cpumask_first(cpu_online_mask); /* * We take down all of the non-boot CPUs in one shot to avoid races * with the userspace trying to use the CPU hotplug at the same time */ cpumask_clear(frozen_cpus); arch_disable_nonboot_cpus_begin(); #ifdef CONFIG_DEBUG_PRINTK printk("Disabling non-boot CPUs ...\n"); #else ; #endif for_each_online_cpu(cpu) { if (cpu == first_cpu) continue; error = _cpu_down(cpu, 1); if (!error) cpumask_set_cpu(cpu, frozen_cpus); else { printk(KERN_ERR "Error taking CPU%d down: %d\n", cpu, error); break; } } arch_disable_nonboot_cpus_end(); if (!error) { BUG_ON(num_online_cpus() > 1); /* Make sure the CPUs won't be enabled by someone else */ cpu_hotplug_disabled = 1; } else { printk(KERN_ERR "Non-boot CPUs are not disabled\n"); } cpu_maps_update_done(); return error; }
int disable_nonboot_cpus(void) { int cpu, first_cpu, error = 0; #ifdef CONFIG_ARM_EXYNOS_MP_CPUFREQ int lated_cpu; #endif #ifdef CONFIG_ARM_EXYNOS_MP_CPUFREQ if (exynos_boot_cluster == CA7) lated_cpu = NR_CA7; else lated_cpu = NR_CA15; #endif cpu_maps_update_begin(); first_cpu = cpumask_first(cpu_online_mask); /* * We take down all of the non-boot CPUs in one shot to avoid races * with the userspace trying to use the CPU hotplug at the same time */ cpumask_clear(frozen_cpus); arch_disable_nonboot_cpus_begin(); printk("Disabling non-boot CPUs ...\n"); for_each_online_cpu(cpu) { #if defined(CONFIG_ARM_EXYNOS_MP_CPUFREQ) if (cpu == first_cpu || cpu == lated_cpu) #else if (cpu == first_cpu) #endif continue; error = _cpu_down(cpu, 1); if (!error) cpumask_set_cpu(cpu, frozen_cpus); else { printk(KERN_ERR "Error taking CPU%d down: %d\n", cpu, error); break; } } #ifdef CONFIG_ARM_EXYNOS_MP_CPUFREQ if (num_online_cpus() > 1) { error = _cpu_down(lated_cpu, 1); if (!error) cpumask_set_cpu(lated_cpu, frozen_cpus); else printk(KERN_ERR "Error taking CPU%d down: %d\n", lated_cpu, error); } #endif arch_disable_nonboot_cpus_end(); if (!error) { BUG_ON(num_online_cpus() > 1); /* Make sure the CPUs won't be enabled by someone else */ cpu_hotplug_disabled = 1; } else { printk(KERN_ERR "Non-boot CPUs are not disabled\n"); } cpu_maps_update_done(); return error; }