Date: 5 Oct 1999 02:15:04 -0000 From: woju@bbs.ee.ntu.edu.tw To: freebsd-smp@freebsd.org Subject: Re: SMP on 4 Pentium III(450NX) failed Message-ID: <19991005021504.88287.qmail@bbs.ee.ntu.edu.tw>
index | next in thread | raw e-mail
The booting process still frozen after applying the "woju-patch" --
boot: kernel -v
...
SMP: enabled INTs: 1, 6, 12, 14, 29, 34, apic_imen: 0x0077afbd
BIOS Geometries:
0:...
Device configuration finished.
APIC_IO: routing 8254 via 8259 on pin 0
bpf: lo0 attached
[frozen here]
The kernel source has been cvsuped to the latest version.
<woju-patch>
--- mp_machdep.c.orig Mon Sep 6 11:09:44 1999
+++ mp_machdep.c Tue Oct 5 10:01:14 1999
@@ -1202,6 +1202,7 @@
{
int apic;
+ printf("lq: int_entry(%d, %d) called, woju\n", entry, intr);
io_apic_ints[intr].int_type = entry->int_type;
io_apic_ints[intr].int_flags = entry->int_flags;
io_apic_ints[intr].src_bus_id = entry->src_bus_id;
@@ -1219,9 +1220,17 @@
else
io_apic_ints[intr].dst_apic_id = entry->dst_apic_id;
} else
+#if 1
+ if (entry->src_bus_id == 0 && entry->src_bus_irq == 7*4+3) {
+ printf("lq: passed, woju\n");
+ nintrs--;
+ return 0;
+ } else
+#endif
io_apic_ints[intr].dst_apic_id = entry->dst_apic_id;
io_apic_ints[intr].dst_apic_int = entry->dst_apic_int;
+ printf("lq: int_entry(%d, %d) finished, woju\n", entry, intr);
return 1;
}
@@ -2227,6 +2236,7 @@
{
u_int apic_id;
+ printf("lq: ap_init() called, woju\n");
smp_cpus++;
#if defined(I586_CPU) && !defined(NO_F00F_HACK)
@@ -2251,9 +2261,11 @@
}
/* Init local apic for irq's */
+ printf("lq: ap_init() called, before apic_initialize(), woju\n");
apic_initialize();
/* Set memory range attributes for this CPU to match the BSP */
+ printf("lq: ap_init() called, before mem_range_AP_init(), woju\n");
mem_range_AP_init();
/*
@@ -2268,6 +2280,8 @@
}
curproc = NULL; /* make sure */
+ printf("lq: ap_init() finished, (mp_ncpus, smp_cpus) = (%d, %d), woju\n",
+ mp_ncpus, smp_cpus);
}
#ifdef BETTER_CLOCK
</woju-patch>
The booting process frozen without showing any "printf debugging
messages added by me". I also browse the kernel source tree, and see
"APIC_IO: routing 8254..." is printed by i386/isa/clock.c. But I don't
know the calling sequence(stack), that is, I don't know what the kernel
do after kern/kern_clock.c initclocks(). So I don't know where to set
the "proper breakpoint(showing debugging info)".
It seems that int_entry() and ap_init() are not called before frozen.
Could anyone please tell me what the "key(major) functions" called between
initclocks() and ap_init()? So I can set more "breakpoints" and find out
the accruate position(function) where the kernel frozen.
The mptable now is --
<mptable>
===============================================================================
MPTable, version 2.0.15
-------------------------------------------------------------------------------
MP Floating Pointer Structure:
location: BIOS
physical address: 0x000f9e00
signature: '_MP_'
length: 16 bytes
version: 1.4
checksum: 0xe3
mode: Virtual Wire
-------------------------------------------------------------------------------
MP Config Table Header:
physical address: 0x000f9e10
signature: 'PCMP'
base table length: 240
version: 1.4
checksum: 0xc2
OEM ID: 'ACER '
Product ID: 'X5 '
OEM table pointer: 0x00000000
OEM table size: 0
entry count: 23
local APIC address: 0xfee00000
extended table length: 140
extended table checksum: 15
-------------------------------------------------------------------------------
MP Config Base Table Entries:
--
Processors: APIC ID Version State Family Model Step Flags
0 0x11 BSP, usable 6 7 3 0x387fbff
--
Bus: Bus ID Type
0 PCI
1 PCI
2 ISA
--
I/O APICs: APIC ID Version State Address
1 0x11 usable 0xfec00000
--
I/O Ints: Type Polarity Trigger Bus ID IRQ APIC ID PIN#
INT active-hi edge 2 0 1 0
INT active-hi edge 2 1 1 1
INT active-hi edge 2 3 1 3
INT active-hi edge 2 4 1 4
INT active-hi edge 2 6 1 6
INT active-hi edge 2 7 1 7
INT active-hi edge 2 8 1 8
INT active-hi edge 2 9 1 9
INT active-hi edge 2 10 1 10
INT active-hi edge 2 12 1 12
INT active-hi edge 2 14 1 14
INT active-hi edge 2 15 1 15
INT active-hi level 0 7:D 1 19
INT active-lo level 0 11:A 1 19
INT active-lo level 1 9:A 1 23
INT active-lo level 1 9:B 1 23
--
Local Ints: Type Polarity Trigger Bus ID IRQ APIC ID PIN#
ExtINT active-hi edge 2 0 255 0
NMI active-hi edge 2 0 255 1
-------------------------------------------------------------------------------
MP Config Extended Table Entries:
--
bus ID: 0 address type: memory address
address base: 0x40700000
address range: 0x1e00000
--
bus ID: 0 address type: memory address
address base: 0xa0000
address range: 0x20000
--
bus ID: 1 address type: memory address
address base: 0x42500000
address range: 0xbc200000
--
bus ID: 0 address type: I/O address
address base: 0x0
address range: 0x4000
--
bus ID: 1 address type: I/O address
address base: 0x4000
address range: 0xc000
--
bus ID: 2 bus info: 0x00 parent bus ID: 0--
bus ID: 2 address modifier: add
predefined range: 0x00000000--
bus ID: 2 address modifier: add
predefined range: 0x00000001--
bus ID: 1 address modifier: subtract
predefined range: 0x00000000--
bus ID: 1 address modifier: subtract
predefined range: 0x00000001
-------------------------------------------------------------------------------
# SMP kernel config file options:
# Required:
options SMP # Symmetric MultiProcessor Kernel
options APIC_IO # Symmetric (APIC) I/O
# Optional (built-in defaults will work in most cases):
#options NCPU=1 # number of CPUs
#options NBUS=3 # number of busses
#options NAPIC=1 # number of IO APICs
#options NINTR=24 # number of INTs
===============================================================================
</mptable>
Regards,
woju
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-smp" in the body of the message
home |
help
Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?19991005021504.88287.qmail>
