[rt2x00-users] [PATCH 1/3] rt2x00: Simplify intf->delayed_flags locking
Gertjan van Wingerde
gwingerde at gmail.com
Wed Dec 22 20:42:17 EST 2010
On 12/22/10 08:53, Helmut Schaa wrote:
> Instead of protecting delayed_flags with a spinlock use atomic bitops to
> make the code more readable.
>
> Signed-off-by: Helmut Schaa <helmut.schaa at googlemail.com>
Acked-by: Gertjan van Wingerde <gwingerde at gmail.com>
> ---
> drivers/net/wireless/rt2x00/rt2x00.h | 4 ++--
> drivers/net/wireless/rt2x00/rt2x00dev.c | 15 +--------------
> drivers/net/wireless/rt2x00/rt2x00mac.c | 4 +---
> 3 files changed, 4 insertions(+), 19 deletions(-)
>
> diff --git a/drivers/net/wireless/rt2x00/rt2x00.h b/drivers/net/wireless/rt2x00/rt2x00.h
> index 89f0058..4f45a5b 100644
> --- a/drivers/net/wireless/rt2x00/rt2x00.h
> +++ b/drivers/net/wireless/rt2x00/rt2x00.h
> @@ -374,8 +374,8 @@ struct rt2x00_intf {
> /*
> * Actions that needed rescheduling.
> */
> - unsigned int delayed_flags;
> -#define DELAYED_UPDATE_BEACON 0x00000001
> + unsigned long delayed_flags;
> +#define DELAYED_UPDATE_BEACON BIT(0)
>
> /*
> * Software sequence counter, this is only required
> diff --git a/drivers/net/wireless/rt2x00/rt2x00dev.c b/drivers/net/wireless/rt2x00/rt2x00dev.c
> index bc03812..50f450c 100644
> --- a/drivers/net/wireless/rt2x00/rt2x00dev.c
> +++ b/drivers/net/wireless/rt2x00/rt2x00dev.c
> @@ -110,19 +110,6 @@ static void rt2x00lib_intf_scheduled_iter(void *data, u8 *mac,
> {
> struct rt2x00_dev *rt2x00dev = data;
> struct rt2x00_intf *intf = vif_to_intf(vif);
> - int delayed_flags;
> -
> - /*
> - * Copy all data we need during this action under the protection
> - * of a spinlock. Otherwise race conditions might occur which results
> - * into an invalid configuration.
> - */
> - spin_lock(&intf->lock);
> -
> - delayed_flags = intf->delayed_flags;
> - intf->delayed_flags = 0;
> -
> - spin_unlock(&intf->lock);
>
> /*
> * It is possible the radio was disabled while the work had been
> @@ -133,7 +120,7 @@ static void rt2x00lib_intf_scheduled_iter(void *data, u8 *mac,
> if (!test_bit(DEVICE_STATE_ENABLED_RADIO, &rt2x00dev->flags))
> return;
>
> - if (delayed_flags & DELAYED_UPDATE_BEACON)
> + if (test_and_clear_bit(DELAYED_UPDATE_BEACON, &intf->delayed_flags))
> rt2x00queue_update_beacon(rt2x00dev, vif, true);
> }
>
> diff --git a/drivers/net/wireless/rt2x00/rt2x00mac.c b/drivers/net/wireless/rt2x00/rt2x00mac.c
> index a2266c7..297d972 100644
> --- a/drivers/net/wireless/rt2x00/rt2x00mac.c
> +++ b/drivers/net/wireless/rt2x00/rt2x00mac.c
> @@ -444,9 +444,7 @@ static void rt2x00mac_set_tim_iter(void *data, u8 *mac,
> vif->type != NL80211_IFTYPE_WDS)
> return;
>
> - spin_lock(&intf->lock);
> - intf->delayed_flags |= DELAYED_UPDATE_BEACON;
> - spin_unlock(&intf->lock);
> + set_bit(DELAYED_UPDATE_BEACON, &intf->delayed_flags);
> }
>
> int rt2x00mac_set_tim(struct ieee80211_hw *hw, struct ieee80211_sta *sta,
More information about the users
mailing list