All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] Revert regression in ath9k on AR9281
@ 2016-04-07 22:24 lkml2017
  2016-04-08  0:53 ` Julian Calaby
  0 siblings, 1 reply; 21+ messages in thread
From: lkml2017 @ 2016-04-07 22:24 UTC (permalink / raw)
  To: linux-wireless

Hello, the following commit introduced what looks like a regression on 
AR9281 and supposedly other wireless chipsets using the AR9002 part of 
the ath9k driver.

After this commit the network interface's "Bit Rate" as shown in 
"iwconfig" drops from the usual 65Mbps in N mode to 11Mbps also in N 
mode.
Throughput tests confirm the slowdown. Applying and removing the commit 
toggles the problem.

I did not write the code in the provided patch, just reversed the 
changes to the latest known good state.
Reusing the existing common functions instead would be better.

disclaimer: First time contributor, I hope the formatting is OK, just 
trying to fix my laptop here.

Signed-off-by: John Doe <lkml2017@openmailbox.org>


bisection.log
---
Bisecting: 0 revisions left to test after this (roughly 0 steps)
[f911085ffa8863c62344876e0ab6073e4258c246] ath9k: split 
ar5008_hw_spur_mitigate and reuse common code in 
ar9002_hw_spur_mitigate.
f911085ffa8863c62344876e0ab6073e4258c246 is the first bad commit
commit f911085ffa8863c62344876e0ab6073e4258c246
Author: Oleksij Rempel <linux@rempel-privat.de>
Date: Sun May 17 21:49:19 2015 +0200

     ath9k: split ar5008_hw_spur_mitigate and reuse common code in 
ar9002_hw_spur_mitigate.

     [ar5008 and ar9002]_hw_spur_mitigate have big portion of identical 
code.
     This patch will move common part of ar5008_hw_spur_mitigate to
     ar5008_hw_cmn_spur_mitigate and reuse it in ar9002_hw_spur_mitigate.

     As noticed by Joe Perches I reuse ar9002_hw_spur_mitigate (const) 
version of
     declarations for pilot_mask_reg and chan_mask_reg.

     There should be no other difference with original code.

     Signed-off-by: Oleksij Rempel <linux@rempel-privat.de>
     Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
---

iwconfig W/ commit: 11Mbps
---
wlan0 IEEE 802.11bgn ESSID:"TEST_AP"
           Mode:Managed Frequency:2.462 GHz Access Point: A4:C7:*
           Bit Rate=65 Mb/s Tx-Power=15 dBm
           Retry short limit:7 RTS thr:off Fragment thr:off
           Encryption key:off
           Power Management:off
           Link Quality=58/70 Signal level=-52 dBm
           Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0
           Tx excessive retries:0 Invalid misc:0 Missed beacon:0
---

iwconfig W/o commit: 65Mbps
---
wlan0 IEEE 802.11bgn ESSID:"TEST_AP"
           Mode:Managed Frequency:2.462 GHz Access Point: A4:C7:*
           Bit Rate=65 Mb/s Tx-Power=15 dBm
           Retry short limit:7 RTS thr:off Fragment thr:off
           Encryption key:off
           Power Management:off
           Link Quality=58/70 Signal level=-52 dBm
           Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0
           Tx excessive retries:0 Invalid misc:0 Missed beacon:0
---

lspci
---
03:00.0 Network controller: Qualcomm Atheros AR928X Wireless Network 
Adapter (PCI-Express) (rev 01)
         Subsystem: AzureWave AW-NE771 802.11bgn Wireless Mini PCIe Card 
[AR9281]
         Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- 
ParErr- Stepping- SERR- FastB2B- DisINTx-
         Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- 
<TAbort- <MAbort- >SERR- <PERR- INTx-
         Latency: 0, Cache Line Size: 32 bytes
         Interrupt: pin A routed to IRQ 17
         Region 0: Memory at fdff0000 (64-bit, non-prefetchable) 
[size=64K]
         Capabilities: [40] Power Management version 2
                 Flags: PMEClk- DSI- D1+ D2- AuxCurrent=375mA 
PME(D0+,D1+,D2-,D3hot+,D3cold-)
                 Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
         Capabilities: [50] MSI: Enable- Count=1/1 Maskable- 64bit-
                 Address: 00000000 Data: 0000
         Capabilities: [60] Express (v1) Legacy Endpoint, MSI 00
                 DevCap: MaxPayload 128 bytes, PhantFunc 0, Latency L0s 
<512ns, L1 <64us
                         ExtTag- AttnBtn- AttnInd- PwrInd- RBE- FLReset-
                 DevCtl: Report errors: Correctable- Non-Fatal- Fatal- 
Unsupported-
                         RlxdOrd+ ExtTag- PhantFunc- AuxPwr- NoSnoop-
                         MaxPayload 128 bytes, MaxReadReq 512 bytes
                 DevSta: CorrErr- UncorrErr+ FatalErr- UnsuppReq+ AuxPwr- 
TransPend-
                 LnkCap: Port #0, Speed 2.5GT/s, Width x1, ASPM L1, Exit 
Latency L0s <512ns, L1 <64us
                         ClockPM- Surprise- LLActRep- BwNot-
                 LnkCtl: ASPM L1 Enabled; RCB 128 bytes Disabled- 
CommClk+
                         ExtSynch- ClockPM- AutWidDis- BWInt- AutBWInt-
                 LnkSta: Speed 2.5GT/s, Width x1, TrErr- Train- SlotClk+ 
DLActive- BWMgmt- ABWMgmt-
         Capabilities: [90] MSI-X: Enable- Count=1 Masked-
                 Vector table: BAR=0 offset=00000000
                 PBA: BAR=0 offset=00000000
         Capabilities: [100 v1] Advanced Error Reporting
                 UESta: DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- 
UnxCmplt- RxOF- MalfTLP- ECRC- UnsupReq+ ACSViol-
                 UEMsk: DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- 
UnxCmplt- RxOF- MalfTLP- ECRC- UnsupReq- ACSViol-
                 UESvrt: DLP+ SDES- TLP- FCP+ CmpltTO- CmpltAbrt- 
UnxCmplt- RxOF+ MalfTLP+ ECRC- UnsupReq- ACSViol-
                 CESta: RxErr- BadTLP- BadDLLP- Rollover- Timeout- 
NonFatalErr-
                 CEMsk: RxErr- BadTLP- BadDLLP- Rollover- Timeout- 
NonFatalErr-
                 AERCap: First Error Pointer: 14, GenCap+ CGenEn- ChkCap+ 
ChkEn-
         Capabilities: [140 v1] Virtual Channel
                 Caps: LPEVC=0 RefClk=100ns PATEntryBits=1
                 Arb: Fixed- WRR32- WRR64- WRR128-
                 Ctrl: ArbSelect=Fixed
                 Status: InProgress-
                 VC0: Caps: PATOffset=00 MaxTimeSlots=1 RejSnoopTrans-
                         Arb: Fixed- WRR32- WRR64- WRR128- TWRR128- 
WRR256-
                         Ctrl: Enable+ ID=0 ArbSelect=Fixed TC/VC=01
                         Status: NegoPending- InProgress-
         Capabilities: [160 v1] Device Serial Number 
00-00-00-00-00-00-00-00
         Kernel driver in use: ath9k
---

patch
---
diff --git a/drivers/net/wireless/ath/ath9k/ar9002_phy.c 
b/drivers/net/wireless/ath/ath9k/ar9002_phy.c
--- a/drivers/net/wireless/ath/ath9k/ar9002_phy.c
+++ b/drivers/net/wireless/ath/ath9k/ar9002_phy.c
@@ -169,17 +169,29 @@ static void ar9002_hw_spur_mitigate(struct ath_hw 
*ah,
  {
         int bb_spur = AR_NO_SPUR;
         int freq;
- int bin;
+ int bin, cur_bin;
         int bb_spur_off, spur_subchannel_sd;
         int spur_freq_sd;
         int spur_delta_phase;
         int denominator;
+ int upper, lower, cur_vit_mask;
         int tmp, newVal;
         int i;
+ static const int pilot_mask_reg[4] = {
+ AR_PHY_TIMING7, AR_PHY_TIMING8,
+ AR_PHY_PILOT_MASK_01_30, AR_PHY_PILOT_MASK_31_60
+ };
+ static const int chan_mask_reg[4] = {
+ AR_PHY_TIMING9, AR_PHY_TIMING10,
+ AR_PHY_CHANNEL_MASK_01_30, AR_PHY_CHANNEL_MASK_31_60
+ };
+ static const int inc[4] = { 0, 100, 0, 0 };
         struct chan_centers centers;

         int8_t mask_m[123];
         int8_t mask_p[123];
+ int8_t mask_amt;
+ int tmp_mask;
         int cur_bb_spur;
         bool is2GHz = IS_CHAN_2GHZ(chan);

@@ -276,7 +288,135 @@ static void ar9002_hw_spur_mitigate(struct ath_hw 
*ah,
         newVal = spur_subchannel_sd << AR_PHY_SFCORR_SPUR_SUBCHNL_SD_S;
         REG_WRITE(ah, AR_PHY_SFCORR_EXT, newVal);

- ar5008_hw_cmn_spur_mitigate(ah, chan, bin);
+ cur_bin = -6000;
+ upper = bin + 100;
+ lower = bin - 100;
+
+ for (i = 0; i < 4; i++) {
+ int pilot_mask = 0;
+ int chan_mask = 0;
+ int bp = 0;
+ for (bp = 0; bp < 30; bp++) {
+ if ((cur_bin > lower) && (cur_bin < upper)) {
+ pilot_mask = pilot_mask | 0x1 << bp;
+ chan_mask = chan_mask | 0x1 << bp;
+ }
+ cur_bin += 100;
+ }
+ cur_bin += inc[i];
+ REG_WRITE(ah, pilot_mask_reg[i], pilot_mask);
+ REG_WRITE(ah, chan_mask_reg[i], chan_mask);
+ }
+
+ cur_vit_mask = 6100;
+ upper = bin + 120;
+ lower = bin - 120;
+
+ for (i = 0; i < 123; i++) {
+ if ((cur_vit_mask > lower) && (cur_vit_mask < upper)) {
+
+ /* workaround for gcc bug #37014 */
+ volatile int tmp_v = abs(cur_vit_mask - bin);
+
+ if (tmp_v < 75)
+ mask_amt = 1;
+ else
+ mask_amt = 0;
+ if (cur_vit_mask < 0)
+ mask_m[abs(cur_vit_mask / 100)] = mask_amt;
+ else
+ mask_p[cur_vit_mask / 100] = mask_amt;
+ }
+ cur_vit_mask -= 100;
+ }
+
+ tmp_mask = (mask_m[46] << 30) | (mask_m[47] << 28)
+ | (mask_m[48] << 26) | (mask_m[49] << 24)
+ | (mask_m[50] << 22) | (mask_m[51] << 20)
+ | (mask_m[52] << 18) | (mask_m[53] << 16)
+ | (mask_m[54] << 14) | (mask_m[55] << 12)
+ | (mask_m[56] << 10) | (mask_m[57] << 8)
+ | (mask_m[58] << 6) | (mask_m[59] << 4)
+ | (mask_m[60] << 2) | (mask_m[61] << 0);
+ REG_WRITE(ah, AR_PHY_BIN_MASK_1, tmp_mask);
+ REG_WRITE(ah, AR_PHY_VIT_MASK2_M_46_61, tmp_mask);
+
+ tmp_mask = (mask_m[31] << 28)
+ | (mask_m[32] << 26) | (mask_m[33] << 24)
+ | (mask_m[34] << 22) | (mask_m[35] << 20)
+ | (mask_m[36] << 18) | (mask_m[37] << 16)
+ | (mask_m[48] << 14) | (mask_m[39] << 12)
+ | (mask_m[40] << 10) | (mask_m[41] << 8)
+ | (mask_m[42] << 6) | (mask_m[43] << 4)
+ | (mask_m[44] << 2) | (mask_m[45] << 0);
+ REG_WRITE(ah, AR_PHY_BIN_MASK_2, tmp_mask);
+ REG_WRITE(ah, AR_PHY_MASK2_M_31_45, tmp_mask);
+
+ tmp_mask = (mask_m[16] << 30) | (mask_m[16] << 28)
+ | (mask_m[18] << 26) | (mask_m[18] << 24)
+ | (mask_m[20] << 22) | (mask_m[20] << 20)
+ | (mask_m[22] << 18) | (mask_m[22] << 16)
+ | (mask_m[24] << 14) | (mask_m[24] << 12)
+ | (mask_m[25] << 10) | (mask_m[26] << 8)
+ | (mask_m[27] << 6) | (mask_m[28] << 4)
+ | (mask_m[29] << 2) | (mask_m[30] << 0);
+ REG_WRITE(ah, AR_PHY_BIN_MASK_3, tmp_mask);
+ REG_WRITE(ah, AR_PHY_MASK2_M_16_30, tmp_mask);
+
+ tmp_mask = (mask_m[0] << 30) | (mask_m[1] << 28)
+ | (mask_m[2] << 26) | (mask_m[3] << 24)
+ | (mask_m[4] << 22) | (mask_m[5] << 20)
+ | (mask_m[6] << 18) | (mask_m[7] << 16)
+ | (mask_m[8] << 14) | (mask_m[9] << 12)
+ | (mask_m[10] << 10) | (mask_m[11] << 8)
+ | (mask_m[12] << 6) | (mask_m[13] << 4)
+ | (mask_m[14] << 2) | (mask_m[15] << 0);
+ REG_WRITE(ah, AR_PHY_MASK_CTL, tmp_mask);
+ REG_WRITE(ah, AR_PHY_MASK2_M_00_15, tmp_mask);
+
+ tmp_mask = (mask_p[15] << 28)
+ | (mask_p[14] << 26) | (mask_p[13] << 24)
+ | (mask_p[12] << 22) | (mask_p[11] << 20)
+ | (mask_p[10] << 18) | (mask_p[9] << 16)
+ | (mask_p[8] << 14) | (mask_p[7] << 12)
+ | (mask_p[6] << 10) | (mask_p[5] << 8)
+ | (mask_p[4] << 6) | (mask_p[3] << 4)
+ | (mask_p[2] << 2) | (mask_p[1] << 0);
+ REG_WRITE(ah, AR_PHY_BIN_MASK2_1, tmp_mask);
+ REG_WRITE(ah, AR_PHY_MASK2_P_15_01, tmp_mask);
+
+ tmp_mask = (mask_p[30] << 28)
+ | (mask_p[29] << 26) | (mask_p[28] << 24)
+ | (mask_p[27] << 22) | (mask_p[26] << 20)
+ | (mask_p[25] << 18) | (mask_p[24] << 16)
+ | (mask_p[23] << 14) | (mask_p[22] << 12)
+ | (mask_p[21] << 10) | (mask_p[20] << 8)
+ | (mask_p[19] << 6) | (mask_p[18] << 4)
+ | (mask_p[17] << 2) | (mask_p[16] << 0);
+ REG_WRITE(ah, AR_PHY_BIN_MASK2_2, tmp_mask);
+ REG_WRITE(ah, AR_PHY_MASK2_P_30_16, tmp_mask);
+
+ tmp_mask = (mask_p[45] << 28)
+ | (mask_p[44] << 26) | (mask_p[43] << 24)
+ | (mask_p[42] << 22) | (mask_p[41] << 20)
+ | (mask_p[40] << 18) | (mask_p[39] << 16)
+ | (mask_p[38] << 14) | (mask_p[37] << 12)
+ | (mask_p[36] << 10) | (mask_p[35] << 8)
+ | (mask_p[34] << 6) | (mask_p[33] << 4)
+ | (mask_p[32] << 2) | (mask_p[31] << 0);
+ REG_WRITE(ah, AR_PHY_BIN_MASK2_3, tmp_mask);
+ REG_WRITE(ah, AR_PHY_MASK2_P_45_31, tmp_mask);
+
+ tmp_mask = (mask_p[61] << 30) | (mask_p[60] << 28)
+ | (mask_p[59] << 26) | (mask_p[58] << 24)
+ | (mask_p[57] << 22) | (mask_p[56] << 20)
+ | (mask_p[55] << 18) | (mask_p[54] << 16)
+ | (mask_p[53] << 14) | (mask_p[52] << 12)
+ | (mask_p[51] << 10) | (mask_p[50] << 8)
+ | (mask_p[49] << 6) | (mask_p[48] << 4)
+ | (mask_p[47] << 2) | (mask_p[46] << 0);
+ REG_WRITE(ah, AR_PHY_BIN_MASK2_4, tmp_mask);
+ REG_WRITE(ah, AR_PHY_MASK2_P_61_45, tmp_mask);

         REGWRITE_BUFFER_FLUSH(ah);
  }
---

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH] Revert regression in ath9k on AR9281
  2016-04-07 22:24 [PATCH] Revert regression in ath9k on AR9281 lkml2017
@ 2016-04-08  0:53 ` Julian Calaby
  2016-04-11  2:28   ` Gustav Frederiksen
  0 siblings, 1 reply; 21+ messages in thread
From: Julian Calaby @ 2016-04-08  0:53 UTC (permalink / raw)
  To: lkml2017; +Cc: linux-wireless

Hi,

On Fri, Apr 8, 2016 at 8:24 AM,  <lkml2017@openmailbox.org> wrote:
> Hello, the following commit introduced what looks like a regression on
> AR9281 and supposedly other wireless chipsets using the AR9002 part of the
> ath9k driver.
>
> After this commit the network interface's "Bit Rate" as shown in "iwconfig"
> drops from the usual 65Mbps in N mode to 11Mbps also in N mode.
> Throughput tests confirm the slowdown. Applying and removing the commit
> toggles the problem.
>
> I did not write the code in the provided patch, just reversed the changes to
> the latest known good state.
> Reusing the existing common functions instead would be better.

It's a revert, you not being the "original" author is implied. A
followup patch to reuse existing functions would be welcomed.

> disclaimer: First time contributor, I hope the formatting is OK, just trying
> to fix my laptop here.

If you're really worried about this, put this disclaimer below the "---".

You should also add a Fixes: tag here too.

> Signed-off-by: John Doe <lkml2017@openmailbox.org>

I strongly suspect that this isn't your real name. That isn't allowed.
The developer certificate of origin requires that you sign here with
your real name and email address.

> bisection.log
> ---

"bisection.log" should be here, after the "---".

> Bisecting: 0 revisions left to test after this (roughly 0 steps)
> [f911085ffa8863c62344876e0ab6073e4258c246] ath9k: split
> ar5008_hw_spur_mitigate and reuse common code in ar9002_hw_spur_mitigate.
> f911085ffa8863c62344876e0ab6073e4258c246 is the first bad commit
> commit f911085ffa8863c62344876e0ab6073e4258c246
> Author: Oleksij Rempel <linux@rempel-privat.de>
> Date: Sun May 17 21:49:19 2015 +0200
>
>     ath9k: split ar5008_hw_spur_mitigate and reuse common code in
> ar9002_hw_spur_mitigate.
>
>     [ar5008 and ar9002]_hw_spur_mitigate have big portion of identical code.
>     This patch will move common part of ar5008_hw_spur_mitigate to
>     ar5008_hw_cmn_spur_mitigate and reuse it in ar9002_hw_spur_mitigate.
>
>     As noticed by Joe Perches I reuse ar9002_hw_spur_mitigate (const)
> version of
>     declarations for pilot_mask_reg and chan_mask_reg.
>
>     There should be no other difference with original code.
>
>     Signed-off-by: Oleksij Rempel <linux@rempel-privat.de>
>     Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
> ---
>
> iwconfig W/ commit: 11Mbps
> ---
> wlan0 IEEE 802.11bgn ESSID:"TEST_AP"
>           Mode:Managed Frequency:2.462 GHz Access Point: A4:C7:*
>           Bit Rate=65 Mb/s Tx-Power=15 dBm
>           Retry short limit:7 RTS thr:off Fragment thr:off
>           Encryption key:off
>           Power Management:off
>           Link Quality=58/70 Signal level=-52 dBm
>           Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0
>           Tx excessive retries:0 Invalid misc:0 Missed beacon:0
> ---
>
> iwconfig W/o commit: 65Mbps
> ---
> wlan0 IEEE 802.11bgn ESSID:"TEST_AP"
>           Mode:Managed Frequency:2.462 GHz Access Point: A4:C7:*
>           Bit Rate=65 Mb/s Tx-Power=15 dBm
>           Retry short limit:7 RTS thr:off Fragment thr:off
>           Encryption key:off
>           Power Management:off
>           Link Quality=58/70 Signal level=-52 dBm
>           Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0
>           Tx excessive retries:0 Invalid misc:0 Missed beacon:0

You should probably be using the iw command instead of iwconfig. It
produces a lot more data. (Also these two iwconfig outputs look
identical to me, is that your intention?)

> ---
>
> lspci
> ---
> 03:00.0 Network controller: Qualcomm Atheros AR928X Wireless Network Adapter
> (PCI-Express) (rev 01)
>         Subsystem: AzureWave AW-NE771 802.11bgn Wireless Mini PCIe Card
> [AR9281]
>         Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr-
> Stepping- SERR- FastB2B- DisINTx-
>         Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort-
> <TAbort- <MAbort- >SERR- <PERR- INTx-
>         Latency: 0, Cache Line Size: 32 bytes
>         Interrupt: pin A routed to IRQ 17
>         Region 0: Memory at fdff0000 (64-bit, non-prefetchable) [size=64K]
>         Capabilities: [40] Power Management version 2
>                 Flags: PMEClk- DSI- D1+ D2- AuxCurrent=375mA
> PME(D0+,D1+,D2-,D3hot+,D3cold-)
>                 Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
>         Capabilities: [50] MSI: Enable- Count=1/1 Maskable- 64bit-
>                 Address: 00000000 Data: 0000
>         Capabilities: [60] Express (v1) Legacy Endpoint, MSI 00
>                 DevCap: MaxPayload 128 bytes, PhantFunc 0, Latency L0s
> <512ns, L1 <64us
>                         ExtTag- AttnBtn- AttnInd- PwrInd- RBE- FLReset-
>                 DevCtl: Report errors: Correctable- Non-Fatal- Fatal-
> Unsupported-
>                         RlxdOrd+ ExtTag- PhantFunc- AuxPwr- NoSnoop-
>                         MaxPayload 128 bytes, MaxReadReq 512 bytes
>                 DevSta: CorrErr- UncorrErr+ FatalErr- UnsuppReq+ AuxPwr-
> TransPend-
>                 LnkCap: Port #0, Speed 2.5GT/s, Width x1, ASPM L1, Exit
> Latency L0s <512ns, L1 <64us
>                         ClockPM- Surprise- LLActRep- BwNot-
>                 LnkCtl: ASPM L1 Enabled; RCB 128 bytes Disabled- CommClk+
>                         ExtSynch- ClockPM- AutWidDis- BWInt- AutBWInt-
>                 LnkSta: Speed 2.5GT/s, Width x1, TrErr- Train- SlotClk+
> DLActive- BWMgmt- ABWMgmt-
>         Capabilities: [90] MSI-X: Enable- Count=1 Masked-
>                 Vector table: BAR=0 offset=00000000
>                 PBA: BAR=0 offset=00000000
>         Capabilities: [100 v1] Advanced Error Reporting
>                 UESta: DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt-
> RxOF- MalfTLP- ECRC- UnsupReq+ ACSViol-
>                 UEMsk: DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt-
> RxOF- MalfTLP- ECRC- UnsupReq- ACSViol-
>                 UESvrt: DLP+ SDES- TLP- FCP+ CmpltTO- CmpltAbrt- UnxCmplt-
> RxOF+ MalfTLP+ ECRC- UnsupReq- ACSViol-
>                 CESta: RxErr- BadTLP- BadDLLP- Rollover- Timeout-
> NonFatalErr-
>                 CEMsk: RxErr- BadTLP- BadDLLP- Rollover- Timeout-
> NonFatalErr-
>                 AERCap: First Error Pointer: 14, GenCap+ CGenEn- ChkCap+
> ChkEn-
>         Capabilities: [140 v1] Virtual Channel
>                 Caps: LPEVC=0 RefClk=100ns PATEntryBits=1
>                 Arb: Fixed- WRR32- WRR64- WRR128-
>                 Ctrl: ArbSelect=Fixed
>                 Status: InProgress-
>                 VC0: Caps: PATOffset=00 MaxTimeSlots=1 RejSnoopTrans-
>                         Arb: Fixed- WRR32- WRR64- WRR128- TWRR128- WRR256-
>                         Ctrl: Enable+ ID=0 ArbSelect=Fixed TC/VC=01
>                         Status: NegoPending- InProgress-
>         Capabilities: [160 v1] Device Serial Number 00-00-00-00-00-00-00-00
>         Kernel driver in use: ath9k
> ---
>
> patch

Your email client has thoroughly mangled the patch. There's
documentation on how to set it up at Documentation/email-clients.txt
however you should really be sending patches with git-send-email.

-- 
Julian Calaby

Email: julian.calaby@gmail.com
Profile: http://www.google.com/profiles/julian.calaby/

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH] Revert regression in ath9k on AR9281
  2016-04-08  0:53 ` Julian Calaby
