Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1757210AbcJHHpI (ORCPT ); Sat, 8 Oct 2016 03:45:08 -0400 Received: from cn.fujitsu.com ([59.151.112.132]:8363 "EHLO heian.cn.fujitsu.com" rhost-flags-OK-FAIL-OK-FAIL) by vger.kernel.org with ESMTP id S1753117AbcJHHpB (ORCPT ); Sat, 8 Oct 2016 03:45:01 -0400 X-IronPort-AV: E=Sophos;i="5.22,518,1449504000"; d="scan'208";a="11729247" From: Dou Liyang To: , , , CC: , , , Subject: [PATCH 2/2] x86/acpi: Fix error handling steps in parsing the lapic/x2apic entry Date: Sat, 8 Oct 2016 15:44:37 +0800 Message-ID: <1475912677-19190-3-git-send-email-douly.fnst@cn.fujitsu.com> X-Mailer: git-send-email 2.5.5 In-Reply-To: <1475912677-19190-1-git-send-email-douly.fnst@cn.fujitsu.com> References: <1475912677-19190-1-git-send-email-douly.fnst@cn.fujitsu.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [10.167.226.106] X-yoursite-MailScanner-ID: BC22A466F727.A1CC2 X-yoursite-MailScanner: Found to be clean X-yoursite-MailScanner-From: douly.fnst@cn.fujitsu.com Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2762 Lines: 84 Originally, in acpi_parse_x2apic(), when the apic_id is invalid and enabled is false, the acpi_register_lapic() also can be executed. This does not make sense. Optimize the decision logic to avoid performing meaningless operations if the apic_id is invalid. Signed-off-by: Dou Liyang --- arch/x86/kernel/acpi/boot.c | 33 +++++++++++++++++++++------------ 1 file changed, 21 insertions(+), 12 deletions(-) diff --git a/arch/x86/kernel/acpi/boot.c b/arch/x86/kernel/acpi/boot.c index d642c95..343e752 100644 --- a/arch/x86/kernel/acpi/boot.c +++ b/arch/x86/kernel/acpi/boot.c @@ -203,17 +203,20 @@ acpi_parse_x2apic(struct acpi_subtable_header *header, const unsigned long end) apic_id = processor->local_apic_id; enabled = processor->lapic_flags & ACPI_MADT_ENABLED; #ifdef CONFIG_X86_X2APIC + if (!apic->apic_id_valid(apic_id)) { + if (enabled) + printk(KERN_WARNING PREFIX "x2apic entry ignored\n"); + return -EINVAL; + } + /* - * We need to register disabled CPU as well to permit - * counting disabled CPUs. This allows us to size - * cpus_possible_map more accurately, to permit - * to not preallocating memory for all NR_CPUS - * when we use CPU hotplug. - */ - if (!apic->apic_id_valid(apic_id) && enabled) - printk(KERN_WARNING PREFIX "x2apic entry ignored\n"); - else - acpi_register_lapic(apic_id, processor->uid, enabled); + * We need to register disabled CPU as well to permit + * counting disabled CPUs. This allows us to size + * cpus_possible_map more accurately, to permit + * to not preallocating memory for all NR_CPUS + * when we use CPU hotplug. + */ + acpi_register_lapic(apic_id, processor->uid, enabled); #else printk(KERN_WARNING PREFIX "x2apic entry ignored\n"); #endif @@ -225,6 +228,7 @@ static int __init acpi_parse_lapic(struct acpi_subtable_header * header, const unsigned long end) { struct acpi_madt_local_apic *processor = NULL; + u8 enabled; processor = (struct acpi_madt_local_apic *)header; @@ -233,9 +237,14 @@ acpi_parse_lapic(struct acpi_subtable_header * header, const unsigned long end) acpi_table_print_madt_entry(header); + enabled = processor->lapic_flags & ACPI_MADT_ENABLED; + /* the 0xff is an invalid local APIC id */ - if (processor->id == 0xff) + if (processor->id == 0xff) { + if (enabled) + printk(KERN_WARNING PREFIX "lapic entry ignored\n"); return -EINVAL; + } /* * We need to register disabled CPU as well to permit @@ -246,7 +255,7 @@ acpi_parse_lapic(struct acpi_subtable_header * header, const unsigned long end) */ acpi_register_lapic(processor->id, /* APIC ID */ processor->processor_id, /* ACPI ID */ - processor->lapic_flags & ACPI_MADT_ENABLED); + enabled); return 0; } -- 2.5.5