Subject: Re: too many interrupts
To: C Kane <ckane@best.com>
From: Manuel Bouyer <bouyer@antioche.lip6.fr>
List: current-users
Date: 07/07/2000 11:32:55
On Thu, Jul 06, 2000 at 10:23:40PM -0700, C Kane wrote:
> Hello.
> 
> In recent kernels, I have a problem with a Cyclades-Y multi-port
> serial card on my NetBSD/i386.  These cards support external modules
> which can connect as many as 32 serial ports to one PCI card.
> 
> The problem does not happen in 1.3I.  I don't know at which version the
> problem started, but the problem exists in 1.4X through 1.5_ALPHA.
> 
> If one of the Cyclades-Y serial ports receives a character while
> that device is not opened (like by 'tip'), then NetBSD begins
> processing around 24,000 interrupts per second.  Sometimes this
> will not happen until a program opens the device, and then the program
> ends, and then a character arrives on the serial port.
> 
> Once the interrupts start happening, opening the port (like with 'tip')
> will put things back to normal.
> 
> Here's a brief bit of a kernel backtrace I got once while the interrupts
> were happening:
>   cpu_Debugger()
>   internal_command()
>   wskbd_translate()
>   wskbd_input()
>   pckbd_input()
>   pckbcintr()
>   Xintr1() at Xintr+0x70
>   --interrupt--
>   Xdoreti() at Xdoreti+0xe
>   --interrupt--
>   Xdoreti() at Xdoreti+0x3
>      [ 17 more --interrupt-- frames like these ]
>   --interrupt--
>   Xspllower(c08c4400,f04,89,c08c0089,c08c4400) at Xspllower+0xe
>   dp8390_read(c08c4400,f04,89,c04c4400,c0101f70) at dp8930_read+0x1d
>   dp8390_rint(c08c4400) at dp8390+rint+0x1ea
>   we_recv_int(c08c4400,c08b9d10,c0101f70,7fffffff,33) at we_recv_int+0x7a
>   dp8390_intr(c08c4400) at dp8390+intr+0x43c
>   Xintr7() at Xintr7+0x70
>   --interrupt--
>   Xspllower(c036cb64,1,c0231e28,0,7fffffff) at Xspllower+0xe
>   nfs_timer(0) at nfs_timer+0x33e
>   softclock(d2a00010,10,d29fa5f0,d29fa5f0,d2a0bf30) at softclock+0x121
>   Bad frame pointer: 0xd2a0bebc
> 
> I do not believe there is an 8390 device in the system.  It has an SMC
> combo 16 card:
>   we0 at isa0 port 0x280-0x29f iomem 0xcc000-0xcffff irq 7
>   we0: SMC8216/SMC8216C Ethernet (16-bit)
>   we0: Ethernet address 00:00:c0:4c:cb:01

The we driver uses the dp8390 routines.

Now, for your problem, I suspect that when the serial port is not opened the
interrupt isn't acknowledged properly. Check the interrupt routine of the
cy driver.

--
Manuel Bouyer, LIP6, Universite Paris VI.           Manuel.Bouyer@lip6.fr
--