@ 2016-04-11  2:28   ` Gustav Frederiksen
  2016-04-11 19:04     ` Oleksij Rempel
  0 siblings, 1 reply; 21+ messages in thread
From: Gustav Frederiksen @ 2016-04-11  2:28 UTC (permalink / raw)
  To: Julian Calaby; +Cc: linux-wireless

Hi,
thank you for taking the time to answer my previous email and for 
providing those useful tips.

All the points you made are valid.
Especially, the same output of "iwconfig" was indeed pasted twice by 
mistake.

Please find a new and hopefully correct report below this message.



The following commit introduced what looks like a regression on AR9281 
and supposedly other wireless chipsets using the AR9002 part of the 
ath9k driver.
After this commit the network interface's "Bit Rate" as shown in "iw" 
drops from the usual 65Mbps in N mode to 11Mbps also in N mode.
Throughput tests confirm the slowdown. Applying and removing the commit 
toggles the problem.

Changes contained in ar9002_hw_spur_mitigate() appear responsible for 
the "Bit Rate" drop.
The provided patch reverts the change made by commit "f911085ffa88" to 
ar9002_hw_spur_mitigate() while leaving other changes unmodified.

The patch was obtained as such: "git diff origin/master f911085ffa88~1 
drivers/net/wireless/ath/ath9k/ar9002_phy.c"

