Return-path: Received: from nf-out-0910.google.com ([64.233.182.185]:20173 "EHLO nf-out-0910.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751379AbYITDkG (ORCPT ); Fri, 19 Sep 2008 23:40:06 -0400 Received: by nf-out-0910.google.com with SMTP id d3so279263nfc.21 for ; Fri, 19 Sep 2008 20:40:05 -0700 (PDT) Message-ID: (sfid-20080920_054014_044551_D0E3CD7F) Date: Fri, 19 Sep 2008 20:40:04 -0700 From: "Steven Noonan" To: "Luis R. Rodriguez" Subject: Re: [ath9k-devel] ath9k: massive unexplained latency in 2.6.27 (rc5, rc6, probably others) Cc: linux-wireless , LKML , "Senthilkumar Balasubramanian" , "ath9k-devel@lists.ath9k.org" , "Luis Rodriguez" , "Ingo Molnar" In-Reply-To: MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 References: <20080919142801.GA5816@senthil-lnx.users.atheros.com> <20080919175824.GA5626@senthil-lnx.users.atheros.com> <20080919182322.GB7027@tesla> <20080919235305.GD11665@tesla> <43e72e890809191813n95579f5h83e92b0ba1f95a44@mail.gmail.com> Sender: linux-wireless-owner@vger.kernel.org List-ID: On Fri, Sep 19, 2008 at 8:29 PM, Steven Noonan wrote: > Anyway, there definitely is an interrupt storm here. Let me demonstrate... Worth noting that this change (modified version of the patch by Senthil from earlier) made it so it didn't give an 'IRQ 17: nobody cared' when I reloaded ath9k during the IRQ storm... --- ath9k: flush pending IRQs before freeing IRQ Signed-off-by: Steven Noonan diff --git a/drivers/net/wireless/ath9k/main.c b/drivers/net/wireless/ath9k/main.c index 0997196..591eec1 100644 --- a/drivers/net/wireless/ath9k/main.c +++ b/drivers/net/wireless/ath9k/main.c @@ -1411,10 +1411,17 @@ static void ath_pci_remove(struct pci_dev *pdev) { struct ieee80211_hw *hw = pci_get_drvdata(pdev); struct ath_softc *sc = hw->priv; + enum ath9k_int status; if (pdev->irq) + { + ath9k_hw_set_interrupts(sc->sc_ah, 0); + ath9k_hw_getisr(sc->sc_ah, &status); /* NB: clears ISR too */ + sc->sc_invalid = 1; free_irq(pdev->irq, sc); + } ath_detach(sc); + pci_iounmap(pdev, sc->mem); pci_release_region(pdev, 0); pci_disable_device(pdev);