2006-10-18 22:24:46

by Dave Jones

[permalink] [raw]
Subject: SMP broken on pre-ACPI machine.

I've been chasing a bug that got filed against the Fedora kernel
a while back: https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=199052
This is a dual pentium pro from an era before we had ACPI, and
it seems to be falling foul of this test in smpboot.c ..

if (!smp_found_config && !acpi_lapic) {
printk(KERN_NOTICE "SMP motherboard not detected.\n");
smpboot_clear_io_apic_irqs();
phys_cpu_present_map = physid_mask_of_physid(0);
if (APIC_init_uniprocessor())
printk(KERN_NOTICE "Local APIC not detected."
" Using dummy APIC emulation.\n");
map_cpu_to_logical_apicid();
cpu_set(0, cpu_sibling_map[0]);
cpu_set(0, cpu_core_map[0]);
return;
}


My initial reaction is that the !acpi_lapic test should be conditional
on some variable that gets set if the ACPI parsing actually succeeded.

Thoughts?

Dave

--
http://www.codemonkey.org.uk


2006-10-18 23:45:32

by Sergio Monteiro Basto

[permalink] [raw]
Subject: Re: SMP broken on pre-ACPI machine.

On Wed, 2006-10-18 at 18:24 -0400, Dave Jones wrote:
> I've been chasing a bug that got filed against the Fedora kernel
> a while back: https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=199052
> This is a dual pentium pro from an era before we had ACPI, and
> it seems to be falling foul of this test in smpboot.c ..
>
> if (!smp_found_config && !acpi_lapic) {
> printk(KERN_NOTICE "SMP motherboard not detected.\n");
> smpboot_clear_io_apic_irqs();
> phys_cpu_present_map = physid_mask_of_physid(0);
> if (APIC_init_uniprocessor())
> printk(KERN_NOTICE "Local APIC not detected."
> " Using dummy APIC emulation.\n");
> map_cpu_to_logical_apicid();
> cpu_set(0, cpu_sibling_map[0]);
> cpu_set(0, cpu_core_map[0]);
> return;
> }
>
>
> My initial reaction is that the !acpi_lapic test should be conditional
> on some variable that gets set if the ACPI parsing actually succeeded.
>
> Thoughts?
>
> Dave
>

acpi=off ? this machine should work with APM. BTW, so time ago, this
machine would enter in ACPI blacklist (by the year of bios) and ACPI was
turned off automatically.

--
S?rgio M.B.


Attachments:
smime.p7s (2.12 kB)

2006-10-19 05:31:20

by Brown, Len

[permalink] [raw]
Subject: Re: SMP broken on pre-ACPI machine.

On Wednesday 18 October 2006 18:24, Dave Jones wrote:
> I've been chasing a bug that got filed against the Fedora kernel
> a while back: https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=199052
> This is a dual pentium pro from an era before we had ACPI, and
> it seems to be falling foul of this test in smpboot.c ..
>
> if (!smp_found_config && !acpi_lapic) {
> printk(KERN_NOTICE "SMP motherboard not detected.\n");
> smpboot_clear_io_apic_irqs();
> phys_cpu_present_map = physid_mask_of_physid(0);
> if (APIC_init_uniprocessor())
> printk(KERN_NOTICE "Local APIC not detected."
> " Using dummy APIC emulation.\n");
> map_cpu_to_logical_apicid();
> cpu_set(0, cpu_sibling_map[0]);
> cpu_set(0, cpu_core_map[0]);
> return;
> }
>
>
> My initial reaction is that the !acpi_lapic test should be conditional
> on some variable that gets set if the ACPI parsing actually succeeded.

acpi_lapic isn't related to the problem at hand -- that smp_found_config is not set.

That said, allowing acpi_lapic=1 to bail out of this check has the sole
function of allowing SMP/PIC configurations. (smp_found_config
in ACPI mode is set if acpi_lapic and acpi_ioapic are set)
SMP/PIC configurations are not very interesting, except for debugging.
Indeed, MPS prohibits them by mandating an IOAPIC be present for SMP --
but ACPI has no such rule.

-Len

2006-10-19 19:17:15

by Dave Jones

[permalink] [raw]
Subject: Re: SMP broken on pre-ACPI machine.