Fixes: f911085ffa88 ("ath9k: split ar5008_hw_spur_mitigate and reuse 
common code in ar9002_hw_spur_mitigate.") Behavior of 
ar5008_hw_cmn_spur_mitigate() differs from previous implementation in 
ar9002_hw_spur_mitigate(). Reverted changes.

Signed-off-by: Gustav Frederiksen <lkml2017@openmailbox.org>

---
bisection.log

Bisecting: 0 revisions left to test after this (roughly 0 steps)

[f911085ffa8863c62344876e0ab6073e4258c246] ath9k: split 
ar5008_hw_spur_mitigate and reuse common code in 
ar9002_hw_spur_mitigate.

f911085ffa8863c62344876e0ab6073e4258c246 is the first bad commit
commit f911085ffa8863c62344876e0ab6073e4258c246
Author: Oleksij Rempel <linux@xxxxxxxxxxxxxxxx>
Date: Sun May 17 21:49:19 2015 +0200

ath9k: split ar5008_hw_spur_mitigate and reuse common code in 
ar9002_hw_spur_mitigate.


[ar5008 and ar9002]_hw_spur_mitigate have big portion of identical code.

     This patch will move common part of ar5008_hw_spur_mitigate to
     ar5008_hw_cmn_spur_mitigate and reuse it in ar9002_hw_spur_mitigate.

As noticed by Joe Perches I reuse ar9002_hw_spur_mitigate (const) 
version of

     declarations for pilot_mask_reg and chan_mask_reg.

     There should be no other difference with original code.

     Signed-off-by: Oleksij Rempel <linux@xxxxxxxxxxxxxxxx>
     Signed-off-by: Kalle Valo <kvalo@xxxxxxxxxxxxxx>
---

---
WITH commit: 11Mbps.

root@laptop:~# uname -a
Linux laptop 4.2.0-35-generic #40~14.04.1-Ubuntu SMP Fri Mar 18 16:37:35 
UTC 2016 x86_64 x86_64 x86_64 GNU/Linux

root@laptop:~# iw dev wlan0 link
Connected to a4:c7:**:**:**:** (on wlan0)
         SSID: TEST_AP
         freq: 2462
         RX: 87746 bytes (518 packets)
         TX: 46813 bytes (246 packets)
         signal: -47 dBm
         tx bitrate: 11.0 MBit/s

         bss flags:      short-preamble short-slot-time
         dtim period:    1
         beacon int:     400

root@laptop:~# wget "http://proof.ovh.net/files/1Gio.dat" -O /dev/null
--2016-04-11 02:38:10--  http://proof.ovh.net/files/1Gio.dat
Resolving proof.ovh.net (proof.ovh.net)... 188.165.12.106, 
2001:41d0:2:876a::1
Connecting to proof.ovh.net (proof.ovh.net)|188.165.12.106|:80... 
connected.
HTTP request sent, awaiting response... 200 OK
Length: 1073741824 (1.0G) [application/octet-stream]
Saving to: '/dev/null'

  3% [=>                                                                  
        ] 39 762 450   778KB/s  eta 23m 15s^C

root@laptop:~# iw phy0 info
Wiphy phy0
         Band 1:
                 Capabilities: 0x11ce
                         HT20/HT40
                         SM Power Save disabled
                         RX HT40 SGI
                         TX STBC
                         RX STBC 1-stream
                         Max AMSDU length: 3839 bytes
                         DSSS/CCK HT40
                 Maximum RX AMPDU length 65535 bytes (exponent: 0x003)
                 Minimum RX AMPDU time spacing: 8 usec (0x06)
                 HT RX MCS rate indexes supported: 0-15
                 TX unequal modulation not supported
                 HT TX Max spatial streams: 1
                 HT TX MCS rate indexes supported may differ
                 Frequencies:
                         * 2412 MHz [1] (27.0 dBm)
                         * 2417 MHz [2] (27.0 dBm)
                         * 2422 MHz [3] (27.0 dBm)
                         * 2427 MHz [4] (27.0 dBm)
                         * 2432 MHz [5] (27.0 dBm)
                         * 2437 MHz [6] (27.0 dBm)
                         * 2442 MHz [7] (27.0 dBm)
                         * 2447 MHz [8] (27.0 dBm)
                         * 2452 MHz [9] (27.0 dBm)
                         * 2457 MHz [10] (27.0 dBm)
                         * 2462 MHz [11] (27.0 dBm)
                         * 2467 MHz [12] (disabled)
                         * 2472 MHz [13] (disabled)
                         * 2484 MHz [14] (disabled)
                 Bitrates (non-HT):
                         * 1.0 Mbps
                         * 2.0 Mbps (short preamble supported)
                         * 5.5 Mbps (short preamble supported)
                         * 11.0 Mbps (short preamble supported)
                         * 6.0 Mbps
                         * 9.0 Mbps
                         * 12.0 Mbps
                         * 18.0 Mbps
                         * 24.0 Mbps
                         * 36.0 Mbps
                         * 48.0 Mbps
                         * 54.0 Mbps
         max # scan SSIDs: 4
         max scan IEs length: 2257 bytes
         Coverage class: 0 (up to 0m)
         Supported Ciphers:
                 * WEP40 (00-0f-ac:1)
                 * WEP104 (00-0f-ac:5)
                 * TKIP (00-0f-ac:2)
                 * CCMP (00-0f-ac:4)
                 * 00-0f-ac:10
                 * 00-0f-ac:8
                 * 00-0f-ac:9
                 * CMAC (00-0f-ac:6)
                 * 00-0f-ac:13
                 * 00-0f-ac:11
                 * 00-0f-ac:12
         Available Antennas: TX 0x1 RX 0x3
         Configured Antennas: TX 0x1 RX 0x3
         Supported interface modes:
                  * IBSS
                  * managed
                  * AP
                  * AP/VLAN
                  * WDS
                  * monitor
                  * mesh point
                  * P2P-client
                  * P2P-GO
         software interface modes (can always be added):
                  * AP/VLAN
                  * monitor
         valid interface combinations:
                  * #{ managed } <= 2048, #{ AP, mesh point } <= 8, #{ 
P2P-client, P2P-GO } <= 1,
                    total <= 2048, #channels <= 1, STA/AP BI must match
                  * #{ WDS } <= 2048,
                    total <= 2048, #channels <= 1, STA/AP BI must match
         Supported commands:
                  * new_interface
                  * set_interface
                  * new_key
                  * new_beacon
                  * new_station
                  * new_mpath
                  * set_mesh_params
                  * set_bss
                  * authenticate
                  * associate
                  * deauthenticate
                  * disassociate
                  * join_ibss
                  * join_mesh
                  * remain_on_channel
                  * set_tx_bitrate_mask
                  * action
                  * frame_wait_cancel
                  * set_wiphy_netns
                  * set_channel
                  * set_wds_peer
                  * Unknown command (82)
                  * Unknown command (81)
                  * Unknown command (84)
                  * Unknown command (87)
                  * Unknown command (85)
                  * Unknown command (89)
                  * Unknown command (92)
                  * connect
                  * disconnect
         Supported TX frame types:
                  * IBSS: 0x00 0x10 0x20 0x30 0x40 0x50 0x60 0x70 0x80 
0x90 0xa0 0xb0 0xc0 0xd0 0xe0 0xf0
                  * managed: 0x00 0x10 0x20 0x30 0x40 0x50 0x60 0x70 0x80 
0x90 0xa0 0xb0 0xc0 0xd0 0xe0 0xf0
                  * AP: 0x00 0x10 0x20 0x30 0x40 0x50 0x60 0x70 0x80 0x90 
0xa0 0xb0 0xc0 0xd0 0xe0 0xf0
                  * AP/VLAN: 0x00 0x10 0x20 0x30 0x40 0x50 0x60 0x70 0x80 
0x90 0xa0 0xb0 0xc0 0xd0 0xe0 0xf0
                  * mesh point: 0x00 0x10 0x20 0x30 0x40 0x50 0x60 0x70 
0x80 0x90 0xa0 0xb0 0xc0 0xd0 0xe0 0xf0
                  * P2P-client: 0x00 0x10 0x20 0x30 0x40 0x50 0x60 0x70 
0x80 0x90 0xa0 0xb0 0xc0 0xd0 0xe0 0xf0
                  * P2P-GO: 0x00 0x10 0x20 0x30 0x40 0x50 0x60 0x70 0x80 
0x90 0xa0 0xb0 0xc0 0xd0 0xe0 0xf0
                  * Unknown mode (10): 0x00 0x10 0x20 0x30 0x40 0x50 0x60 
0x70 0x80 0x90 0xa0 0xb0 0xc0 0xd0 0xe0 0xf0
         Supported RX frame types:
                  * IBSS: 0x40 0xb0 0xc0 0xd0
                  * managed: 0x40 0xd0
                  * AP: 0x00 0x20 0x40 0xa0 0xb0 0xc0 0xd0
                  * AP/VLAN: 0x00 0x20 0x40 0xa0 0xb0 0xc0 0xd0
                  * mesh point: 0xb0 0xc0 0xd0
                  * P2P-client: 0x40 0xd0
                  * P2P-GO: 0x00 0x20 0x40 0xa0 0xb0 0xc0 0xd0
                  * Unknown mode (10): 0x40 0xd0
         Device supports RSN-IBSS.
         Device supports AP-side u-APSD.
         HT Capability overrides:
                  * MCS: ff ff ff ff ff ff ff ff ff ff
                  * maximum A-MSDU length
                  * supported channel width
                  * short GI for 40 MHz
                  * max A-MPDU length exponent
                  * min MPDU start spacing
         Device supports TX status socket option.
         Device supports HT-IBSS.

root@laptop:~# lspci -vvn
03:00.0 0280: 168c:002a (rev 01)
         Subsystem: 1a3b:1067
         Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- 
ParErr- Stepping- SERR- FastB2B- DisINTx-
         Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- 
<TAbort- <MAbort- >SERR- <PERR- INTx-
         Latency: 0, Cache Line Size: 32 bytes
         Interrupt: pin A routed to IRQ 17
         Region 0: Memory at fdff0000 (64-bit, non-prefetchable) 
[size=64K]
         Capabilities: [40] Power Management version 2
                 Flags: PMEClk- DSI- D1+ D2- AuxCurrent=375mA 
PME(D0+,D1+,D2-,D3hot+,D3cold-)
                 Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
         Capabilities: [50] MSI: Enable- Count=1/1 Maskable- 64bit-
                 Address: 00000000  Data: 0000
         Capabilities: [60] Express (v1) Legacy Endpoint, MSI 00
                 DevCap: MaxPayload 128 bytes, PhantFunc 0, Latency L0s 
<512ns, L1 <64us
                         ExtTag- AttnBtn- AttnInd- PwrInd- RBE- FLReset-
                 DevCtl: Report errors: Correctable- Non-Fatal- Fatal- 
