Search Linux Wireless

Re: [PATCH 12/13] iwlwifi: mvm: rs: overhaul search cycle state machine

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

 



On Tue, Jan 7, 2014 at 12:27 PM, Karl Beldan <karl.beldan@xxxxxxxxx> wrote:
> On Mon, Jan 06, 2014 at 08:04:03PM +0200, Eyal Shapira wrote:
>> On Mon, Jan 6, 2014 at 5:07 PM, Karl Beldan <karl.beldan@xxxxxxxxx> wrote:
>> > On Mon, Dec 02, 2013 at 10:59:24PM +0200, Emmanuel Grumbach wrote:
>> >> From: Eyal Shapira <eyal@xxxxxxxxxx>
>> >>
>> >> Rewrite the search cycle state machine to use a more data
>> >> oriented approach where the different Tx columns (configs)
>> >> limitations and next columns to search are reprsented in
>> >> tables which are easy to change. This overhaul also includes
>> >> several major fixes:
>> >>
>> >> 1. Prevent going back to a specific Tx column in a search
>> >> cycle if it was already explored.
>> >>
>> >> 2. Avoid switching to a Tx column that doesn't have any chance
>> >> if it performs perfectly to beat the current throughput we're
>> >> getting.
>> >>
>> >> These issues were degrading throughput as they were causing
>> >> switching to "bad" Tx columns.
>> >>
>> >> Signed-off-by: Eyal Shapira <eyal@xxxxxxxxxx>
>> >> Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@xxxxxxxxx>
>> >> ---
>> >>  drivers/net/wireless/iwlwifi/mvm/rs.c |  921 +++++++++++++++------------------
>> >>  drivers/net/wireless/iwlwifi/mvm/rs.h |   64 +--
>> >>  2 files changed, 458 insertions(+), 527 deletions(-)
>> >>
>> >> @@ -1772,7 +1712,7 @@ static void rs_rate_scale_perform(struct iwl_mvm *mvm,
>> > [...]
>> >> -     if (done_search && !lq_sta->stay_in_tbl) {
>> >> +     if (done_search && lq_sta->rs_state == RS_STATE_SEARCH_CYCLE_ENDED) {
>> >>               /* If the "active" (non-search) mode was legacy,
>> > [...]
>> >
>> > Hi,
>> >
>> > Trying -testing right now on my laptop and this commit broke aggregation.
>> >
>>
>> Thanks Karl for the report.
>> I'm seeing Tx aggregation. Note that it doesn't start off immediately
>> but only after enough traffic went through for us to explore different
>> Tx configurations.
>>
>> Some questions:
>> 1. How do you see aggregation is broken ? sniffer or just lower
>> throughput you're getting ?
> It doesn't send any addBA action frame and traffic is not aggregated.
>
>> 2. What's the chip ?
> AC 7260, REV=0x144
>
>> 3. Do you connect in 11n or 11ac ?
> Tried both
>
>> 4. Any chance you can set module parameter debug=0x04100000 and send the logs ?
>> Configuring IWLWIFI_DEBUG is required.
> Here you are.
>

Thanks. Seems like we decided the AP doesn't support any MIMO rates.
This wasn't handled well and caused the search cycle for an optimal Tx
configuration to get stuck.
Can you try the attached patch ?

Also, any chance you can send a traffic capture of some beacons and the assoc ?
I'd like to understand why we come to the conclusion no MIMO is supported.

Thanks,
Eyal
From 9e1f12500a658ed38004eec0d89f0ec8beaf9a86 Mon Sep 17 00:00:00 2001
From: Eyal Shapira <eyal@xxxxxxxxxx>
Date: Tue, 7 Jan 2014 18:19:35 +0200
Subject: [PATCH] iwlwifi: mvm: rs: fix handling of column switch error

If we can't switch to a column because no rates are supported
in that column this led to a state where the search cycle
got stuck and never ended. This in turn also led to aggregation
not being turned on. Fix this by marking a column as
visited if we can't switch to it.

Change-Id: I98fd0303d043a53ec557d1f7044ff3991ee7b481
Reported-by: Karl Beldan <karl.beldan@xxxxxxxxx>
Signed-off-by: Eyal Shapira <eyalx.shapira@xxxxxxxxx>
---
 drivers/net/wireless/iwlwifi/mvm/rs.c |    3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/net/wireless/iwlwifi/mvm/rs.c b/drivers/net/wireless/iwlwifi/mvm/rs.c
index 9e1586b..5c36273 100644
--- a/drivers/net/wireless/iwlwifi/mvm/rs.c
+++ b/drivers/net/wireless/iwlwifi/mvm/rs.c
@@ -1588,6 +1588,8 @@ static int rs_switch_to_column(struct iwl_mvm *mvm,
 	search_tbl->column = col_id;
 	rs_set_expected_tpt_table(lq_sta, search_tbl);
 
+	lq_sta->visited_columns |= BIT(col_id);
+
 	/* Get the best matching rate if we're changing modes. e.g.
 	 * SISO->MIMO, LEGACY->SISO, MIMO->SISO
 	 */
@@ -1611,7 +1613,6 @@ static int rs_switch_to_column(struct iwl_mvm *mvm,
 	IWL_DEBUG_RATE(mvm, "Switched to column %d: Index %d\n",
 		       col_id, rate->index);
 
-	lq_sta->visited_columns |= BIT(col_id);
 	return 0;
 
 err:
-- 
1.7.10.4


[Index of Archives]     [Linux Host AP]     [ATH6KL]     [Linux Wireless Personal Area Network]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [Linux Kernel]     [IDE]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite Hiking]     [MIPS Linux]     [ARM Linux]     [Linux RAID]

  Powered by Linux