arm64: Honor nosmp kernel command line option
authorSuzuki K Poulose <suzuki.poulose@arm.com>
Thu, 21 Jul 2016 10:15:27 +0000 (11:15 +0100)
committerCatalin Marinas <catalin.marinas@arm.com>
Thu, 21 Jul 2016 15:48:37 +0000 (16:48 +0100)
Passing "nosmp" should boot the kernel with a single processor, without
provision to enable secondary CPUs even if they are present. "nosmp" is
implemented by setting maxcpus=0. At the moment we still mark the secondary
CPUs present even with nosmp, which allows the userspace to bring them
up. This patch corrects the smp_prepare_cpus() to honor the maxcpus == 0.

Commit 44dbcc93ab67145 ("arm64: Fix behavior of maxcpus=N") fixed the
behavior for maxcpus >= 1, but broke maxcpus = 0.

Fixes: 44dbcc93ab67 ("arm64: Fix behavior of maxcpus=N")
Cc: <stable@vger.kernel.org> # 4.7+
Cc: Will Deacon <will.deacon@arm.com>
Cc: James Morse <james.morse@arm.com>
Signed-off-by: Suzuki K Poulose <suzuki.poulose@arm.com>
Acked-by: Mark Rutland <mark.rutland@arm.com>
[catalin.marinas@arm.com: updated code comment]
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
arch/arm64/kernel/smp.c

index 298dd745651eb125deeecbf0e763571c98940ff5..490db85dec23bdfd1226dad8194b65535b9b79e8 100644 (file)
@@ -692,6 +692,13 @@ void __init smp_prepare_cpus(unsigned int max_cpus)
 
        smp_store_cpu_info(smp_processor_id());
 
+       /*
+        * If UP is mandated by "nosmp" (which implies "maxcpus=0"), don't set
+        * secondary CPUs present.
+        */
+       if (max_cpus == 0)
+               return;
+
        /*
         * Initialise the present map (which describes the set of CPUs
         * actually populated at the present time) and release the