usb + smp + 2.4.0test = pci irq routing problem?
hello,
i've been working with johannes erdfelt in fixing a problem with usb on my machine. it's a dual pentium 3 system on a tyan tiger 133 mobo (via apollo pro 133a chipset). basically, usb works when i don't enable smp or when i disable apic on smp-enabled kernels. he believes that we're seeing a pci irq routing problem and that i should contact martin mares about this problem. (i've written him a couple times, but have heard nothing, so i figure he's either away, busy, or whatnot and i thought i'd try lkml for help.)
i have an ethernet card on my system and it shares an irq with usb-uhci. in this state, i see interrupts for the irq eth0 and usb-uhci share. when i remove the ethernet card, i get this in /proc/interrupts:
CPU0 CPU1
0: 37124 19379 IO-APIC-edge timer 1: 146 84 IO-APIC-edge keyboard 2: 0 0 XT-PIC cascade 8: 1 0 IO-APIC-edge rtc 14: 1640 1910 IO-APIC-edge ide0 15: 1 1 IO-APIC-edge ide1 16: 29 28 IO-APIC-level ide2 18: 26 27 IO-APIC-level aic7xxx 19: 0 0 IO-APIC-level usb-uhci NMI: 56419 56419 LOC: 56392 56403
ERR: 0
from this, je thought that this was a pci irq routing problem and not a usb problem.
because of this, running an smp-enabled kernel with apic enabled yields the "device not accepting new address" error on startup (usb is compiled into my kernel, so i'm not sure what part is actually triggering the error) and none of the usb devices work. (yes, i've checked the mps and tried both 1.1 and 1.4.) if i disable apic or don't use an smp-enabled kernel, everything works fine. this has been happening for quite a while, at least since 2.4.0test9, right up to test13-pre3.
i really don't know what kind of information would be useful for debugging this problem. i don't know much about kernel programming, but i am more than willing to try any kind of patch or give any information about my system that could help squash this bug. it's a problem that quite a few people on the linux-usb list are complaining about (all, it seems, have this via chipset). please let me know if there's any more info i can provide, i'm more than happy to help.
thanks,
pete
Signature · 2 lines
Pete Toscano p:[email protected] w:[email protected] GPG fingerprint: D8F5 A087 9A4C 56BB 8F78 B29C 1FF0 1BA7 9008 2736
Quoted 10 lines · Pete Toscano
hello,
i've been working with johannes erdfelt in fixing a problem with usb on my machine. it's a dual pentium 3 system on a tyan tiger 133 mobo (via apollo pro 133a chipset). basically, usb works when i don't enable smp or when i disable apic on smp-enabled kernels. he believes that we're seeing a pci irq routing problem and that i should contact martin mares about this problem. (i've written him a couple times, but have heard nothing, so i figure he's either away, busy, or whatnot and i thought i'd try lkml for help.)
I have this same exact motherboard (graciously donated by someone for me to try to help solve this problem) and the same exact problem.
I don't have any shared interrupts, but the USB subsystem is not getting any interrupts through to it.
Attached is my kernel startup log with DEBUG enabled in pci.c. This is for 2.4.0-test12 as I haven't seen any pci changes in the test13-pre series yet. 2.2.18 also has the same problem.
If anyone needs any other information, or can suggest anything else, please let me know.
thanks,
greg k-h
Signature · 1 line
greg@(kroah|wirex).com
Linux version 2.4.0-test12 (greg@duel) (gcc version egcs-2.91.66-StackGuard 19990314/Linux (egcs-1.1.2 release)) #6 SMP Wed Dec 20 16:20:46 EST 2000 BIOS-provided physical RAM map:
BIOS-e820: 000000000009fc00 @ 0000000000000000 (usable)
BIOS-e820: 0000000000000400 @ 000000000009fc00 (reserved)
BIOS-e820: 0000000000010000 @ 00000000000f0000 (reserved)
BIOS-e820: 0000000000001000 @ 00000000fec00000 (reserved)
BIOS-e820: 0000000000001000 @ 00000000fee00000 (reserved)
BIOS-e820: 0000000000010000 @ 00000000ffff0000 (reserved)
BIOS-e820: 0000000007ef0000 @ 0000000000100000 (usable)
BIOS-e820: 000000000000d000 @ 0000000007ff3000 (ACPI data)
BIOS-e820: 0000000000003000 @ 0000000007ff0000 (ACPI NVS)
Scan SMP from c0000000 for 1024 bytes.
Scan SMP from c009fc00 for 1024 bytes.
Scan SMP from c00f0000 for 65536 bytes.
found SMP MP-table at 000f5940
hm, page 000f5000 reserved twice.
hm, page 000f6000 reserved twice.
hm, page 000f1000 reserved twice.
hm, page 000f2000 reserved twice.
On node 0 totalpages: 32752
zone(0): 4096 pages.
zone(1): 28656 pages.
zone(2): 0 pages.
Intel MultiProcessor Specification v1.1
Virtual Wire compatibility mode.
OEM ID: OEM00000 Product ID: PROD00000000 APIC at: 0xFEE00000
Processor #0 Pentium(tm) Pro APIC version 17
Floating point unit present.
Machine Exception supported.
64 bit compare & exchange supported.
Internal APIC present.
SEP present.
MTRR present.
PGE present.
MCA present.
CMOV present.
Bootup CPU
Processor #1 Pentium(tm) Pro APIC version 17
Floating point unit present.
Machine Exception supported.
64 bit compare & exchange supported.
Internal APIC present.
SEP present.
MTRR present.
PGE present.
MCA present.
CMOV present.
Bus #0 is PCI
Bus #1 is PCI
Bus #2 is ISA
I/O APIC #2 Version 17 at 0xFEC00000.
Int: type 3, pol 0, trig 0, bus 2, IRQ 00, APIC ID 2, APIC INT 00
Int: type 0, pol 0, trig 0, bus 2, IRQ 01, APIC ID 2, APIC INT 01
Int: type 0, pol 0, trig 0, bus 2, IRQ 00, APIC ID 2, APIC INT 02
Int: type 0, pol 0, trig 0, bus 2, IRQ 03, APIC ID 2, APIC INT 03
Int: type 0, pol 0, trig 0, bus 2, IRQ 04, APIC ID 2, APIC INT 04
Int: type 0, pol 0, trig 0, bus 2, IRQ 06, APIC ID 2, APIC INT 06
Int: type 0, pol 0, trig 0, bus 2, IRQ 07, APIC ID 2, APIC INT 07
Int: type 0, pol 1, trig 1, bus 2, IRQ 08, APIC ID 2, APIC INT 08
Int: type 0, pol 0, trig 0, bus 2, IRQ 09, APIC ID 2, APIC INT 09
Int: type 0, pol 0, trig 0, bus 2, IRQ 0c, APIC ID 2, APIC INT 0c
Int: type 0, pol 0, trig 0, bus 2, IRQ 0d, APIC ID 2, APIC INT 0d
Int: type 0, pol 0, trig 0, bus 2, IRQ 0e, APIC ID 2, APIC INT 0e
Int: type 0, pol 0, trig 0, bus 2, IRQ 0f, APIC ID 2, APIC INT 0f
Int: type 0, pol 3, trig 3, bus 2, IRQ 0a, APIC ID 2, APIC INT 10
Int: type 0, pol 3, trig 3, bus 2, IRQ 0b, APIC ID 2, APIC INT 11
Int: type 0, pol 3, trig 3, bus 2, IRQ 05, APIC ID 2, APIC INT 13
Lint: type 3, pol 0, trig 0, bus 2, IRQ 00, APIC ID ff, APIC LINT 00
Lint: type 1, pol 0, trig 0, bus 2, IRQ 00, APIC ID ff, APIC LINT 01
Processors: 2
mapped APIC to ffffe000 (fee00000)
mapped IOAPIC to ffffd000 (fec00000)
Kernel command line: auto BOOT_IMAGE=greg ro root=305 BOOT_FILE=/boot/bzImage-2.4.0-test12
Initializing CPU#0
Detected 533.167 MHz processor.
Console: colour dummy device 80x25
Calibrating delay loop... 1061.68 BogoMIPS
Memory: 126560k/131008k available (1246k kernel code, 4060k reserved, 91k data, 216k init, 0k highmem)
Dentry-cache hash table entries: 16384 (order: 5, 131072 bytes)
Buffer-cache hash table entries: 4096 (order: 2, 16384 bytes)
Page-cache hash table entries: 32768 (order: 5, 131072 bytes)
Inode-cache hash table entries: 8192 (order: 4, 65536 bytes)
CPU: Before vendor init, caps: 0387fbff 00000000 00000000, vendor = 0
CPU: L1 I cache: 16K, L1 D cache: 16K
CPU: L2 cache: 512K
Intel machine check architecture supported.
Intel machine check reporting enabled on CPU#0.
CPU: After vendor init, caps: 0387fbff 00000000 00000000 00000000
CPU serial number disabled.
CPU: After generic, caps: 0383fbff 00000000 00000000 00000000
CPU: Common caps: 0383fbff 00000000 00000000 00000000
Enabling fast FPU save and restore... done.
Enabling unmasked SIMD FPU exception support... done.
Checking 'hlt' instruction... OK.
POSIX conformance testing by UNIFIX
CPU: Before vendor init, caps: 0383fbff 00000000 00000000, vendor = 0
CPU: L1 I cache: 16K, L1 D cache: 16K
CPU: L2 cache: 512K
Intel machine check reporting enabled on CPU#0.
CPU: After vendor init, caps: 0383fbff 00000000 00000000 00000000
CPU: After generic, caps: 0383fbff 00000000 00000000 00000000
CPU: Common caps: 0383fbff 00000000 00000000 00000000
CPU0: Intel Pentium III (Katmai) stepping 03
per-CPU timeslice cutoff: 1461.42 usecs.
Getting VERSION: 40011
Getting VERSION: 40011
Getting ID: 0
Getting ID: f000000
Getting LVT0: 700
Getting LVT1: 400
enabled ExtINT on CPU#0
ESR value before enabling vector: 00000000
ESR value after enabling vector: 00000000
CPU present map: 3
Booting processor 1/1 eip 2000
Setting warm reset code and vector.
1.
2.
3.
Asserting INIT.
Waiting for send to finish...
+Deasserting INIT.
Waiting for send to finish...
+#startup loops: 2.
Sending STARTUP #1.
After apic_write.
Startup point 1.
Waiting for send to finish...
+Initializing CPU#1
CPU#1 (phys ID: 1) waiting for CALLOUT
Sending STARTUP #2.
After apic_write.
Startup point 1.
Waiting for send to finish...
+After Startup.
Before Callout 1.
After Callout 1.
CALLIN, before setup_local_APIC().
masked ExtINT on CPU#1
ESR value before enabling vector: 00000000
ESR value after enabling vector: 00000000
Calibrating delay loop... 1064.96 BogoMIPS
Stack at about c123dfbc
CPU: Before vendor init, caps: 0387fbff 00000000 00000000, vendor = 0
CPU: L1 I cache: 16K, L1 D cache: 16K
CPU: L2 cache: 512K
Intel machine check reporting enabled on CPU#1.
CPU: After vendor init, caps: 0387fbff 00000000 00000000 00000000
CPU serial number disabled.
CPU: After generic, caps: 0383fbff 00000000 00000000 00000000
CPU: Common caps: 0383fbff 00000000 00000000 00000000
OK.
CPU1: Intel Pentium III (Katmai) stepping 03
CPU has booted.
Before bogomips.
Total of 2 processors activated (2126.64 BogoMIPS).
Before bogocount - setting activated=1.
Boot done.
ENABLING IO-APIC IRQs
...changing IO-APIC physical APIC ID to 2 ... ok.
Synchronizing Arb IDs.
init IO_APIC IRQs
IO-APIC (apicid-pin) 2-0, 2-5, 2-10, 2-11, 2-18, 2-20, 2-21, 2-22, 2-23 not connected.
..TIMER: vector=49 pin1=2 pin2=0
activating NMI Watchdog ... done.
number of MP IRQ sources: 16.
number of IO-APIC #2 registers: 24.
testing the IO APIC.......................
IO APIC #2......
.... register #00: 02000000
....... : physical APIC id: 02
.... register #01: 00170011
....... : max redirection entries: 0017
....... : IO APIC version: 0011
.... register #02: 00000000
....... : arbitration: 00
.... IRQ redirection table:
NR Log Phy Mask Trig IRR Pol Stat Dest Deli Vect:
00 000 00 1 0 0 0 0 0 0 00 01 003 03 0 0 0 0 0 1 1 39 02 003 03 0 0 0 0 0 1 1 31 03 003 03 0 0 0 0 0 1 1 41 04 003 03 0 0 0 0 0 1 1 49 05 000 00 1 0 0 0 0 0 0 00 06 003 03 0 0 0 0 0 1 1 51 07 003 03 0 0 0 0 0 1 1 59 08 003 03 0 0 0 0 0 1 1 61 09 003 03 0 0 0 0 0 1 1 69 0a 000 00 1 0 0 0 0 0 0 00 0b 000 00 1 0 0 0 0 0 0 00 0c 003 03 0 0 0 0 0 1 1 71 0d 000 00 1 0 0 0 0 0 0 00 0e 003 03 0 0 0 0 0 1 1 79 0f 003 03 0 0 0 0 0 1 1 81 10 003 03 1 1 0 1 0 1 1 89 11 003 03 1 1 0 1 0 1 1 91 12 000 00 1 0 0 0 0 0 0 00 13 003 03 1 1 0 1 0 1 1 99 14 000 00 1 0 0 0 0 0 0 00 15 000 00 1 0 0 0 0 0 0 00 16 000 00 1 0 0 0 0 0 0 00 17 000 00 1 0 0 0 0 0 0 00
IRQ to pin mappings:
IRQ0 -> 2
IRQ1 -> 1
IRQ3 -> 3
IRQ4 -> 4
IRQ5 -> 19
IRQ6 -> 6
IRQ7 -> 7
IRQ8 -> 8
IRQ9 -> 9
IRQ10 -> 16
IRQ11 -> 17
IRQ12 -> 12
IRQ13 -> 13
IRQ14 -> 14
IRQ15 -> 15
.................................... done.
calibrating APIC timer ...
..... CPU clock speed is 533.1798 MHz.
..... host bus clock speed is 133.2947 MHz.
cpu: 0, clocks: 1332947, slice: 444315 CPU0<T0:1332944,T1:888624,D:5,S:444315,C:1332947>
cpu: 1, clocks: 1332947, slice: 444315 CPU1<T0:1332944,T1:444304,D:10,S:444315,C:1332947>
checking TSC synchronization across CPUs: passed.
Setting commenced=1, go go go
PCI: PCI BIOS revision 2.10 entry at 0xfb2c0, last bus=1
PCI: Using configuration type 1
PCI: Probing PCI hardware
Scanning bus 00
Found 00:00 [1106/0691] 000600 00
Found 00:08 [1106/8598] 000604 01
Found 00:38 [1106/0596] 000601 00
Found 00:39 [1106/0571] 000101 00
Found 00:3a [1106/3038] 000c03 00
Found 00:3b [1106/3050] 000600 00
Found 00:88 [11ad/0002] 000200 00
Fixups for bus 00
Scanning behind PCI bridge 00:01.0, config 010100, pass 0 Scanning bus 01
Found 01:00 [5333/8904] 000300 00
Fixups for bus 01
Unknown bridge resource 0: assuming transparent
Unknown bridge resource 2: assuming transparent
Bus scan for 01 returning with max=01
Scanning behind PCI bridge 00:01.0, config 010100, pass 1
Bus scan for 00 returning with max=01
PCI: Using IRQ router VIA [1106/0596] at 00:07.0
Activating ISA DMA hang workarounds.
isapnp: Scanning for Pnp cards...
isapnp: No Plug & Play device found
Linux NET4.0 for Linux 2.4
Based upon Swansea University Computer Society NET3.039 Initializing RT netlink socket
ACPI: "VIA694" found at 0x000f71c0
Starting kswapd v1.8
parport0: PC-style at 0x378 [PCSPP]
parport0: irq 7 detected
vesafb: framebuffer at 0xd4000000, mapped to 0xc880a000, size 4096k
vesafb: mode is 1024x768x8, linelength=1024, pages=4
vesafb: protected mode interface info at c000:5dfd
vesafb: scrolling: redraw
Console: switching to colour frame buffer device 128x48
fb0: VESA VGA frame buffer device
pty: 256 Unix98 ptys configured
Uniform Multi-Platform E-IDE driver Revision: 6.31
ide: Assuming 33MHz system bus speed for PIO modes; override with idebus=xxVP_IDE: IDE controller on PCI bus 00 dev 39VP_IDE: chipset revision 16VP_IDE: not 100% native mode: will probe irqs laterVP_IDE: VIA vt82c596b IDE UDMA66 controller on pci0:7.1
ide0: BM-DMA at 0xe000-0xe007, BIOS settings: hda:DMA, hdb:pio
ide1: BM-DMA at 0xe008-0xe00f, BIOS settings: hdc:DMA, hdd:piohda: FUJITSU MPE3084AE, ATA DISK drive
ide: Assuming 33MHz system bus speed for PIO modes; override with idebus=xx
hdc: SAMSUNG CD-ROM SC-148F, ATAPI CDROM drive
ide0 at 0x1f0-0x1f7,0x3f6 on irq 14
ide1 at 0x170-0x177,0x376 on irq 15
hda: 16514064 sectors (8455 MB) w/512KiB Cache, CHS=1027/255/63, UDMA(33)
hdc: ATAPI 48X CD-ROM drive, 128kB Cache, DMA
Uniform CD-ROM driver Revision: 3.11
Partition check:
hda: hda1 hda2 hda3 < hda5 hda6 >
FDC 0 is a post-1991 82077
Serial driver version 5.02 (2000-08-09) with MANY_PORTS SHARE_IRQ SERIAL_PCI ISAPNP enabled ttyS00 at 0x03f8 (irq = 4) is a 16550A
ttyS01 at 0x02f8 (irq = 3) is a 16550A
PPP generic driver version 2.4.1
Linux Tulip driver version 0.9.11 (November 3, 2000)
eth0: Lite-On 82c168 PNIC rev 32 at 0xe800, 00:C0:F0:3D:BC:FB, IRQ 11.
eth0: MII transceiver #1 config 3100 status 7829 advertising 01e1.
NET4: Linux TCP/IP 1.0 for NET4.0
IP Protocols: ICMP, UDP, TCP, IGMP
IP: routing cache hash table of 512 buckets, 4Kbytes
TCP: Hash tables configured (established 8192 bind 8192)
NET4: Unix domain sockets 1.0/SMP for Linux NET4.0.
VFS: Mounted root (ext2 filesystem) readonly.
Freeing unused kernel memory: 216k freed
Adding Swap: 120476k swap-space (priority -1)usb.c: registered new driver usbdevfsusb.c: registered new driver hubusb-uhci.c: $Revision: 1.251 $ time 16:21:20 Dec 20 2000usb-uhci.c: High bandwidth mode enabledusb-uhci.c: USB UHCI at I/O 0xe400, IRQ 5usb-uhci.c: Detected 2 portsusb.c: new USB bus registered, assigned bus number 1usb.c: kmalloc IF c125dce0, numif 1usb.c: new device strings: Mfr=0, Product=2, SerialNumber=1usb.c: USB device number 1 default language ID 0x0
Product: USB UHCI Root Hub
SerialNumber: e400hub.c: USB hub foundhub.c: 2 ports detectedhub.c: standalone hubhub.c: ganged power switchinghub.c: global over-current protectionhub.c: power on to power good time: 2mshub.c: hub controller current requirement: 0mAhub.c: port removable status: RRhub.c: local power source is goodhub.c: no over-current condition existshub.c: enabling power on all portsusb.c: hub driver claimed interface c125dce0usb.c: kusbd: /sbin/hotplug add 1usb.c: kusbd policy returned 0xfffffffehub.c: port 1 connection changehub.c: port 1, portstatus 300, change 3, 1.5 Mb/shub.c: port 2 connection changehub.c: port 2, portstatus 101, change 3, 12 Mb/shub.c: port 2, portstatus 103, change 0, 12 Mb/shub.c: USB new device connect on bus1/2, assigned device number 2 usb_control/bulk_msg: timeoutusb.c: USB device not accepting new address=2 (error=-110)hub.c: port 2, portstatus 103, change 0, 12 Mb/shub.c: USB new device connect on bus1/2, assigned device number 3 usb_control/bulk_msg: timeoutusb.c: USB device not accepting new address=3 (error=-110)hub.c: port 1 enable change, status 300