Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752662AbdIFKRh (ORCPT ); Wed, 6 Sep 2017 06:17:37 -0400 Received: from mx1.redhat.com ([209.132.183.28]:60840 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752485AbdIFKRd (ORCPT ); Wed, 6 Sep 2017 06:17:33 -0400 DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com BA76C37E88 Authentication-Results: ext-mx05.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx05.extmail.prod.ext.phx2.redhat.com; spf=fail smtp.mailfrom=bhe@redhat.com Date: Wed, 6 Sep 2017 18:17:28 +0800 From: Baoquan He To: Dou Liyang Cc: x86@kernel.org, linux-kernel@vger.kernel.org, tglx@linutronix.de, mingo@kernel.org, hpa@zytor.com, rjw@rjwysocki.net, bp@alien8.de, indou.takao@jp.fujitsu.com, izumi.taku@jp.fujitsu.com Subject: Re: [PATCH v8 01/13] x86/apic: Construct a selector for the interrupt delivery mode Message-ID: <20170906101728.GM30906@x1> References: <1503890438-27840-1-git-send-email-douly.fnst@cn.fujitsu.com> <1503890438-27840-2-git-send-email-douly.fnst@cn.fujitsu.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1503890438-27840-2-git-send-email-douly.fnst@cn.fujitsu.com> User-Agent: Mutt/1.7.0 (2016-08-17) X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.29]); Wed, 06 Sep 2017 10:17:33 +0000 (UTC) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2212 Lines: 89 Hi Dou, On 08/28/17 at 11:20am, Dou Liyang wrote: > +static int __init apic_intr_mode_select(void) > +{ > + /* Check kernel option */ > + if (disable_apic) { > + pr_info("APIC disabled via kernel command line\n"); > + return APIC_PIC; > + } > + I am not very familiar with cpu registers, not sure if we can adjust below code flow as: /* If APIC is integrated, check local APIC only */ if (lapic_is_integrated() && !boot_cpu_has(X86_FEATURE_APIC)) { disable_apic = 1; pr_info("APIC disabled by BIOS\n"); return APIC_PIC; } /* If APIC is on a separate chip, check if smp_found_config is found*/ if (!lapic_is_integrated() && !smp_found_config) { disable_apic = 1; return APIC_PIC; } ~~~~ Now, I haven't think of why smp_found_config has to be checked here. In this way, we don't need the CONFIG_X86_64 checking since it's contained in lapic_is_integrated() already. And the checking is obvious for understanding. Just not very sure if the checking is adequate. Just my personal opinion. > + /* Check BIOS */ > +#ifdef CONFIG_X86_64 > + /* On 64-bit, the APIC must be integrated, Check local APIC only */ > + if (!boot_cpu_has(X86_FEATURE_APIC)) { > + disable_apic = 1; > + pr_info("APIC disabled by BIOS\n"); > + return APIC_PIC; > + } > +#else > + /* > + * On 32-bit, check whether there is a separate chip or integrated > + * APIC > + */ > + > + /* Has a separate chip ? */ > + if (!boot_cpu_has(X86_FEATURE_APIC) && !smp_found_config) { > + disable_apic = 1; > + > + return APIC_PIC; > + } > + > + /* Has a local APIC ? */ > + if (!boot_cpu_has(X86_FEATURE_APIC) && > + APIC_INTEGRATED(boot_cpu_apic_version)) { > + disable_apic = 1; > + pr_err(FW_BUG "Local APIC %d not detected, force emulation\n", > + boot_cpu_physical_apicid); > + > + return APIC_PIC; > + } > +#endif > + > + /* Check MP table or ACPI MADT configuration */ > + if (!smp_found_config) { > + disable_ioapic_support(); > + > + if (!acpi_lapic) > + pr_info("APIC: ACPI MADT or MP tables are not detected\n"); > + > + return APIC_VIRTUAL_WIRE; > + } > + > + return APIC_SYMMETRIC_IO; > +} > + > /* > * An initial setup of the virtual wire mode. > */ > -- > 2.5.5 > > >