Patchwork Mark IPW2100 as BROKEN: Fatal interrupt. Scheduling firmware restart.

login
register
mail settings
Submitter Evgeniy Polyakov
Date Sept. 22, 2008, midnight
Message ID <20080922000039.GA1878@2ka.mipt.ru>
Download mbox | patch
Permalink /patch/812/
State Not Applicable
Headers show

Comments

Evgeniy Polyakov - Sept. 22, 2008, midnight
On Mon, Sep 22, 2008 at 01:27:47AM +0200, Marcel Holtmann (holtmann@linux.intel.com) wrote:
> as Arjan and Alan pointed out already, WARN_ON_ONCE is enough and I
> agree with them. Just to make this perfectly clear, this is with my
> community hat on.
> 
> Please send a proper patch with a simple WARN_ON_ONCE and I am happy to
> sign off on it.

I really do not care about if there is warning at all, I just want that
bug to be fixed. And a we can see, something started to change, and that's
probably a good sign. I glad there is a result. I will check d3 states
tomorrow. Attached patch if you think it is yet needed.

Patch

diff --git a/drivers/net/wireless/ipw2100.c b/drivers/net/wireless/ipw2100.c
index 19a401c..637dc05 100644
--- a/drivers/net/wireless/ipw2100.c
+++ b/drivers/net/wireless/ipw2100.c
@@ -3174,16 +3174,18 @@  static void ipw2100_irq_tasklet(struct ipw2100_priv *priv)
 	if (inta & IPW2100_INTA_FATAL_ERROR) {
 		printk(KERN_WARNING DRV_NAME
 		       ": Fatal interrupt. Scheduling firmware restart.\n");
+
 		priv->inta_other++;
 		write_register(dev, IPW_REG_INTA, IPW2100_INTA_FATAL_ERROR);
 
 		read_nic_dword(dev, IPW_NIC_FATAL_ERROR, &priv->fatal_error);
-		IPW_DEBUG_INFO("%s: Fatal error value: 0x%08X\n",
-			       priv->net_dev->name, priv->fatal_error);
-
 		read_nic_dword(dev, IPW_ERROR_ADDR(priv->fatal_error), &tmp);
-		IPW_DEBUG_INFO("%s: Fatal error address value: 0x%08X\n",
-			       priv->net_dev->name, tmp);
+
+		printk(KERN_WARNING "%s: Fatal error value: 0x%08X, "
+				"address: 0x%08X, inta: 0x%08lX\n",
+			priv->net_dev->name, priv->fatal_error, tmp,
+			(unsigned long)inta & IPW_INTERRUPT_MASK);
+		WARN_ON_ONCE(1);
 
 		/* Wake up any sleeping jobs */
 		schedule_reset(priv);