Merge branch 'for-davem' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless
John W. Linville says: ==================== Here is a handful of fixes intended for 3.6. Daniel Drake offers a cfg80211 fix to consume pending events before taking a wireless device down. This prevents a resource leak. Stanislaw Gruszka gives us a fix for a NULL pointer dereference in rt61pci. Johannes Berg provides an iwlwifi patch to disable "greenfield" mode. Use of that mode was causing a rate scaling problem in for iwlwifi. ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
commit
69f1de1f7c
5 changed files with 16 additions and 8 deletions
|
@ -707,11 +707,14 @@ static int rs_toggle_antenna(u32 valid_ant, u32 *rate_n_flags,
|
|||
*/
|
||||
static bool rs_use_green(struct ieee80211_sta *sta)
|
||||
{
|
||||
struct iwl_station_priv *sta_priv = (void *)sta->drv_priv;
|
||||
struct iwl_rxon_context *ctx = sta_priv->ctx;
|
||||
|
||||
return (sta->ht_cap.cap & IEEE80211_HT_CAP_GRN_FLD) &&
|
||||
!(ctx->ht.non_gf_sta_present);
|
||||
/*
|
||||
* There's a bug somewhere in this code that causes the
|
||||
* scaling to get stuck because GF+SGI can't be combined
|
||||
* in SISO rates. Until we find that bug, disable GF, it
|
||||
* has only limited benefit and we still interoperate with
|
||||
* GF APs since we can always receive GF transmissions.
|
||||
*/
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -2243,8 +2243,7 @@ static void rt61pci_txdone(struct rt2x00_dev *rt2x00dev)
|
|||
|
||||
static void rt61pci_wakeup(struct rt2x00_dev *rt2x00dev)
|
||||
{
|
||||
struct ieee80211_conf conf = { .flags = 0 };
|
||||
struct rt2x00lib_conf libconf = { .conf = &conf };
|
||||
struct rt2x00lib_conf libconf = { .conf = &rt2x00dev->hw->conf };
|
||||
|
||||
rt61pci_config(rt2x00dev, &libconf, IEEE80211_CONF_CHANGE_PS);
|
||||
}
|
||||
|
|
|
@ -952,6 +952,11 @@ static int cfg80211_netdev_notifier_call(struct notifier_block *nb,
|
|||
*/
|
||||
synchronize_rcu();
|
||||
INIT_LIST_HEAD(&wdev->list);
|
||||
/*
|
||||
* Ensure that all events have been processed and
|
||||
* freed.
|
||||
*/
|
||||
cfg80211_process_wdev_events(wdev);
|
||||
break;
|
||||
case NETDEV_PRE_UP:
|
||||
if (!(wdev->wiphy->interface_modes & BIT(wdev->iftype)))
|
||||
|
|
|
@ -426,6 +426,7 @@ int cfg80211_change_iface(struct cfg80211_registered_device *rdev,
|
|||
struct net_device *dev, enum nl80211_iftype ntype,
|
||||
u32 *flags, struct vif_params *params);
|
||||
void cfg80211_process_rdev_events(struct cfg80211_registered_device *rdev);
|
||||
void cfg80211_process_wdev_events(struct wireless_dev *wdev);
|
||||
|
||||
int cfg80211_can_use_iftype_chan(struct cfg80211_registered_device *rdev,
|
||||
struct wireless_dev *wdev,
|
||||
|
|
|
@ -735,7 +735,7 @@ void cfg80211_upload_connect_keys(struct wireless_dev *wdev)
|
|||
wdev->connect_keys = NULL;
|
||||
}
|
||||
|
||||
static void cfg80211_process_wdev_events(struct wireless_dev *wdev)
|
||||
void cfg80211_process_wdev_events(struct wireless_dev *wdev)
|
||||
{
|
||||
struct cfg80211_event *ev;
|
||||
unsigned long flags;
|
||||
|
|
Loading…
Reference in a new issue