[kernel/f16] mac80211: fix debugfs key->station symlink brcmsmac: fix tx queue flush infinite loop mac80211: Use

John W. Linville linville at fedoraproject.org
Mon Jan 30 15:43:52 UTC 2012


commit a43c59fbeeac2aea17ad7f750db331c325605322
Author: John W. Linville <linville at tuxdriver.com>
Date:   Mon Jan 30 10:41:26 2012 -0500

    mac80211: fix debugfs key->station symlink
    brcmsmac: fix tx queue flush infinite loop
    mac80211: Use the right headroom size for mesh mgmt frames
    mac80211: fix work removal on deauth request
    b43: add option to avoid duplicating device support with brcmsmac
    mac80211: update oper_channel on ibss join
    mac80211: set bss_conf.idle when vif is connected
    iwlwifi: fix PCI-E transport "inta" race

 ...ion-to-avoid-duplicating-device-support-w.patch |    2 +-
 brcmsmac-fix-tx-queue-flush-infinite-loop.patch    |   51 ++++++++++++
 iwlwifi-fix-PCI-E-transport-inta-race.patch        |   51 ++++++++++++
 kernel.spec                                        |   30 ++++++-
 ...e-the-right-headroom-size-for-mesh-mgmt-f.patch |   83 ++++++++++++++++++++
 mac80211-fix-debugfs-key-station-symlink.patch     |   43 ++++++++++
 mac80211-fix-work-removal-on-deauth-request.patch  |   79 ++++---------------
 ...1-set-bss_conf.idle-when-vif-is-connected.patch |   37 +++++++++
 mac80211-update-oper_channel-on-ibss-join.patch    |   31 +++++++
 9 files changed, 339 insertions(+), 68 deletions(-)
---
diff --git a/b43-add-option-to-avoid-duplicating-device-support-w.patch b/b43-add-option-to-avoid-duplicating-device-support-w.patch
index 63d28cd..ca820df 100644
--- a/b43-add-option-to-avoid-duplicating-device-support-w.patch
+++ b/b43-add-option-to-avoid-duplicating-device-support-w.patch
@@ -1,7 +1,7 @@
 From 4f3d09de38d234ce7ffba5ec5a7e6704f983d375 Mon Sep 17 00:00:00 2001
 From: John W. Linville <linville at tuxdriver.com>
 Date: Wed, 11 Jan 2012 15:50:15 -0500
-Subject: [PATCH] b43: add option to avoid duplicating device support with
+Subject: [PATCH 5/8] b43: add option to avoid duplicating device support with
  brcmsmac
 
 Signed-off-by: John W. Linville <linville at tuxdriver.com>
