mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 02:30:34 +02:00 
			
		
		
		
	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: Yinghai Lu <yinghai@kernel.org>
LKML-Reference: <1265793639-15071-34-git-send-email-yinghai@kernel.org>
Acked-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: H. Peter Anvin <hpa@zytor.com>
Cc: Tony Luck <tony.luck@intel.com>
			
			
This commit is contained in:
		
							parent
							
								
									6738762d73
								
							
						
					
					
						commit
						2b633e3fac
					
				
					 5 changed files with 28 additions and 7 deletions
				
			
		| 
						 | 
					@ -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
 | 
								purges which is reported from either PAL_VM_SUMMARY or
 | 
				
			||||||
			SAL PALO.
 | 
								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.
 | 
						nr_uarts=	[SERIAL] maximum number of UARTs to be registered.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	numa_zonelist_order= [KNL, BOOT] Select zonelist order for NUMA.
 | 
						numa_zonelist_order= [KNL, BOOT] Select zonelist order for NUMA.
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -881,8 +881,8 @@ __init void prefill_possible_map(void)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	possible = available_cpus + additional_cpus;
 | 
						possible = available_cpus + additional_cpus;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (possible > NR_CPUS)
 | 
						if (possible > nr_cpu_ids)
 | 
				
			||||||
		possible = NR_CPUS;
 | 
							possible = nr_cpu_ids;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	printk(KERN_INFO "SMP: Allowing %d CPUs, %d hotplug CPUs\n",
 | 
						printk(KERN_INFO "SMP: Allowing %d CPUs, %d hotplug CPUs\n",
 | 
				
			||||||
		possible, max((possible - available_cpus), 0));
 | 
							possible, max((possible - available_cpus), 0));
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1213,11 +1213,12 @@ __init void prefill_possible_map(void)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	total_cpus = max_t(int, possible, num_processors + disabled_cpus);
 | 
						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
 | 
							printk(KERN_WARNING
 | 
				
			||||||
			"%d Processors exceeds NR_CPUS limit of %d\n",
 | 
								"%d Processors exceeds NR_CPUS limit of %d\n",
 | 
				
			||||||
			possible, CONFIG_NR_CPUS);
 | 
								possible, nr_cpu_ids);
 | 
				
			||||||
		possible = CONFIG_NR_CPUS;
 | 
							possible = nr_cpu_ids;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	printk(KERN_INFO "SMP: Allowing %d CPUs, %d hotplug CPUs\n",
 | 
						printk(KERN_INFO "SMP: Allowing %d CPUs, %d hotplug CPUs\n",
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -279,9 +279,9 @@ int __init acpi_numa_init(void)
 | 
				
			||||||
	/* SRAT: Static Resource Affinity Table */
 | 
						/* SRAT: Static Resource Affinity Table */
 | 
				
			||||||
	if (!acpi_table_parse(ACPI_SIG_SRAT, acpi_parse_srat)) {
 | 
						if (!acpi_table_parse(ACPI_SIG_SRAT, acpi_parse_srat)) {
 | 
				
			||||||
		acpi_table_parse_srat(ACPI_SRAT_TYPE_X2APIC_CPU_AFFINITY,
 | 
							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_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,
 | 
							ret = acpi_table_parse_srat(ACPI_SRAT_TYPE_MEMORY_AFFINITY,
 | 
				
			||||||
					    acpi_parse_memory_affinity,
 | 
										    acpi_parse_memory_affinity,
 | 
				
			||||||
					    NR_NODE_MEMBLKS);
 | 
										    NR_NODE_MEMBLKS);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										14
									
								
								init/main.c
									
									
									
									
									
								
							
							
						
						
									
										14
									
								
								init/main.c
									
									
									
									
									
								
							| 
						 | 
					@ -149,6 +149,20 @@ static int __init nosmp(char *str)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
early_param("nosmp", nosmp);
 | 
					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)
 | 
					static int __init maxcpus(char *str)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	get_option(&str, &setup_max_cpus);
 | 
						get_option(&str, &setup_max_cpus);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue