Problem with New PCI IRQ routing code for pre9-2

From: Alan Pearson (pearsona@altavista.net)
Date: Thu May 18 2000 - 19:12:58 EST


Martin,
After our discussion regarding the IRQ being assigned to for my USB to be the
same as the sound card, I tried this patch.

Kernel version 99pre3 + pci patch

Previously we got the correct IRQ assigned to the USB controller with Pre7 by
adding pci-irqmask=0xff00

Now what happens is lspci shows 0 with and without this option on boot.

However when usb-uhci is loaded, it detects IRQ 6, without the pci= option, and
irq 9 with it.

uhci refuses to load in both cases, compaining of IRQ not set.

However the problem with the Oops still happens when usb-uhci is loaded, as
before.

WITHOUT pci=irqmask=0xff00
PCI:enabling device 00:01:2 (0000+0001)
IRQ for 00:01.2(3) via 00:01.2 -> PIRQ 3, mask 02F8
excl 0000 -> newirq =6 => assigning IRQ 6 ... OK

WITH pci=irqmask=0xff00

Same as above but IRQ=9

As said, uhci refuses to load in both cases, and usb-uhci causes a large oops,
killing the system.
I have not managed to get USB working in 2.3.99pre3, pre7, pre8 or pre9. Also
tried 2.2.15pre17, with no joy.

How can I start to get to the bottom of this ???

lspci & dmesg attached for both cases....

Thanks,
Alan

******************WITH MASK*************************

00:00.0 Host bridge: Intel Corporation 430TX - 82439TX MTXC (rev 01)
        Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B-
        Status: Cap- 66Mhz- UDF- FastB2B- ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort+ >SERR- <PERR-
        Latency: 0 set
00: 86 80 00 71 06 00 00 22 01 00 00 06 00 00 00 00
10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
20: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
30: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

00:01.0 ISA bridge: Intel Corporation 82371AB PIIX4 ISA (rev 02)
        Control: I/O+ Mem+ BusMaster+ SpecCycle+ MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B-
        Status: Cap- 66Mhz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR-
        Latency: 0 set
00: 86 80 10 71 0f 00 80 02 02 00 01 06 00 00 80 00
10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
20: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
30: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

00:01.1 IDE interface: Intel Corporation 82371AB PIIX4 IDE (rev 01) (prog-if 80)
        Control: I/O+ Mem- BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B-
        Status: Cap- 66Mhz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR-
        Latency: 0 set
        Region 4: I/O ports at 1100
00: 86 80 11 71 05 00 80 02 01 80 01 01 00 00 00 00
10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
20: 01 11 00 00 00 00 00 00 00 00 00 00 00 00 00 00
30: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

00:01.2 USB Controller: Intel Corporation 82371AB PIIX4 USB (rev 01)
        Control: I/O- Mem- BusMaster- SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B-
        Status: Cap- 66Mhz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR-
        Interrupt: pin D routed to IRQ 0
        Region 4: I/O ports at 1000 [disabled]
00: 86 80 12 71 00 00 80 02 01 00 03 0c 00 00 00 00
10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
20: 01 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00
30: 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 00

00:01.3 Bridge: Intel Corporation 82371AB PIIX4 ACPI (rev 02)
        Control: I/O+ Mem- BusMaster- SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B-
        Status: Cap- 66Mhz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR-
00: 86 80 13 71 01 00 80 02 02 00 80 06 00 00 00 00
10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
20: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
30: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

00:02.0 VGA compatible controller: Trident Microsystems TGUI 9660/9680/9682 (rev d3)
        Control: I/O+ Mem+ BusMaster- SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B-
        Status: Cap- 66Mhz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR-
        Interrupt: pin A routed to IRQ 0
        Region 0: Memory at fdc00000 (32-bit, non-prefetchable)
        Region 1: Memory at fe7f0000 (32-bit, non-prefetchable)
        Region 2: Memory at fe000000 (32-bit, non-prefetchable)
00: 23 10 60 96 03 00 80 02 d3 00 00 03 00 00 00 00
10: 00 00 c0 fd 00 00 7f fe 00 00 00 fe 00 00 00 00
20: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
30: 00 00 0c 00 00 00 00 00 00 00 00 00 ff 01 00 00

00:03.0 CardBus bridge: Texas Instruments: Unknown device ac1c (rev 01)
        Subsystem: Unknown device 104c:ac1c
        Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B-
        Status: Cap+ 66Mhz- UDF- FastB2B- ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR-
        Latency: 64 set, cache line size 08
        Interrupt: pin A routed to IRQ 10
        Region 0: Memory at 10000000 (32-bit, non-prefetchable)
        Bus: primary=00, secondary=01, subordinate=02, sec-latency=32
        BridgeCtl: Parity- SERR- ISA- VGA- MAbort- >Reset+ 16bInt+ PostWrite+
        16-bit legacy interface ports at 0007
00: 4c 10 1c ac 07 00 10 02 01 00 07 06 08 40 82 00
10: 00 00 00 10 a0 00 00 02 00 01 02 20 00 00 00 00
20: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
30: 00 00 00 00 00 00 00 00 00 00 00 00 0a 01 c0 07
40: 4c 10 1c ac 07 00 10 02 01 00 07 06 08 40 82 00
50: 00 00 00 10 a0 00 00 02 00 01 02 20 00 00 00 00
60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
70: 00 00 00 00 00 00 00 00 00 00 00 00 0a 01 c0 07

