From foo@baz Thu Aug 20 06:14:22 PDT 2009 Date: Thu, 20 Aug 2009 06:14:22 -0700 To: Greg KH From: Greg Kroah-Hartman Subject: Staging: rtl8192e: fix for stack bug This should be a fix for the lockup bug when attaching to an access point. Patch came from a diff from RealTek. Hopefully it resolves the issue. Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtl8192e/ieee80211/ieee80211_softmac_wx.c | 16 ++------------ drivers/staging/rtl8192e/ieee80211/ieee80211_wx.c | 2 - drivers/staging/rtl8192e/r8192_pm.c | 9 ++++++- 3 files changed, 11 insertions(+), 16 deletions(-) --- a/drivers/staging/rtl8192e/ieee80211/ieee80211_softmac_wx.c +++ b/drivers/staging/rtl8192e/ieee80211/ieee80211_softmac_wx.c @@ -530,22 +530,12 @@ int ieee80211_wx_get_name(struct ieee802 union iwreq_data *wrqu, char *extra) { strcpy(wrqu->name, "802.11"); - if(ieee->modulation & IEEE80211_CCK_MODULATION){ + if(ieee->modulation & IEEE80211_CCK_MODULATION) strcat(wrqu->name, "b"); - if(ieee->modulation & IEEE80211_OFDM_MODULATION) - strcat(wrqu->name, "/g"); - }else if(ieee->modulation & IEEE80211_OFDM_MODULATION) + if(ieee->modulation & IEEE80211_OFDM_MODULATION) strcat(wrqu->name, "g"); if (ieee->mode & (IEEE_N_24G | IEEE_N_5G)) - strcat(wrqu->name, "/n"); - - if((ieee->state == IEEE80211_LINKED) || - (ieee->state == IEEE80211_LINKED_SCANNING)) - strcat(wrqu->name," linked"); - else if(ieee->state != IEEE80211_NOLINK) - strcat(wrqu->name," link.."); - - + strcat(wrqu->name, "n"); return 0; } --- a/drivers/staging/rtl8192e/ieee80211/ieee80211_wx.c +++ b/drivers/staging/rtl8192e/ieee80211/ieee80211_wx.c @@ -843,7 +843,7 @@ int ieee80211_wx_get_encode_ext(struct i } else idx = ieee->tx_keyidx; - if (!ext->ext_flags & IW_ENCODE_EXT_GROUP_KEY && + if (!(ext->ext_flags & IW_ENCODE_EXT_GROUP_KEY) && ext->alg != IW_ENCODE_ALG_WEP) if (idx != 0 || ieee->iw_mode != IW_MODE_INFRA) return -EINVAL; --- a/drivers/staging/rtl8192e/r8192_pm.c +++ b/drivers/staging/rtl8192e/r8192_pm.c @@ -34,7 +34,9 @@ int rtl8192E_suspend (struct pci_dev *pd if (!netif_running(dev)) goto out_pci_suspend; - dev->stop(dev); + if (dev->netdev_ops->ndo_stop) + dev->netdev_ops->ndo_stop(dev); +// dev->stop(dev); #if 0 netif_carrier_off(dev); @@ -150,7 +152,10 @@ int rtl8192E_resume (struct pci_dev *pde netif_device_attach(dev); - dev->open(dev); + if (dev->netdev_ops->ndo_open) + dev->netdev_ops->ndo_open(dev); + +// dev->open(dev); out: RT_TRACE(COMP_POWER, "<================r8192E resume call.\n"); return 0;