|
@@ -882,40 +882,10 @@ __init void prefill_possible_map(void)
|
|
|
set_cpu_possible(i, true);
|
|
|
}
|
|
|
|
|
|
-static int _acpi_map_lsapic(acpi_handle handle, int *pcpu)
|
|
|
+static int _acpi_map_lsapic(acpi_handle handle, int physid, int *pcpu)
|
|
|
{
|
|
|
- struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL };
|
|
|
- union acpi_object *obj;
|
|
|
- struct acpi_madt_local_sapic *lsapic;
|
|
|
cpumask_t tmp_map;
|
|
|
- int cpu, physid;
|
|
|
-
|
|
|
- if (ACPI_FAILURE(acpi_evaluate_object(handle, "_MAT", NULL, &buffer)))
|
|
|
- return -EINVAL;
|
|
|
-
|
|
|
- if (!buffer.length || !buffer.pointer)
|
|
|
- return -EINVAL;
|
|
|
-
|
|
|
- obj = buffer.pointer;
|
|
|
- if (obj->type != ACPI_TYPE_BUFFER)
|
|
|
- {
|
|
|
- kfree(buffer.pointer);
|
|
|
- return -EINVAL;
|
|
|
- }
|
|
|
-
|
|
|
- lsapic = (struct acpi_madt_local_sapic *)obj->buffer.pointer;
|
|
|
-
|
|
|
- if ((lsapic->header.type != ACPI_MADT_TYPE_LOCAL_SAPIC) ||
|
|
|
- (!(lsapic->lapic_flags & ACPI_MADT_ENABLED))) {
|
|
|
- kfree(buffer.pointer);
|
|
|
- return -EINVAL;
|
|
|
- }
|
|
|
-
|
|
|
- physid = ((lsapic->id << 8) | (lsapic->eid));
|
|
|
-
|
|
|
- kfree(buffer.pointer);
|
|
|
- buffer.length = ACPI_ALLOCATE_BUFFER;
|
|
|
- buffer.pointer = NULL;
|
|
|
+ int cpu;
|
|
|
|
|
|
cpumask_complement(&tmp_map, cpu_present_mask);
|
|
|
cpu = cpumask_first(&tmp_map);
|
|
@@ -934,9 +904,9 @@ static int _acpi_map_lsapic(acpi_handle handle, int *pcpu)
|
|
|
}
|
|
|
|
|
|
/* wrapper to silence section mismatch warning */
|
|
|
-int __ref acpi_map_lsapic(acpi_handle handle, int *pcpu)
|
|
|
+int __ref acpi_map_lsapic(acpi_handle handle, int physid, int *pcpu)
|
|
|
{
|
|
|
- return _acpi_map_lsapic(handle, pcpu);
|
|
|
+ return _acpi_map_lsapic(handle, physid, pcpu);
|
|
|
}
|
|
|
EXPORT_SYMBOL(acpi_map_lsapic);
|
|
|
|