Date: Tue, 09 Dec 2008 09:27:39 -0700 (MST) From: "M. Warner Losh" <imp@bsdimp.com> To: elias@artx.ru Cc: current@freebsd.org Subject: Re: "interrupt storm..."; seems associated with an0 NIC Message-ID: <20081209.092739.35219831.imp@bsdimp.com> In-Reply-To: <20081209141908.GA15845@artx.ru> References: <20081205174838.GA22652@albert.catwhisker.org> <20081205.120056.255409238.imp@bsdimp.com> <20081209141908.GA15845@artx.ru>
next in thread | previous in thread | raw e-mail | index | archive | help
In message: <20081209141908.GA15845@artx.ru> Ilya Orehov <elias@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 : @@ -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? 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
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20081209.092739.35219831.imp>