On Thu, Oct 19, 2006 at 01:33:40AM -0400, Len Brown wrote:
> On Wednesday 18 October 2006 18:24, Dave Jones wrote:
> > I've been chasing a bug that got filed against the Fedora kernel
> > a while back: https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=199052
> > This is a dual pentium pro from an era before we had ACPI, and
> > it seems to be falling foul of this test in smpboot.c ..
> >
> > if (!smp_found_config && !acpi_lapic) {
> > printk(KERN_NOTICE "SMP motherboard not detected.\n");
> >
> > My initial reaction is that the !acpi_lapic test should be conditional
> > on some variable that gets set if the ACPI parsing actually succeeded.
>
> acpi_lapic isn't related to the problem at hand -- that smp_found_config is not set.

Right, it just seemed odd to me when I was eyeballing this code.

> That said, allowing acpi_lapic=1 to bail out of this check has the sole
> function of allowing SMP/PIC configurations. (smp_found_config
> in ACPI mode is set if acpi_lapic and acpi_ioapic are set)
> SMP/PIC configurations are not very interesting, except for debugging.
> Indeed, MPS prohibits them by mandating an IOAPIC be present for SMP --
> but ACPI has no such rule.

Why smp_found_config isn't set in that guys configuration is a mystery to me,
as his MPS tables look sane..

MP Table:
# APIC ID Version State Family Model Step Flags
# 0 0x10 BSP, usable 6 2 1 0x0381
# 0 0x10 AP, usable 6 1 7 0xfbff

Hmm, wait, he has unpaired CPUs. I wonder if that's the reason.
I know *some* combinations of PPro's are valid to be paired, but I'll
need to dig out the old docs to be sure.

Dave

--
http://www.codemonkey.org.uk

2006-10-19 20:11:59

by Dave Jones

[permalink] [raw]
Subject: Re: SMP broken on pre-ACPI machine.

On Thu, Oct 19, 2006 at 03:16:44PM -0400, Dave Jones wrote:

> Why smp_found_config isn't set in that guys configuration is a mystery to me,
> as his MPS tables look sane..
>
> MP Table:
> # APIC ID Version State Family Model Step Flags
> # 0 0x10 BSP, usable 6 2 1 0x0381
> # 0 0x10 AP, usable 6 1 7 0xfbff
>
> Hmm, wait, he has unpaired CPUs. I wonder if that's the reason.
> I know *some* combinations of PPro's are valid to be paired, but I'll
> need to dig out the old docs to be sure.

Ok, after reading http://www.intel.com/design/archives/processors/pro/docs/242689.htm
I'm more puzzled than ever. There never was a model 2 Pentium Pro.
Either this BIOS is on crack and putting nonsense in its MPS tables,
or this is a hardware flaw of some sort.

Dave

--
http://www.codemonkey.org.uk

2006-10-19 22:15:24

by Alan

[permalink] [raw]
Subject: Re: SMP broken on pre-ACPI machine.

Ar Iau, 2006-10-19 am 16:11 -0400, ysgrifennodd Dave Jones:
> On Thu, Oct 19, 2006 at 03:16:44PM -0400, Dave Jones wrote:
>
> > Why smp_found_config isn't set in that guys configuration is a mystery to me,
> > as his MPS tables look sane..
> >
> > MP Table:
> > # APIC ID Version State Family Model Step Flags
> > # 0 0x10 BSP, usable 6 2 1 0x0381

Isn't that an "overdrive" ? if so it isn't supposed to be SMP capable

2006-10-19 23:21:33

by Dave Jones

[permalink] [raw]
Subject: Re: SMP broken on pre-ACPI machine.

On Thu, Oct 19, 2006 at 11:17:19PM +0100, Alan Cox wrote:
> Ar Iau, 2006-10-19 am 16:11 -0400, ysgrifennodd Dave Jones:
> > On Thu, Oct 19, 2006 at 03:16:44PM -0400, Dave Jones wrote:
> >
> > > Why smp_found_config isn't set in that guys configuration is a mystery to me,
> > > as his MPS tables look sane..
> > >
> > > MP Table:
> > > # APIC ID Version State Family Model Step Flags
> > > # 0 0x10 BSP, usable 6 2 1 0x0381
>
> Isn't that an "overdrive" ? if so it isn't supposed to be SMP capable

I don't think so. The only overdrive that fitted in a socket 8 board
was a PPro->PentiumII thing, which would be model 3 stepping 2 as far
as I can figure out from a lengthy archeology trip through developer.intel.com.

There were also some Socket8->Socket370 convertors, but afaik they just passed
through the family/model/stepping of whatever was plugged into them.

Dave

--
http://www.codemonkey.org.uk