[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#362056: Too few IRQs available for ISA boards



Package: linux-image-2.6.15-1-686
Version: 2.6.15-8

	Unlike kernel-image-2.6.8, this kernel does not leave enough IRQs
available for ISA boards.
	The test machine has hardware configured as a 3-port Ethernet router
and firewall.  It works as intended under a stock Sarge distribution with a
2.6.8 kernel.  Sarge has successfully supported a 4-port router, with two
PCI boards, and two ISA boards, either both PNP or one PNP and one
jumper-configured.
	Under Etch, installed over the Internet from ftp.us.debian.org on
4/10/2006 using a netboot CD, it was not possible to configure all three
Ethernet boards.  One PCI and one ISA-PNP board were successfully configured
and pinged, but the second ISA-PNP board was not able to obtain an IRQ,
because too many of the IRQs which are normally set aside for optional
boards are pre-allocated by other kernel functions and not shared.

Hardware platform:
	HP Vectra VL, with Pentium 2, 128 MB RAM, 80 GB EIDE disk at
/dev/hda (primary master), CD-ROM (secondary master), floppy disk, two
on-board serial ports, on-board parallel port, on-board sound, on-board VGA,
PS2 keyboard and mouse.

Ethernet boards:

3C905B 10/100 UTP (3c59x driver)
SMC Ultra BNC, AUI, UTP (smc-ultra driver)
3C509 Combo BNC, AUI, UTP (3c509 driver)

	The 3C905B is plugged into a UTP hub, and gets DHCP service from
192.168.67.1.  It was configured during installation by debian-installer
netcfg.
	Depending on what's being tested, either the SMC or the 3C509 is
plugged into a coax metwork with static IP addresses.  192.168.136.43 is
available for ping tests.


	The test begins with the PCI board starting up at boot time.

ulysses:/proc# cat interrupts
           CPU0       
  0:     274546          XT-PIC  timer
  1:        590          XT-PIC  i8042
  2:          0          XT-PIC  cascade
  7:          1          XT-PIC  parport0
  8:          4          XT-PIC  rtc
  9:          0          XT-PIC  acpi
 10:       6926          XT-PIC  cs46xx, eth0
 11:          0          XT-PIC  uhci_hcd:usb1
 12:       3894          XT-PIC  i8042
 14:       9863          XT-PIC  ide0
 15:         63          XT-PIC  ide1
NMI:          0 
LOC:          0 
ERR:          0
MIS:          0


ulysses:/proc# cat ioports
0000-001f : dma1
0020-0021 : pic1
0040-0043 : timer0
0050-0053 : timer1
0060-006f : keyboard
0070-0077 : rtc
0080-008f : dma page reg
00a0-00a1 : pic2
00c0-00df : dma2
00f0-00ff : fpu
0170-0177 : ide1
01f0-01f7 : ide0
0213-0213 : ISAPnP
02f8-02ff : serial
0376-0376 : ide1
0378-037a : parport0
03c0-03df : vga+
03f6-03f6 : ide0
03f8-03ff : serial
0778-077a : parport0
0a79-0a79 : isapnp write
0cf8-0cff : PCI conf1
1000-100f : 0000:00:04.1
  1000-1007 : ide0
  1008-100f : ide1
1020-103f : 0000:00:04.2
  1020-103f : uhci_hcd
1040-104f : 0000:00:04.3
  1040-104f : motherboard
    1040-1047 : piix4_smbus
1080-10ff : 0000:00:10.0
8000-803f : 0000:00:04.3
  8000-803f : motherboard
    8000-8003 : PM1a_EVT_BLK
    8004-8005 : PM1a_CNT_BLK
    8008-800b : PM_TMR
    800c-800f : GPE0_BLK
    8010-8015 : ACPI CPU throttle



	Now we bring up the first ISA board:


ulysses:/proc# modprobe smc-ultra
ulysses:/proc# ifconfig eth1 192.168.71.1
ulysses:/proc# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:50:04:01:74:18  
          inet addr:192.168.67.235  Bcast:192.168.67.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:4435 errors:0 dropped:0 overruns:0 frame:0
          TX packets:2665 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:6542639 (6.2 MiB)  TX bytes:191315 (186.8 KiB)
          Interrupt:10 Base address:0x6000 

eth1      Link encap:Ethernet  HWaddr 00:00:C0:9D:91:F4  
          inet addr:192.168.71.1  Bcast:192.168.71.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)
          Interrupt:5 Base address:0x250 Memory:c0000-c2000 

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)

