diff options
Diffstat (limited to 'drivers/acpi/processor_core.c')
| -rw-r--r-- | drivers/acpi/processor_core.c | 133 | 
1 files changed, 22 insertions, 111 deletions
diff --git a/drivers/acpi/processor_core.c b/drivers/acpi/processor_core.c index 611a5585a902..b933061b6b60 100644 --- a/drivers/acpi/processor_core.c +++ b/drivers/acpi/processor_core.c @@ -32,12 +32,12 @@ static struct acpi_table_madt *get_madt_table(void)  }  static int map_lapic_id(struct acpi_subtable_header *entry, -		 u32 acpi_id, phys_cpuid_t *apic_id, bool ignore_disabled) +		 u32 acpi_id, phys_cpuid_t *apic_id)  {  	struct acpi_madt_local_apic *lapic =  		container_of(entry, struct acpi_madt_local_apic, header); -	if (ignore_disabled && !(lapic->lapic_flags & ACPI_MADT_ENABLED)) +	if (!(lapic->lapic_flags & ACPI_MADT_ENABLED))  		return -ENODEV;  	if (lapic->processor_id != acpi_id) @@ -48,13 +48,12 @@ static int map_lapic_id(struct acpi_subtable_header *entry,  }  static int map_x2apic_id(struct acpi_subtable_header *entry, -		int device_declaration, u32 acpi_id, phys_cpuid_t *apic_id, -		bool ignore_disabled) +		int device_declaration, u32 acpi_id, phys_cpuid_t *apic_id)  {  	struct acpi_madt_local_x2apic *apic =  		container_of(entry, struct acpi_madt_local_x2apic, header); -	if (ignore_disabled && !(apic->lapic_flags & ACPI_MADT_ENABLED)) +	if (!(apic->lapic_flags & ACPI_MADT_ENABLED))  		return -ENODEV;  	if (device_declaration && (apic->uid == acpi_id)) { @@ -66,13 +65,12 @@ static int map_x2apic_id(struct acpi_subtable_header *entry,  }  static int map_lsapic_id(struct acpi_subtable_header *entry, -		int device_declaration, u32 acpi_id, phys_cpuid_t *apic_id, -		bool ignore_disabled) +		int device_declaration, u32 acpi_id, phys_cpuid_t *apic_id)  {  	struct acpi_madt_local_sapic *lsapic =  		container_of(entry, struct acpi_madt_local_sapic, header); -	if (ignore_disabled && !(lsapic->lapic_flags & ACPI_MADT_ENABLED)) +	if (!(lsapic->lapic_flags & ACPI_MADT_ENABLED))  		return -ENODEV;  	if (device_declaration) { @@ -89,13 +87,12 @@ static int map_lsapic_id(struct acpi_subtable_header *entry,   * Retrieve the ARM CPU physical identifier (MPIDR)   */  static int map_gicc_mpidr(struct acpi_subtable_header *entry, -		int device_declaration, u32 acpi_id, phys_cpuid_t *mpidr, -		bool ignore_disabled) +		int device_declaration, u32 acpi_id, phys_cpuid_t *mpidr)  {  	struct acpi_madt_generic_interrupt *gicc =  	    container_of(entry, struct acpi_madt_generic_interrupt, header); -	if (ignore_disabled && !(gicc->flags & ACPI_MADT_ENABLED)) +	if (!(gicc->flags & ACPI_MADT_ENABLED))  		return -ENODEV;  	/* device_declaration means Device object in DSDT, in the @@ -112,7 +109,7 @@ static int map_gicc_mpidr(struct acpi_subtable_header *entry,  }  static phys_cpuid_t map_madt_entry(struct acpi_table_madt *madt, -				   int type, u32 acpi_id, bool ignore_disabled) +				   int type, u32 acpi_id)  {  	unsigned long madt_end, entry;  	phys_cpuid_t phys_id = PHYS_CPUID_INVALID;	/* CPU hardware ID */ @@ -130,20 +127,16 @@ static phys_cpuid_t map_madt_entry(struct acpi_table_madt *madt,  		struct acpi_subtable_header *header =  			(struct acpi_subtable_header *)entry;  		if (header->type == ACPI_MADT_TYPE_LOCAL_APIC) { -			if (!map_lapic_id(header, acpi_id, &phys_id, -					  ignore_disabled)) +			if (!map_lapic_id(header, acpi_id, &phys_id))  				break;  		} else if (header->type == ACPI_MADT_TYPE_LOCAL_X2APIC) { -			if (!map_x2apic_id(header, type, acpi_id, &phys_id, -					   ignore_disabled)) +			if (!map_x2apic_id(header, type, acpi_id, &phys_id))  				break;  		} else if (header->type == ACPI_MADT_TYPE_LOCAL_SAPIC) { -			if (!map_lsapic_id(header, type, acpi_id, &phys_id, -					   ignore_disabled)) +			if (!map_lsapic_id(header, type, acpi_id, &phys_id))  				break;  		} else if (header->type == ACPI_MADT_TYPE_GENERIC_INTERRUPT) { -			if (!map_gicc_mpidr(header, type, acpi_id, &phys_id, -					    ignore_disabled)) +			if (!map_gicc_mpidr(header, type, acpi_id, &phys_id))  				break;  		}  		entry += header->length; @@ -161,15 +154,14 @@ phys_cpuid_t __init acpi_map_madt_entry(u32 acpi_id)  	if (!madt)  		return PHYS_CPUID_INVALID; -	rv = map_madt_entry(madt, 1, acpi_id, true); +	rv = map_madt_entry(madt, 1, acpi_id);  	acpi_put_table((struct acpi_table_header *)madt);  	return rv;  } -static phys_cpuid_t map_mat_entry(acpi_handle handle, int type, u32 acpi_id, -				  bool ignore_disabled) +static phys_cpuid_t map_mat_entry(acpi_handle handle, int type, u32 acpi_id)  {  	struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL };  	union acpi_object *obj; @@ -190,38 +182,30 @@ static phys_cpuid_t map_mat_entry(acpi_handle handle, int type, u32 acpi_id,  	header = (struct acpi_subtable_header *)obj->buffer.pointer;  	if (header->type == ACPI_MADT_TYPE_LOCAL_APIC) -		map_lapic_id(header, acpi_id, &phys_id, ignore_disabled); +		map_lapic_id(header, acpi_id, &phys_id);  	else if (header->type == ACPI_MADT_TYPE_LOCAL_SAPIC) -		map_lsapic_id(header, type, acpi_id, &phys_id, ignore_disabled); +		map_lsapic_id(header, type, acpi_id, &phys_id);  	else if (header->type == ACPI_MADT_TYPE_LOCAL_X2APIC) -		map_x2apic_id(header, type, acpi_id, &phys_id, ignore_disabled); +		map_x2apic_id(header, type, acpi_id, &phys_id);  	else if (header->type == ACPI_MADT_TYPE_GENERIC_INTERRUPT) -		map_gicc_mpidr(header, type, acpi_id, &phys_id, -			       ignore_disabled); +		map_gicc_mpidr(header, type, acpi_id, &phys_id);  exit:  	kfree(buffer.pointer);  	return phys_id;  } -static phys_cpuid_t __acpi_get_phys_id(acpi_handle handle, int type, -				       u32 acpi_id, bool ignore_disabled) +phys_cpuid_t acpi_get_phys_id(acpi_handle handle, int type, u32 acpi_id)  {  	phys_cpuid_t phys_id; -	phys_id = map_mat_entry(handle, type, acpi_id, ignore_disabled); +	phys_id = map_mat_entry(handle, type, acpi_id);  	if (invalid_phys_cpuid(phys_id)) -		phys_id = map_madt_entry(get_madt_table(), type, acpi_id, -					   ignore_disabled); +		phys_id = map_madt_entry(get_madt_table(), type, acpi_id);  	return phys_id;  } -phys_cpuid_t acpi_get_phys_id(acpi_handle handle, int type, u32 acpi_id) -{ -	return __acpi_get_phys_id(handle, type, acpi_id, true); -} -  int acpi_map_cpuid(phys_cpuid_t phys_id, u32 acpi_id)  {  #ifdef CONFIG_SMP @@ -278,79 +262,6 @@ int acpi_get_cpuid(acpi_handle handle, int type, u32 acpi_id)  }  EXPORT_SYMBOL_GPL(acpi_get_cpuid); -#ifdef CONFIG_ACPI_HOTPLUG_CPU -static bool __init -map_processor(acpi_handle handle, phys_cpuid_t *phys_id, int *cpuid) -{ -	int type, id; -	u32 acpi_id; -	acpi_status status; -	acpi_object_type acpi_type; -	unsigned long long tmp; -	union acpi_object object = { 0 }; -	struct acpi_buffer buffer = { sizeof(union acpi_object), &object }; - -	status = acpi_get_type(handle, &acpi_type); -	if (ACPI_FAILURE(status)) -		return false; - -	switch (acpi_type) { -	case ACPI_TYPE_PROCESSOR: -		status = acpi_evaluate_object(handle, NULL, NULL, &buffer); -		if (ACPI_FAILURE(status)) -			return false; -		acpi_id = object.processor.proc_id; - -		/* validate the acpi_id */ -		if(acpi_processor_validate_proc_id(acpi_id)) -			return false; -		break; -	case ACPI_TYPE_DEVICE: -		status = acpi_evaluate_integer(handle, "_UID", NULL, &tmp); -		if (ACPI_FAILURE(status)) -			return false; -		acpi_id = tmp; -		break; -	default: -		return false; -	} - -	type = (acpi_type == ACPI_TYPE_DEVICE) ? 1 : 0; - -	*phys_id = __acpi_get_phys_id(handle, type, acpi_id, false); -	id = acpi_map_cpuid(*phys_id, acpi_id); - -	if (id < 0) -		return false; -	*cpuid = id; -	return true; -} - -static acpi_status __init -set_processor_node_mapping(acpi_handle handle, u32 lvl, void *context, -			   void **rv) -{ -	phys_cpuid_t phys_id; -	int cpu_id; - -	if (!map_processor(handle, &phys_id, &cpu_id)) -		return AE_ERROR; - -	acpi_map_cpu2node(handle, cpu_id, phys_id); -	return AE_OK; -} - -void __init acpi_set_processor_mapping(void) -{ -	/* Set persistent cpu <-> node mapping for all processors. */ -	acpi_walk_namespace(ACPI_TYPE_PROCESSOR, ACPI_ROOT_OBJECT, -			    ACPI_UINT32_MAX, set_processor_node_mapping, -			    NULL, NULL, NULL); -} -#else -void __init acpi_set_processor_mapping(void) {} -#endif /* CONFIG_ACPI_HOTPLUG_CPU */ -  #ifdef CONFIG_ACPI_HOTPLUG_IOAPIC  static int get_ioapic_id(struct acpi_subtable_header *entry, u32 gsi_base,  			 u64 *phys_addr, int *ioapic_id)  | 
