Search Linux Wireless

Re: [PATCH 3/4] rt2x00: Don't free register information on suspend

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi John,

On Saturday 28 March 2009, Ivo van Doorn wrote:
> After suspend & resume the rt2x00 devices won't wakeup
> anymore due to a broken register information setup.
> The most important problem is the release of the EEPROM
> buffer which is completely cleared and never read again
> after the suspend.

Since this fixes suspend & resume for rt2x00 (this was a regression
from 2.6.27 or 2.6.28, the code was actually broken in 2.6.29 as well),
could this perhaps be added to the queue for 2.6.30 as well?

Thanks,

Ivo

> Signed-off-by: Ivo van Doorn <IvDoorn@xxxxxxxxx>
> ---
>  drivers/net/wireless/rt2x00/rt2x00pci.c |   18 +-----------------
>  drivers/net/wireless/rt2x00/rt2x00usb.c |   18 +-----------------
>  2 files changed, 2 insertions(+), 34 deletions(-)
> 
> diff --git a/drivers/net/wireless/rt2x00/rt2x00pci.c b/drivers/net/wireless/rt2x00/rt2x00pci.c
> index eef2761..01a3c49 100644
> --- a/drivers/net/wireless/rt2x00/rt2x00pci.c
> +++ b/drivers/net/wireless/rt2x00/rt2x00pci.c
> @@ -377,8 +377,6 @@ int rt2x00pci_suspend(struct pci_dev *pci_dev, pm_message_t state)
>  	if (retval)
>  		return retval;
>  
> -	rt2x00pci_free_reg(rt2x00dev);
> -
>  	pci_save_state(pci_dev);
>  	pci_disable_device(pci_dev);
>  	return pci_set_power_state(pci_dev, pci_choose_state(pci_dev, state));
> @@ -389,7 +387,6 @@ int rt2x00pci_resume(struct pci_dev *pci_dev)
>  {
>  	struct ieee80211_hw *hw = pci_get_drvdata(pci_dev);
>  	struct rt2x00_dev *rt2x00dev = hw->priv;
> -	int retval;
>  
>  	if (pci_set_power_state(pci_dev, PCI_D0) ||
>  	    pci_enable_device(pci_dev) ||
> @@ -398,20 +395,7 @@ int rt2x00pci_resume(struct pci_dev *pci_dev)
>  		return -EIO;
>  	}
>  
> -	retval = rt2x00pci_alloc_reg(rt2x00dev);
> -	if (retval)
> -		return retval;
> -
> -	retval = rt2x00lib_resume(rt2x00dev);
> -	if (retval)
> -		goto exit_free_reg;
> -
> -	return 0;
> -
> -exit_free_reg:
> -	rt2x00pci_free_reg(rt2x00dev);
> -
> -	return retval;
> +	return rt2x00lib_resume(rt2x00dev);
>  }
>  EXPORT_SYMBOL_GPL(rt2x00pci_resume);
>  #endif /* CONFIG_PM */
> diff --git a/drivers/net/wireless/rt2x00/rt2x00usb.c b/drivers/net/wireless/rt2x00/rt2x00usb.c
> index 7d50ca8..5015448 100644
> --- a/drivers/net/wireless/rt2x00/rt2x00usb.c
> +++ b/drivers/net/wireless/rt2x00/rt2x00usb.c
> @@ -702,8 +702,6 @@ int rt2x00usb_suspend(struct usb_interface *usb_intf, pm_message_t state)
>  	if (retval)
>  		return retval;
>  
> -	rt2x00usb_free_reg(rt2x00dev);
> -
>  	/*
>  	 * Decrease usbdev refcount.
>  	 */
> @@ -717,24 +715,10 @@ int rt2x00usb_resume(struct usb_interface *usb_intf)
>  {
>  	struct ieee80211_hw *hw = usb_get_intfdata(usb_intf);
>  	struct rt2x00_dev *rt2x00dev = hw->priv;
> -	int retval;
>  
>  	usb_get_dev(interface_to_usbdev(usb_intf));
>  
> -	retval = rt2x00usb_alloc_reg(rt2x00dev);
> -	if (retval)
> -		return retval;
> -
> -	retval = rt2x00lib_resume(rt2x00dev);
> -	if (retval)
> -		goto exit_free_reg;
> -
> -	return 0;
> -
> -exit_free_reg:
> -	rt2x00usb_free_reg(rt2x00dev);
> -
> -	return retval;
> +	return rt2x00lib_resume(rt2x00dev);
>  }
>  EXPORT_SYMBOL_GPL(rt2x00usb_resume);
>  #endif /* CONFIG_PM */


--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Host AP]     [ATH6KL]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [Linux Kernel]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Samba]     [Device Mapper]
  Powered by Linux