diff options
| -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 | ||
