Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2b633e3f authored by Yinghai Lu's avatar Yinghai Lu Committed by H. Peter Anvin
Browse files

smp: Use nr_cpus= to set nr_cpu_ids early



On x86, before prefill_possible_map(), nr_cpu_ids will be NR_CPUS aka
CONFIG_NR_CPUS.

Add nr_cpus= to set nr_cpu_ids. so we can simulate cpus <=8 are installed on
normal config.

-v2: accordging to Christoph, acpi_numa_init should use nr_cpu_ids in stead of
     NR_CPUS.
-v3: add doc in kernel-parameters.txt according to Andrew.

Signed-off-by: default avatarYinghai Lu <yinghai@kernel.org>
LKML-Reference: <1265793639-15071-34-git-send-email-yinghai@kernel.org>
Acked-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: default avatarH. Peter Anvin <hpa@zytor.com>
Cc: Tony Luck <tony.luck@intel.com>
parent 6738762d
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -1772,6 +1772,12 @@ and is between 256 and 4096 characters. It is defined in the file
			purges which is reported from either PAL_VM_SUMMARY or
			SAL PALO.

	nr_cpus=	[SMP] Maximum number of processors that	an SMP kernel
			could support.  nr_cpus=n : n >= 1 limits the kernel to
			supporting 'n' processors. Later in runtime you can not
			use hotplug cpu feature to put more cpu back to online.
			just like you compile the kernel NR_CPUS=n

	nr_uarts=	[SERIAL] maximum number of UARTs to be registered.

	numa_zonelist_order= [KNL, BOOT] Select zonelist order for NUMA.
+2 −2
Original line number Diff line number Diff line
@@ -881,8 +881,8 @@ __init void prefill_possible_map(void)

	possible = available_cpus + additional_cpus;

	if (possible > NR_CPUS)
		possible = NR_CPUS;
	if (possible > nr_cpu_ids)
		possible = nr_cpu_ids;

	printk(KERN_INFO "SMP: Allowing %d CPUs, %d hotplug CPUs\n",
		possible, max((possible - available_cpus), 0));
+4 −3
Original line number Diff line number Diff line
@@ -1213,11 +1213,12 @@ __init void prefill_possible_map(void)

	total_cpus = max_t(int, possible, num_processors + disabled_cpus);

	if (possible > CONFIG_NR_CPUS) {
	/* nr_cpu_ids could be reduced via nr_cpus= */
	if (possible > nr_cpu_ids) {
		printk(KERN_WARNING
			"%d Processors exceeds NR_CPUS limit of %d\n",
			possible, CONFIG_NR_CPUS);
		possible = CONFIG_NR_CPUS;
			possible, nr_cpu_ids);
		possible = nr_cpu_ids;
	}

	printk(KERN_INFO "SMP: Allowing %d CPUs, %d hotplug CPUs\n",
+2 −2
Original line number Diff line number Diff line
@@ -279,9 +279,9 @@ int __init acpi_numa_init(void)
	/* SRAT: Static Resource Affinity Table */
	if (!acpi_table_parse(ACPI_SIG_SRAT, acpi_parse_srat)) {
		acpi_table_parse_srat(ACPI_SRAT_TYPE_X2APIC_CPU_AFFINITY,
				      acpi_parse_x2apic_affinity, NR_CPUS);
				     acpi_parse_x2apic_affinity, nr_cpu_ids);
		acpi_table_parse_srat(ACPI_SRAT_TYPE_CPU_AFFINITY,
				      acpi_parse_processor_affinity, NR_CPUS);
				     acpi_parse_processor_affinity, nr_cpu_ids);
		ret = acpi_table_parse_srat(ACPI_SRAT_TYPE_MEMORY_AFFINITY,
					    acpi_parse_memory_affinity,
					    NR_NODE_MEMBLKS);
+14 −0
Original line number Diff line number Diff line
@@ -149,6 +149,20 @@ static int __init nosmp(char *str)

early_param("nosmp", nosmp);

/* this is hard limit */
static int __init nrcpus(char *str)
{
	int nr_cpus;

	get_option(&str, &nr_cpus);
	if (nr_cpus > 0 && nr_cpus < nr_cpu_ids)
		nr_cpu_ids = nr_cpus;

	return 0;
}

early_param("nr_cpus", nrcpus);

static int __init maxcpus(char *str)
{
	get_option(&str, &setup_max_cpus);