Unsupported-
                         RlxdOrd+ ExtTag- PhantFunc- AuxPwr- NoSnoop-
                         MaxPayload 128 bytes, MaxReadReq 512 bytes
                 DevSta: CorrErr- UncorrErr+ FatalErr- UnsuppReq+ AuxPwr- 
TransPend-
                 LnkCap: Port #0, Speed 2.5GT/s, Width x1, ASPM L1, Exit 
Latency L0s <512ns, L1 <64us
                         ClockPM- Surprise- LLActRep- BwNot-
                 LnkCtl: ASPM L1 Enabled; RCB 128 bytes Disabled- 
CommClk+
                         ExtSynch- ClockPM- AutWidDis- BWInt- AutBWInt-
                 LnkSta: Speed 2.5GT/s, Width x1, TrErr- Train- SlotClk+ 
DLActive- BWMgmt- ABWMgmt-
         Capabilities: [90] MSI-X: Enable- Count=1 Masked-
                 Vector table: BAR=0 offset=00000000
                 PBA: BAR=0 offset=00000000
         Capabilities: [100 v1] Advanced Error Reporting
                 UESta:  DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- 
UnxCmplt- RxOF- MalfTLP- ECRC- UnsupReq+ ACSViol-
                 UEMsk:  DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- 
UnxCmplt- RxOF- MalfTLP- ECRC- UnsupReq- ACSViol-
                 UESvrt: DLP+ SDES- TLP- FCP+ CmpltTO- CmpltAbrt- 
UnxCmplt- RxOF+ MalfTLP+ ECRC- UnsupReq- ACSViol-
                 CESta:  RxErr- BadTLP- BadDLLP- Rollover- Timeout- 
NonFatalErr-
                 CEMsk:  RxErr- BadTLP- BadDLLP- Rollover- Timeout- 
NonFatalErr-
                 AERCap: First Error Pointer: 14, GenCap+ CGenEn- ChkCap+ 
ChkEn-
         Capabilities: [140 v1] Virtual Channel
                 Caps:   LPEVC=0 RefClk=100ns PATEntryBits=1
                 Arb:    Fixed- WRR32- WRR64- WRR128-
                 Ctrl:   ArbSelect=Fixed
                 Status: InProgress-
                 VC0:    Caps:   PATOffset=00 MaxTimeSlots=1 
RejSnoopTrans-
                         Arb:    Fixed- WRR32- WRR64- WRR128- TWRR128- 
WRR256-
                         Ctrl:   Enable+ ID=0 ArbSelect=Fixed TC/VC=01
                         Status: NegoPending- InProgress-
         Capabilities: [160 v1] Device Serial Number 
00-00-00-00-00-00-00-00
         Kernel driver in use: ath9k
---

---
WITHOUT commit: 65Mbps.

root@laptop:~# uname -a
Linux laptop 3.19.0-58-generic #64~14.04.1-Ubuntu SMP Fri Mar 18 
19:05:43 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux

root@laptop:~# iw dev wlan0 link
Connected to a4:c7:**:**:**:** (on wlan0)
         SSID: TEST_AP
         freq: 2462
         RX: 91242 bytes (553 packets)
         TX: 51861 bytes (275 packets)
         signal: -50 dBm
         tx bitrate: 65.0 MBit/s MCS 7

         bss flags:      short-preamble short-slot-time
         dtim period:    1
         beacon int:     400

root@laptop:~# wget "http://proof.ovh.net/files/1Gio.dat" -O /dev/null
--2016-04-11 02:31:34--  http://proof.ovh.net/files/1Gio.dat
Resolving proof.ovh.net (proof.ovh.net)... 188.165.12.106, 
2001:41d0:2:876a::1
Connecting to proof.ovh.net (proof.ovh.net)|188.165.12.106|:80... 
connected.
HTTP request sent, awaiting response... 200 OK
Length: 1073741824 (1.0G) [application/octet-stream]
Saving to: '/dev/null'

34% [========================>                                           
        ] 365 769 042 7,91MB/s  eta 1m 40s ^C


root@laptop:~# iw phy0 info
Wiphy phy0
         Band 1:
                 Capabilities: 0x11ce
                         HT20/HT40
                         SM Power Save disabled
                         RX HT40 SGI
                         TX STBC
                         RX STBC 1-stream
                         Max AMSDU length: 3839 bytes
                         DSSS/CCK HT40
                 Maximum RX AMPDU length 65535 bytes (exponent: 0x003)
                 Minimum RX AMPDU time spacing: 8 usec (0x06)
                 HT RX MCS rate indexes supported: 0-15
                 TX unequal modulation not supported
                 HT TX Max spatial streams: 1
                 HT TX MCS rate indexes supported may differ
                 Frequencies:
                         * 2412 MHz [1] (27.0 dBm)
                         * 2417 MHz [2] (27.0 dBm)
                         * 2422 MHz [3] (27.0 dBm)
                         * 2427 MHz [4] (27.0 dBm)
                         * 2432 MHz [5] (27.0 dBm)
                         * 2437 MHz [6] (27.0 dBm)
                         * 2442 MHz [7] (27.0 dBm)
                         * 2447 MHz [8] (27.0 dBm)
                         * 2452 MHz [9] (27.0 dBm)
                         * 2457 MHz [10] (27.0 dBm)
                         * 2462 MHz [11] (27.0 dBm)
                         * 2467 MHz [12] (disabled)
                         * 2472 MHz [13] (disabled)
                         * 2484 MHz [14] (disabled)
                 Bitrates (non-HT):
                         * 1.0 Mbps
                         * 2.0 Mbps (short preamble supported)
                         * 5.5 Mbps (short preamble supported)
                         * 11.0 Mbps (short preamble supported)
                         * 6.0 Mbps
                         * 9.0 Mbps
                         * 12.0 Mbps
                         * 18.0 Mbps
                         * 24.0 Mbps
                         * 36.0 Mbps
                         * 48.0 Mbps
                         * 54.0 Mbps
         max # scan SSIDs: 4
         max scan IEs length: 2257 bytes
         Coverage class: 0 (up to 0m)
         Supported Ciphers:
                 * WEP40 (00-0f-ac:1)
                 * WEP104 (00-0f-ac:5)
                 * TKIP (00-0f-ac:2)
                 * CCMP (00-0f-ac:4)
                 * CMAC (00-0f-ac:6)
         Available Antennas: TX 0x1 RX 0x3
         Configured Antennas: TX 0x1 RX 0x3
         Supported interface modes:
                  * IBSS
                  * managed
                  * AP
                  * AP/VLAN
                  * WDS
                  * monitor
                  * mesh point
                  * P2P-client
                  * P2P-GO
         software interface modes (can always be added):
                  * AP/VLAN
                  * monitor
         valid interface combinations:
                  * #{ managed } <= 2048, #{ AP, mesh point } <= 8, #{ 
P2P-client, P2P-GO } <= 1,
                    total <= 2048, #channels <= 1, STA/AP BI must match
                  * #{ WDS } <= 2048,
                    total <= 2048, #channels <= 1, STA/AP BI must match
         Supported commands:
                  * new_interface
                  * set_interface
                  * new_key
                  * new_beacon
                  * new_station
                  * new_mpath
                  * set_mesh_params
                  * set_bss
                  * authenticate
                  * associate
                  * deauthenticate
                  * disassociate
                  * join_ibss
                  * join_mesh
                  * remain_on_channel
                  * set_tx_bitrate_mask
                  * action
                  * frame_wait_cancel
                  * set_wiphy_netns
                  * set_channel
                  * set_wds_peer
                  * Unknown command (82)
                  * Unknown command (81)
                  * Unknown command (84)
                  * Unknown command (87)
                  * Unknown command (85)
                  * Unknown command (89)
                  * Unknown command (92)
                  * connect
                  * disconnect
         Supported TX frame types:
                  * IBSS: 0x00 0x10 0x20 0x30 0x40 0x50 0x60 0x70 0x80 
0x90 0xa0 0xb0 0xc0 0xd0 0xe0 0xf0
                  * managed: 0x00 0x10 0x20 0x30 0x40 0x50 0x60 0x70 0x80 
0x90 0xa0 0xb0 0xc0 0xd0 0xe0 0xf0
                  * AP: 0x00 0x10 0x20 0x30 0x40 0x50 0x60 0x70 0x80 0x90 
0xa0 0xb0 0xc0 0xd0 0xe0 0xf0
                  * AP/VLAN: 0x00 0x10 0x20 0x30 0x40 0x50 0x60 0x70 0x80 
0x90 0xa0 0xb0 0xc0 0xd0 0xe0 0xf0
                  * mesh point: 0x00 0x10 0x20 0x30 0x40 0x50 0x60 0x70 
0x80 0x90 0xa0 0xb0 0xc0 0xd0 0xe0 0xf0
                  * P2P-client: 0x00 0x10 0x20 0x30 0x40 0x50 0x60 0x70 
0x80 0x90 0xa0 0xb0 0xc0 0xd0 0xe0 0xf0
                  * P2P-GO: 0x00 0x10 0x20 0x30 0x40 0x50 0x60 0x70 0x80 
0x90 0xa0 0xb0 0xc0 0xd0 0xe0 0xf0
                  * Unknown mode (10): 0x00 0x10 0x20 0x30 0x40 0x50 0x60 
0x70 0x80 0x90 0xa0 0xb0 0xc0 0xd0 0xe0 0xf0
         Supported RX frame types:
                  * IBSS: 0x40 0xb0 0xc0 0xd0
                  * managed: 0x40 0xd0
                  * AP: 0x00 0x20 0x40 0xa0 0xb0 0xc0 0xd0
                  * AP/VLAN: 0x00 0x20 0x40 0xa0 0xb0 0xc0 0xd0
                  * mesh point: 0xb0 0xc0 0xd0
                  * P2P-client: 0x40 0xd0
                  * P2P-GO: 0x00 0x20 0x40 0xa0 0xb0 0xc0 0xd0
                  * Unknown mode (10): 0x40 0xd0
         Device supports RSN-IBSS.
         Device supports AP-side u-APSD.
         HT Capability overrides:
                  * MCS: ff ff ff ff ff ff ff ff ff ff
                  * maximum A-MSDU length
                  * supported channel width
                  * short GI for 40 MHz
                  * max A-MPDU length exponent
                  * min MPDU start spacing
         Device supports TX status socket option.
         Device supports HT-IBSS.

root@laptop:~# lspci -vvn
03:00.0 0280: 168c:002a (rev 01)
         Subsystem: 1a3b:1067
         Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- 
ParErr- Stepping- SERR- FastB2B- DisINTx-
         Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- 
<TAbort- <MAbort- >SERR- <PERR- INTx-
         Latency: 0, Cache Line Size: 32 bytes
         Interrupt: pin A routed to IRQ 17
         Region 0: Memory at fdff0000 (64-bit, non-prefetchable) 
[size=64K]
         Capabilities: [40] Power Management version 2
                 Flags: PMEClk- DSI- D1+ D2- AuxCurrent=375mA 
PME(D0+,D1+,D2-,D3hot+,D3cold-)
                 Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
         Capabilities: [50] MSI: Enable- Count=1/1 Maskable- 64bit-
                 Address: 00000000  Data: 0000
         Capabilities: [60] Express (v1) Legacy Endpoint, MSI 00
                 DevCap: MaxPayload 128 bytes, PhantFunc 0, Latency L0s 
<512ns, L1 <64us
                         ExtTag- AttnBtn- AttnInd- PwrInd- RBE- FLReset-
                 DevCtl: Report errors: Correctable- Non-Fatal- Fatal- 
Unsupported-
                         RlxdOrd+ ExtTag- PhantFunc- AuxPwr- NoSnoop-
                         MaxPayload 128 bytes, MaxReadReq 512 bytes
                 DevSta: CorrErr- UncorrErr+ FatalErr- UnsuppReq+ AuxPwr- 
TransPend-
                 LnkCap: Port #0, Speed 2.5GT/s, Width x1, ASPM L1, Exit 
Latency L0s <512ns, L1 <64us
                         ClockPM- Surprise- LLActRep- BwNot-
                 LnkCtl: ASPM L1 Enabled; RCB 128 bytes Disabled- 
CommClk+
                         ExtSynch- ClockPM- AutWidDis- BWInt- AutBWInt-
                 LnkSta: Speed 2.5GT/s, Width x1, TrErr- Train- SlotClk+ 
DLActive- BWMgmt- ABWMgmt-
         Capabilities: [90] MSI-X: Enable- Count=1 Masked-
                 Vector table: BAR=0 offset=00000000
                 PBA: BAR=0 offset=00000000
         Capabilities: [100 v1] Advanced Error Reporting
                 UESta:  DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- 
