forked from Minki/linux
ath9k: Fix beacon configuration for channel contexts
In channel context mode, when a new context is added, mac80211 issues a bss_info_changed() notfication when preparing the connection for the new interface/context. But, this is done prior to the mgd_prepare_tx() call which is where we switch to the new context. Since the current context will be different when the earlier bss_info_changed() is handled, the beacon information for the VIF is not updated, but discarded since the rules for the current context disallows it. In the subsequent association process for the new context/vif, this becomes a problem because the beacon parameters are invalid. This causes problems with the TSF timer, causing large jumps. To fix this, check if the beacon info is being updated for a different context and if so, allow it without any checks since we limit the max. interfaces to two anyway. Signed-off-by: Sujith Manoharan <c_manoha@qca.qualcomm.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
parent
37a7f8762d
commit
12a1b3d4c3
@ -514,6 +514,18 @@ static bool ath9k_allow_beacon_config(struct ath_softc *sc,
|
||||
struct ieee80211_vif *vif)
|
||||
{
|
||||
struct ath_common *common = ath9k_hw_common(sc->sc_ah);
|
||||
struct ath_vif *avp = (void *)vif->drv_priv;
|
||||
|
||||
if (ath9k_is_chanctx_enabled()) {
|
||||
/*
|
||||
* If the VIF is not present in the current channel context,
|
||||
* then we can't do the usual opmode checks. Allow the
|
||||
* beacon config for the VIF to be updated in this case and
|
||||
* return immediately.
|
||||
*/
|
||||
if (sc->cur_chan != avp->chanctx)
|
||||
return true;
|
||||
}
|
||||
|
||||
if (sc->sc_ah->opmode == NL80211_IFTYPE_AP) {
|
||||
if ((vif->type != NL80211_IFTYPE_AP) ||
|
||||
|
Loading…
Reference in New Issue
Block a user