Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 9 Dec 2008 17:19:08 +0300
From:      Ilya Orehov <elias@artx.ru>
To:        "M. Warner Losh" <imp@bsdimp.com>
Cc:        current@freebsd.org
Subject:   Re: "interrupt storm..."; seems associated with an0 NIC
Message-ID:  <20081209141908.GA15845@artx.ru>
In-Reply-To: <20081205.120056.255409238.imp@bsdimp.com>
References:  <20081205174838.GA22652@albert.catwhisker.org> <20081205.120056.255409238.imp@bsdimp.com>

next in thread | previous in thread | raw e-mail | index | archive | help
+------- M. Warner Losh, 2008-12-05 -------
| Thanks.  Grump.  Will have to back out and try again.

Hello!

I see storm too, but with 32-bit cards.

Thinkpad 600X, two cardbus cards: xl0 and ath0.

Since pccbb.c 1.176 and pccbb_pci.c 1.30
after rebooting with card(s) inserted or inserting any card
I see "interrupt storm...throttling..." messages about 1 per second.
Laptop remains usable, cards working.
Storm don't stop even if I eject all cards.
During storm, vmstat -i shows rate ~500 on cbb.
No messages appeared if laptop rebooted without cards
(until any card inserted).

Later revisions ( pccbb.c 1.178 and pccbb_pci.c 1.31) 
didn't bring any visible changes.

But this hack helped.
No storm detected, vmstat -i shows rate 0 or 1 on cbb.

diff -up xxx/pccbb_pci.c ./pccbb_pci.c
--- xxx/pccbb_pci.c	2008-12-06 11:56:00.000000000 +0300
+++ ./pccbb_pci.c	2008-12-09 14:08:03.000000000 +0300
@@ -689,6 +689,7 @@ cbb_pci_filt(void *arg)
 	struct cbb_softc *sc = arg;
 	uint32_t sockevent;
 	int retval = FILTER_STRAY;
+	int ack = 0;
 
 	/*
 	 * Read the socket event.  Sometimes, the theory goes, the PCI
@@ -722,6 +723,7 @@ cbb_pci_filt(void *arg)
 			sc->cardok = 0;
 			cbb_disable_func_intr(sc);
 			wakeup(&sc->intrhand);
+			ack = 1;
 		}
 		/*
 		 * If we get a power interrupt, wakeup anybody that might
@@ -732,7 +734,10 @@ cbb_pci_filt(void *arg)
 			cbb_set(sc, CBB_SOCKET_EVENT, CBB_SOCKET_EVENT_POWER);
 			sc->powerintr++;
 			wakeup((void *)&sc->powerintr);
+			ack = 1;
 		}
+		if (!ack) 
+			cbb_set(sc, CBB_SOCKET_EVENT, sockevent);
 		retval = FILTER_HANDLED;
 	}
 	/*

Do you need dmesg or some other info?

regards,
Ilya.

| 
| Warner
| _______________________________________________
| freebsd-current@freebsd.org mailing list
| http://lists.freebsd.org/mailman/listinfo/freebsd-current
| To unsubscribe, send any mail to "freebsd-current-unsubscribe@freebsd.org"
| 
+-----------------------------



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20081209141908.GA15845>