UnxCmplt- RxOF- MalfTLP- ECRC- UnsupReq+ ACSViol-
                 UEMsk:  DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- 
UnxCmplt- RxOF- MalfTLP- ECRC- UnsupReq- ACSViol-
                 UESvrt: DLP+ SDES- TLP- FCP+ CmpltTO- CmpltAbrt- 
UnxCmplt- RxOF+ MalfTLP+ ECRC- UnsupReq- ACSViol-
                 CESta:  RxErr- BadTLP- BadDLLP- Rollover- Timeout- 
NonFatalErr-
                 CEMsk:  RxErr- BadTLP- BadDLLP- Rollover- Timeout- 
NonFatalErr-
                 AERCap: First Error Pointer: 14, GenCap+ CGenEn- ChkCap+ 
ChkEn-
         Capabilities: [140 v1] Virtual Channel
                 Caps:   LPEVC=0 RefClk=100ns PATEntryBits=1
                 Arb:    Fixed- WRR32- WRR64- WRR128-
                 Ctrl:   ArbSelect=Fixed
                 Status: InProgress-
                 VC0:    Caps:   PATOffset=00 MaxTimeSlots=1 
RejSnoopTrans-
                         Arb:    Fixed- WRR32- WRR64- WRR128- TWRR128- 
WRR256-
                         Ctrl:   Enable+ ID=0 ArbSelect=Fixed TC/VC=01
                         Status: NegoPending- InProgress-
         Capabilities: [160 v1] Device Serial Number 
00-00-00-00-00-00-00-00
         Kernel driver in use: ath9k
---

