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 <[email protected]>
> 
> ---
> 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

_______________________________________________
Devel mailing list
[email protected]
http://lists.open80211s.org/cgi-bin/mailman/listinfo/devel

Reply via email to