Date: Fri, 02 Jan 2004 11:31:23 -0500 (EST) From: John Baldwin <jhb@FreeBSD.org> To: "M. Warner Losh" <imp@bsdimp.com> Cc: freebsd-arch@freebsd.org Subject: Re: IRQ 2 problem Message-ID: <XFMail.20040102113123.jhb@FreeBSD.org> In-Reply-To: <20040101.033444.103565788.imp@bsdimp.com>
next in thread | previous in thread | raw e-mail | index | archive | help
On 01-Jan-2004 M. Warner Losh wrote: > In message: <1072952198.3233.24.camel@herring.nlsystems.com> > Doug Rabson <dfr@nlsystems.com> writes: >: On Wed, 2003-12-31 at 20:25, M. Warner Losh wrote: >: > In message: <XFMail.20031231141216.jhb@FreeBSD.org> >: > John Baldwin <jhb@FreeBSD.org> writes: >: > : >: > : On 31-Dec-2003 Rostislav Krasny wrote: >: > : > --- "M. Warner Losh" <imp@bsdimp.com> wrote: >: > : >> In message: <20031230.190927.108191769.imp@bsdimp.com> >: > : >> "M. Warner Losh" <imp@bsdimp.com> writes: >: > : >> : The reason that it iasn't been committed is because it is >: > : >> incorrect. >: > : >> : >: > : >> : >: > : >> >: > : > http://docs.freebsd.org/cgi/getmsg.cgi?fetch=15473+0+archive/2003/freebsd-arch/20030831.fre >: > : > ebsd-ar >: > : > ch >: > : >> : >: > : >> : has the particulars. >: > : >> >: > : >> Does your machine have an APIC? My laptop doesn't seem to exhibit >: > : >> the problem. >: > : > >: > : > No, it doesn't seem to have an APIC. This is Pentium MMX 200MHz machine >: > : > based on Intel's 430TX chipset. >: > : > >: > : > What is the correct way to fix this IRQ 2 problem? I can help to test it. >: > : >: > : IRQ 2 in FreeBSD is spelled IRQ 9. If a PNP device wants to use IRQ 2, it >: > : can be set to IRQ 2 in hardware, but it must use IRQ 9 when doing the >: > : bus_alloc_resource() and bus_setup_intr(). >: > >: > Actually the problem appears to be that the hardware wants 9 too. '2' >: > shouldn't be used at all, nor given out in allocation when we're using >: > AT PIC because that's the chaining IRQ. That's the current problem. >: > Eg, the isa bus is handing out '2' when it has no buisness doing so. >: >: The original fix for this which has been lost over the years was to >: exclude IRQ2 from the set of available interrupts. When the PnP code >: attempted to allocate an irq for the device, it would try for 2, not get >: it and settle for 9. >: >: At some point, IRQ2 was added back into the set but the PIC driver was >: fixed to allocate IRQ2 itself as early as possible. This matches the way >: the hardware is wired together and has a certain 'rightness' to it. >: Unfortunately the PIC driver doesn't seem to allocate IRQ2 for itself >: any more which makes it available for broken PnP devices. > > It looks like IRQ2 isn't registered as an interrupt source, so when we > create the resource map, it looks like we skip it and shouldn't be > handing it out... Yes, it doesn't exist as a valid IRQ in the irq map anymore. Oh, but you know what, the resource manager is really buggy in this respect. For example, on my system here: Interrupt request lines: 0x0 (root0) 0x1 (atkbd0) 0x2 (root0) 0x3 (sio1) 0x4 (sio0) 0x5-0x8 (root0) 0x9 (acpi0) 0xa-0xb (root0) 0xc (psm0) 0xd (npx0) 0xe (ata0) 0xf (ata1) 0x10 (uhci0) 0x11 (sis0) 0x12 (uhci2) 0x13 (uhci1) 0x14 (fxp0) 0x15-0x17 (root0) Note that the nexus didn't add IRQ 2 as a possible resource, but the resource manager went ahead and added it anyway when the adjacent regions were added. Someone should fix the resource manager code perhaps. -- John Baldwin <jhb@FreeBSD.org> <>< http://www.FreeBSD.org/~jhb/ "Power Users Use the Power to Serve!" - http://www.FreeBSD.org/
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?XFMail.20040102113123.jhb>