---
diff --git a/drivers/net/wireless/ath/ath9k/ar9002_phy.c 
b/drivers/net/wireless/ath/ath9k/ar9002_phy.c
index db66245..fc08162 100644
--- a/drivers/net/wireless/ath/ath9k/ar9002_phy.c
+++ b/drivers/net/wireless/ath/ath9k/ar9002_phy.c
@@ -169,17 +169,29 @@ static void ar9002_hw_spur_mitigate(struct ath_hw 
*ah,
  {
         int bb_spur = AR_NO_SPUR;
         int freq;
-       int bin;
+       int bin, cur_bin;
         int bb_spur_off, spur_subchannel_sd;
         int spur_freq_sd;
         int spur_delta_phase;
         int denominator;
+       int upper, lower, cur_vit_mask;
         int tmp, newVal;
         int i;
+       static const int pilot_mask_reg[4] = {
+               AR_PHY_TIMING7, AR_PHY_TIMING8,
+               AR_PHY_PILOT_MASK_01_30, AR_PHY_PILOT_MASK_31_60
+       };
+       static const int chan_mask_reg[4] = {
+               AR_PHY_TIMING9, AR_PHY_TIMING10,
+               AR_PHY_CHANNEL_MASK_01_30, AR_PHY_CHANNEL_MASK_31_60
+       };
+       static const int inc[4] = { 0, 100, 0, 0 };
         struct chan_centers centers;

         int8_t mask_m[123];
         int8_t mask_p[123];
+       int8_t mask_amt;
+       int tmp_mask;
         int cur_bb_spur;
         bool is2GHz = IS_CHAN_2GHZ(chan);

@@ -276,7 +288,135 @@ static void ar9002_hw_spur_mitigate(struct ath_hw 
*ah,
         newVal = spur_subchannel_sd << AR_PHY_SFCORR_SPUR_SUBCHNL_SD_S;
         REG_WRITE(ah, AR_PHY_SFCORR_EXT, newVal);

-       ar5008_hw_cmn_spur_mitigate(ah, chan, bin);
+       cur_bin = -6000;
+       upper = bin + 100;
+       lower = bin - 100;
+
+       for (i = 0; i < 4; i++) {
+               int pilot_mask = 0;
+               int chan_mask = 0;
+               int bp = 0;
+               for (bp = 0; bp < 30; bp++) {
+                       if ((cur_bin > lower) && (cur_bin < upper)) {
+                               pilot_mask = pilot_mask | 0x1 << bp;
+                               chan_mask = chan_mask | 0x1 << bp;
+                       }
+                       cur_bin += 100;
+               }
+               cur_bin += inc[i];
+               REG_WRITE(ah, pilot_mask_reg[i], pilot_mask);
+               REG_WRITE(ah, chan_mask_reg[i], chan_mask);
+       }
+
+       cur_vit_mask = 6100;
+       upper = bin + 120;
+       lower = bin - 120;
+
+       for (i = 0; i < 123; i++) {
+               if ((cur_vit_mask > lower) && (cur_vit_mask < upper)) {
+
+                       /* workaround for gcc bug #37014 */
+                       volatile int tmp_v = abs(cur_vit_mask - bin);
+
+                       if (tmp_v < 75)
+                               mask_amt = 1;
+                       else
+                               mask_amt = 0;
+                       if (cur_vit_mask < 0)
+                               mask_m[abs(cur_vit_mask / 100)] = 
mask_amt;
+                       else
+                               mask_p[cur_vit_mask / 100] = mask_amt;
+               }
+               cur_vit_mask -= 100;
+       }
+
+       tmp_mask = (mask_m[46] << 30) | (mask_m[47] << 28)
+               | (mask_m[48] << 26) | (mask_m[49] << 24)
+               | (mask_m[50] << 22) | (mask_m[51] << 20)
+               | (mask_m[52] << 18) | (mask_m[53] << 16)
+               | (mask_m[54] << 14) | (mask_m[55] << 12)
+               | (mask_m[56] << 10) | (mask_m[57] << 8)
+               | (mask_m[58] << 6) | (mask_m[59] << 4)
+               | (mask_m[60] << 2) | (mask_m[61] << 0);
+       REG_WRITE(ah, AR_PHY_BIN_MASK_1, tmp_mask);
+       REG_WRITE(ah, AR_PHY_VIT_MASK2_M_46_61, tmp_mask);
+
+       tmp_mask = (mask_m[31] << 28)
+               | (mask_m[32] << 26) | (mask_m[33] << 24)
+               | (mask_m[34] << 22) | (mask_m[35] << 20)
+               | (mask_m[36] << 18) | (mask_m[37] << 16)
+               | (mask_m[48] << 14) | (mask_m[39] << 12)
+               | (mask_m[40] << 10) | (mask_m[41] << 8)
+               | (mask_m[42] << 6) | (mask_m[43] << 4)
+               | (mask_m[44] << 2) | (mask_m[45] << 0);
+       REG_WRITE(ah, AR_PHY_BIN_MASK_2, tmp_mask);
+       REG_WRITE(ah, AR_PHY_MASK2_M_31_45, tmp_mask);
+
+       tmp_mask = (mask_m[16] << 30) | (mask_m[16] << 28)
+               | (mask_m[18] << 26) | (mask_m[18] << 24)
+               | (mask_m[20] << 22) | (mask_m[20] << 20)
+               | (mask_m[22] << 18) | (mask_m[22] << 16)
+               | (mask_m[24] << 14) | (mask_m[24] << 12)
+               | (mask_m[25] << 10) | (mask_m[26] << 8)
+               | (mask_m[27] << 6) | (mask_m[28] << 4)
+               | (mask_m[29] << 2) | (mask_m[30] << 0);
+       REG_WRITE(ah, AR_PHY_BIN_MASK_3, tmp_mask);
+       REG_WRITE(ah, AR_PHY_MASK2_M_16_30, tmp_mask);
+
+       tmp_mask = (mask_m[0] << 30) | (mask_m[1] << 28)
+               | (mask_m[2] << 26) | (mask_m[3] << 24)
+               | (mask_m[4] << 22) | (mask_m[5] << 20)
+               | (mask_m[6] << 18) | (mask_m[7] << 16)
+               | (mask_m[8] << 14) | (mask_m[9] << 12)
+               | (mask_m[10] << 10) | (mask_m[11] << 8)
+               | (mask_m[12] << 6) | (mask_m[13] << 4)
+               | (mask_m[14] << 2) | (mask_m[15] << 0);
+       REG_WRITE(ah, AR_PHY_MASK_CTL, tmp_mask);
+       REG_WRITE(ah, AR_PHY_MASK2_M_00_15, tmp_mask);
+
+       tmp_mask = (mask_p[15] << 28)
+               | (mask_p[14] << 26) | (mask_p[13] << 24)
+               | (mask_p[12] << 22) | (mask_p[11] << 20)
+               | (mask_p[10] << 18) | (mask_p[9] << 16)
+               | (mask_p[8] << 14) | (mask_p[7] << 12)
+               | (mask_p[6] << 10) | (mask_p[5] << 8)
+               | (mask_p[4] << 6) | (mask_p[3] << 4)
+               | (mask_p[2] << 2) | (mask_p[1] << 0);
+       REG_WRITE(ah, AR_PHY_BIN_MASK2_1, tmp_mask);
+       REG_WRITE(ah, AR_PHY_MASK2_P_15_01, tmp_mask);
+
+       tmp_mask = (mask_p[30] << 28)
+               | (mask_p[29] << 26) | (mask_p[28] << 24)
+               | (mask_p[27] << 22) | (mask_p[26] << 20)
+               | (mask_p[25] << 18) | (mask_p[24] << 16)
+               | (mask_p[23] << 14) | (mask_p[22] << 12)
+               | (mask_p[21] << 10) | (mask_p[20] << 8)
+               | (mask_p[19] << 6) | (mask_p[18] << 4)
+               | (mask_p[17] << 2) | (mask_p[16] << 0);
+       REG_WRITE(ah, AR_PHY_BIN_MASK2_2, tmp_mask);
+       REG_WRITE(ah, AR_PHY_MASK2_P_30_16, tmp_mask);
+
+       tmp_mask = (mask_p[45] << 28)
+               | (mask_p[44] << 26) | (mask_p[43] << 24)
+               | (mask_p[42] << 22) | (mask_p[41] << 20)
+               | (mask_p[40] << 18) | (mask_p[39] << 16)
+               | (mask_p[38] << 14) | (mask_p[37] << 12)
+               | (mask_p[36] << 10) | (mask_p[35] << 8)
+               | (mask_p[34] << 6) | (mask_p[33] << 4)
+               | (mask_p[32] << 2) | (mask_p[31] << 0);
+       REG_WRITE(ah, AR_PHY_BIN_MASK2_3, tmp_mask);
+       REG_WRITE(ah, AR_PHY_MASK2_P_45_31, tmp_mask);
+
+       tmp_mask = (mask_p[61] << 30) | (mask_p[60] << 28)
+               | (mask_p[59] << 26) | (mask_p[58] << 24)
+               | (mask_p[57] << 22) | (mask_p[56] << 20)
+               | (mask_p[55] << 18) | (mask_p[54] << 16)
+               | (mask_p[53] << 14) | (mask_p[52] << 12)
+               | (mask_p[51] << 10) | (mask_p[50] << 8)
+               | (mask_p[49] << 6) | (mask_p[48] << 4)
+               | (mask_p[47] << 2) | (mask_p[46] << 0);
+       REG_WRITE(ah, AR_PHY_BIN_MASK2_4, tmp_mask);
+       REG_WRITE(ah, AR_PHY_MASK2_P_61_45, tmp_mask);

         REGWRITE_BUFFER_FLUSH(ah);
  }
---


^ permalink raw reply related	[flat|nested] 21+ messages in thread

* Re: [PATCH] Revert regression in ath9k on AR9281
  2016-04-11  2:28   ` Gustav Frederiksen
@ 2016-04-11 19:04     ` Oleksij Rempel
  2016-04-12  1:53       ` Gustav Frederiksen
  0 siblings, 1 reply; 21+ messages in thread
From: Oleksij Rempel @ 2016-04-11 19:04 UTC (permalink / raw)
  To: Gustav Frederiksen, Julian Calaby; +Cc: linux-wireless


[-- Attachment #1.1.1: Type: text/plain, Size: 271 bytes --]

Hi Gustav,

thank you for your work.
Can you please test attached patch.

Am 11.04.2016 um 04:28 schrieb Gustav Frederiksen:
> Hi,
> thank you for taking the time to answer my previous email and for
> providing those useful tips.
....

-- 
Regards,
Oleksij

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1.1.2: ath_fix.patch --]
[-- Type: text/x-patch; name="ath_fix.patch", Size: 1623 bytes --]

diff --git a/drivers/net/wireless/ath/ath9k/ar5008_phy.c b/drivers/net/wireless/ath/ath9k/ar5008_phy.c
index 8f87930..1b271b9 100644
--- a/drivers/net/wireless/ath/ath9k/ar5008_phy.c
+++ b/drivers/net/wireless/ath/ath9k/ar5008_phy.c
@@ -274,6 +274,9 @@ void ar5008_hw_cmn_spur_mitigate(struct ath_hw *ah,
 	};
 	static const int inc[4] = { 0, 100, 0, 0 };
 
+	memset(&mask_m, 0, sizeof(int8_t) * 123);
+	memset(&mask_p, 0, sizeof(int8_t) * 123);
+
 	cur_bin = -6000;
 	upper = bin + 100;
 	lower = bin - 100;
@@ -424,14 +427,9 @@ static void ar5008_hw_spur_mitigate(struct ath_hw *ah,
 	int tmp, new;
 	int i;
 
-	int8_t mask_m[123];
-	int8_t mask_p[123];
 	int cur_bb_spur;
 	bool is2GHz = IS_CHAN_2GHZ(chan);
 
-	memset(&mask_m, 0, sizeof(int8_t) * 123);
-	memset(&mask_p, 0, sizeof(int8_t) * 123);
-
 	for (i = 0; i < AR_EEPROM_MODAL_SPURS; i++) {
 		cur_bb_spur = ah->eep_ops->get_spur_channel(ah, i, is2GHz);
 		if (AR_NO_SPUR == cur_bb_spur)
diff --git a/drivers/net/wireless/ath/ath9k/ar9002_phy.c b/drivers/net/wireless/ath/ath9k/ar9002_phy.c
index db66245..53d7445 100644
--- a/drivers/net/wireless/ath/ath9k/ar9002_phy.c
+++ b/drivers/net/wireless/ath/ath9k/ar9002_phy.c
@@ -178,14 +178,9 @@ static void ar9002_hw_spur_mitigate(struct ath_hw *ah,
 	int i;
 	struct chan_centers centers;
 
-	int8_t mask_m[123];
-	int8_t mask_p[123];
 	int cur_bb_spur;
 	bool is2GHz = IS_CHAN_2GHZ(chan);
 
-	memset(&mask_m, 0, sizeof(int8_t) * 123);
-	memset(&mask_p, 0, sizeof(int8_t) * 123);
-
 	ath9k_hw_get_channel_centers(ah, chan, &centers);
 	freq = centers.synth_center;
 

[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 213 bytes --]

^ permalink raw reply related	[flat|nested] 21+ messages in thread

* Re: [PATCH] Revert regression in ath9k on AR9281
  2016-04-11 19:04     ` Oleksij Rempel
@ 2016-04-12  1:53       ` Gustav Frederiksen
  2016-04-12 17:37           ` [ath9k-devel] " Oleksij Rempel
  0 siblings, 1 reply; 21+ messages in thread
From: Gustav Frederiksen @ 2016-04-12  1:53 UTC (permalink / raw)
  To: Oleksij Rempel; +Cc: Julian Calaby, linux-wireless

On 2016-04-11 19:04, Oleksij Rempel wrote:
> Hi Gustav,
> 
> thank you for your work.
> Can you please test attached patch.
> 


Hi Oleksij,

this report isn't much, on the other hand you were very quick to come up 
with a patch, well done.
The patch does work as expected. Laptop seems to enjoy its new zero'd 
bitmasks.

Thanks a lot for fixing this.

Regards,
Gustav Frederiksen

---

root@laptop:~# uname -a
Linux ubuntu 4.6.0-rc3-patched #3 SMP Tue Apr 12 01:18:11 UTC 2016 
x86_64 x86_64 x86_64 GNU/Linux


root@laptop:~# wget "http://proof.ovh.net/files/1Gio.dat" -O /dev/null
--2016-04-12 01:24:52--  http://proof.ovh.net/files/1Gio.dat
Resolving proof.ovh.net (proof.ovh.net)... 188.165.12.106, 
2001:41d0:2:876a::1
Connecting to proof.ovh.net (proof.ovh.net)|188.165.12.106|:80... 
connected.
HTTP request sent, awaiting response... 200 OK
Length: 1073741824 (1.0G) [application/octet-stream]
Saving to: '/dev/null'

10% [======>                                                             
        ] 111 327 650 8,27MB/s  eta 1m 55s ^C


root@laptop:~# iw dev wlan0 link
Connected to a4:c7:**:**:**:** (on wlan0)
         SSID: TEST_AP
         freq: 2462
         RX: 305637484 bytes (204447 packets)
         TX: 5724698 bytes (59216 packets)
         signal: -53 dBm
         tx bitrate: 65.0 MBit/s MCS 7

         bss flags:      short-preamble short-slot-time
         dtim period:    1
         beacon int:     400

---


^ permalink raw reply	[flat|nested] 21+ messages in thread

* [PATCH] ath9k: ar5008_hw_cmn_spur_mitigate: add missing mask_m & mask_p initialisation
  2016-04-12  1:53       ` Gustav Frederiksen
@ 2016-04-12 17:37           ` Oleksij Rempel
  0 siblings, 0 replies; 21+ messages in thread
From: Oleksij Rempel @ 2016-04-12 17:37 UTC (permalink / raw)
  To: linux-wireless, ath9k-devel, kvalo, lkml2017; +Cc: Oleksij Rempel

by moving common code to ar5008_hw_cmn_spur_mitigate i forgot to move
mask_m & mask_p initialisation. This coused a performance regression
on ar9281.

Fixes: f911085ffa88 ("ath9k: split ar5008_hw_spur_mitigate and reuse common code in ar9002_hw_spur_mitigate.")
Reported-by: Gustav Frederiksen <lkml2017@openmailbox.org>
Tested-by: Gustav Frederiksen <lkml2017@openmailbox.org>
Signed-off-by: Oleksij Rempel <linux@rempel-privat.de>
---
 drivers/net/wireless/ath/ath9k/ar5008_phy.c | 8 +++-----
 drivers/net/wireless/ath/ath9k/ar9002_phy.c | 5 -----
 2 files changed, 3 insertions(+), 10 deletions(-)

diff --git a/drivers/net/wireless/ath/ath9k/ar5008_phy.c b/drivers/net/wireless/ath/ath9k/ar5008_phy.c
index 8f87930..1b271b9 100644
--- a/drivers/net/wireless/ath/ath9k/ar5008_phy.c
+++ b/drivers/net/wireless/ath/ath9k/ar5008_phy.c
@@ -274,6 +274,9 @@ void ar5008_hw_cmn_spur_mitigate(struct ath_hw *ah,
 	};
 	static const int inc[4] = { 0, 100, 0, 0 };
 
+	memset(&mask_m, 0, sizeof(int8_t) * 123);
+	memset(&mask_p, 0, sizeof(int8_t) * 123);
+
 	cur_bin = -6000;
 	upper = bin + 100;
 	lower = bin - 100;
@@ -424,14 +427,9 @@ static void ar5008_hw_spur_mitigate(struct ath_hw *ah,
 	int tmp, new;
 	int i;
 
-	int8_t mask_m[123];
-	int8_t mask_p[123];
 	int cur_bb_spur;
 	bool is2GHz = IS_CHAN_2GHZ(chan);
 
-	memset(&mask_m, 0, sizeof(int8_t) * 123);
-	memset(&mask_p, 0, sizeof(int8_t) * 123);
-
 	for (i = 0; i < AR_EEPROM_MODAL_SPURS; i++) {
 		cur_bb_spur = ah->eep_ops->get_spur_channel(ah, i, is2GHz);
 		if (AR_NO_SPUR == cur_bb_spur)
diff --git a/drivers/net/wireless/ath/ath9k/ar9002_phy.c b/drivers/net/wireless/ath/ath9k/ar9002_phy.c
index db66245..53d7445 100644
--- a/drivers/net/wireless/ath/ath9k/ar9002_phy.c
+++ b/drivers/net/wireless/ath/ath9k/ar9002_phy.c
@@ -178,14 +178,9 @@ static void ar9002_hw_spur_mitigate(struct ath_hw *ah,
 	int i;
 	struct chan_centers centers;
 
-	int8_t mask_m[123];
-	int8_t mask_p[123];
 	int cur_bb_spur;
 	bool is2GHz = IS_CHAN_2GHZ(chan);
 
-	memset(&mask_m, 0, sizeof(int8_t) * 123);
-	memset(&mask_p, 0, sizeof(int8_t) * 123);
-
 	ath9k_hw_get_channel_centers(ah, chan, &centers);
 	freq = centers.synth_center;
 
-- 
2.5.0


^ permalink raw reply related	[flat|nested] 21+ messages in thread

* [ath9k-devel] [PATCH] ath9k: ar5008_hw_cmn_spur_mitigate: add missing mask_m & mask_p initialisation
@ 2016-04-12 17:37           ` Oleksij Rempel
  0 siblings, 0 replies; 21+ messages in thread
From: Oleksij Rempel @ 2016-04-12 17:37 UTC (permalink / raw)
  To: ath9k-devel

by moving common code to ar5008_hw_cmn_spur_mitigate i forgot to move
mask_m & mask_p initialisation. This coused a performance regression
on ar9281.

Fixes: f911085ffa88 ("ath9k: split ar5008_hw_spur_mitigate and reuse common code in ar9002_hw_spur_mitigate.")
Reported-by: Gustav Frederiksen <lkml2017@openmailbox.org>
Tested-by: Gustav Frederiksen <lkml2017@openmailbox.org>
Signed-off-by: Oleksij Rempel <linux@rempel-privat.de>
---
 drivers/net/wireless/ath/ath9k/ar5008_phy.c | 8 +++-----
 drivers/net/wireless/ath/ath9k/ar9002_phy.c | 5 -----
 2 files changed, 3 insertions(+), 10 deletions(-)

diff --git a/drivers/net/wireless/ath/ath9k/ar5008_phy.c b/drivers/net/wireless/ath/ath9k/ar5008_phy.c
index 8f87930..1b271b9 100644
--- a/drivers/net/wireless/ath/ath9k/ar5008_phy.c
+++ b/drivers/net/wireless/ath/ath9k/ar5008_phy.c
@@ -274,6 +274,9 @@ void ar5008_hw_cmn_spur_mitigate(struct ath_hw *ah,
 	};
 	static const int inc[4] = { 0, 100, 0, 0 };
 
+	memset(&mask_m, 0, sizeof(int8_t) * 123);
+	memset(&mask_p, 0, sizeof(int8_t) * 123);
+
 	cur_bin = -6000;
 	upper = bin + 100;
 	lower = bin - 100;
@@ -424,14 +427,9 @@ static void ar5008_hw_spur_mitigate(struct ath_hw *ah,
 	int tmp, new;
 	int i;
 
-	int8_t mask_m[123];
-	int8_t mask_p[123];
 	int cur_bb_spur;
 	bool is2GHz = IS_CHAN_2GHZ(chan);
 
-	memset(&mask_m, 0, sizeof(int8_t) * 123);
-	memset(&mask_p, 0, sizeof(int8_t) * 123);
-
 	for (i = 0; i < AR_EEPROM_MODAL_SPURS; i++) {
 		cur_bb_spur = ah->eep_ops->get_spur_channel(ah, i, is2GHz);
 		if (AR_NO_SPUR == cur_bb_spur)
diff --git a/drivers/net/wireless/ath/ath9k/ar9002_phy.c b/drivers/net/wireless/ath/ath9k/ar9002_phy.c
index db66245..53d7445 100644
--- a/drivers/net/wireless/ath/ath9k/ar9002_phy.c
+++ b/drivers/net/wireless/ath/ath9k/ar9002_phy.c
@@ -178,14 +178,9 @@ static void ar9002_hw_spur_mitigate(struct ath_hw *ah,
 	int i;
 	struct chan_centers centers;
 
-	int8_t mask_m[123];
-	int8_t mask_p[123];
 	int cur_bb_spur;
 	bool is2GHz = IS_CHAN_2GHZ(chan);
 
-	memset(&mask_m, 0, sizeof(int8_t) * 123);
-	memset(&mask_p, 0, sizeof(int8_t) * 123);
-
 	ath9k_hw_get_channel_centers(ah, chan, &centers);
 	freq = centers.synth_center;
 
-- 
2.5.0

^ permalink raw reply related	[flat|nested] 21+ messages in thread

* Re: [PATCH] ath9k: ar5008_hw_cmn_spur_mitigate: add missing mask_m & mask_p initialisation
  2016-04-12 17:37           ` [ath9k-devel] " Oleksij Rempel
@ 2016-04-13  9:41             ` Kalle Valo
  -1 siblings, 0 replies; 21+ messages in thread
From: Kalle Valo @ 2016-04-13  9:41 UTC (permalink / raw)
  To: Oleksij Rempel; +Cc: linux-wireless, ath9k-devel, lkml2017

Oleksij Rempel <linux@rempel-privat.de> writes:

> by moving common code to ar5008_hw_cmn_spur_mitigate i forgot to move
> mask_m & mask_p initialisation. This coused a performance regression
> on ar9281.
>
> Fixes: f911085ffa88 ("ath9k: split ar5008_hw_spur_mitigate and reuse common code in ar9002_hw_spur_mitigate.")
> Reported-by: Gustav Frederiksen <lkml2017@openmailbox.org>
> Tested-by: Gustav Frederiksen <lkml2017@openmailbox.org>
> Signed-off-by: Oleksij Rempel <linux@rempel-privat.de>

If no objections I'm planning to send this to 4.6.

-- 
Kalle Valo

^ permalink raw reply	[flat|nested] 21+ messages in thread

* [ath9k-devel] [PATCH] ath9k: ar5008_hw_cmn_spur_mitigate: add missing mask_m & mask_p initialisation
@ 2016-04-13  9:41             ` Kalle Valo
  0 siblings, 0 replies; 21+ messages in thread
From: Kalle Valo @ 2016-04-13  9:41 UTC (permalink / raw)
  To: ath9k-devel

Oleksij Rempel <linux@rempel-privat.de> writes:

> by moving common code to ar5008_hw_cmn_spur_mitigate i forgot to move
> mask_m & mask_p initialisation. This coused a performance regression
> on ar9281.
>
> Fixes: f911085ffa88 ("ath9k: split ar5008_hw_spur_mitigate and reuse common code in ar9002_hw_spur_mitigate.")
> Reported-by: Gustav Frederiksen <lkml2017@openmailbox.org>
> Tested-by: Gustav Frederiksen <lkml2017@openmailbox.org>
> Signed-off-by: Oleksij Rempel <linux@rempel-privat.de>

If no objections I'm planning to send this to 4.6.

-- 
Kalle Valo

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH] ath9k: ar5008_hw_cmn_spur_mitigate: add missing mask_m & mask_p initialisation
  2016-04-13  9:41             ` [ath9k-devel] " Kalle Valo
@ 2016-04-13  9:45               ` Kalle Valo
  -1 siblings, 0 replies; 21+ messages in thread
From: Kalle Valo @ 2016-04-13  9:45 UTC (permalink / raw)
  To: Oleksij Rempel; +Cc: linux-wireless, ath9k-devel, lkml2017

Kalle Valo <kvalo@codeaurora.org> writes:

> Oleksij Rempel <linux@rempel-privat.de> writes:
>
>> by moving common code to ar5008_hw_cmn_spur_mitigate i forgot to move
>> mask_m & mask_p initialisation. This coused a performance regression
>> on ar9281.
>>
>> Fixes: f911085ffa88 ("ath9k: split ar5008_hw_spur_mitigate and reuse common code in ar9002_hw_spur_mitigate.")
>> Reported-by: Gustav Frederiksen <lkml2017@openmailbox.org>
>> Tested-by: Gustav Frederiksen <lkml2017@openmailbox.org>
>> Signed-off-by: Oleksij Rempel <linux@rempel-privat.de>
>
> If no objections I'm planning to send this to 4.6.

Should we also CC stable (4.2+)? I can add that before I commit the
patch.

-- 
Kalle Valo

^ permalink raw reply	[flat|nested] 21+ messages in thread

* [ath9k-devel] [PATCH] ath9k: ar5008_hw_cmn_spur_mitigate: add missing mask_m & mask_p initialisation
@ 2016-04-13  9:45               ` Kalle Valo
  0 siblings, 0 replies; 21+ messages in thread
From: Kalle Valo @ 2016-04-13  9:45 UTC (permalink / raw)
  To: ath9k-devel

Kalle Valo <kvalo@codeaurora.org> writes:

> Oleksij Rempel <linux@rempel-privat.de> writes:
>
>> by moving common code to ar5008_hw_cmn_spur_mitigate i forgot to move
>> mask_m & mask_p initialisation. This coused a performance regression
>> on ar9281.
>>
>> Fixes: f911085ffa88 ("ath9k: split ar5008_hw_spur_mitigate and reuse common code in ar9002_hw_spur_mitigate.")
>> Reported-by: Gustav Frederiksen <lkml2017@openmailbox.org>
>> Tested-by: Gustav Frederiksen <lkml2017@openmailbox.org>
>> Signed-off-by: Oleksij Rempel <linux@rempel-privat.de>
>
> If no objections I'm planning to send this to 4.6.

Should we also CC stable (4.2+)? I can add that before I commit the
patch.

-- 
Kalle Valo

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH] ath9k: ar5008_hw_cmn_spur_mitigate: add missing mask_m & mask_p initialisation
  2016-04-13  9:45               ` [ath9k-devel] " Kalle Valo
@ 2016-04-13 16:45                 ` Oleksij Rempel
  -1 siblings, 0 replies; 21+ messages in thread
From: Oleksij Rempel @ 2016-04-13 16:45 UTC (permalink / raw)
  To: Kalle Valo; +Cc: linux-wireless, ath9k-devel, lkml2017


[-- Attachment #1.1: Type: text/plain, Size: 825 bytes --]

Am 13.04.2016 um 11:45 schrieb Kalle Valo:
> Kalle Valo <kvalo@codeaurora.org> writes:
> 
>> Oleksij Rempel <linux@rempel-privat.de> writes:
>>
>>> by moving common code to ar5008_hw_cmn_spur_mitigate i forgot to move
>>> mask_m & mask_p initialisation. This coused a performance regression
>>> on ar9281.
>>>
>>> Fixes: f911085ffa88 ("ath9k: split ar5008_hw_spur_mitigate and reuse common code in ar9002_hw_spur_mitigate.")
>>> Reported-by: Gustav Frederiksen <lkml2017@openmailbox.org>
>>> Tested-by: Gustav Frederiksen <lkml2017@openmailbox.org>
>>> Signed-off-by: Oleksij Rempel <linux@rempel-privat.de>
>>
>> If no objections I'm planning to send this to 4.6.
> 
> Should we also CC stable (4.2+)? I can add that before I commit the
> patch.
> 

Yes, please.
Thank you.

-- 
Regards,
Oleksij


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 213 bytes --]

^ permalink raw reply	[flat|nested] 21+ messages in thread

* [ath9k-devel] [PATCH] ath9k: ar5008_hw_cmn_spur_mitigate: add missing mask_m & mask_p initialisation
@ 2016-04-13 16:45                 ` Oleksij Rempel
  0 siblings, 0 replies; 21+ messages in thread
From: Oleksij Rempel @ 2016-04-13 16:45 UTC (permalink / raw)
  To: ath9k-devel

Am 13.04.2016 um 11:45 schrieb Kalle Valo:
> Kalle Valo <kvalo@codeaurora.org> writes:
> 
>> Oleksij Rempel <linux@rempel-privat.de> writes:
>>
>>> by moving common code to ar5008_hw_cmn_spur_mitigate i forgot to move
>>> mask_m & mask_p initialisation. This coused a performance regression
>>> on ar9281.
>>>
>>> Fixes: f911085ffa88 ("ath9k: split ar5008_hw_spur_mitigate and reuse common code in ar9002_hw_spur_mitigate.")
>>> Reported-by: Gustav Frederiksen <lkml2017@openmailbox.org>
>>> Tested-by: Gustav Frederiksen <lkml2017@openmailbox.org>
>>> Signed-off-by: Oleksij Rempel <linux@rempel-privat.de>
>>
>> If no objections I'm planning to send this to 4.6.
> 
> Should we also CC stable (4.2+)? I can add that before I commit the
> patch.
> 

Yes, please.
Thank you.

-- 
Regards,
Oleksij

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 213 bytes
Desc: OpenPGP digital signature
Url : http://lists.ath9k.org/pipermail/ath9k-devel/attachments/20160413/37abbfd1/attachment.pgp 

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: ath9k: ar5008_hw_cmn_spur_mitigate: add missing mask_m & mask_pinitialisation
  2016-04-12 17:37           ` [ath9k-devel] " Oleksij Rempel
  (?)
  (?)
@ 2016-04-15 18:05           ` Kalle Valo
  -1 siblings, 0 replies; 21+ messages in thread
From: Kalle Valo @ 2016-04-15 18:05 UTC (permalink / raw)
  To: Oleksij Rempel; +Cc: linux-wireless, ath9k-devel, lkml2017, Oleksij Rempel


> by moving common code to ar5008_hw_cmn_spur_mitigate i forgot to move
> mask_m & mask_p initialisation. This coused a performance regression
> on ar9281.
> 
> Fixes: f911085ffa88 ("ath9k: split ar5008_hw_spur_mitigate and reuse common code in ar9002_hw_spur_mitigate.")
> Reported-by: Gustav Frederiksen <lkml2017@openmailbox.org>
> Tested-by: Gustav Frederiksen <lkml2017@openmailbox.org>
> Cc: <stable@vger.kernel.org> # 4.2+
> Signed-off-by: Oleksij Rempel <linux@rempel-privat.de>

Thanks, applied to wireless-drivers.git.

Kalle Valo

^ permalink raw reply	[flat|nested] 21+ messages in thread

* [ath9k-devel] ath9k: ar5008_hw_cmn_spur_mitigate: add missing mask_m & mask_pinitialisation
  2016-04-12 17:37           ` [ath9k-devel] " Oleksij Rempel
                             ` (2 preceding siblings ...)
  (?)
@ 2016-04-15 18:05           ` Kalle Valo
  -1 siblings, 0 replies; 21+ messages in thread
From: Kalle Valo @ 2016-04-15 18:05 UTC (permalink / raw)
  To: ath9k-devel


> by moving common code to ar5008_hw_cmn_spur_mitigate i forgot to move
> mask_m & mask_p initialisation. This coused a performance regression
> on ar9281.
> 
> Fixes: f911085ffa88 ("ath9k: split ar5008_hw_spur_mitigate and reuse common code in ar9002_hw_spur_mitigate.")
> Reported-by: Gustav Frederiksen <lkml2017@openmailbox.org>
> Tested-by: Gustav Frederiksen <lkml2017@openmailbox.org>
> Cc: <stable@vger.kernel.org> # 4.2+
> Signed-off-by: Oleksij Rempel <linux@rempel-privat.de>

Thanks, applied to wireless-drivers.git.

Kalle Valo

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH] ath9k: ar5008_hw_cmn_spur_mitigate: add missing mask_m & mask_p initialisation
  2016-04-12 17:37           ` [ath9k-devel] " Oleksij Rempel
@ 2016-04-15 20:59             ` Bob Copeland
  -1 siblings, 0 replies; 21+ messages in thread
From: Bob Copeland @ 2016-04-15 20:59 UTC (permalink / raw)
  To: Oleksij Rempel; +Cc: linux-wireless, ath9k-devel, kvalo, lkml2017

On Tue, Apr 12, 2016 at 07:37:44PM +0200, Oleksij Rempel wrote:
> by moving common code to ar5008_hw_cmn_spur_mitigate i forgot to move
> mask_m & mask_p initialisation. This coused a performance regression
> on ar9281.
> 
> Fixes: f911085ffa88 ("ath9k: split ar5008_hw_spur_mitigate and reuse common code in ar9002_hw_spur_mitigate.")
> Reported-by: Gustav Frederiksen <lkml2017@openmailbox.org>
> Tested-by: Gustav Frederiksen <lkml2017@openmailbox.org>
> Signed-off-by: Oleksij Rempel <linux@rempel-privat.de>
> ---
>  drivers/net/wireless/ath/ath9k/ar5008_phy.c | 8 +++-----
>  drivers/net/wireless/ath/ath9k/ar9002_phy.c | 5 -----
>  2 files changed, 3 insertions(+), 10 deletions(-)
> 
> diff --git a/drivers/net/wireless/ath/ath9k/ar5008_phy.c b/drivers/net/wireless/ath/ath9k/ar5008_phy.c
> index 8f87930..1b271b9 100644
> --- a/drivers/net/wireless/ath/ath9k/ar5008_phy.c
> +++ b/drivers/net/wireless/ath/ath9k/ar5008_phy.c
> @@ -274,6 +274,9 @@ void ar5008_hw_cmn_spur_mitigate(struct ath_hw *ah,
>  	};
>  	static const int inc[4] = { 0, 100, 0, 0 };
>  
> +	memset(&mask_m, 0, sizeof(int8_t) * 123);
> +	memset(&mask_p, 0, sizeof(int8_t) * 123);
> +

For a future patch, "sizeof(mask_m)" or even just:

    u8 mask_m[123] = {0};

... would be better here.  I looked at this bit and thought, no way is
"123" actually correct.  Lo and behold, that is actually the number of
array elements, whether that has a basis in something real or not :)

-- 
Bob Copeland %% http://bobcopeland.com/

^ permalink raw reply	[flat|nested] 21+ messages in thread

* [ath9k-devel] [PATCH] ath9k: ar5008_hw_cmn_spur_mitigate: add missing mask_m & mask_p initialisation
@ 2016-04-15 20:59             ` Bob Copeland
  0 siblings, 0 replies; 21+ messages in thread
From: Bob Copeland @ 2016-04-15 20:59 UTC (permalink / raw)
  To: ath9k-devel

On Tue, Apr 12, 2016 at 07:37:44PM +0200, Oleksij Rempel wrote:
> by moving common code to ar5008_hw_cmn_spur_mitigate i forgot to move
> mask_m & mask_p initialisation. This coused a performance regression
> on ar9281.
> 
> Fixes: f911085ffa88 ("ath9k: split ar5008_hw_spur_mitigate and reuse common code in ar9002_hw_spur_mitigate.")
> Reported-by: Gustav Frederiksen <lkml2017@openmailbox.org>
> Tested-by: Gustav Frederiksen <lkml2017@openmailbox.org>
> Signed-off-by: Oleksij Rempel <linux@rempel-privat.de>
> ---
>  drivers/net/wireless/ath/ath9k/ar5008_phy.c | 8 +++-----
>  drivers/net/wireless/ath/ath9k/ar9002_phy.c | 5 -----
>  2 files changed, 3 insertions(+), 10 deletions(-)
> 
> diff --git a/drivers/net/wireless/ath/ath9k/ar5008_phy.c b/drivers/net/wireless/ath/ath9k/ar5008_phy.c
> index 8f87930..1b271b9 100644
> --- a/drivers/net/wireless/ath/ath9k/ar5008_phy.c
> +++ b/drivers/net/wireless/ath/ath9k/ar5008_phy.c
> @@ -274,6 +274,9 @@ void ar5008_hw_cmn_spur_mitigate(struct ath_hw *ah,
>  	};
>  	static const int inc[4] = { 0, 100, 0, 0 };
>  
> +	memset(&mask_m, 0, sizeof(int8_t) * 123);
> +	memset(&mask_p, 0, sizeof(int8_t) * 123);
> +

For a future patch, "sizeof(mask_m)" or even just:

    u8 mask_m[123] = {0};

... would be better here.  I looked at this bit and thought, no way is
"123" actually correct.  Lo and behold, that is actually the number of
array elements, whether that has a basis in something real or not :)

-- 
Bob Copeland %% http://bobcopeland.com/

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH] ath9k: ar5008_hw_cmn_spur_mitigate: add missing mask_m & mask_p initialisation
  2016-04-15 20:59             ` [ath9k-devel] " Bob Copeland
@ 2016-04-16  6:01               ` Oleksij Rempel
  -1 siblings, 0 replies; 21+ messages in thread
From: Oleksij Rempel @ 2016-04-16  6:01 UTC (permalink / raw)
  To: Bob Copeland; +Cc: linux-wireless, ath9k-devel, kvalo, lkml2017


[-- Attachment #1.1: Type: text/plain, Size: 1721 bytes --]

Am 15.04.2016 um 22:59 schrieb Bob Copeland:
> On Tue, Apr 12, 2016 at 07:37:44PM +0200, Oleksij Rempel wrote:
>> by moving common code to ar5008_hw_cmn_spur_mitigate i forgot to move
>> mask_m & mask_p initialisation. This coused a performance regression
>> on ar9281.
>>
>> Fixes: f911085ffa88 ("ath9k: split ar5008_hw_spur_mitigate and reuse common code in ar9002_hw_spur_mitigate.")
>> Reported-by: Gustav Frederiksen <lkml2017@openmailbox.org>
>> Tested-by: Gustav Frederiksen <lkml2017@openmailbox.org>
>> Signed-off-by: Oleksij Rempel <linux@rempel-privat.de>
>> ---
>>  drivers/net/wireless/ath/ath9k/ar5008_phy.c | 8 +++-----
>>  drivers/net/wireless/ath/ath9k/ar9002_phy.c | 5 -----
>>  2 files changed, 3 insertions(+), 10 deletions(-)
>>
>> diff --git a/drivers/net/wireless/ath/ath9k/ar5008_phy.c b/drivers/net/wireless/ath/ath9k/ar5008_phy.c
>> index 8f87930..1b271b9 100644
>> --- a/drivers/net/wireless/ath/ath9k/ar5008_phy.c
>> +++ b/drivers/net/wireless/ath/ath9k/ar5008_phy.c
>> @@ -274,6 +274,9 @@ void ar5008_hw_cmn_spur_mitigate(struct ath_hw *ah,
>>  	};
>>  	static const int inc[4] = { 0, 100, 0, 0 };
>>  
>> +	memset(&mask_m, 0, sizeof(int8_t) * 123);
>> +	memset(&mask_p, 0, sizeof(int8_t) * 123);
>> +
> 
> For a future patch, "sizeof(mask_m)" or even just:
> 
>     u8 mask_m[123] = {0};
> 
> ... would be better here.  I looked at this bit and thought, no way is
> "123" actually correct.  Lo and behold, that is actually the number of
> array elements, whether that has a basis in something real or not :)

If you already on it can you please rework it on top of this patch?
This complete function can be probably reworked.

-- 
Regards,
Oleksij


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 213 bytes --]

^ permalink raw reply	[flat|nested] 21+ messages in thread

* [ath9k-devel] [PATCH] ath9k: ar5008_hw_cmn_spur_mitigate: add missing mask_m & mask_p initialisation
@ 2016-04-16  6:01               ` Oleksij Rempel
  0 siblings, 0 replies; 21+ messages in thread
From: Oleksij Rempel @ 2016-04-16  6:01 UTC (permalink / raw)
  To: ath9k-devel

Am 15.04.2016 um 22:59 schrieb Bob Copeland:
> On Tue, Apr 12, 2016 at 07:37:44PM +0200, Oleksij Rempel wrote:
>> by moving common code to ar5008_hw_cmn_spur_mitigate i forgot to move
>> mask_m & mask_p initialisation. This coused a performance regression
>> on ar9281.
>>
>> Fixes: f911085ffa88 ("ath9k: split ar5008_hw_spur_mitigate and reuse common code in ar9002_hw_spur_mitigate.")
>> Reported-by: Gustav Frederiksen <lkml2017@openmailbox.org>
>> Tested-by: Gustav Frederiksen <lkml2017@openmailbox.org>
>> Signed-off-by: Oleksij Rempel <linux@rempel-privat.de>
>> ---
>>  drivers/net/wireless/ath/ath9k/ar5008_phy.c | 8 +++-----
>>  drivers/net/wireless/ath/ath9k/ar9002_phy.c | 5 -----
>>  2 files changed, 3 insertions(+), 10 deletions(-)
>>
>> diff --git a/drivers/net/wireless/ath/ath9k/ar5008_phy.c b/drivers/net/wireless/ath/ath9k/ar5008_phy.c
>> index 8f87930..1b271b9 100644
>> --- a/drivers/net/wireless/ath/ath9k/ar5008_phy.c
>> +++ b/drivers/net/wireless/ath/ath9k/ar5008_phy.c
>> @@ -274,6 +274,9 @@ void ar5008_hw_cmn_spur_mitigate(struct ath_hw *ah,
>>  	};
>>  	static const int inc[4] = { 0, 100, 0, 0 };
>>  
>> +	memset(&mask_m, 0, sizeof(int8_t) * 123);
>> +	memset(&mask_p, 0, sizeof(int8_t) * 123);
>> +
> 
> For a future patch, "sizeof(mask_m)" or even just:
> 
>     u8 mask_m[123] = {0};
> 
> ... would be better here.  I looked at this bit and thought, no way is
> "123" actually correct.  Lo and behold, that is actually the number of
> array elements, whether that has a basis in something real or not :)

If you already on it can you please rework it on top of this patch?
This complete function can be probably reworked.

-- 
Regards,
Oleksij

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 213 bytes
Desc: OpenPGP digital signature
Url : http://lists.ath9k.org/pipermail/ath9k-devel/attachments/20160416/bc3401c0/attachment.pgp 

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH] ath9k: ar5008_hw_cmn_spur_mitigate: add missing mask_m & mask_p initialisation
  2016-04-16  6:01               ` [ath9k-devel] " Oleksij Rempel
@ 2016-04-16 14:53                 ` Bob Copeland
  -1 siblings, 0 replies; 21+ messages in thread
From: Bob Copeland @ 2016-04-16 14:53 UTC (permalink / raw)
  To: Oleksij Rempel; +Cc: linux-wireless, ath9k-devel, kvalo, lkml2017

On Sat, Apr 16, 2016 at 08:01:59AM +0200, Oleksij Rempel wrote:
> > For a future patch, "sizeof(mask_m)" or even just:
> > 
> >     u8 mask_m[123] = {0};
> > 
> > ... would be better here.  I looked at this bit and thought, no way is
> > "123" actually correct.  Lo and behold, that is actually the number of
> > array elements, whether that has a basis in something real or not :)
> 
> If you already on it can you please rework it on top of this patch?
> This complete function can be probably reworked.

I wasn't on it, but yeah I'll send a patch on top of this momentarily :)

-- 
Bob Copeland %% http://bobcopeland.com/

^ permalink raw reply	[flat|nested] 21+ messages in thread

* [ath9k-devel] [PATCH] ath9k: ar5008_hw_cmn_spur_mitigate: add missing mask_m & mask_p initialisation
@ 2016-04-16 14:53                 ` Bob Copeland
  0 siblings, 0 replies; 21+ messages in thread
From: Bob Copeland @ 2016-04-16 14:53 UTC (permalink / raw)
  To: ath9k-devel

On Sat, Apr 16, 2016 at 08:01:59AM +0200, Oleksij Rempel wrote:
> > For a future patch, "sizeof(mask_m)" or even just:
> > 
> >     u8 mask_m[123] = {0};
> > 
> > ... would be better here.  I looked at this bit and thought, no way is
> > "123" actually correct.  Lo and behold, that is actually the number of
> > array elements, whether that has a basis in something real or not :)
> 
> If you already on it can you please rework it on top of this patch?
> This complete function can be probably reworked.

