2013-03-25 15:40:13

by Jonas Gorski

[permalink] [raw]
Subject: [PATCH] mwl8k: always apply configuration even when device is idle

Fix settings not being applied when the device is idle and the firmware
gets reloaded (because of changing from STA to AP mode). This caused
the device using the wrong channel (and likely band), e.g. a 5 GHz only
card still defaulted to channel 6 in the 2.4 GHz band when left
unconfigured.

This issue was always present, but only made visible with "mwl8k: Do not
call mwl8k_cmd_set_rf_channel unconditionally" (0f4316b9), since before
that the channel was (re-)configured at the next _config call even when
it did not change from the mac80211 perspective.

Signed-off-by: Jonas Gorski <[email protected]>
---
drivers/net/wireless/mwl8k.c | 10 ++++------
1 file changed, 4 insertions(+), 6 deletions(-)

diff --git a/drivers/net/wireless/mwl8k.c b/drivers/net/wireless/mwl8k.c
index 0640e7d..956c108 100644
--- a/drivers/net/wireless/mwl8k.c
+++ b/drivers/net/wireless/mwl8k.c
@@ -4807,16 +4807,14 @@ static int mwl8k_config(struct ieee80211_hw *hw, u32 changed)
struct mwl8k_priv *priv = hw->priv;
int rc;

- if (conf->flags & IEEE80211_CONF_IDLE) {
- mwl8k_cmd_radio_disable(hw);
- return 0;
- }
-
rc = mwl8k_fw_lock(hw);
if (rc)
return rc;

- rc = mwl8k_cmd_radio_enable(hw);
+ if (conf->flags & IEEE80211_CONF_IDLE)
+ rc = mwl8k_cmd_radio_disable(hw);
+ else
+ rc = mwl8k_cmd_radio_enable(hw);
if (rc)
goto out;

--
1.7.10.4



2013-03-25 16:15:36

by Jonas Gorski

[permalink] [raw]
Subject: Re: [PATCH] mwl8k: always apply configuration even when device is idle

On 25 March 2013 16:49, Johannes Berg <[email protected]> wrote:
> On Mon, 2013-03-25 at 16:39 +0100, Jonas Gorski wrote:
>> Fix settings not being applied when the device is idle and the firmware
>> gets reloaded (because of changing from STA to AP mode). This caused
>> the device using the wrong channel (and likely band), e.g. a 5 GHz only
>> card still defaulted to channel 6 in the 2.4 GHz band when left
>> unconfigured.
>>
>> This issue was always present, but only made visible with "mwl8k: Do not
>> call mwl8k_cmd_set_rf_channel unconditionally" (0f4316b9), since before
>> that the channel was (re-)configured at the next _config call even when
>> it did not change from the mac80211 perspective.
>
> I'm changing mac80211 back to unset idle first and then set the channel,
> if that helps ... ath9k_htc was also broken by the change.

I think it only helps partially - the main issue is that a firmware
reload seems to require reapplying any settings, but this wasn't done
the if the device was currently in idle.

Also setting the channel when the device is in idle has the advantage
for mwl8k that it does not start rx'ing packets from the wrong channel
- which did confuse mac80211 in case of my 5 GHz "only" card that
happily received frames while being left unconfigured in 2.4 GHz, with
->bands[2GHZ] == NULL. Produced several pages worth of WARN_ON()s with
stack traces, and the reason why I caught this.


Jonas

2013-03-25 15:50:05

by Johannes Berg

[permalink] [raw]
Subject: Re: [PATCH] mwl8k: always apply configuration even when device is idle

On Mon, 2013-03-25 at 16:39 +0100, Jonas Gorski wrote:
> Fix settings not being applied when the device is idle and the firmware
> gets reloaded (because of changing from STA to AP mode). This caused
> the device using the wrong channel (and likely band), e.g. a 5 GHz only
> card still defaulted to channel 6 in the 2.4 GHz band when left
> unconfigured.
>
> This issue was always present, but only made visible with "mwl8k: Do not
> call mwl8k_cmd_set_rf_channel unconditionally" (0f4316b9), since before
> that the channel was (re-)configured at the next _config call even when
> it did not change from the mac80211 perspective.

I'm changing mac80211 back to unset idle first and then set the channel,
if that helps ... ath9k_htc was also broken by the change.

johannes