Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 20 Sep 2000 11:39:53 +0100
From:      Daniel Bye <Daniel.Bye@uk.uu.net>
To:        "'questions@freebsd.org'" <questions@freebsd.org>
Subject:   SMP kernel for 4.1-STABLE
Message-ID:  <FB7CAC781DB6D311BEE800805FE6FADA2F4BE6@camexch4.cam.uk.internal>

next in thread | raw e-mail | index | archive | help
Hi all,

I have a Compaq 1850R dual PIII 550, running 4.1-STABLE quite happily with
almost any (sensible) uniprocessor kernel I give it.  As it's a dual
processor machine, I thought I'd try building an SMP kernel.  Easy.  Only
no, it wasn't.  Using the current UP build as the basis, I added various
values for the appropriate fields.  But no matter what I gave it, the new
kernel never boots.  What am I doing wrong?

Here are the relevant lines from the system file:

# To make an SMP kernel, the next two are needed
options         SMP                     # Symmetric MultiProcessor Kernel
options         APIC_IO                 # Symmetric (APIC) I/O
# Optionally these may need tweaked, (defaults shown):
options         NCPU=2                  # number of CPUs
options         NBUS=4                  # number of busses
options         NAPIC=4                       # number of IO APICs
options         NINTR=37                # number of INTs

The thing tells me if I give it too few INTs, and says that probing found
37.  But no matter what combination of numbers for the NBUS and NAPIC
fields, it never does more than this:

(All normal up to memory check, then...)
Programming 35 pins in IOAPIC #0
IOAPIC #0 intpin 2 -> irq 0
IOAPIC #0 intpin 31 -> irq 2

And there it stops.

This is the dmesg output from a good kernel:

Copyright (c) 1992-2000 The FreeBSD Project.
Copyright (c) 1979, 1980, 1983, 1986, 1988, 1989, 1991, 1992, 1993, 1994
	The Regents of the University of California. All rights reserved.
FreeBSD 4.1-RELEASE #5: Mon Sep 18 12:22:00 GMT 2000
    danielby@ecam082.cam.uk.internal:/usr/src/sys/compile/ECAM082
Timecounter "i8254"  frequency 1193182 Hz
Timecounter "TSC"  frequency 548336360 Hz
CPU: Pentium III/Pentium III Xeon/Celeron (548.34-MHz 686-class CPU)
  Origin = "GenuineIntel"  Id = 0x673  Stepping = 3
 
Features=0x383f9ff<FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,SEP,MTRR,PGE,MCA,CMOV,
PAT,PSE36,MMX,FXSR,XMM>
real memory  = 671072256 (655344K bytes)
avail memory = 648982528 (633772K bytes)
Preloaded elf kernel "kernel.SINGLE" at 0xc0302000.
Pentium Pro MTRR support enabled
md0: Malloc disk
npx0: <math processor> on motherboard
npx0: INT 16 interface
pcib0: <Intel 82443BX host to PCI bridge (AGP disabled)> on motherboard
pci0: <PCI bus> on pcib0
pci0: <unknown card> (vendor=0x1000, dev=0x000f) at 6.0 irq 5
pci0: <unknown card> (vendor=0x1000, dev=0x000f) at 6.1 irq 10
tl0: <Compaq Netelligent 10/100 Proliant> port 0x2c00-0x2c0f mem
0xc6efccf0-0xc6efccff irq 11 at device 7.0 on pci0
tl0: Ethernet address: 00:50:8b:cc:30:d9
miibus0: <MII bus> on tl0
ukphy0: <Generic IEEE 802.3u media interface> on miibus0
ukphy0:  10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto
tlphy0: <ThunderLAN 10baseT media interface> on miibus0
tlphy0:  10base2/BNC, 10base5/AUI
pci0: <ATI Mach64-GV graphics accelerator> at 8.0
pci0: <unknown card> (vendor=0x0e11, dev=0xa0f0) at 9.0
pcib1: <IBM 82351 PCI-PCI bridge> at device 13.0 on pci0
pci1: <PCI bus> on pcib1
ida0: <Compaq Smart Array 221 controller> port 0x3000-0x30ff mem
0xb8000000-0xbfffffff,0xc6ffff00-0xc6ffffff irq 15 at device 0.0 on pci1
ida0: drives=1 firm_rev=4.16
idad0: <Compaq Logical Drive> on ida0
idad0: 34727MB (71122560 sectors), blocksize=512
isab0: <Intel 82371AB PCI to ISA bridge> at device 20.0 on pci0
isa0: <ISA bus> on isab0
pci0: <Intel PIIX4 ATA controller> at 20.1
pci0: <Intel 82371AB/EB (PIIX4) USB controller> at 20.2 irq 0
chip1: <Intel 82371AB Power management controller> at device 20.3 on pci0
eisa0: <EISA bus> on motherboard
mainboard0: <CPQ0679 (System Board)> on eisa0 slot 0
fdc0: <NEC 72065B or clone> at port 0x3f0-0x3f5,0x3f7 irq 6 drq 2 on isa0
fdc0: FIFO enabled, 8 bytes threshold
fd0: <1440-KB 3.5" drive> on fdc0 drive 0
atkbdc0: <Keyboard controller (i8042)> at port 0x60,0x64 on isa0
atkbd0: <AT Keyboard> flags 0x1 irq 1 on atkbdc0
kbd0 at atkbd0
vga0: <Generic ISA VGA> at port 0x3c0-0x3df iomem 0xa0000-0xbffff on isa0
sc0: <System console> at flags 0x100 on isa0
sc0: VGA <16 virtual consoles, flags=0x300>
sio0 at port 0x3f8-0x3ff irq 4 flags 0x10 on isa0
sio0: type 16550A
sio1 at port 0x2f8-0x2ff irq 3 on isa0
sio1: type 16550A
ppc0: cannot reserve I/O port range
no devsw (majdev=0 bootdev=0xa0200000)
Mounting root from ufs:/dev/idad0s1a



