Subject: kern/11410: cnw prints a lot of "spurious interrupt"
To: None <gnats-bugs@gnats.netbsd.org>
From: None <eramore@era-t.ericsson.se>
List: netbsd-bugs
Date: 11/02/2000 04:22:13
>Number:         11410
>Category:       kern
>Synopsis:       cnw prints a lot of "spurious interrupt"
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    kern-bug-people
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Thu Nov 02 04:22:00 PST 2000
>Closed-Date:
>Last-Modified:
>Originator:     Michael Eriksson
>Release:        1.5_BETA (the same problem is in -current)
>Organization:
Ericsson Radio Systems AB
>Environment:
System: NetBSD kafka 1.5_BETA NetBSD 1.5_BETA (KAFKA) #0: Mon Oct 23 12:16:38 CEST 2000 mer@kafka:/usr/src/sys/arch/i386/compile/KAFKA i386

>Description:

The cnw driver prints to the console when it gets a spurious
interrupt. This is reasonable when the PCMCIA bus is controlled by a
ISA-bus PCIC, which gives a separate irq to each PCMCIA bus. My
Thinkpad 570E, on the other hand, has a TI1450 PCI cardbus controller,
which has one of its cardbus slots wired to the same "PCI interrupt"
as the clcs audio chip. It's not a good idea to have the cnw driver
print "spurious interrupt" for each clcs interrupt... :-)

>How-To-Repeat:

Use a Xircom Netwave wireless LAN card while listening to your
favorite MP3 music on a Thinkpad 570E and watch a lot of "cnw0:
spurious interrupt" get printed on the console.

>Fix:

Index: if_cnw.c
===================================================================
RCS file: /cvsroot/syssrc/sys/dev/pcmcia/if_cnw.c,v
retrieving revision 1.11.2.2
diff -u -r1.11.2.2 if_cnw.c
--- if_cnw.c	2000/10/17 23:20:53	1.11.2.2
+++ if_cnw.c	2000/11/02 12:01:37
@@ -948,9 +948,12 @@
 		    sc->sc_memoff + CNW_IOM_OFF + CNW_REG_CCSR);
 #endif
 		if (!(status & 0x02)) {
-			if (ret == 0)
-				printf("%s: spurious interrupt\n",
-				    sc->sc_dev.dv_xname);
+#ifdef CNW_DEBUG
+			if (sc->sc_ethercom.ec_if.if_flags & IFF_DEBUG)
+				if (ret == 0)
+					printf("%s: spurious interrupt\n",
+					    sc->sc_dev.dv_xname);
+#endif
 			return (ret);
 		}
 		ret = 1;
>Release-Note:
>Audit-Trail:
>Unformatted: