Search Linux Wireless

Re: [PATCH v3 1/2] mac80211_hwsim: fix duplicate beacons on TSF adjust

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, 2013-12-19 at 10:25 -0800, Thomas Pedersen wrote:
> There was some bug when rescheduling the next beacon from
> the beacon tasklet after adjusting TSF which would cause
> the beacon timer to trigger twice. Beaconing at "old" TBT
> (previously scheduled interface TBTT) with new timestamp
> was incorrect anyway.
> 
> Instead, reschedule the beacon straight away when
> adjusting TSF.
> 
> Signed-off-by: Thomas Pedersen <twpedersen@xxxxxxxxx>
> 
> ---
> v2:
> 
> 	don't kill hrtimer tasklet if currently running to
> 	avoid deadlock (Johannes)
> 
>  drivers/net/wireless/mac80211_hwsim.c |   57 +++++++++++++++------------------
>  1 file changed, 26 insertions(+), 31 deletions(-)
> 
> diff --git a/drivers/net/wireless/mac80211_hwsim.c b/drivers/net/wireless/mac80211_hwsim.c
> index 9c0cc8d..cf3b9d3 100644
> --- a/drivers/net/wireless/mac80211_hwsim.c
> +++ b/drivers/net/wireless/mac80211_hwsim.c
> @@ -442,17 +442,36 @@ static u64 mac80211_hwsim_get_tsf(struct ieee80211_hw *hw,
>  	return le64_to_cpu(__mac80211_hwsim_get_tsf(data));
>  }
>  
> +static void mac80211_hwsim_beacon_sched(struct ieee80211_hw *hw)
> +{
> +	struct mac80211_hwsim_data *data = hw->priv;
> +	u64 tsf = mac80211_hwsim_get_tsf(hw, NULL);
> +	u32 bcn_int = data->beacon_int;
> +	u64 until_tbtt;
> +
> +	if (!bcn_int)
> +		return;
> +
> +	until_tbtt = bcn_int - do_div(tsf, bcn_int);
> +	if (!hrtimer_callback_running(&data->beacon_timer.timer) &&
> +	    !test_bit(TASKLET_STATE_RUN, &data->beacon_timer.tasklet.state))
> +		tasklet_hrtimer_cancel(&data->beacon_timer);

That test_bit() really seems suspicious - there are no other users in
the tree except for the internal tasklet code... What are you trying to
do?

johannes

--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Linux Host AP]     [ATH6KL]     [Linux Wireless Personal Area Network]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [Linux Kernel]     [IDE]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite Hiking]     [MIPS Linux]     [ARM Linux]     [Linux RAID]

  Powered by Linux