| From a06f916b7a9b57447ceb875eb0a89f1a66b31bca Mon Sep 17 00:00:00 2001 |
| From: Russell King <rmk+kernel@arm.linux.org.uk> |
| Date: Thu, 20 Oct 2011 22:04:18 +0100 |
| Subject: ARM: smp: fix clipping of number of CPUs |
| |
| From: Russell King <rmk+kernel@arm.linux.org.uk> |
| |
| commit a06f916b7a9b57447ceb875eb0a89f1a66b31bca upstream. |
| |
| Rather than clipping the number of CPUs using the compile-time NR_CPUS |
| constant, use the runtime nr_cpu_ids value instead. This allows the |
| nr_cpus command line option to work as expected. |
| |
| Reported-by: Mark Salter <msalter@redhat.com> |
| Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> |
| |
| --- |
| arch/arm/mach-exynos4/platsmp.c | 10 ++++------ |
| arch/arm/mach-msm/platsmp.c | 6 ++++++ |
| arch/arm/mach-omap2/omap-smp.c | 10 ++++------ |
| arch/arm/mach-realview/platsmp.c | 10 ++++------ |
| arch/arm/mach-shmobile/platsmp.c | 6 ++++++ |
| arch/arm/mach-tegra/platsmp.c | 8 ++++---- |
| arch/arm/mach-ux500/platsmp.c | 10 ++++------ |
| arch/arm/mach-vexpress/ct-ca9x4.c | 6 ++++++ |
| 8 files changed, 38 insertions(+), 28 deletions(-) |
| |
| --- a/arch/arm/mach-exynos4/platsmp.c |
| +++ b/arch/arm/mach-exynos4/platsmp.c |
| @@ -193,12 +193,10 @@ void __init smp_init_cpus(void) |
| ncores = scu_base ? scu_get_core_count(scu_base) : 1; |
| |
| /* sanity check */ |
| - if (ncores > NR_CPUS) { |
| - printk(KERN_WARNING |
| - "EXYNOS4: no. of cores (%d) greater than configured " |
| - "maximum of %d - clipping\n", |
| - ncores, NR_CPUS); |
| - ncores = NR_CPUS; |
| + if (ncores > nr_cpu_ids) { |
| + pr_warn("SMP: %u cores greater than maximum (%u), clipping\n", |
| + ncores, nr_cpu_ids); |
| + ncores = nr_cpu_ids; |
| } |
| |
| for (i = 0; i < ncores; i++) |
| --- a/arch/arm/mach-msm/platsmp.c |
| +++ b/arch/arm/mach-msm/platsmp.c |
| @@ -156,6 +156,12 @@ void __init smp_init_cpus(void) |
| { |
| unsigned int i, ncores = get_core_count(); |
| |
| + if (ncores > nr_cpu_ids) { |
| + pr_warn("SMP: %u cores greater than maximum (%u), clipping\n", |
| + ncores, nr_cpu_ids); |
| + ncores = nr_cpu_ids; |
| + } |
| + |
| for (i = 0; i < ncores; i++) |
| set_cpu_possible(i, true); |
| |
| --- a/arch/arm/mach-omap2/omap-smp.c |
| +++ b/arch/arm/mach-omap2/omap-smp.c |
| @@ -109,12 +109,10 @@ void __init smp_init_cpus(void) |
| ncores = scu_get_core_count(scu_base); |
| |
| /* sanity check */ |
| - if (ncores > NR_CPUS) { |
| - printk(KERN_WARNING |
| - "OMAP4: no. of cores (%d) greater than configured " |
| - "maximum of %d - clipping\n", |
| - ncores, NR_CPUS); |
| - ncores = NR_CPUS; |
| + if (ncores > nr_cpu_ids) { |
| + pr_warn("SMP: %u cores greater than maximum (%u), clipping\n", |
| + ncores, nr_cpu_ids); |
| + ncores = nr_cpu_ids; |
| } |
| |
| for (i = 0; i < ncores; i++) |
| --- a/arch/arm/mach-realview/platsmp.c |
| +++ b/arch/arm/mach-realview/platsmp.c |
| @@ -52,12 +52,10 @@ void __init smp_init_cpus(void) |
| ncores = scu_base ? scu_get_core_count(scu_base) : 1; |
| |
| /* sanity check */ |
| - if (ncores > NR_CPUS) { |
| - printk(KERN_WARNING |
| - "Realview: no. of cores (%d) greater than configured " |
| - "maximum of %d - clipping\n", |
| - ncores, NR_CPUS); |
| - ncores = NR_CPUS; |
| + if (ncores > nr_cpu_ids) { |
| + pr_warn("SMP: %u cores greater than maximum (%u), clipping\n", |
| + ncores, nr_cpu_ids); |
| + ncores = nr_cpu_ids; |
| } |
| |
| for (i = 0; i < ncores; i++) |
| --- a/arch/arm/mach-shmobile/platsmp.c |
| +++ b/arch/arm/mach-shmobile/platsmp.c |
| @@ -56,6 +56,12 @@ void __init smp_init_cpus(void) |
| unsigned int ncores = shmobile_smp_get_core_count(); |
| unsigned int i; |
| |
| + if (ncores > nr_cpu_ids) { |
| + pr_warn("SMP: %u cores greater than maximum (%u), clipping\n", |
| + ncores, nr_cpu_ids); |
| + ncores = nr_cpu_ids; |
| + } |
| + |
| for (i = 0; i < ncores; i++) |
| set_cpu_possible(i, true); |
| |
| --- a/arch/arm/mach-tegra/platsmp.c |
| +++ b/arch/arm/mach-tegra/platsmp.c |
| @@ -114,10 +114,10 @@ void __init smp_init_cpus(void) |
| { |
| unsigned int i, ncores = scu_get_core_count(scu_base); |
| |
| - if (ncores > NR_CPUS) { |
| - printk(KERN_ERR "Tegra: no. of cores (%u) greater than configured (%u), clipping\n", |
| - ncores, NR_CPUS); |
| - ncores = NR_CPUS; |
| + if (ncores > nr_cpu_ids) { |
| + pr_warn("SMP: %u cores greater than maximum (%u), clipping\n", |
| + ncores, nr_cpu_ids); |
| + ncores = nr_cpu_ids; |
| } |
| |
| for (i = 0; i < ncores; i++) |
| --- a/arch/arm/mach-ux500/platsmp.c |
| +++ b/arch/arm/mach-ux500/platsmp.c |
| @@ -156,12 +156,10 @@ void __init smp_init_cpus(void) |
| ncores = scu_base ? scu_get_core_count(scu_base) : 1; |
| |
| /* sanity check */ |
| - if (ncores > NR_CPUS) { |
| - printk(KERN_WARNING |
| - "U8500: no. of cores (%d) greater than configured " |
| - "maximum of %d - clipping\n", |
| - ncores, NR_CPUS); |
| - ncores = NR_CPUS; |
| + if (ncores > nr_cpu_ids) { |
| + pr_warn("SMP: %u cores greater than maximum (%u), clipping\n", |
| + ncores, nr_cpu_ids); |
| + ncores = nr_cpu_ids; |
| } |
| |
| for (i = 0; i < ncores; i++) |
| --- a/arch/arm/mach-vexpress/ct-ca9x4.c |
| +++ b/arch/arm/mach-vexpress/ct-ca9x4.c |
| @@ -221,6 +221,12 @@ static void ct_ca9x4_init_cpu_map(void) |
| { |
| int i, ncores = scu_get_core_count(MMIO_P2V(A9_MPCORE_SCU)); |
| |
| + if (ncores > nr_cpu_ids) { |
| + pr_warn("SMP: %u cores greater than maximum (%u), clipping\n", |
| + ncores, nr_cpu_ids); |
| + ncores = nr_cpu_ids; |
| + } |
| + |
| for (i = 0; i < ncores; ++i) |
| set_cpu_possible(i, true); |
| |