Author: blogic
Date: 2015-11-29 00:24:59 +0100 (Sun, 29 Nov 2015)
New Revision: 47668

Added:
   trunk/package/kernel/mac80211/patches/622-rt2x00-fix-beacon-bit-balance.patch
Log:
mac80211: rt2x00: fix WARN_ON_ONCE() caused by inbalanced set/clear of beacon 
enable bit

Signed-off-by: evaxige <[email protected]>

Added: 
trunk/package/kernel/mac80211/patches/622-rt2x00-fix-beacon-bit-balance.patch
===================================================================
--- 
trunk/package/kernel/mac80211/patches/622-rt2x00-fix-beacon-bit-balance.patch   
                            (rev 0)
+++ 
trunk/package/kernel/mac80211/patches/622-rt2x00-fix-beacon-bit-balance.patch   
    2015-11-28 23:24:59 UTC (rev 47668)
@@ -0,0 +1,47 @@
+--- a/drivers/net/wireless/rt2x00/rt2x00mac.c
++++ b/drivers/net/wireless/rt2x00/rt2x00mac.c
+@@ -632,12 +632,8 @@
+               } else if (bss_conf->enable_beacon && !intf->enable_beacon) {
+                       rt2x00dev->intf_beaconing++;
+                       intf->enable_beacon = true;
+-                      /*
+-                       * Upload beacon to the H/W. This is only required on
+-                       * USB devices. PCI devices fetch beacons periodically.
+-                       */
+-                      if (rt2x00_is_usb(rt2x00dev))
+-                              rt2x00queue_update_beacon(rt2x00dev, vif);
++
++                      rt2x00queue_update_beacon(rt2x00dev, vif);
+ 
+                       if (rt2x00dev->intf_beaconing == 1) {
+                               /*
+--- a/drivers/net/wireless/rt2x00/rt2x00dev.c
++++ b/drivers/net/wireless/rt2x00/rt2x00dev.c
+@@ -144,7 +144,8 @@
+ 
+       if (test_and_clear_bit(DELAYED_UPDATE_BEACON, &intf->delayed_flags)) {
+               mutex_lock(&intf->beacon_skb_mutex);
+-              rt2x00queue_update_beacon(rt2x00dev, vif);
++              if (intf->enable_beacon)
++                      rt2x00queue_update_beacon(rt2x00dev, vif);
+               mutex_unlock(&intf->beacon_skb_mutex);
+       }
+ }
+@@ -207,6 +208,7 @@
+                                       struct ieee80211_vif *vif)
+ {
+       struct rt2x00_dev *rt2x00dev = data;
++      struct rt2x00_intf *intf = vif_to_intf(vif);
+ 
+       if (vif->type != NL80211_IFTYPE_AP &&
+           vif->type != NL80211_IFTYPE_ADHOC &&
+@@ -220,7 +222,8 @@
+        * never be called for USB devices.
+        */
+       WARN_ON(rt2x00_is_usb(rt2x00dev));
+-      rt2x00queue_update_beacon(rt2x00dev, vif);
++      if (intf->enable_beacon)
++              rt2x00queue_update_beacon(rt2x00dev, vif);
+ }
+ 
+ void rt2x00lib_beacondone(struct rt2x00_dev *rt2x00dev)
_______________________________________________
openwrt-commits mailing list
[email protected]
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-commits

Reply via email to