00:03.1 CardBus bridge: Texas Instruments: Unknown device ac1c (rev 01)
        Subsystem: Unknown device 104c:ac1c
        Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B-
        Status: Cap+ 66Mhz- UDF- FastB2B- ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR-
        Latency: 64 set, cache line size 08
        Interrupt: pin B routed to IRQ 10
        Region 0: Memory at 10001000 (32-bit, non-prefetchable)
        Bus: primary=00, secondary=03, subordinate=04, sec-latency=32
        BridgeCtl: Parity- SERR- ISA- VGA- MAbort- >Reset+ 16bInt+ PostWrite+
        16-bit legacy interface ports at 0007
00: 4c 10 1c ac 07 00 10 02 01 00 07 06 08 40 82 00
10: 00 10 00 10 a0 00 00 02 00 03 04 20 00 00 00 00
20: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
30: 00 00 00 00 00 00 00 00 00 00 00 00 0a 02 c0 07
40: 4c 10 1c ac 07 00 10 02 01 00 07 06 08 40 82 00
50: 00 10 00 10 a0 00 00 02 00 03 04 20 00 00 00 00
60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
70: 00 00 00 00 00 00 00 00 00 00 00 00 0a 02 c0 07

Linux version 2.3.99-pre9 (root@ultra.pearson.uk) (gcc version egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)) #5 Thu May 18 19:38:03 EDT 2000
BIOS-provided physical RAM map:
 e820: 000000000009f000 @ 0000000000000000 (usable)
 e820: 0000000005f00000 @ 0000000000100000 (usable)
On node 0 totalpages: 24576
zone(0): 4096 pages.
zone(1): 20480 pages.
zone(2): 0 pages.
Initializing CPU#0
Detected 380301026 Hz processor.
Console: colour VGA+ 80x25
Calibrating delay loop... 758.58 BogoMIPS
Memory: 94824k/98304k available (938k kernel code, 3092k reserved, 68k data, 168k 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)
kmem_create: Poisoning requested, but con given - bdev_cache
Inode-cache hash table entries: 8192 (order: 4, 65536 bytes)
kmem_create: Poisoning requested, but con given - inode_cache
CPU: L1 I Cache: 32K L1 D Cache: 32K
CPU: AMD AMD-K6(tm) 3D processor stepping 0c
Checking 386/387 coupling... OK, FPU using exception 16 error reporting.
Checking 'hlt' instruction... OK.
POSIX conformance testing by UNIFIX
PCI: BIOS32 Service Directory structure at 0xc00e8050
PCI: BIOS32 Service Directory entry at 0xeb110
PCI: BIOS probe returned s=00 hw=11 ver=02.10 l=02
PCI: PCI BIOS revision 2.10 entry at 0xeb150, last bus=2
PCI: Using configuration type 1
PCI: Probing PCI hardware
PCI: IDE base address fixup for 00:01.1
PCI: Scanning for ghost devices on bus 0
PCI: IRQ init
PCI: Interrupt Routing Table found at 0xc00fe840
00:01 slot=00 0:00/1ef8 1:00/1ef8 2:63/02f8 3:63/02f8
00:03 slot=00 0:60/0400 1:61/0400 2:00/0c00 3:00/0c00
PCI: Using IRQ router PIIX [8086/122e] at 00:01.0
PCI: IRQ fixup
00:02.0: ignoring bogus IRQ 255
IRQ for 00:01.2(3) via 00:01.2 -> PIRQ 63, mask 02f8, excl 0000 ... failed
IRQ for 00:02.0(0) via 00:02.0 -> not found in routing table
PCI: Allocating resources
PCI: Resource 00001100-0000110f (f=101, d=0, p=0)
PCI: Resource fdc00000-fdffffff (f=200, d=0, p=0)
PCI: Resource fe7f0000-fe7fffff (f=200, d=0, p=0)
PCI: Resource fe000000-fe3fffff (f=200, d=0, p=0)
PCI: Sorting device list...
Limiting direct PCI/PCI transfers.
PCI: Address space collision on region 7 of device Intel Corporation 82371AB PIIX4 ACPI [1000:103f]
isapnp: Scanning for Pnp cards...
isapnp: Card 'ESS ES1869 Plug and Play AudioDrive'
isapnp: 1 Plug & Play card detected total
Linux NET4.0 for Linux 2.3
Based upon Swansea University Computer Society NET3.039
kmem_create: Poisoning requested, but con given - skbuff_head_cache
NET4: Unix domain sockets 1.0/SMP for Linux NET4.0.
NET4: Linux TCP/IP 1.0 for NET4.0
IP Protocols: ICMP, UDP, TCP
IP: routing cache hash table of 512 buckets, 4Kbytes
TCP: Hash tables configured (established 8192 bind 8192)
apm: BIOS version 1.2 Flags 0x03 (Driver version 1.13)
Starting kswapd v1.6
pty: 256 Unix98 ptys configured
Uniform Multi-Platform E-IDE driver Revision: 6.30
ide: Assuming 33MHz system bus speed for PIO modes; override with idebus=xx
PIIX4: IDE controller on PCI bus 00 dev 09
PIIX4: chipset revision 1
PIIX4: not 100% native mode: will probe irqs later
hda: TOSHIBA MK6412MAT, ATA DISK drive
hdc: CRN-8241B, ATAPI CDROM drive
ide0 at 0x1f0-0x1f7,0x3f6 on irq 14
ide1 at 0x170-0x177,0x376 on irq 15
hda: 12685680 sectors (6495 MB), CHS=839/240/63
Partition check:
 hda: hda1 hda2 < hda5 hda6 hda7 >
