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