[Prism54-devel] [PATCH] reset_on_mgmt_timeo (bugs 56,59)

Aurelien slts@free.fr
Sun, 07 Mar 2004 01:32:34 +0100


Hi,
First, islpci_reset will reset the card and reset ssid and everything 
(and it calls islpci_reset_if and isl38xx_interface_reset).
Now about your patch : this will not help to solve the "NETDEV WATCHDOG: 
ethx: transmit timed out". Moreover it's a bit dangerous, because 
islpci_reset will call islpci_mgt_transaction and you can end up with a 
forever recursive behavior.
To reset the device after a "NETDEV WATCHDOG", look at 
islpci_eth_tx_timeout.

...And justice for all



Denis Vlasenko wrote:
> There are multiple functions dealing with various kinds of resets:
> 
> islpci_reset
> islpci_reset_if
> isl38xx_interface_reset
> 
> Which of them resets what? Do one need to reprogram essid etc
> after any of those?
> 
> Guys, can you please rename them so that it would be easier to
> understand what's the difference, and maybe put a bit
> of comment in front of each definition?
> 
> Meanwhile, here's the patch which _maybe_ helps with
> "Bug 56 NETDEV WATCHDOG: eth2: transmit timed out"
> 
> The problem is that I don't know whether card will keep settings
> (essid etc...) over reset, so watch your syslog closely :)
> 
> Testers whose cards are prone to bigs 56 and 59 needed.
> 
> Claas, seems like you can reproduce hangs,
> can you try it?
> --
> vda
> 
> 
> ------------------------------------------------------------------------
> 
> --- prism54/islpci_mgt.c.orig	Sun Feb 22 16:56:06 2004
> +++ prism54/islpci_mgt.c	Sat Mar  6 22:45:32 2004
> @@ -513,7 +513,8 @@
>  	printk(KERN_WARNING "%s: timeout waiting for mgmt response\n",
>  	       ndev->name);
>  
> -	/* TODO: we should reset the device here */     
> +	/* Device hung up, reset it */
> +	islpci_reset(priv, 1 /*int reload_firmware*/);
>   out:
>  #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
>  	finish_wait(&priv->mgmt_wqueue, &wait);