aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/acpi
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/acpi')
-rw-r--r--drivers/acpi/processor_core.c20
1 files changed, 5 insertions, 15 deletions
diff --git a/drivers/acpi/processor_core.c b/drivers/acpi/processor_core.c
index 18fa6337c12c..ee9bce18c084 100644
--- a/drivers/acpi/processor_core.c
+++ b/drivers/acpi/processor_core.c
@@ -83,27 +83,17 @@ static int map_lsapic_id(struct acpi_subtable_header *entry,
83{ 83{
84 struct acpi_madt_local_sapic *lsapic = 84 struct acpi_madt_local_sapic *lsapic =
85 (struct acpi_madt_local_sapic *)entry; 85 (struct acpi_madt_local_sapic *)entry;
86 u32 tmp = (lsapic->id << 8) | lsapic->eid;
87 86
88 /* Only check enabled APICs*/
89 if (!(lsapic->lapic_flags & ACPI_MADT_ENABLED)) 87 if (!(lsapic->lapic_flags & ACPI_MADT_ENABLED))
90 return 0; 88 return 0;
91 89
92 /* Device statement declaration type */
93 if (device_declaration) { 90 if (device_declaration) {
94 if (entry->length < 16) 91 if ((entry->length < 16) || (lsapic->uid != acpi_id))
95 printk(KERN_ERR PREFIX 92 return 0;
96 "Invalid LSAPIC with Device type processor (SAPIC ID %#x)\n", 93 } else if (lsapic->processor_id != acpi_id)
97 tmp); 94 return 0;
98 else if (lsapic->uid == acpi_id)
99 goto found;
100 /* Processor statement declaration type */
101 } else if (lsapic->processor_id == acpi_id)
102 goto found;
103 95
104 return 0; 96 *apic_id = (lsapic->id << 8) | lsapic->eid;
105found:
106 *apic_id = tmp;
107 return 1; 97 return 1;
108} 98}
109 99