Messages in this thread | | | Date | Wed, 6 Sep 2017 18:17:28 +0800 | From | Baoquan He <> | Subject | Re: [PATCH v8 01/13] x86/apic: Construct a selector for the interrupt delivery mode |
| |
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 > > >
| |