]> git.ipfire.org Git - people/pmueller/ipfire-2.x.git/blobdiff - src/patches/suse-2.6.27.31/patches.fixes/rt2x00-fix-race-conditions.patch
Move xen patchset to new version's subdir.
[people/pmueller/ipfire-2.x.git] / src / patches / suse-2.6.27.31 / patches.fixes / rt2x00-fix-race-conditions.patch
diff --git a/src/patches/suse-2.6.27.31/patches.fixes/rt2x00-fix-race-conditions.patch b/src/patches/suse-2.6.27.31/patches.fixes/rt2x00-fix-race-conditions.patch
new file mode 100644 (file)
index 0000000..e50041f
--- /dev/null
@@ -0,0 +1,570 @@
+From 0262ab0df64a67d4c0ed7577a29b7d866819cc68 Mon Sep 17 00:00:00 2001
+From: Ivo van Doorn <ivdoorn@gmail.com>
+Date: Fri, 29 Aug 2008 21:04:26 +0200
+Subject: [PATCH] rt2x00: Fix race conditions in flag handling
+Patch-mainline: 2.6.28-rc3
+References: bnc#462551
+
+Some of the flags should be accessed atomically to
+prevent race conditions. The flags that are most important
+are those that can change often and indicate the actual
+state of the device, queue or queue entry.
+
+The big flag rename was done to move all state flags to
+the same naming type as the other rt2x00dev flags and
+made sure all places where the flags were used were changed. ;)
+
+Thanks to Stephen for most of the queue flags updates,
+which fixes some of the most obvious consequences of the
+race conditions. Among those the notorious:
+
+rt2x00queue_write_tx_frame: Error - Arrived at non-free entry in the non-full queue 0.
+rt2x00queue_write_tx_frame: Error - Arrived at non-free entry in the non-full queue 0.
+rt2x00queue_write_tx_frame: Error - Arrived at non-free entry in the non-full queue 0.
+
+Signed-off-by: Stephen Blackheath <tramp.enshrine.stephen@blacksapphire.com>
+Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+Signed-off-by: Jiri Slaby <jslaby@suse.cz>
+---
+ drivers/net/wireless/rt2x00/rt2400pci.c    |    2 -
+ drivers/net/wireless/rt2x00/rt2500pci.c    |    2 -
+ drivers/net/wireless/rt2x00/rt2500usb.c    |    2 -
+ drivers/net/wireless/rt2x00/rt2x00.h       |   16 ++++----
+ drivers/net/wireless/rt2x00/rt2x00config.c |    4 +-
+ drivers/net/wireless/rt2x00/rt2x00dev.c    |   58 +++++++++++++++--------------
+ drivers/net/wireless/rt2x00/rt2x00mac.c    |   26 ++++++-------
+ drivers/net/wireless/rt2x00/rt2x00queue.c  |    6 +--
+ drivers/net/wireless/rt2x00/rt2x00rfkill.c |    6 +--
+ drivers/net/wireless/rt2x00/rt2x00usb.c    |   10 ++---
+ drivers/net/wireless/rt2x00/rt61pci.c      |    2 -
+ 11 files changed, 68 insertions(+), 66 deletions(-)
+
+--- a/drivers/net/wireless/rt2x00/rt2400pci.c
++++ b/drivers/net/wireless/rt2x00/rt2400pci.c
+@@ -1241,7 +1241,7 @@ static irqreturn_t rt2400pci_interrupt(i
+       if (!reg)
+               return IRQ_NONE;
+-      if (!test_bit(DEVICE_ENABLED_RADIO, &rt2x00dev->flags))
++      if (!test_bit(DEVICE_STATE_ENABLED_RADIO, &rt2x00dev->flags))
+               return IRQ_HANDLED;
+       /*
+--- a/drivers/net/wireless/rt2x00/rt2500pci.c
++++ b/drivers/net/wireless/rt2x00/rt2500pci.c
+@@ -1377,7 +1377,7 @@ static irqreturn_t rt2500pci_interrupt(i
+       if (!reg)
+               return IRQ_NONE;
+-      if (!test_bit(DEVICE_ENABLED_RADIO, &rt2x00dev->flags))
++      if (!test_bit(DEVICE_STATE_ENABLED_RADIO, &rt2x00dev->flags))
+               return IRQ_HANDLED;
+       /*
+--- a/drivers/net/wireless/rt2x00/rt2500usb.c
++++ b/drivers/net/wireless/rt2x00/rt2500usb.c
+@@ -1297,7 +1297,7 @@ static void rt2500usb_beacondone(struct 
+       struct queue_entry *entry = (struct queue_entry *)urb->context;
+       struct queue_entry_priv_usb_bcn *bcn_priv = entry->priv_data;
+-      if (!test_bit(DEVICE_ENABLED_RADIO, &entry->queue->rt2x00dev->flags))
++      if (!test_bit(DEVICE_STATE_ENABLED_RADIO, &entry->queue->rt2x00dev->flags))
+               return;
+       /*
+--- a/drivers/net/wireless/rt2x00/rt2x00.h
++++ b/drivers/net/wireless/rt2x00/rt2x00.h
+@@ -599,14 +599,14 @@ enum rt2x00_flags {
+       /*
+        * Device state flags
+        */
+-      DEVICE_PRESENT,
+-      DEVICE_REGISTERED_HW,
+-      DEVICE_INITIALIZED,
+-      DEVICE_STARTED,
+-      DEVICE_STARTED_SUSPEND,
+-      DEVICE_ENABLED_RADIO,
+-      DEVICE_DISABLED_RADIO_HW,
+-      DEVICE_DIRTY_CONFIG,
++      DEVICE_STATE_PRESENT,
++      DEVICE_STATE_REGISTERED_HW,
++      DEVICE_STATE_INITIALIZED,
++      DEVICE_STATE_STARTED,
++      DEVICE_STATE_STARTED_SUSPEND,
++      DEVICE_STATE_ENABLED_RADIO,
++      DEVICE_STATE_DISABLED_RADIO_HW,
++      DEVICE_STATE_DIRTY_CONFIG,
+       /*
+        * Driver features
+--- a/drivers/net/wireless/rt2x00/rt2x00config.c
++++ b/drivers/net/wireless/rt2x00/rt2x00config.c
+@@ -121,7 +121,7 @@ void rt2x00lib_config_antenna(struct rt2
+        * Antenna setup changes require the RX to be disabled,
+        * else the changes will be ignored by the device.
+        */
+-      if (test_bit(DEVICE_ENABLED_RADIO, &rt2x00dev->flags))
++      if (test_bit(DEVICE_STATE_ENABLED_RADIO, &rt2x00dev->flags))
+               rt2x00lib_toggle_rx(rt2x00dev, STATE_RADIO_RX_OFF_LINK);
+       /*
+@@ -136,7 +136,7 @@ void rt2x00lib_config_antenna(struct rt2
+       rt2x00dev->link.ant.active.rx = libconf.ant.rx;
+       rt2x00dev->link.ant.active.tx = libconf.ant.tx;
+-      if (test_bit(DEVICE_ENABLED_RADIO, &rt2x00dev->flags))
++      if (test_bit(DEVICE_STATE_ENABLED_RADIO, &rt2x00dev->flags))
+               rt2x00lib_toggle_rx(rt2x00dev, STATE_RADIO_RX_ON_LINK);
+ }
+--- a/drivers/net/wireless/rt2x00/rt2x00dev.c
++++ b/drivers/net/wireless/rt2x00/rt2x00dev.c
+@@ -34,7 +34,7 @@
+  */
+ void rt2x00lib_reset_link_tuner(struct rt2x00_dev *rt2x00dev)
+ {
+-      if (!test_bit(DEVICE_ENABLED_RADIO, &rt2x00dev->flags))
++      if (!test_bit(DEVICE_STATE_ENABLED_RADIO, &rt2x00dev->flags))
+               return;
+       /*
+@@ -94,8 +94,8 @@ int rt2x00lib_enable_radio(struct rt2x00
+        * Don't enable the radio twice.
+        * And check if the hardware button has been disabled.
+        */
+-      if (test_bit(DEVICE_ENABLED_RADIO, &rt2x00dev->flags) ||
+-          test_bit(DEVICE_DISABLED_RADIO_HW, &rt2x00dev->flags))
++      if (test_bit(DEVICE_STATE_ENABLED_RADIO, &rt2x00dev->flags) ||
++          test_bit(DEVICE_STATE_DISABLED_RADIO_HW, &rt2x00dev->flags))
+               return 0;
+       /*
+@@ -117,7 +117,7 @@ int rt2x00lib_enable_radio(struct rt2x00
+       rt2x00leds_led_radio(rt2x00dev, true);
+       rt2x00led_led_activity(rt2x00dev, true);
+-      __set_bit(DEVICE_ENABLED_RADIO, &rt2x00dev->flags);
++      set_bit(DEVICE_STATE_ENABLED_RADIO, &rt2x00dev->flags);
+       /*
+        * Enable RX.
+@@ -134,7 +134,7 @@ int rt2x00lib_enable_radio(struct rt2x00
+ void rt2x00lib_disable_radio(struct rt2x00_dev *rt2x00dev)
+ {
+-      if (!__test_and_clear_bit(DEVICE_ENABLED_RADIO, &rt2x00dev->flags))
++      if (!test_and_clear_bit(DEVICE_STATE_ENABLED_RADIO, &rt2x00dev->flags))
+               return;
+       /*
+@@ -354,7 +354,7 @@ static void rt2x00lib_link_tuner(struct 
+        * When the radio is shutting down we should
+        * immediately cease all link tuning.
+        */
+-      if (!test_bit(DEVICE_ENABLED_RADIO, &rt2x00dev->flags))
++      if (!test_bit(DEVICE_STATE_ENABLED_RADIO, &rt2x00dev->flags))
+               return;
+       /*
+@@ -431,7 +431,7 @@ static void rt2x00lib_intf_scheduled_ite
+        * note that in the spinlock protected area above the delayed_flags
+        * have been cleared correctly.
+        */
+-      if (!test_bit(DEVICE_ENABLED_RADIO, &rt2x00dev->flags))
++      if (!test_bit(DEVICE_STATE_ENABLED_RADIO, &rt2x00dev->flags))
+               return;
+       if (delayed_flags & DELAYED_UPDATE_BEACON)
+@@ -484,7 +484,7 @@ static void rt2x00lib_beacondone_iter(vo
+ void rt2x00lib_beacondone(struct rt2x00_dev *rt2x00dev)
+ {
+-      if (!test_bit(DEVICE_ENABLED_RADIO, &rt2x00dev->flags))
++      if (!test_bit(DEVICE_STATE_ENABLED_RADIO, &rt2x00dev->flags))
+               return;
+       ieee80211_iterate_active_interfaces_atomic(rt2x00dev->hw,
+@@ -563,7 +563,7 @@ void rt2x00lib_txdone(struct queue_entry
+       rt2x00dev->ops->lib->init_txentry(rt2x00dev, entry);
+-      __clear_bit(ENTRY_OWNER_DEVICE_DATA, &entry->flags);
++      clear_bit(ENTRY_OWNER_DEVICE_DATA, &entry->flags);
+       rt2x00queue_index_inc(entry->queue, Q_INDEX_DONE);
+       /*
+@@ -878,7 +878,7 @@ static int rt2x00lib_probe_hw_modes(stru
+ static void rt2x00lib_remove_hw(struct rt2x00_dev *rt2x00dev)
+ {
+-      if (test_bit(DEVICE_REGISTERED_HW, &rt2x00dev->flags))
++      if (test_bit(DEVICE_STATE_REGISTERED_HW, &rt2x00dev->flags))
+               ieee80211_unregister_hw(rt2x00dev->hw);
+       if (likely(rt2x00dev->hw->wiphy->bands[IEEE80211_BAND_2GHZ])) {
+@@ -894,6 +894,9 @@ static int rt2x00lib_probe_hw(struct rt2
+       struct hw_mode_spec *spec = &rt2x00dev->spec;
+       int status;
++      if (test_bit(DEVICE_STATE_REGISTERED_HW, &rt2x00dev->flags))
++              return 0;
++
+       /*
+        * Initialize HW modes.
+        */
+@@ -915,7 +918,7 @@ static int rt2x00lib_probe_hw(struct rt2
+               return status;
+       }
+-      __set_bit(DEVICE_REGISTERED_HW, &rt2x00dev->flags);
++      set_bit(DEVICE_STATE_REGISTERED_HW, &rt2x00dev->flags);
+       return 0;
+ }
+@@ -925,7 +928,7 @@ static int rt2x00lib_probe_hw(struct rt2
+  */
+ static void rt2x00lib_uninitialize(struct rt2x00_dev *rt2x00dev)
+ {
+-      if (!__test_and_clear_bit(DEVICE_INITIALIZED, &rt2x00dev->flags))
++      if (!test_and_clear_bit(DEVICE_STATE_INITIALIZED, &rt2x00dev->flags))
+               return;
+       /*
+@@ -948,7 +951,7 @@ static int rt2x00lib_initialize(struct r
+ {
+       int status;
+-      if (test_bit(DEVICE_INITIALIZED, &rt2x00dev->flags))
++      if (test_bit(DEVICE_STATE_INITIALIZED, &rt2x00dev->flags))
+               return 0;
+       /*
+@@ -967,7 +970,7 @@ static int rt2x00lib_initialize(struct r
+               return status;
+       }
+-      __set_bit(DEVICE_INITIALIZED, &rt2x00dev->flags);
++      set_bit(DEVICE_STATE_INITIALIZED, &rt2x00dev->flags);
+       /*
+        * Register the extra components.
+@@ -981,7 +984,7 @@ int rt2x00lib_start(struct rt2x00_dev *r
+ {
+       int retval;
+-      if (test_bit(DEVICE_STARTED, &rt2x00dev->flags))
++      if (test_bit(DEVICE_STATE_STARTED, &rt2x00dev->flags))
+               return 0;
+       /*
+@@ -1012,15 +1015,15 @@ int rt2x00lib_start(struct rt2x00_dev *r
+       rt2x00dev->intf_sta_count = 0;
+       rt2x00dev->intf_associated = 0;
+-      __set_bit(DEVICE_STARTED, &rt2x00dev->flags);
+-      __set_bit(DEVICE_DIRTY_CONFIG, &rt2x00dev->flags);
++      set_bit(DEVICE_STATE_STARTED, &rt2x00dev->flags);
++      set_bit(DEVICE_STATE_DIRTY_CONFIG, &rt2x00dev->flags);
+       return 0;
+ }
+ void rt2x00lib_stop(struct rt2x00_dev *rt2x00dev)
+ {
+-      if (!test_bit(DEVICE_STARTED, &rt2x00dev->flags))
++      if (!test_and_clear_bit(DEVICE_STATE_STARTED, &rt2x00dev->flags))
+               return;
+       /*
+@@ -1032,8 +1035,6 @@ void rt2x00lib_stop(struct rt2x00_dev *r
+       rt2x00dev->intf_ap_count = 0;
+       rt2x00dev->intf_sta_count = 0;
+       rt2x00dev->intf_associated = 0;
+-
+-      __clear_bit(DEVICE_STARTED, &rt2x00dev->flags);
+ }
+ /*
+@@ -1088,7 +1089,7 @@ int rt2x00lib_probe_dev(struct rt2x00_de
+       rt2x00rfkill_allocate(rt2x00dev);
+       rt2x00debug_register(rt2x00dev);
+-      __set_bit(DEVICE_PRESENT, &rt2x00dev->flags);
++      set_bit(DEVICE_STATE_PRESENT, &rt2x00dev->flags);
+       return 0;
+@@ -1101,7 +1102,7 @@ EXPORT_SYMBOL_GPL(rt2x00lib_probe_dev);
+ void rt2x00lib_remove_dev(struct rt2x00_dev *rt2x00dev)
+ {
+-      __clear_bit(DEVICE_PRESENT, &rt2x00dev->flags);
++      clear_bit(DEVICE_STATE_PRESENT, &rt2x00dev->flags);
+       /*
+        * Disable radio.
+@@ -1146,14 +1147,15 @@ int rt2x00lib_suspend(struct rt2x00_dev 
+       int retval;
+       NOTICE(rt2x00dev, "Going to sleep.\n");
+-      __clear_bit(DEVICE_PRESENT, &rt2x00dev->flags);
+       /*
+        * Only continue if mac80211 has open interfaces.
+        */
+-      if (!test_bit(DEVICE_STARTED, &rt2x00dev->flags))
++      if (!test_and_clear_bit(DEVICE_STATE_PRESENT, &rt2x00dev->flags) ||
++          !test_bit(DEVICE_STATE_STARTED, &rt2x00dev->flags))
+               goto exit;
+-      __set_bit(DEVICE_STARTED_SUSPEND, &rt2x00dev->flags);
++
++      set_bit(DEVICE_STATE_STARTED_SUSPEND, &rt2x00dev->flags);
+       /*
+        * Disable radio.
+@@ -1225,7 +1227,7 @@ int rt2x00lib_resume(struct rt2x00_dev *
+       /*
+        * Only continue if mac80211 had open interfaces.
+        */
+-      if (!__test_and_clear_bit(DEVICE_STARTED_SUSPEND, &rt2x00dev->flags))
++      if (!test_and_clear_bit(DEVICE_STATE_STARTED_SUSPEND, &rt2x00dev->flags))
+               return 0;
+       /*
+@@ -1252,7 +1254,7 @@ int rt2x00lib_resume(struct rt2x00_dev *
+       /*
+        * We are ready again to receive requests from mac80211.
+        */
+-      __set_bit(DEVICE_PRESENT, &rt2x00dev->flags);
++      set_bit(DEVICE_STATE_PRESENT, &rt2x00dev->flags);
+       /*
+        * It is possible that during that mac80211 has attempted
+@@ -1272,7 +1274,7 @@ int rt2x00lib_resume(struct rt2x00_dev *
+       return 0;
+ exit:
+-      rt2x00lib_disable_radio(rt2x00dev);
++      rt2x00lib_stop(rt2x00dev);
+       rt2x00lib_uninitialize(rt2x00dev);
+       rt2x00debug_deregister(rt2x00dev);
+--- a/drivers/net/wireless/rt2x00/rt2x00mac.c
++++ b/drivers/net/wireless/rt2x00/rt2x00mac.c
+@@ -106,7 +106,7 @@ int rt2x00mac_tx(struct ieee80211_hw *hw
+        * Note that we can only stop the TX queues inside the TX path
+        * due to possible race conditions in mac80211.
+        */
+-      if (!test_bit(DEVICE_PRESENT, &rt2x00dev->flags)) {
++      if (!test_bit(DEVICE_STATE_PRESENT, &rt2x00dev->flags)) {
+               ieee80211_stop_queues(hw);
+               dev_kfree_skb_any(skb);
+               return NETDEV_TX_OK;
+@@ -168,7 +168,7 @@ int rt2x00mac_start(struct ieee80211_hw 
+ {
+       struct rt2x00_dev *rt2x00dev = hw->priv;
+-      if (!test_bit(DEVICE_PRESENT, &rt2x00dev->flags))
++      if (!test_bit(DEVICE_STATE_PRESENT, &rt2x00dev->flags))
+               return 0;
+       return rt2x00lib_start(rt2x00dev);
+@@ -179,7 +179,7 @@ void rt2x00mac_stop(struct ieee80211_hw 
+ {
+       struct rt2x00_dev *rt2x00dev = hw->priv;
+-      if (!test_bit(DEVICE_PRESENT, &rt2x00dev->flags))
++      if (!test_bit(DEVICE_STATE_PRESENT, &rt2x00dev->flags))
+               return;
+       rt2x00lib_stop(rt2x00dev);
+@@ -199,8 +199,8 @@ int rt2x00mac_add_interface(struct ieee8
+        * Don't allow interfaces to be added
+        * the device has disappeared.
+        */
+-      if (!test_bit(DEVICE_PRESENT, &rt2x00dev->flags) ||
+-          !test_bit(DEVICE_STARTED, &rt2x00dev->flags))
++      if (!test_bit(DEVICE_STATE_PRESENT, &rt2x00dev->flags) ||
++          !test_bit(DEVICE_STATE_STARTED, &rt2x00dev->flags))
+               return -ENODEV;
+       switch (conf->type) {
+@@ -249,7 +249,7 @@ int rt2x00mac_add_interface(struct ieee8
+        */
+       for (i = 0; i < queue->limit; i++) {
+               entry = &queue->entries[i];
+-              if (!__test_and_set_bit(ENTRY_BCN_ASSIGNED, &entry->flags))
++              if (!test_and_set_bit(ENTRY_BCN_ASSIGNED, &entry->flags))
+                       break;
+       }
+@@ -303,7 +303,7 @@ void rt2x00mac_remove_interface(struct i
+        * either the device has disappeared or when
+        * no interface is present.
+        */
+-      if (!test_bit(DEVICE_PRESENT, &rt2x00dev->flags) ||
++      if (!test_bit(DEVICE_STATE_PRESENT, &rt2x00dev->flags) ||
+           (conf->type == IEEE80211_IF_TYPE_AP && !rt2x00dev->intf_ap_count) ||
+           (conf->type != IEEE80211_IF_TYPE_AP && !rt2x00dev->intf_sta_count))
+               return;
+@@ -317,7 +317,7 @@ void rt2x00mac_remove_interface(struct i
+        * Release beacon entry so it is available for
+        * new interfaces again.
+        */
+-      __clear_bit(ENTRY_BCN_ASSIGNED, &intf->beacon->flags);
++      clear_bit(ENTRY_BCN_ASSIGNED, &intf->beacon->flags);
+       /*
+        * Make sure the bssid and mac address registers
+@@ -337,14 +337,14 @@ int rt2x00mac_config(struct ieee80211_hw
+        * Mac80211 might be calling this function while we are trying
+        * to remove the device or perhaps suspending it.
+        */
+-      if (!test_bit(DEVICE_PRESENT, &rt2x00dev->flags))
++      if (!test_bit(DEVICE_STATE_PRESENT, &rt2x00dev->flags))
+               return 0;
+       /*
+        * Check if we need to disable the radio,
+        * if this is not the case, at least the RX must be disabled.
+        */
+-      if (test_bit(DEVICE_ENABLED_RADIO, &rt2x00dev->flags)) {
++      if (test_bit(DEVICE_STATE_ENABLED_RADIO, &rt2x00dev->flags)) {
+               if (!conf->radio_enabled)
+                       rt2x00lib_disable_radio(rt2x00dev);
+               else
+@@ -359,14 +359,14 @@ int rt2x00mac_config(struct ieee80211_hw
+        * initialized.
+        */
+       force_reconfig =
+-          __test_and_clear_bit(DEVICE_DIRTY_CONFIG, &rt2x00dev->flags);
++          test_and_clear_bit(DEVICE_STATE_DIRTY_CONFIG, &rt2x00dev->flags);
+       rt2x00lib_config(rt2x00dev, conf, force_reconfig);
+       /*
+        * Reenable RX only if the radio should be on.
+        */
+-      if (test_bit(DEVICE_ENABLED_RADIO, &rt2x00dev->flags))
++      if (test_bit(DEVICE_STATE_ENABLED_RADIO, &rt2x00dev->flags))
+               rt2x00lib_toggle_rx(rt2x00dev, STATE_RADIO_RX_ON);
+       else if (conf->radio_enabled)
+               return rt2x00lib_enable_radio(rt2x00dev);
+@@ -388,7 +388,7 @@ int rt2x00mac_config_interface(struct ie
+        * Mac80211 might be calling this function while we are trying
+        * to remove the device or perhaps suspending it.
+        */
+-      if (!test_bit(DEVICE_PRESENT, &rt2x00dev->flags))
++      if (!test_bit(DEVICE_STATE_PRESENT, &rt2x00dev->flags))
+               return 0;
+       spin_lock(&intf->lock);
+--- a/drivers/net/wireless/rt2x00/rt2x00queue.c
++++ b/drivers/net/wireless/rt2x00/rt2x00queue.c
+@@ -309,7 +309,7 @@ int rt2x00queue_write_tx_frame(struct da
+       if (unlikely(rt2x00queue_full(queue)))
+               return -EINVAL;
+-      if (__test_and_set_bit(ENTRY_OWNER_DEVICE_DATA, &entry->flags)) {
++      if (test_and_set_bit(ENTRY_OWNER_DEVICE_DATA, &entry->flags)) {
+               ERROR(queue->rt2x00dev,
+                     "Arrived at non-free entry in the non-full queue %d.\n"
+                     "Please file bug report to %s.\n",
+@@ -333,14 +333,14 @@ int rt2x00queue_write_tx_frame(struct da
+       skbdesc->entry = entry;
+       if (unlikely(queue->rt2x00dev->ops->lib->write_tx_data(entry))) {
+-              __clear_bit(ENTRY_OWNER_DEVICE_DATA, &entry->flags);
++              clear_bit(ENTRY_OWNER_DEVICE_DATA, &entry->flags);
+               return -EIO;
+       }
+       if (test_bit(DRIVER_REQUIRE_DMA, &queue->rt2x00dev->flags))
+               rt2x00queue_map_txskb(queue->rt2x00dev, skb);
+-      __set_bit(ENTRY_DATA_PENDING, &entry->flags);
++      set_bit(ENTRY_DATA_PENDING, &entry->flags);
+       rt2x00queue_index_inc(queue, Q_INDEX);
+       rt2x00queue_write_tx_descriptor(entry, &txdesc);
+--- a/drivers/net/wireless/rt2x00/rt2x00rfkill.c
++++ b/drivers/net/wireless/rt2x00/rt2x00rfkill.c
+@@ -41,16 +41,16 @@ static int rt2x00rfkill_toggle_radio(voi
+       /*
+        * Only continue if there are enabled interfaces.
+        */
+-      if (!test_bit(DEVICE_STARTED, &rt2x00dev->flags))
++      if (!test_bit(DEVICE_STATE_STARTED, &rt2x00dev->flags))
+               return 0;
+       if (state == RFKILL_STATE_UNBLOCKED) {
+               INFO(rt2x00dev, "Hardware button pressed, enabling radio.\n");
+-              __clear_bit(DEVICE_DISABLED_RADIO_HW, &rt2x00dev->flags);
++              clear_bit(DEVICE_STATE_DISABLED_RADIO_HW, &rt2x00dev->flags);
+               retval = rt2x00lib_enable_radio(rt2x00dev);
+       } else if (state == RFKILL_STATE_SOFT_BLOCKED) {
+               INFO(rt2x00dev, "Hardware button pressed, disabling radio.\n");
+-              __set_bit(DEVICE_DISABLED_RADIO_HW, &rt2x00dev->flags);
++              set_bit(DEVICE_STATE_DISABLED_RADIO_HW, &rt2x00dev->flags);
+               rt2x00lib_disable_radio(rt2x00dev);
+       } else {
+               WARNING(rt2x00dev, "Received unexpected rfkill state %d.\n",
+--- a/drivers/net/wireless/rt2x00/rt2x00usb.c
++++ b/drivers/net/wireless/rt2x00/rt2x00usb.c
+@@ -163,7 +163,7 @@ static void rt2x00usb_interrupt_txdone(s
+       struct rt2x00_dev *rt2x00dev = entry->queue->rt2x00dev;
+       struct txdone_entry_desc txdesc;
+-      if (!test_bit(DEVICE_ENABLED_RADIO, &rt2x00dev->flags) ||
++      if (!test_bit(DEVICE_STATE_ENABLED_RADIO, &rt2x00dev->flags) ||
+           !test_bit(ENTRY_OWNER_DEVICE_DATA, &entry->flags))
+               return;
+@@ -232,7 +232,7 @@ static inline void rt2x00usb_kick_tx_ent
+ {
+       struct queue_entry_priv_usb *entry_priv = entry->priv_data;
+-      if (__test_and_clear_bit(ENTRY_DATA_PENDING, &entry->flags))
++      if (test_and_clear_bit(ENTRY_DATA_PENDING, &entry->flags))
+               usb_submit_urb(entry_priv->urb, GFP_ATOMIC);
+ }
+@@ -283,7 +283,7 @@ static void rt2x00usb_interrupt_rxdone(s
+       struct skb_frame_desc *skbdesc = get_skb_frame_desc(entry->skb);
+       u8 rxd[32];
+-      if (!test_bit(DEVICE_ENABLED_RADIO, &rt2x00dev->flags) ||
++      if (!test_bit(DEVICE_STATE_ENABLED_RADIO, &rt2x00dev->flags) ||
+           !test_bit(ENTRY_OWNER_DEVICE_DATA, &entry->flags))
+               return;
+@@ -293,7 +293,7 @@ static void rt2x00usb_interrupt_rxdone(s
+        * a problem.
+        */
+       if (urb->actual_length < entry->queue->desc_size || urb->status) {
+-              __set_bit(ENTRY_OWNER_DEVICE_DATA, &entry->flags);
++              set_bit(ENTRY_OWNER_DEVICE_DATA, &entry->flags);
+               usb_submit_urb(urb, GFP_ATOMIC);
+               return;
+       }
+@@ -361,7 +361,7 @@ void rt2x00usb_init_rxentry(struct rt2x0
+                         entry->skb->data, entry->skb->len,
+                         rt2x00usb_interrupt_rxdone, entry);
+-      __set_bit(ENTRY_OWNER_DEVICE_DATA, &entry->flags);
++      set_bit(ENTRY_OWNER_DEVICE_DATA, &entry->flags);
+       usb_submit_urb(entry_priv->urb, GFP_ATOMIC);
+ }
+ EXPORT_SYMBOL_GPL(rt2x00usb_init_rxentry);
+--- a/drivers/net/wireless/rt2x00/rt61pci.c
++++ b/drivers/net/wireless/rt2x00/rt61pci.c
+@@ -1860,7 +1860,7 @@ static irqreturn_t rt61pci_interrupt(int
+       if (!reg && !reg_mcu)
+               return IRQ_NONE;
+-      if (!test_bit(DEVICE_ENABLED_RADIO, &rt2x00dev->flags))
++      if (!test_bit(DEVICE_STATE_ENABLED_RADIO, &rt2x00dev->flags))
+               return IRQ_HANDLED;
+       /*