Skip to contentSkip to conversation

mac80211: Fix bss_info_changed comment regarding sleeping

PATCH New Ivo van Doorn 1 participant 2 messages Jun 13, 2010

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

PATCH 1/2 mac80211: Fix bss_info_changed comment regarding sleeping

The bss_info_changed callback function is allowed to sleep, however when operating in Mesh mode, it can be used in atomic context. Fixing it would seem to require major locking changes in the mesh implementation.

---
 include/net/mac80211.h |    3 ++-
 1 files changed, 2 insertions(+), 1 deletions(-)
include/net/mac80211.h +2 -1
index de22cbf..73cf3ad 100644
@@ -1533,7 +1533,8 @@ enum ieee80211_ampdu_mlme_action {
  *	This function should not be used if no BSS has been set, unless
  *	for association indication. The @changed parameter indicates which
  *	of the bss parameters has changed when a call is made. The callback
- *	can sleep.
+ *	can sleep except when operating in Mesh mode where the callback
+ *	must be atomic.
  *
  * @prepare_multicast: Prepare for multicast filter configuration.
  *	This callback is optional, and its return value is passed
Signature · 1 line
1.6.6.1
#1 lore raw

PATCH 2/2 rt2x00: Disable Mesh mode for USB drivers

bss_info_changed must be atomic in Mesh mode. As a result it must be disabled for all USB drivers.

---
 drivers/net/wireless/rt2x00/rt2x00dev.c |   13 +++++++++++--
 1 files changed, 11 insertions(+), 2 deletions(-)
drivers/net/wireless/rt2x00/rt2x00dev.c +11 -2
index 7d30efd..8661ada 100644
@@ -852,13 +852,22 @@ int rt2x00lib_probe_dev(struct rt2x00_dev *rt2x00dev)
 	 * beacon entries.
 	 */
 	rt2x00dev->hw->wiphy->interface_modes = BIT(NL80211_IFTYPE_STATION);
-	if (rt2x00dev->ops->bcn->entry_num > 0)
+	if (rt2x00dev->ops->bcn->entry_num > 0) {
 		rt2x00dev->hw->wiphy->interface_modes |=
 		    BIT(NL80211_IFTYPE_ADHOC) |
 		    BIT(NL80211_IFTYPE_AP) |
-		    BIT(NL80211_IFTYPE_MESH_POINT) |
 		    BIT(NL80211_IFTYPE_WDS);
 
+		/*
+ 		 * The bss_info_changed() callback function is not
+ 		 * allowed to sleep in mesh mode. As a result, we
+ 		 * can't support Mesh mode for the USB drivers.
+ 		 */
+		if (!rt2x00_is_usb(rt2x00dev))
+			rt2x00dev->hw->wiphy->interface_modes |=
+			    BIT(NL80211_IFTYPE_MESH_POINT);
+	}
+
 	/*
 	 * Let the driver probe the device to detect the capabilities.
 	 */
Signature · 1 line
1.6.6.1