Search Linux Wireless

Re: [PATCH/RFC] ath9k: fix two more bugs in tx power

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

 



On Thu, May 26, 2011 at 10:13 PM, Daniel Halperin
<dhalperi@xxxxxxxxxxxxxxxxx> wrote:
> This is the same fix as
>
>    commit 841051602e3fa18ea468fe5a177aa92b6eb44b56
>    Author: Matteo Croce <technoboy85@xxxxxxxxx>
>    Date:   Fri Dec 3 02:25:08 2010 +0100
>
>    The ath9k driver subtracts 3 dBm to the txpower as with two radios the
>    signal power is doubled.
>    The resulting value is assigned in an u16 which overflows and makes
>    the card work at full power.
>
> in two more places. I grepped the ath tree and didn't find any others.
>
> Cc: stable@xxxxxxxxxx
> Signed-off-by: Daniel Halperin <dhalperi@xxxxxxxxxxxxxxxxx>
> ---
> RFC: Blaise Gassend actually pointed these two bugs out on 12/7/2010 but no
> one fixed. There was some discussion about refactoring/improving this code,
> but it never seemed to get anywhere. See this thread:
>
>    http://comments.gmane.org/gmane.linux.drivers.ath9k.devel/4601
> ---
>  drivers/net/wireless/ath/ath9k/ar9003_eeprom.c |   10 ++++++++--
>  drivers/net/wireless/ath/ath9k/eeprom_9287.c   |   10 ++++++++--
>  2 files changed, 16 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c b/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c
> index 729534c..934e419 100644
> --- a/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c
> +++ b/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c
> @@ -4645,10 +4645,16 @@ static void ar9003_hw_set_power_per_rate_table(struct ath_hw *ah,
>        case 1:
>                break;
>        case 2:
> -               scaledPower -= REDUCE_SCALED_POWER_BY_TWO_CHAIN;
> +               if (scaledPower > REDUCE_SCALED_POWER_BY_TWO_CHAIN)
> +                       scaledPower -= REDUCE_SCALED_POWER_BY_TWO_CHAIN;
> +               else
> +                       scaledPower = 0;

should we make the scaledPower as '0' lets have the first check if it
fails, let us retain the  scaledPower obtained by
  scaledPower = min(powerLimit, maxRegAllowedPower);

am I missing something ?
making scaledPower affects this
   minCtlPower = (u8)min(twiceMaxEdgePower, scaledPower);

which in turn affects
 pPwrArray[i] =
                                          (u8)min((u16)pPwrArray[i],
                                                  minCtlPower);

which in turn affects target Power values





>                break;
>        case 3:
> -               scaledPower -= REDUCE_SCALED_POWER_BY_THREE_CHAIN;
> +               if (scaledPower > REDUCE_SCALED_POWER_BY_THREE_CHAIN)
> +                       scaledPower -= REDUCE_SCALED_POWER_BY_THREE_CHAIN;
> +               else
> +                       scaledPower = 0;
>                break;
>        }
>
> diff --git a/drivers/net/wireless/ath/ath9k/eeprom_9287.c b/drivers/net/wireless/ath/ath9k/eeprom_9287.c
> index 7856f0d..343fc9f 100644
> --- a/drivers/net/wireless/ath/ath9k/eeprom_9287.c
> +++ b/drivers/net/wireless/ath/ath9k/eeprom_9287.c
> @@ -524,10 +524,16 @@ static void ath9k_hw_set_ar9287_power_per_rate_table(struct ath_hw *ah,
>        case 1:
>                break;
>        case 2:
> -               scaledPower -= REDUCE_SCALED_POWER_BY_TWO_CHAIN;
> +               if (scaledPower > REDUCE_SCALED_POWER_BY_TWO_CHAIN)
> +                       scaledPower -= REDUCE_SCALED_POWER_BY_TWO_CHAIN;
> +               else
> +                       scaledPower = 0;
>                break;
>        case 3:
> -               scaledPower -= REDUCE_SCALED_POWER_BY_THREE_CHAIN;
> +               if (scaledPower > REDUCE_SCALED_POWER_BY_THREE_CHAIN)
> +                       scaledPower -= REDUCE_SCALED_POWER_BY_THREE_CHAIN;
> +               else
> +                       scaledPower = 0;
>                break;
>        }
>        scaledPower = max((u16)0, scaledPower);
> --
> 1.7.0.4
>
>
> --
> 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
>



-- 
shafi
--
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 Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [Linux Kernel]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Samba]     [Device Mapper]
  Powered by Linux