From owner-freebsd-questions Wed Sep 20 3:46:34 2000 Delivered-To: freebsd-questions@freebsd.org Received: from boat.mail.pipex.net (our.mail.pipex.net [158.43.128.75]) by hub.freebsd.org (Postfix) with SMTP id 71CBE37B422 for ; Wed, 20 Sep 2000 03:46:27 -0700 (PDT) Received: (qmail 23001 invoked from network); 20 Sep 2000 10:46:13 -0000 Received: from mailhost.puck.pipex.net (HELO mailhost.uk.internal) (194.130.147.54) by our.mail.pipex.net with SMTP; 20 Sep 2000 10:46:13 -0000 Received: (qmail 19490 invoked from network); 20 Sep 2000 10:45:32 -0000 Received: from camgate2.cam.uk.internal (172.31.6.21) by mailhost.uk.internal with SMTP; 20 Sep 2000 10:45:32 -0000 Received: by camgate2.cam.uk.internal with Internet Mail Service (5.5.2650.21) id ; Wed, 20 Sep 2000 11:44:44 +0100 Message-ID: From: Daniel Bye To: "'questions@freebsd.org'" Subject: SMP kernel for 4.1-STABLE Date: Wed, 20 Sep 2000 11:39:53 +0100 MIME-Version: 1.0 X-Mailer: Internet Mail Service (5.5.2650.21) Content-Type: text/plain; charset="iso-8859-1" Sender: owner-freebsd-questions@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.ORG 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 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: on motherboard npx0: INT 16 interface pcib0: on motherboard pci0: on pcib0 pci0: (vendor=0x1000, dev=0x000f) at 6.0 irq 5 pci0: (vendor=0x1000, dev=0x000f) at 6.1 irq 10 tl0: port 0x2c00-0x2c0f mem 0xc6efccf0-0xc6efccff irq 11 at device 7.0 on pci0 tl0: Ethernet address: 00:50:8b:cc:30:d9 miibus0: on tl0 ukphy0: on miibus0 ukphy0: 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto tlphy0: on miibus0 tlphy0: 10base2/BNC, 10base5/AUI pci0: at 8.0 pci0: (vendor=0x0e11, dev=0xa0f0) at 9.0 pcib1: at device 13.0 on pci0 pci1: on pcib1 ida0: port 0x3000-0x30ff mem 0xb8000000-0xbfffffff,0xc6ffff00-0xc6ffffff irq 15 at device 0.0 on pci1 ida0: drives=1 firm_rev=4.16 idad0: on ida0 idad0: 34727MB (71122560 sectors), blocksize=512 isab0: at device 20.0 on pci0 isa0: on isab0 pci0: at 20.1 pci0: at 20.2 irq 0 chip1: at device 20.3 on pci0 eisa0: on motherboard mainboard0: on eisa0 slot 0 fdc0: 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: at port 0x60,0x64 on isa0 atkbd0: flags 0x1 irq 1 on atkbdc0 kbd0 at atkbd0 vga0: at port 0x3c0-0x3df iomem 0xa0000-0xbffff on isa0 sc0: 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