I wasn't on it, but yeah I'll send a patch on top of this momentarily :)

-- 
Bob Copeland %% http://bobcopeland.com/

^ permalink raw reply	[flat|nested] 21+ messages in thread

end of thread, other threads:[~2016-04-16 14:53 UTC | newest]

Thread overview: 21+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-04-07 22:24 [PATCH] Revert regression in ath9k on AR9281 lkml2017
2016-04-08  0:53 ` Julian Calaby
2016-04-11  2:28   ` Gustav Frederiksen
2016-04-11 19:04     ` Oleksij Rempel
2016-04-12  1:53       ` Gustav Frederiksen
2016-04-12 17:37         ` [PATCH] ath9k: ar5008_hw_cmn_spur_mitigate: add missing mask_m & mask_p initialisation Oleksij Rempel
2016-04-12 17:37           ` [ath9k-devel] " Oleksij Rempel
2016-04-13  9:41           ` Kalle Valo
2016-04-13  9:41             ` [ath9k-devel] " Kalle Valo
2016-04-13  9:45             ` Kalle Valo
2016-04-13  9:45               ` [ath9k-devel] " Kalle Valo
2016-04-13 16:45               ` Oleksij Rempel
2016-04-13 16:45                 ` [ath9k-devel] " Oleksij Rempel
2016-04-15 18:05           ` ath9k: ar5008_hw_cmn_spur_mitigate: add missing mask_m & mask_pinitialisation Kalle Valo
2016-04-15 18:05           ` [ath9k-devel] " Kalle Valo
2016-04-15 20:59           ` [PATCH] ath9k: ar5008_hw_cmn_spur_mitigate: add missing mask_m & mask_p initialisation Bob Copeland
2016-04-15 20:59             ` [ath9k-devel] " Bob Copeland
2016-04-16  6:01             ` Oleksij Rempel
2016-04-16  6:01               ` [ath9k-devel] " Oleksij Rempel
2016-04-16 14:53               ` Bob Copeland
2016-04-16 14:53                 ` [ath9k-devel] " Bob Copeland

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.