2011-05-24 12:48:47

by Fabrice Deyber

[permalink] [raw]
Subject: [PATCH] ath9k: Further fix for mesh beaconing

This fix ensure the timers to be set at beacon interval boundaries. Without
this change timers can be set improperly resulting in the absence of beacons.

Signed-off-by: Fabrice Deyber <[email protected]>
---
drivers/net/wireless/ath/ath9k/beacon.c | 15 +++------------
1 files changed, 3 insertions(+), 12 deletions(-)

diff --git a/drivers/net/wireless/ath/ath9k/beacon.c b/drivers/net/wireless/ath/ath9k/beacon.c
index d4d8cec..34675ae 100644
--- a/drivers/net/wireless/ath/ath9k/beacon.c
+++ b/drivers/net/wireless/ath/ath9k/beacon.c
@@ -656,19 +656,10 @@ static void ath_beacon_config_adhoc(struct ath_softc *sc,

ath9k_reset_beacon_status(sc);

- tsf = ath9k_hw_gettsf32(ah) + TU_TO_USEC(FUDGE);
intval = TU_TO_USEC(conf->beacon_interval & ATH9K_BEACON_PERIOD);
-
- if (!sc->beacon.bc_tstamp)
- nexttbtt = tsf + intval;
- else {
- if (tsf > sc->beacon.bc_tstamp)
- delta = (tsf - sc->beacon.bc_tstamp);
- else
- delta = (tsf + 1 + (~0U - sc->beacon.bc_tstamp));
- nexttbtt = tsf + intval - (delta % intval);
- }
-
+ tsf = roundup(ath9k_hw_gettsf32(ah) + TU_TO_USEC(FUDGE), intval);
+ nexttbtt = tsf + intval;
+
ath_dbg(common, ATH_DBG_BEACON,
"IBSS nexttbtt %u intval %u (%u)\n",
nexttbtt, intval, conf->beacon_interval);
--
1.7.0.4



2011-05-24 13:19:29

by Felix Fietkau

[permalink] [raw]
Subject: Re: [PATCH] ath9k: Further fix for mesh beaconing

On 2011-05-24 2:42 PM, Fabrice Deyber wrote:
> This fix ensure the timers to be set at beacon interval boundaries. Without
> this change timers can be set improperly resulting in the absence of beacons.
>
> Signed-off-by: Fabrice Deyber<[email protected]>
> ---
> drivers/net/wireless/ath/ath9k/beacon.c | 15 +++------------
> 1 files changed, 3 insertions(+), 12 deletions(-)
>
> diff --git a/drivers/net/wireless/ath/ath9k/beacon.c b/drivers/net/wireless/ath/ath9k/beacon.c
> index d4d8cec..34675ae 100644
> --- a/drivers/net/wireless/ath/ath9k/beacon.c
> +++ b/drivers/net/wireless/ath/ath9k/beacon.c
> @@ -656,19 +656,10 @@ static void ath_beacon_config_adhoc(struct ath_softc *sc,
>
> ath9k_reset_beacon_status(sc);
>
> - tsf = ath9k_hw_gettsf32(ah) + TU_TO_USEC(FUDGE);
> intval = TU_TO_USEC(conf->beacon_interval& ATH9K_BEACON_PERIOD);
> -
> - if (!sc->beacon.bc_tstamp)
> - nexttbtt = tsf + intval;
> - else {
> - if (tsf> sc->beacon.bc_tstamp)
> - delta = (tsf - sc->beacon.bc_tstamp);
> - else
> - delta = (tsf + 1 + (~0U - sc->beacon.bc_tstamp));
> - nexttbtt = tsf + intval - (delta % intval);
> - }
> -
> + tsf = roundup(ath9k_hw_gettsf32(ah) + TU_TO_USEC(FUDGE), intval);
> + nexttbtt = tsf + intval;
There's some whitespace damage here, please fix the indentation.

- Felix