x86/uv: fix init of memory-less nodes
Add support for nodes that have cpus but no memory.
The current code was failing to add these nodes
to the nodes_present_map.
v2: Fixes case caught by David Rientjes - missed support
    for the x2apic SRAT table.
[ Impact: fix potential boot crash on memory-less UV nodes. ]
Reported-by: David Rientjes <rientjes@google.com>
Signed-off-by: Jack Steiner <steiner@sgi.com>
LKML-Reference: <20090417142242.GA23743@sgi.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
	
	
This commit is contained in:
		
					parent
					
						
							
								0917798d82
							
						
					
				
			
			
				commit
				
					
						dc09855191
					
				
			
		
					 1 changed files with 5 additions and 1 deletions
				
			
		|  | @ -28,6 +28,7 @@ int acpi_numa __initdata; | ||||||
| static struct acpi_table_slit *acpi_slit; | static struct acpi_table_slit *acpi_slit; | ||||||
| 
 | 
 | ||||||
| static nodemask_t nodes_parsed __initdata; | static nodemask_t nodes_parsed __initdata; | ||||||
|  | static nodemask_t cpu_nodes_parsed __initdata; | ||||||
| static struct bootnode nodes[MAX_NUMNODES] __initdata; | static struct bootnode nodes[MAX_NUMNODES] __initdata; | ||||||
| static struct bootnode nodes_add[MAX_NUMNODES]; | static struct bootnode nodes_add[MAX_NUMNODES]; | ||||||
| static int found_add_area __initdata; | static int found_add_area __initdata; | ||||||
|  | @ -141,6 +142,7 @@ acpi_numa_x2apic_affinity_init(struct acpi_srat_x2apic_cpu_affinity *pa) | ||||||
| 
 | 
 | ||||||
| 	apic_id = pa->apic_id; | 	apic_id = pa->apic_id; | ||||||
| 	apicid_to_node[apic_id] = node; | 	apicid_to_node[apic_id] = node; | ||||||
|  | 	node_set(node, cpu_nodes_parsed); | ||||||
| 	acpi_numa = 1; | 	acpi_numa = 1; | ||||||
| 	printk(KERN_INFO "SRAT: PXM %u -> APIC %u -> Node %u\n", | 	printk(KERN_INFO "SRAT: PXM %u -> APIC %u -> Node %u\n", | ||||||
| 	       pxm, apic_id, node); | 	       pxm, apic_id, node); | ||||||
|  | @ -174,6 +176,7 @@ acpi_numa_processor_affinity_init(struct acpi_srat_cpu_affinity *pa) | ||||||
| 	else | 	else | ||||||
| 		apic_id = pa->apic_id; | 		apic_id = pa->apic_id; | ||||||
| 	apicid_to_node[apic_id] = node; | 	apicid_to_node[apic_id] = node; | ||||||
|  | 	node_set(node, cpu_nodes_parsed); | ||||||
| 	acpi_numa = 1; | 	acpi_numa = 1; | ||||||
| 	printk(KERN_INFO "SRAT: PXM %u -> APIC %u -> Node %u\n", | 	printk(KERN_INFO "SRAT: PXM %u -> APIC %u -> Node %u\n", | ||||||
| 	       pxm, apic_id, node); | 	       pxm, apic_id, node); | ||||||
|  | @ -402,7 +405,8 @@ int __init acpi_scan_nodes(unsigned long start, unsigned long end) | ||||||
| 		return -1; | 		return -1; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	node_possible_map = nodes_parsed; | 	/* Account for nodes with cpus and no memory */ | ||||||
|  | 	nodes_or(node_possible_map, nodes_parsed, cpu_nodes_parsed); | ||||||
| 
 | 
 | ||||||
| 	/* Finally register nodes */ | 	/* Finally register nodes */ | ||||||
| 	for_each_node_mask(i, node_possible_map) | 	for_each_node_mask(i, node_possible_map) | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Jack Steiner
				Jack Steiner