Re: [PATCH v8 06/13] x86/apic: Mark the apic_intr_mode extern for sanity check cleanup

From: Baoquan He
Date: Wed Sep 06 2017 - 01:26:35 EST


On 09/06/17 at 12:25pm, Baoquan He wrote:
> On 08/28/17 at 11:20am, Dou Liyang wrote:
> > - /*
> > * Should not be necessary because the MP table should list the boot
> > * CPU too, but we do it for the sake of robustness anyway.
> > */
> > @@ -1254,29 +1237,6 @@ static int __init smp_sanity_check(unsigned max_cpus)
> > physid_set(hard_smp_processor_id(), phys_cpu_present_map);
> > }
> > preempt_enable();
> > -
> > - /*
> > - * If we couldn't find a local APIC, then get out of here now!
> > - */
> > - if (APIC_INTEGRATED(boot_cpu_apic_version) &&
> > - !boot_cpu_has(X86_FEATURE_APIC)) {
> > - if (!disable_apic) {
> > - pr_err("BIOS bug, local APIC #%d not detected!...\n",
> > - boot_cpu_physical_apicid);
> > - pr_err("... forcing use of dummy APIC emulation (tell your hw vendor)\n");
> > - }
> > - return SMP_NO_APIC;
> > - }
> > -
> > - /*
> > - * If SMP should be disabled, then really disable it!
> > - */
> > - if (!max_cpus) {
> > - pr_info("SMP mode deactivated\n");
> > - return SMP_FORCE_UP;
> > - }
> > -
> > - return SMP_OK;
> > }
> >
> > static void __init smp_cpu_index_default(void)
> > @@ -1335,19 +1295,20 @@ void __init native_smp_prepare_cpus(unsigned int max_cpus)
>
> Please also cleanup the passed in max_cpus since it's not used here any
> more. And up to the caller:

Oops, I just checked x86 code, other arch also have this hook. Please
ingore this comment.

>
> static noinline void __init kernel_init_freeable(void)
> {
> ...
> smp_prepare_cpus(setup_max_cpus);
> ...
> }
>
> >
> > apic_intr_mode_init();
> >
> > - switch (smp_sanity_check(max_cpus)) {
> > - case SMP_NO_CONFIG:
> > - disable_smp();
> > - return;
> > - case SMP_NO_APIC:
> > + smp_sanity_check();
> > +
> > + switch (apic_intr_mode) {
> > + case APIC_PIC:
> > + case APIC_VIRTUAL_WIRE_NO_CONFIG:
> > disable_smp();
> > return;
> > - case SMP_FORCE_UP:
> > + case APIC_SYMMETRIC_IO_NO_ROUTING:
> > disable_smp();
> > /* Setup local timer */
> > x86_init.timers.setup_percpu_clockev();
> > return;
> > - case SMP_OK:
> > + case APIC_VIRTUAL_WIRE:
> > + case APIC_SYMMETRIC_IO:
> > break;
> > }
> >
> > --
> > 2.5.5
> >
> >
> >