ulysses:/proc# cat interrupts
           CPU0       
  0:     612095          XT-PIC  timer
  1:       1193          XT-PIC  i8042
  2:          0          XT-PIC  cascade
  5:          0          XT-PIC  eth1
  7:          1          XT-PIC  parport0
  8:          4          XT-PIC  rtc
  9:          0          XT-PIC  acpi
 10:       7075          XT-PIC  cs46xx, eth0
 11:          0          XT-PIC  uhci_hcd:usb1
 12:       8426          XT-PIC  i8042
 14:      11091          XT-PIC  ide0
 15:         63          XT-PIC  ide1
NMI:          0 
LOC:          0 
ERR:          0
MIS:          0

ulysses:/proc# cat ioports
0000-001f : dma1
0020-0021 : pic1
0040-0043 : timer0
0050-0053 : timer1
0060-006f : keyboard
0070-0077 : rtc
0080-008f : dma page reg
00a0-00a1 : pic2
00c0-00df : dma2
00f0-00ff : fpu
0170-0177 : ide1
01f0-01f7 : ide0
0213-0213 : ISAPnP
0240-025f : smc-ultra
02f8-02ff : serial
0376-0376 : ide1
0378-037a : parport0
03c0-03df : vga+
03f6-03f6 : ide0
03f8-03ff : serial
0778-077a : parport0
0a79-0a79 : isapnp write
0cf8-0cff : PCI conf1
1000-100f : 0000:00:04.1
  1000-1007 : ide0
  1008-100f : ide1
1020-103f : 0000:00:04.2
  1020-103f : uhci_hcd
1040-104f : 0000:00:04.3
  1040-104f : motherboard
    1040-1047 : piix4_smbus
1080-10ff : 0000:00:10.0
8000-803f : 0000:00:04.3
  8000-803f : motherboard
    8000-8003 : PM1a_EVT_BLK
    8004-8005 : PM1a_CNT_BLK
    8008-800b : PM_TMR
    800c-800f : GPE0_BLK
    8010-8015 : ACPI CPU throttle


	As we see, the board got an IRQ assignment

ulysses:/proc# modprobe 3c509 xcvr=3
ulysses:/proc# ifconfig eth2 192.168.136.55
SIOCSIFFLAGS: Device or resource busy


	But this failed.  The 3c509 driver attempted to assign an IRQ, but
was blocked because other functions were already assigned to all IRQs, and
refused to share.  /proc/interrupts was unchanged.  Similarly, the output of
ifconfig was unchanged.
	If I install the 3c509 driver first, it gets IRQ 5, and when eth1
comes up, I can ping 192.168.136.43 successfully.  When I attempt to install
the smc-ultra module after that, I get a different error message:

ulysses:/proc# modprobe smc-ultra
FATAL: Error inserting smc-ultra <snip full pathname>: No such device or address


	Under kernel 2.6.8, the 3C905B gets auto-assigned to IRQ 9, shared
with two other functions (the sound card and uhci).  acpi doesn't reserve an
IRQ at all.  So 5, 10, and 11 are all free for expansion boards to use.  PNP
assigns the SMC board to IRQ 5 and the 3C509 to IRQ 10.  (I haven't tested
this with two SMCs or two 3C509s.)
	Do you need similar output from bringing up all three boards on
Sarge?
	
	So unless an IRQ can be freed, or the kernel can be induced to share
one of the pre-allocated IRQs with an Ethernet board, it doesn't appear to
be possible to accomplish the objective, which is to use the latest kernel
on a 3-port router.



Reply to: