[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