And this is what I see when I do mptable:



MP Floating Pointer Structure:

  location:			BIOS
  physical address:		0x000f4ff0
  signature:			'_MP_'
  length:			16 bytes
  version:			1.4
  checksum:			0x00
  mode:				Virtual Wire

----------------------------------------------------------------------------
---

MP Config Table Header:

  physical address:		0x000f2b9f
  signature:			'PCMP'
  base table length:		420
  version:			1.4
  checksum:			0x6a
  OEM ID:			'COMPAQ  '
  Product ID:			'PROLIANT    '
  OEM table pointer:		0x00000000
  OEM table size:		0
  entry count:			44
  local APIC address:		0xfee00000
  extended table length:	76
  extended table checksum:	86

----------------------------------------------------------------------------
---

MP Config Base Table Entries:

--
Processors:	APIC ID	Version	State		Family	Model	Step
Flags
		 0	 0x10	 BSP, usable	 6	 2	 1
0x0381
		 0	 0x10	 AP, usable	 6	 7	 3
0x383fbff
--
Bus:		Bus ID	Type
		 0	 PCI   
		 9	 ISA   
--
I/O APICs:	APIC ID	Version	State		Address
		 8	 0x11	 usable		 0xfec00000
--
I/O Ints:	Type	Polarity    Trigger	Bus ID	 IRQ	APIC ID	PIN#
		INT	active-lo       level	     0	13:A	      8	  17
		INT	active-lo       level	     0	13:B	      8	  16
		INT	active-lo       level	     0	13:C	      8	  17
		INT	active-lo       level	     0	13:D	      8	  16
		INT	active-lo       level	     0	15:A	      8	  19
		INT	active-lo       level	     0	15:B	      8	  18
		INT	active-lo       level	     0	15:C	      8	  19
		INT	active-lo       level	     0	15:D	      8	  18
		INT	active-lo       level	     0	16:A	      8	  21
		INT	active-lo       level	     0	16:B	      8	  20
		INT	active-lo       level	     0	16:C	      8	  21
		INT	active-lo       level	     0	16:D	      8	  20
		INT	active-lo       level	     0	18:A	      8	  23
		INT	active-lo       level	     0	18:B	      8	  22
		INT	active-lo       level	     0	18:C	      8	  23
		INT	active-lo       level	     0	18:D	      8	  22
		INT	active-lo       level	     0	 6:A	      8	  31
		INT	active-lo       level	     0	 6:B	      8	  30
		INT	active-lo       level	     0	 7:A	      8	  29
		INT	active-lo       level	     0	 8:A	      8	  28
		INT	active-lo        edge	     0	 9:A	      8	  13
		INT	active-hi        edge	     9	   1	      8	   1
		INT	active-hi        edge	     9	   0	      8	   2
		INT	active-hi        edge	     9	   3	      8	   3
		INT	active-hi        edge	     9	   4	      8	   4
		INT	active-hi        edge	     9	   5	      8	   5
		INT	active-hi        edge	     9	   6	      8	   6
		INT	active-hi        edge	     9	   7	      8	   7
		INT	active-hi        edge	     9	   8	      8	   8
		INT	active-hi       level	     9	   9	      8	   9
		INT	active-hi        edge	     9	  10	      8	  10
		INT	active-hi        edge	     9	  11	      8	  11
		INT	active-hi        edge	     9	  12	      8	  12
		INT	active-lo        edge	     9	  13	      8	  13
		INT	active-hi        edge	     9	  14	      8	  14
		INT	active-hi        edge	     9	  15	      8	  15
--
Local Ints:	Type	Polarity    Trigger	Bus ID	IRQ	APIC ID	PIN#
		ExtINT conforms    conforms	    9	   	0
255	   0
		NMI 	 conforms    conforms	    9	   	0
255	   1

----------------------------------------------------------------------------
---

MP Config Extended Table Entries:

Extended Table HOSED!


So, in more specific terms, what are the correct values for NBUS and NAPIC?
And how do you derive those numbers from the mptable output?  I read the
stuff at http://people.freebsd.org/~fsmp/SMP/getstarted.html, including the
rogue hardware tips, but made no sense of it.  (This is the first time I
have tried to build an SMP kernel, so must confess I don't really know what
I'm doing...)

Dan Bye


	



To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-questions" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?FB7CAC781DB6D311BEE800805FE6FADA2F4BE6>