VFS: Mounted root (ext2 filesystem) readonly.
Freeing unused kernel memory: 168k freed
Adding Swap: 68004k swap-space (priority -1)
[EXT II FS 0.5b, 95/08/09, bs=1024, fs=1024, gc=275, bpg=8192, ipg=2048, mo=ffffffea]
Soundblaster audio driver Copyright (C) by Hannu Savolainen 1993-1996
sb: ESS ES1869 Plug and Play AudioDrive detected
sb: ISAPnP reports 'ESS ES1869 Plug and Play AudioDrive' at i/o 0x220, irq 5, dma 1, 3
SB 3.01 detected OK (220)
ESS chip ES1869 detected
sb: 1 Soundblaster PnP card(s) found.
YM3812 and OPL-3 driver Copyright (C) by Hannu Savolainen, Rob Hooft 1993-1996

****************WITHOUT MASK ********************************

00:00.0 Host bridge: Intel Corporation 430TX - 82439TX MTXC (rev 01)
        Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B-
        Status: Cap- 66Mhz- UDF- FastB2B- ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort+ >SERR- <PERR-
        Latency: 0 set
00: 86 80 00 71 06 00 00 22 01 00 00 06 00 00 00 00
10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
20: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
30: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

00:01.0 ISA bridge: Intel Corporation 82371AB PIIX4 ISA (rev 02)
        Control: I/O+ Mem+ BusMaster+ SpecCycle+ MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B-
        Status: Cap- 66Mhz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR-
        Latency: 0 set
00: 86 80 10 71 0f 00 80 02 02 00 01 06 00 00 80 00
10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
20: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
30: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

00:01.1 IDE interface: Intel Corporation 82371AB PIIX4 IDE (rev 01) (prog-if 80)
        Control: I/O+ Mem- BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B-
        Status: Cap- 66Mhz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR-
        Latency: 0 set
        Region 4: I/O ports at 1100
00: 86 80 11 71 05 00 80 02 01 80 01 01 00 00 00 00
10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
20: 01 11 00 00 00 00 00 00 00 00 00 00 00 00 00 00
30: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

00:01.2 USB Controller: Intel Corporation 82371AB PIIX4 USB (rev 01)
        Control: I/O- Mem- BusMaster- SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B-
        Status: Cap- 66Mhz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR-
        Interrupt: pin D routed to IRQ 0
        Region 4: I/O ports at 1000 [disabled]
00: 86 80 12 71 00 00 80 02 01 00 03 0c 00 00 00 00
10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
20: 01 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00
30: 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 00

00:01.3 Bridge: Intel Corporation 82371AB PIIX4 ACPI (rev 02)
        Control: I/O+ Mem- BusMaster- SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B-
        Status: Cap- 66Mhz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR-
00: 86 80 13 71 01 00 80 02 02 00 80 06 00 00 00 00
10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
20: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
30: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

00:02.0 VGA compatible controller: Trident Microsystems TGUI 9660/9680/9682 (rev d3)
        Control: I/O+ Mem+ BusMaster- SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B-
        Status: Cap- 66Mhz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR-
        Interrupt: pin A routed to IRQ 0
        Region 0: Memory at fdc00000 (32-bit, non-prefetchable)
        Region 1: Memory at fe7f0000 (32-bit, non-prefetchable)
        Region 2: Memory at fe000000 (32-bit, non-prefetchable)
00: 23 10 60 96 03 00 80 02 d3 00 00 03 00 00 00 00
10: 00 00 c0 fd 00 00 7f fe 00 00 00 fe 00 00 00 00
20: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
30: 00 00 0c 00 00 00 00 00 00 00 00 00 ff 01 00 00

00:03.0 CardBus bridge: Texas Instruments: Unknown device ac1c (rev 01)
        Subsystem: Unknown device 104c:ac1c
        Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B-
        Status: Cap+ 66Mhz- UDF- FastB2B- ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR-
        Latency: 64 set, cache line size 08
        Interrupt: pin A routed to IRQ 10
        Region 0: Memory at 10000000 (32-bit, non-prefetchable)
        Bus: primary=00, secondary=01, subordinate=00, sec-latency=32
        BridgeCtl: Parity- SERR- ISA- VGA- MAbort- >Reset+ 16bInt+ PostWrite+
        16-bit legacy interface ports at 0007
00: 4c 10 1c ac 07 00 10 02 01 00 07 06 08 40 82 00
10: 00 00 00 10 a0 00 00 02 00 01 00 20 00 00 00 00
20: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
30: 00 00 00 00 00 00 00 00 00 00 00 00 0a 01 c0 07
40: 4c 10 1c ac 07 00 10 02 01 00 07 06 08 40 82 00
50: 00 00 00 10 a0 00 00 02 00 01 00 20 00 00 00 00
60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
70: 00 00 00 00 00 00 00 00 00 00 00 00 0a 01 c0 07

00:03.1 CardBus bridge: Texas Instruments: Unknown device ac1c (rev 01)
        Subsystem: Unknown device 104c:ac1c
        Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B-
        Status: Cap+ 66Mhz- UDF- FastB2B- ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR-
        Latency: 64 set, cache line size 08
        Interrupt: pin B routed to IRQ 10
        Region 0: Memory at 10001000 (32-bit, non-prefetchable)
        Bus: primary=00, secondary=03, subordinate=00, sec-latency=32
        BridgeCtl: Parity- SERR- ISA- VGA- MAbort- >Reset+ 16bInt+ PostWrite+
        16-bit legacy interface ports at 0007
