Re: "interrupt storm..."; seems associated with an0 NIC

From: M. Warner Losh <imp_at_bsdimp.com>
Date: Tue, 09 Dec 2008 09:27:39 -0700 (MST)
In message: <20081209141908.GA15845_at_artx.ru>
            Ilya Orehov <elias_at_artx.ru> writes:
: +------- 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
: _at__at_ -689,6 +689,7 _at__at_ 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
: _at__at_ -722,6 +723,7 _at__at_ 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
: _at__at_ -732,7 +734,10 _at__at_ 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?

Can you please do the following:

+		if (!ack) {
+			printf("Need to ack %#x\n", sockevent);
+			cbb_set(sc, CBB_SOCKET_EVENT, sockevent);
+		}

And let me know what it says?

Warner
Received on Tue Dec 09 2008 - 15:30:42 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:39:38 UTC