diff options
Diffstat (limited to 'drivers/acpi')
-rw-r--r-- | drivers/acpi/processor_core.c | 20 |
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; |
105 | found: | ||
106 | *apic_id = tmp; | ||
107 | return 1; | 97 | return 1; |
108 | } | 98 | } |
109 | 99 | ||