00: 4c 10 1c ac 07 00 10 02 01 00 07 06 08 40 82 00
10: 00 10 00 10 a0 00 00 02 00 03 00 20 00 00 00 00
20: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
30: 00 00 00 00 00 00 00 00 00 00 00 00 0a 02 c0 07
40: 4c 10 1c ac 07 00 10 02 01 00 07 06 08 40 82 00
50: 00 10 00 10 a0 00 00 02 00 03 00 20 00 00 00 00
60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
70: 00 00 00 00 00 00 00 00 00 00 00 00 0a 02 c0 07

Linux version 2.3.99-pre9 (root@ultra.pearson.uk) (gcc version egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)) #5 Thu May 18 19:38:03 EDT 2000
BIOS-provided physical RAM map:
 e820: 000000000009f000 @ 0000000000000000 (usable)
 e820: 0000000005f00000 @ 0000000000100000 (usable)
On node 0 totalpages: 24576
zone(0): 4096 pages.
zone(1): 20480 pages.
zone(2): 0 pages.
Initializing CPU#0
Detected 380197877 Hz processor.
Console: colour VGA+ 80x25
Calibrating delay loop... 758.58 BogoMIPS
Memory: 94824k/98304k available (938k kernel code, 3092k reserved, 68k data, 168k 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)
kmem_create: Poisoning requested, but con given - bdev_cache
Inode-cache hash table entries: 8192 (order: 4, 65536 bytes)
kmem_create: Poisoning requested, but con given - inode_cache
CPU: L1 I Cache: 32K L1 D Cache: 32K
CPU: AMD AMD-K6(tm) 3D processor stepping 0c
Checking 386/387 coupling... OK, FPU using exception 16 error reporting.
Checking 'hlt' instruction... OK.
POSIX conformance testing by UNIFIX
PCI: BIOS32 Service Directory structure at 0xc00e8050
PCI: BIOS32 Service Directory entry at 0xeb110
PCI: BIOS probe returned s=00 hw=11 ver=02.10 l=00
PCI: PCI BIOS revision 2.10 entry at 0xeb150, last bus=0
PCI: Using configuration type 1
PCI: Probing PCI hardware
PCI: IDE base address fixup for 00:01.1
PCI: Scanning for ghost devices on bus 0
PCI: IRQ init
PCI: Interrupt Routing Table found at 0xc00fe840
00:01 slot=00 0:00/1ef8 1:00/1ef8 2:63/02f8 3:63/02f8
00:03 slot=00 0:60/0400 1:61/0400 2:00/0c00 3:00/0c00
PCI: Using IRQ router PIIX [8086/122e] at 00:01.0
PCI: IRQ fixup
00:02.0: ignoring bogus IRQ 255
IRQ for 00:01.2(3) via 00:01.2 -> PIRQ 63, mask 02f8, excl 0000 ... failed
IRQ for 00:02.0(0) via 00:02.0 -> not found in routing table
PCI: Allocating resources
PCI: Resource 00001100-0000110f (f=101, d=0, p=0)
PCI: Resource fdc00000-fdffffff (f=200, d=0, p=0)
PCI: Resource fe7f0000-fe7fffff (f=200, d=0, p=0)
PCI: Resource fe000000-fe3fffff (f=200, d=0, p=0)
PCI: Resource 10000000-10000fff (f=200, d=0, p=0)
PCI: Resource 10001000-10001fff (f=200, d=0, p=0)
PCI: Resource 00001000-0000101f (f=101, d=1, p=1)
PCI: Sorting device list...
Limiting direct PCI/PCI transfers.
PCI: Address space collision on region 7 of device Intel Corporation 82371AB PIIX4 ACPI [1000:103f]
isapnp: Scanning for Pnp cards...
isapnp: Card 'ESS ES1869 Plug and Play AudioDrive'
isapnp: 1 Plug & Play card detected total
Linux NET4.0 for Linux 2.3
Based upon Swansea University Computer Society NET3.039
kmem_create: Poisoning requested, but con given - skbuff_head_cache
NET4: Unix domain sockets 1.0/SMP for Linux NET4.0.
NET4: Linux TCP/IP 1.0 for NET4.0
IP Protocols: ICMP, UDP, TCP
IP: routing cache hash table of 512 buckets, 4Kbytes
TCP: Hash tables configured (established 8192 bind 8192)
apm: BIOS version 1.2 Flags 0x03 (Driver version 1.13)
Starting kswapd v1.6
pty: 256 Unix98 ptys configured
Uniform Multi-Platform E-IDE driver Revision: 6.30
ide: Assuming 33MHz system bus speed for PIO modes; override with idebus=xx
PIIX4: IDE controller on PCI bus 00 dev 09
PIIX4: chipset revision 1
PIIX4: not 100% native mode: will probe irqs later
hda: TOSHIBA MK6412MAT, ATA DISK drive
hdc: CRN-8241B, ATAPI CDROM drive
ide0 at 0x1f0-0x1f7,0x3f6 on irq 14
ide1 at 0x170-0x177,0x376 on irq 15
hda: 12685680 sectors (6495 MB), CHS=839/240/63
Partition check:
 hda: hda1 hda2 < hda5 hda6 hda7 >