diff --git a/brcmsmac-fix-tx-queue-flush-infinite-loop.patch b/brcmsmac-fix-tx-queue-flush-infinite-loop.patch
new file mode 100644
index 0000000..c5d69d4
--- /dev/null
+++ b/brcmsmac-fix-tx-queue-flush-infinite-loop.patch
@@ -0,0 +1,51 @@
+From f96b08a7e6f69c0f0a576554df3df5b1b519c479 Mon Sep 17 00:00:00 2001
+From: Stanislaw Gruszka <sgruszka at redhat.com>
+Date: Tue, 17 Jan 2012 12:38:50 +0100
+Subject: [PATCH 2/8] brcmsmac: fix tx queue flush infinite loop
+
+This patch workaround live deadlock problem caused by infinite loop
+in brcms_c_wait_for_tx_completion(). I do not consider the patch as
+the proper fix, which should fix the real reason of tx queue flush
+failure, but patch helps with system lockup.
+
+Reference:
+https://bugzilla.kernel.org/show_bug.cgi?id=42576
+
+Reported-and-tested-by: Patrick <ragamuffin at datacomm.ch>
+Cc: stable at vger.kernel.org # 3.2+
+Signed-off-by: Stanislaw Gruszka <sgruszka at redhat.com>
+Signed-off-by: John W. Linville <linville at tuxdriver.com>
+---
+ drivers/net/wireless/brcm80211/brcmsmac/main.c |   10 +++++++++-
+ 1 files changed, 9 insertions(+), 1 deletions(-)
+
+diff --git a/drivers/net/wireless/brcm80211/brcmsmac/main.c b/drivers/net/wireless/brcm80211/brcmsmac/main.c
+index f7ed340..f6affc6 100644
+--- a/drivers/net/wireless/brcm80211/brcmsmac/main.c
++++ b/drivers/net/wireless/brcm80211/brcmsmac/main.c
+@@ -7981,13 +7981,21 @@ int brcms_c_get_curband(struct brcms_c_info *wlc)
+ 
+ void brcms_c_wait_for_tx_completion(struct brcms_c_info *wlc, bool drop)
+ {
++	int timeout = 20;
++
+ 	/* flush packet queue when requested */
+ 	if (drop)
+ 		brcmu_pktq_flush(&wlc->pkt_queue->q, false, NULL, NULL);
+ 
+ 	/* wait for queue and DMA fifos to run dry */
+-	while (!pktq_empty(&wlc->pkt_queue->q) || brcms_txpktpendtot(wlc) > 0)
++	while (!pktq_empty(&wlc->pkt_queue->q) || brcms_txpktpendtot(wlc) > 0) {
+ 		brcms_msleep(wlc->wl, 1);
++
++		if (--timeout == 0)
++			break;
++	}
++
++	WARN_ON_ONCE(timeout == 0);
+ }
+ 
+ void brcms_c_set_beacon_listen_interval(struct brcms_c_info *wlc, u8 interval)
+-- 
+1.7.4.4
+
diff --git a/iwlwifi-fix-PCI-E-transport-inta-race.patch b/iwlwifi-fix-PCI-E-transport-inta-race.patch
new file mode 100644
index 0000000..b17e5ec
--- /dev/null
+++ b/iwlwifi-fix-PCI-E-transport-inta-race.patch
@@ -0,0 +1,51 @@
+From b49ba04a3a0382e7314d990707c21094c410425a Mon Sep 17 00:00:00 2001
+From: Johannes Berg <johannes.berg at intel.com>
+Date: Thu, 19 Jan 2012 08:20:57 -0800
+Subject: [PATCH 8/8] iwlwifi: fix PCI-E transport "inta" race
+
+When an interrupt comes in, we read the reason
+bits and collect them into "trans_pcie->inta".
+This happens with the spinlock held. However,
+there's a bug resetting this variable -- that
+happens after the spinlock has been released.
+This means that it is possible for interrupts
+to be missed if the reset happens after some
+other interrupt reasons were already added to
+the variable.
+
+I found this by code inspection, looking for a
+reason that we sometimes see random commands
+time out. It seems possible that this causes
+such behaviour, but I can't say for sure right
+now since it happens extremely infrequently on
+my test systems.
+
+Cc: stable at vger.kernel.org [3.2]
+Signed-off-by: Johannes Berg <johannes.berg at intel.com>
+Signed-off-by: Wey-Yi Guy <wey-yi.w.guy at intel.com>
+Signed-off-by: John W. Linville <linville at tuxdriver.com>
+---
+ drivers/net/wireless/iwlwifi/iwl-trans-pcie-rx.c |    4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/net/wireless/iwlwifi/iwl-trans-pcie-rx.c b/drivers/net/wireless/iwlwifi/iwl-trans-pcie-rx.c
+index 752493f..65d1f05 100644
+--- a/drivers/net/wireless/iwlwifi/iwl-trans-pcie-rx.c
++++ b/drivers/net/wireless/iwlwifi/iwl-trans-pcie-rx.c
+@@ -972,11 +972,11 @@ void iwl_irq_tasklet(struct iwl_trans *trans)
+ 	}
+ #endif
+ 
+-	spin_unlock_irqrestore(&trans->shrd->lock, flags);
+-
+ 	/* saved interrupt in inta variable now we can reset trans_pcie->inta */
+ 	trans_pcie->inta = 0;
+ 
++	spin_unlock_irqrestore(&trans->shrd->lock, flags);
++
+ 	/* Now service all interrupt bits discovered above. */
+ 	if (inta & CSR_INT_BIT_HW_ERR) {
+ 		IWL_ERR(trans, "Hardware error detected.  Restarting.\n");
+-- 
+1.7.4.4
+
diff --git a/kernel.spec b/kernel.spec
index 88d4100..bd6703c 100644
--- a/kernel.spec
+++ b/kernel.spec
@@ -820,9 +820,15 @@ Patch50002: compat-wireless-integrated-build.patch
 
 Patch50100: compat-wireless-rtl8192cu-Fix-WARNING-on-suspend-resume.patch
 
-# Remove overlapping hardware support between b43 and brcmsmac
-Patch50101: b43-add-option-to-avoid-duplicating-device-support-w.patch
-
+# Pending upstream fixes
+Patch50101: mac80211-fix-debugfs-key-station-symlink.patch
+Patch50102: brcmsmac-fix-tx-queue-flush-infinite-loop.patch
+Patch50103: mac80211-Use-the-right-headroom-size-for-mesh-mgmt-f.patch
+Patch50104: mac80211-fix-work-removal-on-deauth-request.patch
+Patch50105: b43-add-option-to-avoid-duplicating-device-support-w.patch
+Patch50106: mac80211-update-oper_channel-on-ibss-join.patch
+Patch50107: mac80211-set-bss_conf.idle-when-vif-is-connected.patch
+Patch50108: iwlwifi-fix-PCI-E-transport-inta-race.patch
 
 %endif
 
@@ -1579,10 +1585,16 @@ cd compat-wireless-%{cwversion}
 ApplyPatch compat-wireless-config-fixups.patch
 ApplyPatch compat-wireless-pr_fmt-warning-avoidance.patch
 ApplyPatch compat-wireless-rtl8192cu-Fix-WARNING-on-suspend-resume.patch
-ApplyPatch mac80211-fix-work-removal-on-deauth-request.patch
 
-# Remove overlapping hardware support between b43 and brcmsmac
+# Pending upstream fixes
+ApplyPatch mac80211-fix-debugfs-key-station-symlink.patch
+ApplyPatch brcmsmac-fix-tx-queue-flush-infinite-loop.patch
+ApplyPatch mac80211-Use-the-right-headroom-size-for-mesh-mgmt-f.patch
+ApplyPatch mac80211-fix-work-removal-on-deauth-request.patch
 ApplyPatch b43-add-option-to-avoid-duplicating-device-support-w.patch
+ApplyPatch mac80211-update-oper_channel-on-ibss-join.patch
+ApplyPatch mac80211-set-bss_conf.idle-when-vif-is-connected.patch
+ApplyPatch iwlwifi-fix-PCI-E-transport-inta-race.patch
 
 cd ..
 
@@ -2291,6 +2303,14 @@ fi
 %changelog
 * Mon Jan 30 2012 John W. Linville <linville at redhat.com>
 - Use the eeprom_93cx6 driver from the compat-wireless package
+- mac80211: fix debugfs key->station symlink
+- brcmsmac: fix tx queue flush infinite loop
+- mac80211: Use the right headroom size for mesh mgmt frames
+- mac80211: fix work removal on deauth request
+- b43: add option to avoid duplicating device support with brcmsmac
+- mac80211: update oper_channel on ibss join
+- mac80211: set bss_conf.idle when vif is connected
+- iwlwifi: fix PCI-E transport "inta" race
 
 * Fri Jan 27 2012 John W. Linville <linville at redhat.com>
 - Include config.mk from compat-wireless build in files for installation
diff --git a/mac80211-Use-the-right-headroom-size-for-mesh-mgmt-f.patch b/mac80211-Use-the-right-headroom-size-for-mesh-mgmt-f.patch
new file mode 100644
index 0000000..9096eff
--- /dev/null
+++ b/mac80211-Use-the-right-headroom-size-for-mesh-mgmt-f.patch
@@ -0,0 +1,83 @@
+From 65e8b0ccb6cf176f8eddb1b05534be46580da9dd Mon Sep 17 00:00:00 2001
+From: Javier Cardona <javier at cozybit.com>
+Date: Tue, 17 Jan 2012 18:17:46 -0800
+Subject: [PATCH 3/8] mac80211: Use the right headroom size for mesh mgmt
+ frames
+
+Use local->tx_headroom instad of local->hw.extra_tx_headroom.
+local->tx_headroom is the max of hw.extra_tx_headroom required by the
+driver and the headroom required by mac80211 for status reporting.  On
+drivers where hw.extra_tx_headroom is smaller than what mac80211
+requires (e.g. ath5k), we would not reserve sufficient buffer space to
+report tx status.
+
+Also, don't reserve local->tx_headroom + local->hw.extra_tx_headroom.
+
+Reported-by: Simon Morgenthaler <s.morgenthaler at students.unibe.ch>
+Reported-by: Kai Scharwies <kai at scharwies.de>
+Signed-off-by: Javier Cardona <javier at cozybit.com>
+Signed-off-by: John W. Linville <linville at tuxdriver.com>
+---
+ net/mac80211/mesh_hwmp.c  |    8 ++++----
+ net/mac80211/mesh_plink.c |    4 ++--
+ 2 files changed, 6 insertions(+), 6 deletions(-)
+
+diff --git a/net/mac80211/mesh_hwmp.c b/net/mac80211/mesh_hwmp.c
+index 73abb75..54df1b2 100644
+--- a/net/mac80211/mesh_hwmp.c
++++ b/net/mac80211/mesh_hwmp.c
+@@ -119,12 +119,12 @@ static int mesh_path_sel_frame_tx(enum mpath_frame_type action, u8 flags,
+ 	int hdr_len = offsetof(struct ieee80211_mgmt, u.action.u.mesh_action) +
+ 		      sizeof(mgmt->u.action.u.mesh_action);
+ 
+-	skb = dev_alloc_skb(local->hw.extra_tx_headroom +
++	skb = dev_alloc_skb(local->tx_headroom +
+ 			    hdr_len +
+ 			    2 + 37); /* max HWMP IE */
+ 	if (!skb)
+ 		return -1;
+-	skb_reserve(skb, local->hw.extra_tx_headroom);
++	skb_reserve(skb, local->tx_headroom);
+ 	mgmt = (struct ieee80211_mgmt *) skb_put(skb, hdr_len);
+ 	memset(mgmt, 0, hdr_len);
+ 	mgmt->frame_control = cpu_to_le16(IEEE80211_FTYPE_MGMT |
+@@ -250,12 +250,12 @@ int mesh_path_error_tx(u8 ttl, u8 *target, __le32 target_sn,
+ 	if (time_before(jiffies, ifmsh->next_perr))
+ 		return -EAGAIN;
+ 
+-	skb = dev_alloc_skb(local->hw.extra_tx_headroom +
++	skb = dev_alloc_skb(local->tx_headroom +
+ 			    hdr_len +
+ 			    2 + 15 /* PERR IE */);
+ 	if (!skb)
+ 		return -1;
+-	skb_reserve(skb, local->tx_headroom + local->hw.extra_tx_headroom);
++	skb_reserve(skb, local->tx_headroom);
+ 	mgmt = (struct ieee80211_mgmt *) skb_put(skb, hdr_len);
+ 	memset(mgmt, 0, hdr_len);
+ 	mgmt->frame_control = cpu_to_le16(IEEE80211_FTYPE_MGMT |
+diff --git a/net/mac80211/mesh_plink.c b/net/mac80211/mesh_plink.c
+index 41ef1b4..a172517 100644
+--- a/net/mac80211/mesh_plink.c
++++ b/net/mac80211/mesh_plink.c
+@@ -172,7 +172,7 @@ static int mesh_plink_frame_tx(struct ieee80211_sub_if_data *sdata,
+ 	int hdr_len = offsetof(struct ieee80211_mgmt, u.action.u.self_prot) +
+ 		      sizeof(mgmt->u.action.u.self_prot);
+ 
+-	skb = dev_alloc_skb(local->hw.extra_tx_headroom +
++	skb = dev_alloc_skb(local->tx_headroom +
+ 			    hdr_len +
+ 			    2 + /* capability info */
+ 			    2 + /* AID */
+@@ -186,7 +186,7 @@ static int mesh_plink_frame_tx(struct ieee80211_sub_if_data *sdata,
+ 			    sdata->u.mesh.ie_len);
+ 	if (!skb)
+ 		return -1;
+-	skb_reserve(skb, local->hw.extra_tx_headroom);
++	skb_reserve(skb, local->tx_headroom);
+ 	mgmt = (struct ieee80211_mgmt *) skb_put(skb, hdr_len);
+ 	memset(mgmt, 0, hdr_len);
+ 	mgmt->frame_control = cpu_to_le16(IEEE80211_FTYPE_MGMT |
+-- 
+1.7.4.4
+
diff --git a/mac80211-fix-debugfs-key-station-symlink.patch b/mac80211-fix-debugfs-key-station-symlink.patch
new file mode 100644
index 0000000..d98f2c9
--- /dev/null
+++ b/mac80211-fix-debugfs-key-station-symlink.patch
@@ -0,0 +1,43 @@
+From 9446f3efc53512e5ad9e0966539021a2a41fe5a0 Mon Sep 17 00:00:00 2001
+From: Johannes Berg <johannes.berg at intel.com>
+Date: Tue, 17 Jan 2012 10:32:01 +0100
+Subject: [PATCH 1/8] mac80211: fix debugfs key->station symlink
+
+Since stations moved into a virtual interface
+subdirectory, this link has been broken. Fix it.
+
+Signed-off-by: Johannes Berg <johannes.berg at intel.com>
+Signed-off-by: John W. Linville <linville at tuxdriver.com>
+---
+ net/mac80211/debugfs_key.c |    7 ++++---
+ 1 files changed, 4 insertions(+), 3 deletions(-)
+
+diff --git a/net/mac80211/debugfs_key.c b/net/mac80211/debugfs_key.c
+index 38e6101..59edcd9 100644
+--- a/net/mac80211/debugfs_key.c
++++ b/net/mac80211/debugfs_key.c
+@@ -225,9 +225,9 @@ KEY_OPS(key);
+ 			    key, &key_##name##_ops);
+ 
+ void ieee80211_debugfs_key_add(struct ieee80211_key *key)
+-  {
++{
+ 	static int keycount;
+-	char buf[50];
++	char buf[100];
+ 	struct sta_info *sta;
+ 
+ 	if (!key->local->debugfs.keys)
+@@ -244,7 +244,8 @@ void ieee80211_debugfs_key_add(struct ieee80211_key *key)
+ 
+ 	sta = key->sta;
+ 	if (sta) {
+-		sprintf(buf, "../../stations/%pM", sta->sta.addr);
++		sprintf(buf, "../../netdev:%s/stations/%pM",
++			sta->sdata->name, sta->sta.addr);
+ 		key->debugfs.stalink =
+ 			debugfs_create_symlink("station", key->debugfs.dir, buf);
+ 	}
+-- 
+1.7.4.4
+
diff --git a/mac80211-fix-work-removal-on-deauth-request.patch b/mac80211-fix-work-removal-on-deauth-request.patch
index 60b91d3..941b518 100644
--- a/mac80211-fix-work-removal-on-deauth-request.patch
+++ b/mac80211-fix-work-removal-on-deauth-request.patch
@@ -1,51 +1,7 @@
-Path: news.gmane.org!not-for-mail
-From: Johannes Berg <johannes-cdvu00un1VgdHxzADdlk8Q at public.gmane.org>
-Newsgroups: gmane.linux.kernel.wireless.general
-Subject: [PATCH 3.3] mac80211: fix work removal on deauth request
+From bc4934bc61d0a11fd62c5187ff83645628f8be8b Mon Sep 17 00:00:00 2001
+From: Johannes Berg <johannes.berg at intel.com>
 Date: Wed, 18 Jan 2012 14:10:25 +0100
-Lines: 107
-Approved: news at gmane.org
-Message-ID: <1326892225.4778.5.camel at jlt3.sipsolutions.net>
-NNTP-Posting-Host: lo.gmane.org
-Mime-Version: 1.0
-Content-Type: text/plain; charset="UTF-8"
-Content-Transfer-Encoding: 7bit
-X-Trace: dough.gmane.org 1326892249 18013 80.91.229.12 (18 Jan 2012 13:10:49 GMT)
-X-Complaints-To: usenet at dough.gmane.org
-NNTP-Posting-Date: Wed, 18 Jan 2012 13:10:49 +0000 (UTC)
-Cc: linux-wireless <linux-wireless-u79uwXL29TY76Z2rM5mHXA at public.gmane.org>,
-	Pontus Fuchs <pontus.fuchs-Re5JQEeQqe8AvxtiuMwx3w at public.gmane.org>
-To: John Linville <linville-2XuSBdqkA4R54TAoqtyWWQ at public.gmane.org>
-Original-X-From: linux-wireless-owner-u79uwXL29TY76Z2rM5mHXA at public.gmane.org Wed Jan 18 14:10:44 2012
-Return-path: <linux-wireless-owner-u79uwXL29TY76Z2rM5mHXA at public.gmane.org>
-Envelope-to: glkwg-linux-wireless-1dZseelyfdZg9hUCZPvPmw at public.gmane.org
-Original-Received: from vger.kernel.org ([209.132.180.67])
-	by lo.gmane.org with esmtp (Exim 4.69)
-	(envelope-from <linux-wireless-owner-u79uwXL29TY76Z2rM5mHXA at public.gmane.org>)
-	id 1RnVHo-00044l-Aq
-	for glkwg-linux-wireless-1dZseelyfdZg9hUCZPvPmw at public.gmane.org; Wed, 18 Jan 2012 14:10:44 +0100
-Original-Received: (majordomo-u79uwXL29TY76Z2rM5mHXA at public.gmane.org) by vger.kernel.org via listexpand
-	id S1757410Ab2ARNK3 (ORCPT
-	<rfc822;glkwg-linux-wireless at m.gmane.org>);
-	Wed, 18 Jan 2012 08:10:29 -0500
-Original-Received: from he.sipsolutions.net ([78.46.109.217]:45023 "EHLO
-	sipsolutions.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org
-	with ESMTP id S1754365Ab2ARNK2 (ORCPT
-	<rfc822;linux-wireless-u79uwXL29TY76Z2rM5mHXA at public.gmane.org>);
-	Wed, 18 Jan 2012 08:10:28 -0500
-Original-Received: by sipsolutions.net with esmtpsa (TLS1.0:RSA_AES_256_CBC_SHA1:32)
-	(Exim 4.77)
-	(envelope-from <johannes-cdvu00un1VgdHxzADdlk8Q at public.gmane.org>)
-	id 1RnVHW-0004hf-Lx; Wed, 18 Jan 2012 14:10:26 +0100
-X-Mailer: Evolution 2.30.3 
-Original-Sender: linux-wireless-owner-u79uwXL29TY76Z2rM5mHXA at public.gmane.org
-Precedence: bulk
-List-ID: <linux-wireless.vger.kernel.org>
-X-Mailing-List: linux-wireless-u79uwXL29TY76Z2rM5mHXA at public.gmane.org
-Xref: news.gmane.org gmane.linux.kernel.wireless.general:84095
-Archived-At: <http://permalink.gmane.org/gmane.linux.kernel.wireless.general/84095>
-
-From: Johannes Berg <johannes.berg-ral2JQCrhuEAvxtiuMwx3w at public.gmane.org>
+Subject: [PATCH 4/8] mac80211: fix work removal on deauth request
 
 When deauth is requested while an auth or assoc
 work item is in progress, we currently delete it
@@ -69,17 +25,20 @@ in cfg80211. This fix isn't very clean, but that
 seems acceptable since I have patches pending to
 remove this code completely.
 
-Cc: stable-u79uwXL29TY76Z2rM5mHXA at public.gmane.org
-Reported-by: Pontus Fuchs <pontus.fuchs-Re5JQEeQqe8AvxtiuMwx3w at public.gmane.org>
-Tested-by: Pontus Fuchs <pontus.fuchs-Re5JQEeQqe8AvxtiuMwx3w at public.gmane.org>
-Signed-off-by: Johannes Berg <johannes.berg-ral2JQCrhuEAvxtiuMwx3w at public.gmane.org>
+Cc: stable at vger.kernel.org
+Reported-by: Pontus Fuchs <pontus.fuchs at gmail.com>
+Tested-by: Pontus Fuchs <pontus.fuchs at gmail.com>
+Signed-off-by: Johannes Berg <johannes.berg at intel.com>
+Signed-off-by: John W. Linville <linville at tuxdriver.com>
 ---
  net/mac80211/mlme.c |   38 +++++++++++++++++++++++++++-----------
- 1 file changed, 27 insertions(+), 11 deletions(-)
+ 1 files changed, 27 insertions(+), 11 deletions(-)
 
---- a/net/mac80211/mlme.c	2012-01-18 14:04:33.000000000 +0100
-+++ b/net/mac80211/mlme.c	2012-01-18 14:04:34.000000000 +0100
-@@ -2750,7 +2750,6 @@ int ieee80211_mgd_deauth(struct ieee8021
+diff --git a/net/mac80211/mlme.c b/net/mac80211/mlme.c
+index ecb4c84..295be92 100644
+--- a/net/mac80211/mlme.c
++++ b/net/mac80211/mlme.c
+@@ -2750,7 +2750,6 @@ int ieee80211_mgd_deauth(struct ieee80211_sub_if_data *sdata,
  {
  	struct ieee80211_local *local = sdata->local;
  	struct ieee80211_if_managed *ifmgd = &sdata->u.mgd;
@@ -87,7 +46,7 @@ Signed-off-by: Johannes Berg <johannes.berg-ral2JQCrhuEAvxtiuMwx3w at public.gmane.
  	u8 bssid[ETH_ALEN];
  	bool assoc_bss = false;
  
-@@ -2763,30 +2762,47 @@ int ieee80211_mgd_deauth(struct ieee8021
+@@ -2763,30 +2762,47 @@ int ieee80211_mgd_deauth(struct ieee80211_sub_if_data *sdata,
  		assoc_bss = true;
  	} else {
  		bool not_auth_yet = false;
@@ -145,10 +104,6 @@ Signed-off-by: Johannes Berg <johannes.berg-ral2JQCrhuEAvxtiuMwx3w at public.gmane.
  		/*
  		 * If somebody requests authentication and we haven't
  		 * sent out an auth frame yet there's no need to send
-
-
---
-To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
-the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA at public.gmane.org
-More majordomo info at  http://vger.kernel.org/majordomo-info.html
+-- 
+1.7.4.4
 
diff --git a/mac80211-set-bss_conf.idle-when-vif-is-connected.patch b/mac80211-set-bss_conf.idle-when-vif-is-connected.patch
new file mode 100644
index 0000000..42720d0
--- /dev/null
+++ b/mac80211-set-bss_conf.idle-when-vif-is-connected.patch
@@ -0,0 +1,37 @@
+From 405385f8ce7a2ed8f82e216d88b5282142e1288b Mon Sep 17 00:00:00 2001
+From: Eliad Peller <eliad at wizery.com>
+Date: Wed, 11 Jan 2012 13:11:50 +0200
+Subject: [PATCH 7/8] mac80211: set bss_conf.idle when vif is connected
+
+__ieee80211_recalc_idle() iterates through the vifs,
+sets bss_conf.idle = true if they are disconnected,
+and increases "count" if they are not (which later
+gets evaluated in order to determine whether the
+device is idle).
+
+However, the loop doesn't set bss_conf.idle = false
+(along with increasing "count"), causing the device
+idle state and the vif idle state to get out of sync
+in some cases.
+
+Signed-off-by: Eliad Peller <eliad at wizery.com>
+Signed-off-by: John W. Linville <linville at tuxdriver.com>
+---
+ net/mac80211/iface.c |    1 +
+ 1 files changed, 1 insertions(+), 0 deletions(-)
+
+diff --git a/net/mac80211/iface.c b/net/mac80211/iface.c
+index e47768c..01a21c2 100644
+--- a/net/mac80211/iface.c
++++ b/net/mac80211/iface.c
+@@ -1314,6 +1314,7 @@ u32 __ieee80211_recalc_idle(struct ieee80211_local *local)
+ 			continue;
+ 		}
+ 		/* count everything else */
++		sdata->vif.bss_conf.idle = false;
+ 		count++;
+ 	}
+ 
+-- 
+1.7.4.4
+
diff --git a/mac80211-update-oper_channel-on-ibss-join.patch b/mac80211-update-oper_channel-on-ibss-join.patch
new file mode 100644
index 0000000..1a0d932
--- /dev/null
+++ b/mac80211-update-oper_channel-on-ibss-join.patch
@@ -0,0 +1,31 @@
+From ba1960257c5980f9b58057995ce3394bd8e48ca3 Mon Sep 17 00:00:00 2001
+From: Eliad Peller <eliad at wizery.com>
+Date: Tue, 10 Jan 2012 15:19:54 +0200
+Subject: [PATCH 6/8] mac80211: update oper_channel on ibss join
+
+Commit 13c40c5 ("mac80211: Add HT operation modes for IBSS") broke
+ibss operation by mistakenly removing the local->oper_channel
+update (causing ibss to start on the wrong channel). fix it.
+
+Signed-off-by: Eliad Peller <eliad at wizery.com>
+Acked-by: Simon Wunderlich <siwu at hrz.tu-chemnitz.de>
+Signed-off-by: John W. Linville <linville at tuxdriver.com>
+---
+ net/mac80211/ibss.c |    1 +
+ 1 files changed, 1 insertions(+), 0 deletions(-)
+
+diff --git a/net/mac80211/ibss.c b/net/mac80211/ibss.c
+index b3d76b7..a464396 100644
+--- a/net/mac80211/ibss.c
++++ b/net/mac80211/ibss.c
+@@ -106,6 +106,7 @@ static void __ieee80211_sta_join_ibss(struct ieee80211_sub_if_data *sdata,
+ 
+ 	sdata->drop_unencrypted = capability & WLAN_CAPABILITY_PRIVACY ? 1 : 0;
+ 
++	local->oper_channel = chan;
+ 	channel_type = ifibss->channel_type;
+ 	if (channel_type > NL80211_CHAN_HT20 &&
+ 	    !cfg80211_can_beacon_sec_chan(local->hw.wiphy, chan, channel_type))
+-- 
+1.7.4.4
+


More information about the scm-commits mailing list