VFS: Mounted root (ext2 filesystem) readonly.
Freeing unused kernel memory: 168k freed
Adding Swap: 68004k swap-space (priority -1)
[EXT II FS 0.5b, 95/08/09, bs=1024, fs=1024, gc=275, bpg=8192, ipg=2048, mo=ffffffea]
Soundblaster audio driver Copyright (C) by Hannu Savolainen 1993-1996
sb: ESS ES1869 Plug and Play AudioDrive detected
sb: ISAPnP reports 'ESS ES1869 Plug and Play AudioDrive' at i/o 0x220, irq 5, dma 1, 3
SB 3.01 detected OK (220)
ESS chip ES1869 detected
sb: 1 Soundblaster PnP card(s) found.
YM3812 and OPL-3 driver Copyright (C) by Hannu Savolainen, Rob Hooft 1993-1996

On Thu, 18 May 2000, Martin Mares wrote:
> Hello!
>
> This is a new version of the PCI IRQ routing code. Changes:
>
> o Fixed ID of the 82440MX router (by Dave Hinds).
> o ISAPnP and PCI now interact in order to avoid assignment of the
> same IRQ to both PCI and ISA devices. Checking of collision with
> PCI IRQ's has been moved from isapnp_init() to isapnp_check_interrupt(),
> so that dynamically assigned PCI interrupts are detected as well.
> Also, when scanning card configuration, ISAPnP notifies the PCI
> subsystem by calling pcibios_penalize_isa_irq() that the particular
> IRQ's can be used by ISAPnP cards and therefore should not be
> assigned to PCI devices if possible. [It would be nice to have
> some central arch-dependent piece code doing IRQ assignments
> properly instead of kludging it on many places as we do now, but
> it's a 2.5 project.]
> o PCI interrupt assignments are avoided if IO-APIC is really found,
> not if it's only configured.
> o When trying to assign an IRQ, try request_irq() on it.
> o If BIOS reports some IRQ's as exclusive for PCI, increase penalties
> for the other ones.
> o Better reporting of error messages when IRQ is not found.
>
> I hope this patch fixes all known IRQ assignment problems.
>
> Linus, I wasn't able to test it on any SMP machine, so I'm not sure
> about the IO-APIC part, so please decide yourself whether you want
> to apply it or not.
>
> Martin
>
>
> --- include/linux/pci_ids.h.mj Thu May 18 19:00:44 2000
> +++ include/linux/pci_ids.h Thu May 18 19:00:44 2000
> @@ -1175,7 +1175,6 @@
> #define PCI_DEVICE_ID_INTEL_82443BX_0 0x7190
> #define PCI_DEVICE_ID_INTEL_82443BX_1 0x7191
> #define PCI_DEVICE_ID_INTEL_82443BX_2 0x7192
> -#define PCI_DEVICE_ID_INTEL_82440MX_1 0x7194
> #define PCI_DEVICE_ID_INTEL_82443MX_0 0x7198
> #define PCI_DEVICE_ID_INTEL_82443MX_1 0x7199
> #define PCI_DEVICE_ID_INTEL_82443MX_2 0x719a
> --- include/asm-i386/pci.h.mj Thu May 18 19:53:59 2000
> +++ include/asm-i386/pci.h Thu May 18 20:45:31 2000
> @@ -13,6 +13,7 @@
> #define PCIBIOS_MIN_MEM 0x10000000
>
> void pcibios_set_master(struct pci_dev *dev);
> +void pcibios_penalize_isa_irq(int irq);
>
> /* Dynamic DMA mapping stuff.
> * i386 has everything mapped statically.
> --- include/asm-i386/io_apic.h.mj Thu May 18 20:23:11 2000
> +++ include/asm-i386/io_apic.h Thu May 18 20:45:29 2000
> @@ -9,6 +9,8 @@
> * Copyright (C) 1997, 1998, 1999, 2000 Ingo Molnar
> */
>
> +#ifdef CONFIG_X86_IO_APIC
> +
> #define IO_APIC_BASE(idx) \
> ((volatile int *)__fix_to_virt(FIX_IO_APIC_BASE_0 + idx))
>
> @@ -130,5 +132,14 @@
> extern int skip_ioapic_setup;
> extern void IO_APIC_init_uniprocessor (void);
>
> +/*
> + * If we use the IO-APIC for IRQ routing, disable automatic
> + * assignment of PCI IRQ's.
> + */
> +#define io_apic_assign_pci_irqs (!mp_irq_entries)
> +
> +#else /* !CONFIG_X86_IO_APIC */
> +#define io_apic_assign_pci_irqs 0
> #endif
>
> +#endif
> --- include/asm-mips/pci.h.mj Thu May 18 19:53:59 2000
> +++ include/asm-mips/pci.h Thu May 18 19:55:46 2000
> @@ -23,6 +23,11 @@
> /* No special bus mastering setup handling */
> }
>
> +extern inline void pcibios_penalize_isa_irq(int irq)
> +{
> + /* We don't do dynamic PCI IRQ allocation */
> +}
> +
> /*
> * Dynamic DMA mapping stuff.
> * MIPS has everything mapped statically.
> --- include/asm-alpha/pci.h.mj Thu May 18 19:53:59 2000
> +++ include/asm-alpha/pci.h Thu May 18 19:54:55 2000
> @@ -56,6 +56,11 @@
> /* No special bus mastering setup handling */
> }
>
> +extern inline void pcibios_penalize_isa_irq(int irq)
> +{
> + /* We don't do dynamic PCI IRQ allocation */
> +}
> +
> /* IOMMU controls. */
>
> /* Allocate and map kernel buffer using consistant mode DMA for PCI
> --- include/asm-m68k/pci.h.mj Thu May 18 19:53:59 2000
> +++ include/asm-m68k/pci.h Thu May 18 19:55:43 2000
> @@ -40,4 +40,9 @@
> /* No special bus mastering setup handling */
> }
>
> +extern inline void pcibios_penalize_isa_irq(int irq)
> +{
> + /* We don't do dynamic PCI IRQ allocation */
> +}
> +
> #endif /* _ASM_M68K_PCI_H */
> --- include/asm-sparc/pci.h.mj Thu May 18 19:53:59 2000
> +++ include/asm-sparc/pci.h Thu May 18 19:56:01 2000
> @@ -17,6 +17,11 @@
> /* No special bus mastering setup handling */
> }
>
> +extern inline void pcibios_penalize_isa_irq(int irq)
> +{
> + /* We don't do dynamic PCI IRQ allocation */
> +}
> +
> /* Dynamic DMA mapping stuff.
> */
>
> --- include/asm-ppc/pci.h.mj Thu May 18 19:53:59 2000
> +++ include/asm-ppc/pci.h Thu May 18 19:55:54 2000
> @@ -15,6 +15,11 @@
> /* No special bus mastering setup handling */
> }
>
> +extern inline void pcibios_penalize_isa_irq(int irq)
> +{
> + /* We don't do dynamic PCI IRQ allocation */
> +}
> +
> /* Dynamic DMA Mapping stuff
> * ++ajoshi
> */
> --- include/asm-sparc64/pci.h.mj Thu May 18 19:53:59 2000
> +++ include/asm-sparc64/pci.h Thu May 18 19:56:04 2000
> @@ -17,6 +17,11 @@
> /* No special bus mastering setup handling */
> }
>
> +extern inline void pcibios_penalize_isa_irq(int irq)
> +{
> + /* We don't do dynamic PCI IRQ allocation */
> +}
> +
> /* Dynamic DMA mapping stuff.
> */
>
> --- include/asm-arm/pci.h.mj Thu May 18 19:53:59 2000
> +++ include/asm-arm/pci.h Thu May 18 19:55:11 2000
> @@ -13,6 +13,11 @@
> /* No special bus mastering setup handling */
> }
>
> +extern inline void pcibios_penalize_isa_irq(int irq)
> +{
> + /* We don't do dynamic PCI IRQ allocation */
> +}
> +
> #include <asm/scatterlist.h>
> #include <asm/io.h>
>
> --- include/asm-sh/pci.h.mj Thu May 18 19:53:59 2000
> +++ include/asm-sh/pci.h Thu May 18 19:55:58 2000
> @@ -14,6 +14,11 @@
> /* No special bus mastering setup handling */
> }
>
> +extern inline void pcibios_penalize_isa_irq(int irq)
> +{
> + /* We don't do dynamic PCI IRQ allocation */
> +}
> +
> /* Dynamic DMA mapping stuff.
> * SuperH has everything mapped statically like x86.
> */
> --- include/asm-ia64/pci.h.mj Thu May 18 19:53:59 2000
> +++ include/asm-ia64/pci.h Thu May 18 19:55:38 2000
> @@ -16,6 +16,11 @@
> /* No special bus mastering setup handling */
> }
>
> +extern inline void pcibios_penalize_isa_irq(int irq)
> +{
> + /* We don't do dynamic PCI IRQ allocation */
> +}
> +
> /*
> * Dynamic DMA mapping API.
> * IA-64 has everything mapped statically.
> --- include/asm-mips64/pci.h.mj Thu May 18 19:53:59 2000
> +++ include/asm-mips64/pci.h Thu May 18 19:55:50 2000
> @@ -23,6 +23,11 @@
> /* No special bus mastering setup handling */
> }
>
> +extern inline void pcibios_penalize_isa_irq(int irq)
> +{
> + /* We don't do dynamic PCI IRQ allocation */
> +}
> +
> /*
> * Dynamic DMA mapping stuff.
> * MIPS has everything mapped statically.
> --- drivers/pnp/isapnp.c.mj Thu May 18 19:52:46 2000
> +++ drivers/pnp/isapnp.c Thu May 18 21:10:50 2000
> @@ -500,6 +500,7 @@
> int dependent, int size)
> {
> unsigned char tmp[3];
> + int i;
> struct isapnp_irq *irq, *ptr;
>
> isapnp_peek(tmp, size);
> @@ -526,6 +527,9 @@
> ptr->next = irq;
> else
> (*res)->irq = irq;
> + for (i=0; i<16; i++)
> + if (irq->map & i)
> + pcibios_penalize_isa_irq(i);
> }
>
> /*
> @@ -1603,6 +1607,14 @@
> return 1;
> }
> }
> +#ifdef CONFIG_PCI
> + if (!isapnp_skip_pci_scan) {
> + pci_for_each_dev(dev) {
> + if (dev->irq == irq)
> + return 1;
> + }
> + }
> +#endif
> if (request_irq(irq, isapnp_test_handler, SA_INTERRUPT, "isapnp", NULL))
> return 1;
> free_irq(irq, NULL);
> @@ -2070,45 +2082,6 @@
> #endif
> }
>
> -static int __init isapnp_do_reserve_irq(int irq)
> -{
> - int i;
> -
> - if (irq < 0 || irq > 15)
> - return -EINVAL;
> - for (i = 0; i < 16; i++) {
> - if (isapnp_reserve_irq[i] == irq)
> - return 0;
> - }
> - for (i = 0; i < 16; i++) {
> - if (isapnp_reserve_irq[i] < 0) {
> - isapnp_reserve_irq[i] = irq;
> -#ifdef ISAPNP_DEBUG
> - printk("isapnp: IRQ %i is reserved now.\n", irq);
> -#endif
> - return 0;
> - }
> - }
> - return -ENOMEM;
> -}
> -
> -#ifdef CONFIG_PCI
> -
> -static void __init isapnp_pci_init(void)
> -{
> - struct pci_dev *dev;
> -
> - pci_for_each_dev(dev) {
> -#ifdef ISAPNP_DEBUG
> - printk("isapnp: PCI: reserved IRQ: %i\n", dev->irq);
> -#endif
> - if (dev->irq > 0)
> - isapnp_do_reserve_irq(dev->irq);
> - }
> -}
> -
> -#endif /* CONFIG_PCI */
> -
> EXPORT_SYMBOL(isapnp_cards);
> EXPORT_SYMBOL(isapnp_devices);
> EXPORT_SYMBOL(isapnp_present);
> @@ -2200,10 +2173,6 @@
> } else {
> printk("isapnp: No Plug & Play card found\n");
> }
> -#ifdef CONFIG_PCI
> - if (!isapnp_skip_pci_scan)
> - isapnp_pci_init();
> -#endif
> #ifdef CONFIG_PROC_FS
> isapnp_proc_init();
> #endif
> --- arch/i386/kernel/pci-irq.c.mj Thu May 18 19:01:08 2000
> +++ arch/i386/kernel/pci-irq.c Thu May 18 20:55:51 2000
> @@ -14,11 +14,11 @@
> #include <linux/irq.h>
>
> #include <asm/io.h>
> +#include <asm/smp.h>
> +#include <asm/io_apic.h>
>
> #include "pci-i386.h"
>
> -extern int skip_ioapic_setup;
> -
> #define PIRQ_SIGNATURE (('$' << 0) + ('P' << 8) + ('I' << 16) + ('R' << 24))
> #define PIRQ_VERSION 0x0100
>
> @@ -32,8 +32,8 @@
> unsigned int pcibios_irq_mask = 0xfff8;
>
> static unsigned pirq_penalty[16] = {
> - 10000, 10000, 10000, 100, 100, 0, 0, 100,
> - 0, 0, 0, 0, 100, 1000, 1000, 1000
> + 1000000, 1000000, 1000000, 1000, 1000, 0, 0, 1000,
> + 0, 0, 0, 0, 1000, 100000, 100000, 100000
> };
>
> struct irq_router {
> @@ -222,7 +222,7 @@
> { "PIIX", PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82371FB_0, pirq_piix_get, pirq_piix_set },
> { "PIIX", PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82371SB_0, pirq_piix_get, pirq_piix_set },
> { "PIIX", PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82371AB_0, pirq_piix_get, pirq_piix_set },
> - { "PIIX", PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82440MX_1, pirq_piix_get, pirq_piix_set },
> + { "PIIX", PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82443MX_0, pirq_piix_get, pirq_piix_set },
> { "ALI", PCI_VENDOR_ID_AL, PCI_DEVICE_ID_AL_M1533, pirq_ali_get, pirq_ali_set },
> { "VIA", PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C586_0, pirq_via_get, pirq_via_set },
> { "VIA", PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C596, pirq_via_get, pirq_via_set },
> @@ -287,6 +287,10 @@
> return NULL;
> }
>
> +static void pcibios_test_irq_handler(int irq, void *dev_id, struct pt_regs *regs)
> +{
> +}
> +
> -int pcibios_lookup_irq(struct pci_dev *dev, int assign)
> +static int pcibios_lookup_irq(struct pci_dev *dev, int assign)
> {
> struct irq_info *info;
> @@ -323,19 +327,24 @@
>
> /* Find the best IRQ to assign */
> newirq = 0;
> - for (i = 0; i < 16; i++) {
> - if (!(mask & (1 << i)))
> - continue;
> - if (pirq_penalty[i] < pirq_penalty[newirq])
> - newirq = i;
> + if (assign) {
> + for (i = 0; i < 16; i++) {
> + if (!(mask & (1 << i)))
> + continue;
> + if (pirq_penalty[i] < pirq_penalty[newirq] &&
> + !request_irq(i, pcibios_test_irq_handler, SA_SHIRQ, "pci-test", dev)) {
> + free_irq(i, dev);
> + newirq = i;
> + }
> + }
> + DBG(" -> newirq=%d", newirq);
> }
> - DBG(" -> newirq=%d", newirq);
>
> /* Try to get current IRQ */
> if (r->get && (irq = r->get(pirq_router_dev, d, pirq))) {
> DBG(" -> got IRQ %d\n", irq);
> msg = "Found";
> - } else if (assign && newirq && r->set && (dev->class >> 8) != PCI_CLASS_DISPLAY_VGA) {
> + } else if (newirq && r->set && (dev->class >> 8) != PCI_CLASS_DISPLAY_VGA) {
> DBG(" -> assigning IRQ %d", newirq);
> if (r->set(pirq_router_dev, d, pirq, newirq)) {
> DBG(" ... OK\n");
> @@ -346,7 +355,7 @@
>
> if (!irq) {
> DBG(" ... failed\n");
> - if (assign && newirq && mask == (1 << newirq)) {
> + if (newirq && mask == (1 << newirq)) {
> msg = "Guessed";
> irq = newirq;
> } else
> @@ -379,6 +388,15 @@
> if (pirq_table) {
> pirq_peer_trick();
> pirq_find_router();
> + if (pirq_table->exclusive_irqs) {
> + int i;
> + for (i=0; i<16; i++)
> + if (!(pirq_table->exclusive_irqs & (1 << i)))
> + pirq_penalty[i] += 100;
> + }
> + /* If we're using the I/O APIC, avoid using the PCI IRQ routing table */
> + if (io_apic_assign_pci_irqs)
> + pirq_table = NULL;
> }
> }
>
> @@ -402,11 +420,11 @@
>
> pci_for_each_dev(dev) {
> pci_read_config_byte(dev, PCI_INTERRUPT_PIN, &pin);
> -#if defined(CONFIG_X86_IO_APIC)
> +#ifdef CONFIG_X86_IO_APIC
> /*
> * Recalculate IRQ numbers if we use the I/O APIC.
> */
> - if (!skip_ioapic_setup)
> + if (io_apic_assign_pci_irqs)
> {
> int irq;
>
> @@ -441,5 +459,33 @@
> */
> if (pin && !dev->irq)
> pcibios_lookup_irq(dev, 0);
> + }
> +}
> +
> +void __init pcibios_penalize_isa_irq(int irq)
> +{
> + /*
> + * If any ISAPnP device reports an IRQ in its list of possible
> + * IRQ's, we try to avoid assigning it to PCI devices.
> + */
> + pirq_penalty[irq] += 100;
> +}
> +
> +void pcibios_enable_irq(struct pci_dev *dev)
> +{
> + if (!dev->irq) {
> + u8 pin;
> + pci_read_config_byte(dev, PCI_INTERRUPT_PIN, &pin);
> + if (pin && !pcibios_lookup_irq(dev, 1)) {
> + char *msg;
> + if (io_apic_assign_pci_irqs)
> + msg = " Probably buggy MP table.";
> + else if (pci_probe & PCI_BIOS_IRQ_SCAN)
> + msg = "";
> + else
> + msg = " Please try using pci=biosirq.";
> + printk(KERN_WARNING "PCI: No IRQ known for interrupt pin %c of device %s.%s\n",
> + 'A' + pin - 1, dev->slot_name, msg);
> + }
> }
> }
> --- arch/i386/kernel/pci-visws.c.mj Thu May 18 19:56:28 2000
> +++ arch/i386/kernel/pci-visws.c Thu May 18 19:56:53 2000
> @@ -135,3 +135,7 @@
> {
> return pcibios_enable_resources(dev);
> }
> +
> +void __init pcibios_penalize_isa_irq(irq)
> +{
> +}
> --- arch/i386/kernel/pci-pc.c.mj Thu May 18 20:26:06 2000
> +++ arch/i386/kernel/pci-pc.c Thu May 18 20:40:40 2000
> @@ -14,7 +14,6 @@
>
> #include <asm/segment.h>
> #include <asm/io.h>
> -#include <asm/smp.h>
>
> #include "pci-i386.h"
>
> @@ -1045,13 +1044,6 @@
>
> if ((err = pcibios_enable_resources(dev)) < 0)
> return err;
> - if (!dev->irq) {
> - u8 pin;
> - pci_read_config_byte(dev, PCI_INTERRUPT_PIN, &pin);
> - if (pin && !pcibios_lookup_irq(dev, 1))
> - printk(KERN_WARNING "PCI: No IRQ known for interrupt pin %c of device %s.%s\n",
> - 'A' + pin - 1, dev->slot_name,
> - (pci_probe & PCI_BIOS_IRQ_SCAN) ? "" : " Please try using pci=biosirq.");
> - }
> + pcibios_enable_irq(dev);
> return 0;
> }
> --- arch/i386/kernel/i386_ksyms.c.mj Thu May 18 20:37:45 2000
> +++ arch/i386/kernel/i386_ksyms.c Thu May 18 20:38:55 2000
> @@ -100,6 +100,10 @@
> EXPORT_SYMBOL(pci_alloc_consistent);
> EXPORT_SYMBOL(pci_free_consistent);
>
> +#ifdef CONFIG_PCI
> +EXPORT_SYMBOL(pcibios_penalize_isa_irq);
> +#endif
> +
> #ifdef CONFIG_X86_USE_3DNOW
> EXPORT_SYMBOL(_mmx_memcpy);
> EXPORT_SYMBOL(mmx_clear_page);
> --- arch/i386/kernel/pci-i386.h.mj Thu May 18 20:40:31 2000
> +++ arch/i386/kernel/pci-i386.h Thu May 18 20:40:31 2000
> @@ -68,4 +68,4 @@
>
> void pcibios_irq_init(void);
> void pcibios_fixup_irqs(void);
> -int pcibios_lookup_irq(struct pci_dev *dev, int assign);
> +void pcibios_enable_irq(struct pci_dev *dev);
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: linux-usb-unsubscribe@suse.com
> For additional commands, e-mail: linux-usb-help@suse.com

-- 

Alanp

- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.rutgers.edu Please read the FAQ at http://www.tux.org/lkml/



This archive was generated by hypermail 2b29 : Tue May 23 2000 - 21:00:16 EST