* [PATCH] ath6kl: Fix packet drop when ath6kl_cookie runs out
From: Vasanthakumar Thiagarajan @ 2011-11-08 14:31 UTC (permalink / raw)
To: kvalo; +Cc: linux-wireless
"ath6kl: Maintain virtual interface in a list" mistakenly stops the
netq only when the mode is ibss. This causes packet drops in sta mode
when the available cookies (buffer abstraction in ath6kl and also used
for tx throttling) runs out for the highest priority traffic. This patch
just fixes this regression though the original code may still need fixes
which can be addressed in separate patches.
Reported-by: Kalle Valo <kvalo@qca.qualcomm.com>
Signed-off-by: Vasanthakumar Thiagarajan <vthiagar@qca.qualcomm.com>
---
drivers/net/wireless/ath/ath6kl/txrx.c | 12 +++++-------
1 files changed, 5 insertions(+), 7 deletions(-)
diff --git a/drivers/net/wireless/ath/ath6kl/txrx.c b/drivers/net/wireless/ath/ath6kl/txrx.c
index 62beadb..0b45d45 100644
--- a/drivers/net/wireless/ath/ath6kl/txrx.c
+++ b/drivers/net/wireless/ath/ath6kl/txrx.c
@@ -453,11 +453,11 @@ enum htc_send_full_action ath6kl_tx_queue_full(struct htc_target *target,
set_bit(WMI_CTRL_EP_FULL, &ar->flag);
spin_unlock_bh(&ar->lock);
ath6kl_err("wmi ctrl ep is full\n");
- goto stop_adhoc_netq;
+ return action;
}
if (packet->info.tx.tag == ATH6KL_CONTROL_PKT_TAG)
- goto stop_adhoc_netq;
+ return action;
/*
* The last MAX_HI_COOKIE_NUM "batch" of cookies are reserved for
@@ -465,20 +465,18 @@ enum htc_send_full_action ath6kl_tx_queue_full(struct htc_target *target,
*/
if (ar->ac_stream_pri_map[ar->ep2ac_map[endpoint]] <
ar->hiac_stream_active_pri &&
- ar->cookie_count <= MAX_HI_COOKIE_NUM) {
+ ar->cookie_count <= MAX_HI_COOKIE_NUM)
/*
* Give preference to the highest priority stream by
* dropping the packets which overflowed.
*/
action = HTC_SEND_FULL_DROP;
- goto stop_adhoc_netq;
- }
-stop_adhoc_netq:
/* FIXME: Locking */
spin_lock_bh(&ar->list_lock);
list_for_each_entry(vif, &ar->vif_list, list) {
- if (vif->nw_type == ADHOC_NETWORK) {
+ if (vif->nw_type == ADHOC_NETWORK ||
+ action != HTC_SEND_FULL_DROP) {
spin_unlock_bh(&ar->list_lock);
spin_lock_bh(&vif->if_lock);
--
1.7.0.4
^ permalink raw reply related
* Re: [PATCH v2 1/2] wl12xx: set scan probe requests rate according to the no_cck flag
From: Luciano Coelho @ 2011-11-08 14:19 UTC (permalink / raw)
To: Eliad Peller; +Cc: linux-wireless
In-Reply-To: <1320132232-12283-1-git-send-email-eliad@wizery.com>
On Tue, 2011-11-01 at 09:23 +0200, Eliad Peller wrote:
> From: Guy Eilam <guy@wizery.com>
>
> Set the TX rate of probe requests during scanning according to the
> no_cck flag in the scan request struct.
>
> Signed-off-by: Guy Eilam <guy@wizery.com>
> Signed-off-by: Eliad Peller <eliad@wizery.com>
> ---
Applied both patches, thanks!
--
Cheers,
Luca.
^ permalink raw reply
* Re: [PATCH] wl12xx: fix wl12xx_scan_sched_scan_ssid_list() check that all given ssids are in filters
From: John W. Linville @ 2011-11-08 14:09 UTC (permalink / raw)
To: Luciano Coelho; +Cc: Eyal Shapira, linux-wireless
In-Reply-To: <1320761188.19479.10.camel@cumari>
On Tue, Nov 08, 2011 at 04:06:28PM +0200, Luciano Coelho wrote:
> On Tue, 2011-11-08 at 15:54 +0200, Eyal Shapira wrote:
> > A minor fix for the check that verifies that all given SSIDs (in req) exist
> > in the filters (the match sets)
> >
> > Signed-off-by: Eyal Shapira <eyal@wizery.com>
> > ---
> > drivers/net/wireless/wl12xx/scan.c | 2 +-
> > 1 files changed, 1 insertions(+), 1 deletions(-)
> >
> > diff --git a/drivers/net/wireless/wl12xx/scan.c b/drivers/net/wireless/wl12xx/scan.c
> > index 128ccb7..fc29c67 100644
> > --- a/drivers/net/wireless/wl12xx/scan.c
> > +++ b/drivers/net/wireless/wl12xx/scan.c
> > @@ -559,7 +559,7 @@ wl12xx_scan_sched_scan_ssid_list(struct wl1271 *wl,
> > break;
> > }
> > /* Fail if SSID isn't present in the filters */
> > - if (j == req->n_ssids) {
> > + if (j == cmd->n_ssids) {
> > ret = -EINVAL;
> > goto out_free;
> > }
>
> Just to clarify. My comment:
> > Acked-by: Luciano Coelho <coelho@ti.com>
> >
> > John, can you apply this to 3.2, please?
>
> ...was about this patch. Eyal's email was delivered to me, but vger
> rejected it, so he had to resend it.
OK, I got it. :-)
--
John W. Linville Someday the world will need a hero, and you
linville@tuxdriver.com might be all we have. Be ready.
^ permalink raw reply
* Re: [PATCH] wl12xx: fix wl12xx_scan_sched_scan_ssid_list() check that all given ssids are in filters
From: John W. Linville @ 2011-11-08 14:08 UTC (permalink / raw)
To: Luciano Coelho; +Cc: Eyal Shapira, linux-wireless
In-Reply-To: <1320756479.19479.6.camel@cumari>
On Tue, Nov 08, 2011 at 02:47:59PM +0200, Luciano Coelho wrote:
> On Tue, 2011-11-08 at 14:42 +0200, Eyal Shapira wrote:
> > A minor fix for the check that verifies that all given SSIDs (in req) exist
> > in the filters (the match sets)
> >
> > Signed-off-by: Eyal Shapira <eyal@wizery.com>
> > ---
>
> Acked-by: Luciano Coelho <coelho@ti.com>
>
> John, can you apply this to 3.2, please?
Can someone bounce me a fresh copy? :-)
--
John W. Linville Someday the world will need a hero, and you
linville@tuxdriver.com might be all we have. Be ready.
^ permalink raw reply
* Re: [PATCH] wl12xx: fix SDIO suspend/resume
From: Luciano Coelho @ 2011-11-08 14:14 UTC (permalink / raw)
To: Eyal Shapira; +Cc: linux-wireless
In-Reply-To: <1320760615-19794-1-git-send-email-eyal@wizery.com>
On Tue, 2011-11-08 at 15:56 +0200, Eyal Shapira wrote:
> wl1271_suspend/resume() accessed the wrong struct and not wl1271
> which caused it to think that wow was enabled when it wasn't.
>
> Signed-off-by: Eyal Shapira <eyal@wizery.com>
> ---
Applied. Thanks Eyal!
--
Cheers,
Luca.
^ permalink raw reply
* Re: [PATCH 2/2] wl12xx: handle idle changes per-interface
From: Luciano Coelho @ 2011-11-08 14:14 UTC (permalink / raw)
To: Arik Nemtsov; +Cc: linux-wireless, Eliad Peller
In-Reply-To: <1319350915-31222-2-git-send-email-arik@wizery.com>
On Sun, 2011-10-23 at 08:21 +0200, Arik Nemtsov wrote:
> From: Eliad Peller <eliad@wizery.com>
>
> Idle changes are currently handled per hardware.
> However, some operations should be done only per-interface.
>
> Signed-off-by: Eliad Peller <eliad@wizery.com>
> Signed-off-by: Arik Nemtsov <arik@wizery.com>
> ---
Applied this patch. 1/2 from this same set is still pending a
dependency and will be applied later.
--
Cheers,
Luca.
^ permalink raw reply
* Re: [PATCH 0/3] wl12xx: improve firmware transfer efficiency
From: Luciano Coelho @ 2011-11-08 14:13 UTC (permalink / raw)
To: linux-wireless
In-Reply-To: <1320302683-23403-1-git-send-email-coelho@ti.com>
On Thu, 2011-11-03 at 08:44 +0200, Luciano Coelho wrote:
> Hello,
>
> These patches increase the FW upload efficiency by using multiple SDIO
> blocks in a single write. After a lot of measurements, studies and
> discussions, I came to the conclusion that 16K chunks is the optimal
> size to use. This reduces the upload time by a factor of 0.43 on
> wl127x and by a factor of 0.17 on wl128x. In absolute numbers this
> means 75ms and 179ms respectively.
>
> The first patch changes the semantics and name of the blocksize
> alignment quirk to negative, to simplify the code in the next two
> patches.
Applied this series.
--
Cheers,
Luca.
^ permalink raw reply
* Re: [PATCH v2] wl12xx: clear wl->vif on remove_interface
From: Luciano Coelho @ 2011-11-08 14:13 UTC (permalink / raw)
To: Eliad Peller; +Cc: linux-wireless
In-Reply-To: <1320153170-5301-1-git-send-email-eliad@wizery.com>
On Tue, 2011-11-01 at 15:12 +0200, Eliad Peller wrote:
> wl->vif should be cleared on remove_interface()
> (rather than on stop()) even when only a single
> vif is supported, because during vif mode change
> stop() might not get called (e.g. because of
> monitor interface existence)
>
> Signed-off-by: Eliad Peller <eliad@wizery.com>
> ---
Applied.
--
Cheers,
Luca.
^ permalink raw reply
* Re: [PATCH] wl12xx: add vifs_state debugfs key
From: Luciano Coelho @ 2011-11-08 14:13 UTC (permalink / raw)
To: Eliad Peller; +Cc: linux-wireless
In-Reply-To: <1320056689-19953-1-git-send-email-eliad@wizery.com>
On Mon, 2011-10-31 at 12:24 +0200, Eliad Peller wrote:
> Add debugfs key to dump information regarding the
> active vifs (similar to the driver_state debugfs key)
>
> Signed-off-by: Eliad Peller <eliad@wizery.com>
> ---
Applied to wl12xx. Thanks!
--
Cheers,
Luca.
^ permalink raw reply
* Re: [PATCH] wl12xx: keep beacon-filtering enabled during STA operation
From: Luciano Coelho @ 2011-11-08 14:13 UTC (permalink / raw)
To: Arik Nemtsov; +Cc: linux-wireless
In-Reply-To: <1319469920-5173-1-git-send-email-arik@wizery.com>
On Mon, 2011-10-24 at 17:25 +0200, Arik Nemtsov wrote:
> Enable beacon filtering on STA init, and don't disable it when entering
> active mode. Otherwise dynamic-PS supports means we receive beacons from
> the current AP during any Tx/Rx performed by the driver.
>
> Signed-off-by: Arik Nemtsov <arik@wizery.com>
> ---
Applied, thank you!
--
Cheers,
Luca.
^ permalink raw reply
* Re: [PATCH] wl12xx: reconfigure rate policies on set_bitrate_mask
From: Luciano Coelho @ 2011-11-08 14:13 UTC (permalink / raw)
To: Eliad Peller; +Cc: linux-wireless
In-Reply-To: <1318327059-14158-1-git-send-email-eliad@wizery.com>
On Tue, 2011-10-11 at 11:57 +0200, Eliad Peller wrote:
> The rate policies are configured only after association,
> resulting in auth req being sent in wrong rates.
>
> Reconfigure rate policies on bitrate mask change.
>
> Signed-off-by: Eliad Peller <eliad@wizery.com>
> ---
Applied!
--
Cheers,
Luca.
^ permalink raw reply
* Re: [PATCH] wl12xx: couple role_start_dev with roc
From: Luciano Coelho @ 2011-11-08 14:12 UTC (permalink / raw)
To: Eliad Peller; +Cc: linux-wireless
In-Reply-To: <1318326944-14072-1-git-send-email-eliad@wizery.com>
On Tue, 2011-10-11 at 11:55 +0200, Eliad Peller wrote:
> Device role is always started along with ROC.
> Couple them together by introducing new wl12xx_start_dev
> and wl12xx_stop_dev functions.
>
> By using these functions, we solve a bug that occured during
> channel switch - we started the dev role on one channel, and
> ROCed on a different one.
>
> Signed-off-by: Eliad Peller <eliad@wizery.com>
> ---
Applied, thanks!
--
Cheers,
Luca.
^ permalink raw reply
* [PATCH] wl12xx: don't explicitly check for unjoined ibss
From: Eliad Peller @ 2011-11-08 14:07 UTC (permalink / raw)
To: Luciano Coelho; +Cc: linux-wireless
After the ibss carrier issue was fixed, we can revert
the following patch:
commit 48309fd477ef867babb6819f67fe082c133a5fa9
Author: Shahar Lev <shahar@wizery.com>
Date: Fri Oct 7 18:17:25 2011 +0200
wl12xx: remove warning message during IBSS Tx
mac80211 sets the carrier on an IBSS interface even when no network is
joined. Ignore garbage frames transmitted on a disconnected IBSS
interface without printing warnings.
Signed-off-by: Eliad Peller <eliad@wizery.com>
---
depends on "mac80211: set carrier_on for ibss vifs only while joined"
drivers/net/wireless/wl12xx/tx.c | 10 +---------
1 files changed, 1 insertions(+), 9 deletions(-)
diff --git a/drivers/net/wireless/wl12xx/tx.c b/drivers/net/wireless/wl12xx/tx.c
index 3a9d2a6..c12645c 100644
--- a/drivers/net/wireless/wl12xx/tx.c
+++ b/drivers/net/wireless/wl12xx/tx.c
@@ -425,15 +425,7 @@ static int wl1271_prepare_tx_frame(struct wl1271 *wl, struct wl12xx_vif *wlvif,
}
hlid = wl12xx_tx_get_hlid(wl, wlvif, skb);
if (hlid == WL12XX_INVALID_LINK_ID) {
- if (wlvif->bss_type == BSS_TYPE_IBSS &&
- !test_bit(WLVIF_FLAG_IBSS_JOINED, &wlvif->flags)) {
- /* It's ok to drop packets when not joined to IBSS */
- wl1271_debug(DEBUG_TX, "dropping skb while IBSS not "
- " joined");
- } else {
- wl1271_error("invalid hlid. dropping skb 0x%p", skb);
- }
-
+ wl1271_error("invalid hlid. dropping skb 0x%p", skb);
return -EINVAL;
}
--
1.7.6.401.g6a319
^ permalink raw reply related
* Re: [PATCH] wl12xx: fix wl12xx_scan_sched_scan_ssid_list() check that all given ssids are in filters
From: Luciano Coelho @ 2011-11-08 14:06 UTC (permalink / raw)
To: Eyal Shapira, linville; +Cc: linux-wireless
In-Reply-To: <1320760486-19700-1-git-send-email-eyal@wizery.com>
On Tue, 2011-11-08 at 15:54 +0200, Eyal Shapira wrote:
> A minor fix for the check that verifies that all given SSIDs (in req) exist
> in the filters (the match sets)
>
> Signed-off-by: Eyal Shapira <eyal@wizery.com>
> ---
> drivers/net/wireless/wl12xx/scan.c | 2 +-
> 1 files changed, 1 insertions(+), 1 deletions(-)
>
> diff --git a/drivers/net/wireless/wl12xx/scan.c b/drivers/net/wireless/wl12xx/scan.c
> index 128ccb7..fc29c67 100644
> --- a/drivers/net/wireless/wl12xx/scan.c
> +++ b/drivers/net/wireless/wl12xx/scan.c
> @@ -559,7 +559,7 @@ wl12xx_scan_sched_scan_ssid_list(struct wl1271 *wl,
> break;
> }
> /* Fail if SSID isn't present in the filters */
> - if (j == req->n_ssids) {
> + if (j == cmd->n_ssids) {
> ret = -EINVAL;
> goto out_free;
> }
Just to clarify. My comment:
> Acked-by: Luciano Coelho <coelho@ti.com>
>
> John, can you apply this to 3.2, please?
...was about this patch. Eyal's email was delivered to me, but vger
rejected it, so he had to resend it.
--
Cheers,
Luca.
^ permalink raw reply
* [PATCH] wl12xx: fix SDIO suspend/resume
From: Eyal Shapira @ 2011-11-08 13:56 UTC (permalink / raw)
To: Luciano Coelho; +Cc: linux-wireless
wl1271_suspend/resume() accessed the wrong struct and not wl1271
which caused it to think that wow was enabled when it wasn't.
Signed-off-by: Eyal Shapira <eyal@wizery.com>
---
drivers/net/wireless/wl12xx/sdio.c | 6 ++++--
1 files changed, 4 insertions(+), 2 deletions(-)
diff --git a/drivers/net/wireless/wl12xx/sdio.c b/drivers/net/wireless/wl12xx/sdio.c
index ed97f9c..468a505 100644
--- a/drivers/net/wireless/wl12xx/sdio.c
+++ b/drivers/net/wireless/wl12xx/sdio.c
@@ -289,7 +289,8 @@ static int wl1271_suspend(struct device *dev)
/* Tell MMC/SDIO core it's OK to power down the card
* (if it isn't already), but not to remove it completely */
struct sdio_func *func = dev_to_sdio_func(dev);
- struct wl1271 *wl = sdio_get_drvdata(func);
+ struct wl12xx_sdio_glue *glue = sdio_get_drvdata(func);
+ struct wl1271 *wl = platform_get_drvdata(glue->core);
mmc_pm_flag_t sdio_flags;
int ret = 0;
@@ -324,7 +325,8 @@ out:
static int wl1271_resume(struct device *dev)
{
struct sdio_func *func = dev_to_sdio_func(dev);
- struct wl1271 *wl = sdio_get_drvdata(func);
+ struct wl12xx_sdio_glue *glue = sdio_get_drvdata(func);
+ struct wl1271 *wl = platform_get_drvdata(glue->core);
dev_dbg(dev, "wl1271 resume\n");
if (wl->wow_enabled) {
--
1.7.4.1
^ permalink raw reply related
* [PATCH] wl12xx: fix wl12xx_scan_sched_scan_ssid_list() check that all given ssids are in filters
From: Eyal Shapira @ 2011-11-08 13:54 UTC (permalink / raw)
To: Luciano Coelho; +Cc: linux-wireless
A minor fix for the check that verifies that all given SSIDs (in req) exist
in the filters (the match sets)
Signed-off-by: Eyal Shapira <eyal@wizery.com>
---
drivers/net/wireless/wl12xx/scan.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/drivers/net/wireless/wl12xx/scan.c b/drivers/net/wireless/wl12xx/scan.c
index 128ccb7..fc29c67 100644
--- a/drivers/net/wireless/wl12xx/scan.c
+++ b/drivers/net/wireless/wl12xx/scan.c
@@ -559,7 +559,7 @@ wl12xx_scan_sched_scan_ssid_list(struct wl1271 *wl,
break;
}
/* Fail if SSID isn't present in the filters */
- if (j == req->n_ssids) {
+ if (j == cmd->n_ssids) {
ret = -EINVAL;
goto out_free;
}
--
1.7.4.1
^ permalink raw reply related
* [PATCH] mac80211: set carrier_on for ibss vifs only while joined
From: Eliad Peller @ 2011-11-08 13:36 UTC (permalink / raw)
To: Johannes Berg; +Cc: linux-wireless
mac80211 should set carrier_on for ibss vifs
only while they are joined (similar to sta vifs)
Signed-off-by: Eliad Peller <eliad@wizery.com>
---
net/mac80211/ibss.c | 3 +++
net/mac80211/iface.c | 3 ++-
2 files changed, 5 insertions(+), 1 deletions(-)
diff --git a/net/mac80211/ibss.c b/net/mac80211/ibss.c
index 2da3040..ecf24ec 100644
--- a/net/mac80211/ibss.c
+++ b/net/mac80211/ibss.c
@@ -97,6 +97,7 @@ static void __ieee80211_sta_join_ibss(struct ieee80211_sub_if_data *sdata,
/* if merging, indicate to driver that we leave the old IBSS */
if (sdata->vif.bss_conf.ibss_joined) {
sdata->vif.bss_conf.ibss_joined = false;
+ netif_carrier_off(sdata->dev);
ieee80211_bss_info_change_notify(sdata, BSS_CHANGED_IBSS);
}
@@ -207,6 +208,7 @@ static void __ieee80211_sta_join_ibss(struct ieee80211_sub_if_data *sdata,
bss = cfg80211_inform_bss_frame(local->hw.wiphy, local->hw.conf.channel,
mgmt, skb->len, 0, GFP_KERNEL);
cfg80211_put_bss(bss);
+ netif_carrier_on(sdata->dev);
cfg80211_ibss_joined(sdata->dev, ifibss->bssid, GFP_KERNEL);
}
@@ -990,6 +992,7 @@ int ieee80211_ibss_leave(struct ieee80211_sub_if_data *sdata)
}
sta_info_flush(sdata->local, sdata);
+ netif_carrier_off(sdata->dev);
/* remove beacon */
kfree(sdata->u.ibss.ie);
diff --git a/net/mac80211/iface.c b/net/mac80211/iface.c
index ef741e8..ce372ea 100644
--- a/net/mac80211/iface.c
+++ b/net/mac80211/iface.c
@@ -282,7 +282,8 @@ static int ieee80211_do_open(struct net_device *dev, bool coming_up)
changed |= ieee80211_reset_erp_info(sdata);
ieee80211_bss_info_change_notify(sdata, changed);
- if (sdata->vif.type == NL80211_IFTYPE_STATION)
+ if (sdata->vif.type == NL80211_IFTYPE_STATION ||
+ sdata->vif.type == NL80211_IFTYPE_ADHOC)
netif_carrier_off(dev);
else
netif_carrier_on(dev);
--
1.7.6.401.g6a319
^ permalink raw reply related
* Re: [PATCH 3/3] mac80211: simplify ieee80211_work_work
From: Johannes Berg @ 2011-11-08 13:14 UTC (permalink / raw)
To: Stanislaw Gruszka; +Cc: linux-wireless
In-Reply-To: <1320313247-23167-3-git-send-email-sgruszka@redhat.com>
On Thu, 2011-11-03 at 10:40 +0100, Stanislaw Gruszka wrote:
> Since local->tmp_channel is always NULL in one branch, some code paths
> will newer be taken in that branch, so remove them.
Reviewed-by: Johannes Berg <johannes@sipsolutions.net>
> Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
> ---
> net/mac80211/work.c | 17 +++--------------
> 1 files changed, 3 insertions(+), 14 deletions(-)
>
> diff --git a/net/mac80211/work.c b/net/mac80211/work.c
> index 6c53b6d..788b96e 100644
> --- a/net/mac80211/work.c
> +++ b/net/mac80211/work.c
> @@ -969,10 +969,9 @@ static void ieee80211_work_work(struct work_struct *work)
> }
>
> if (!started && !local->tmp_channel) {
> - bool on_oper_chan;
> - bool tmp_chan_changed = false;
> - bool on_oper_chan2;
> + bool on_oper_chan, on_oper_chan2;
> enum nl80211_channel_type wk_ct;
> +
> on_oper_chan = ieee80211_cfg_on_oper_channel(local);
>
> /* Work with existing channel type if possible. */
> @@ -981,11 +980,6 @@ static void ieee80211_work_work(struct work_struct *work)
> wk_ct = ieee80211_calc_ct(wk->chan_type,
> local->hw.conf.channel_type);
>
> - if (local->tmp_channel)
> - if ((local->tmp_channel != wk->chan) ||
> - (local->tmp_channel_type != wk_ct))
> - tmp_chan_changed = true;
> -
> local->tmp_channel = wk->chan;
> local->tmp_channel_type = wk_ct;
> /*
> @@ -1008,12 +1002,7 @@ static void ieee80211_work_work(struct work_struct *work)
> true,
> false);
> }
> - } else if (tmp_chan_changed)
> - /* Still off-channel, but on some other
> - * channel, so update hardware.
> - * PS should already be off-channel.
> - */
> - ieee80211_hw_config(local, 0);
> + }
>
> started = true;
> wk->timeout = jiffies;
^ permalink raw reply
* Re: [PATCH 2/3] mac80211: remove useless brackets in ieee80211_cfg_on_oper_channel
From: Johannes Berg @ 2011-11-08 13:14 UTC (permalink / raw)
To: Stanislaw Gruszka; +Cc: linux-wireless
In-Reply-To: <1320313247-23167-2-git-send-email-sgruszka@redhat.com>
On Thu, 2011-11-03 at 10:40 +0100, Stanislaw Gruszka wrote:
> Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
Reviewed-by: Johannes Berg <johannes@sipsolutions.net>
> ---
> net/mac80211/main.c | 4 ++--
> 1 files changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/net/mac80211/main.c b/net/mac80211/main.c
> index 7710b10..cd87fd9 100644
> --- a/net/mac80211/main.c
> +++ b/net/mac80211/main.c
> @@ -126,8 +126,8 @@ bool ieee80211_cfg_on_oper_channel(struct ieee80211_local *local)
> return false;
>
> /* Check current hardware-config against oper_channel. */
> - if ((local->oper_channel != local->hw.conf.channel) ||
> - (local->_oper_channel_type != local->hw.conf.channel_type))
> + if (local->oper_channel != local->hw.conf.channel ||
> + local->_oper_channel_type != local->hw.conf.channel_type)
> return false;
>
> return true;
^ permalink raw reply
* Re: [PATCH 1/3] mac80211: remove uneeded scan_chan variable
From: Johannes Berg @ 2011-11-08 13:14 UTC (permalink / raw)
To: Stanislaw Gruszka; +Cc: linux-wireless
In-Reply-To: <1320313247-23167-1-git-send-email-sgruszka@redhat.com>
On Thu, 2011-11-03 at 10:40 +0100, Stanislaw Gruszka wrote:
> Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
Reviewed-by: Johannes Berg <johannes@sipsolutions.net>
> ---
> net/mac80211/main.c | 14 ++++++--------
> 1 files changed, 6 insertions(+), 8 deletions(-)
>
> diff --git a/net/mac80211/main.c b/net/mac80211/main.c
> index d4ee6d2..7710b10 100644
> --- a/net/mac80211/main.c
> +++ b/net/mac80211/main.c
> @@ -100,7 +100,7 @@ static void ieee80211_reconfig_filter(struct work_struct *work)
> */
> bool ieee80211_cfg_on_oper_channel(struct ieee80211_local *local)
> {
> - struct ieee80211_channel *chan, *scan_chan;
> + struct ieee80211_channel *chan;
> enum nl80211_channel_type channel_type;
>
> /* This logic needs to match logic in ieee80211_hw_config */
> @@ -114,7 +114,7 @@ bool ieee80211_cfg_on_oper_channel(struct ieee80211_local *local)
> else
> channel_type = NL80211_CHAN_NO_HT;
> } else if (local->tmp_channel) {
> - chan = scan_chan = local->tmp_channel;
> + chan = local->tmp_channel;
> channel_type = local->tmp_channel_type;
> } else {
> chan = local->oper_channel;
> @@ -135,7 +135,7 @@ bool ieee80211_cfg_on_oper_channel(struct ieee80211_local *local)
>
> int ieee80211_hw_config(struct ieee80211_local *local, u32 changed)
> {
> - struct ieee80211_channel *chan, *scan_chan;
> + struct ieee80211_channel *chan;
> int ret = 0;
> int power;
> enum nl80211_channel_type channel_type;
> @@ -143,14 +143,12 @@ int ieee80211_hw_config(struct ieee80211_local *local, u32 changed)
>
> might_sleep();
>
> - scan_chan = local->scan_channel;
> -
> /* If this off-channel logic ever changes, ieee80211_on_oper_channel
> * may need to change as well.
> */
> offchannel_flag = local->hw.conf.flags & IEEE80211_CONF_OFFCHANNEL;
> - if (scan_chan) {
> - chan = scan_chan;
> + if (local->scan_channel) {
> + chan = local->scan_channel;
> /* If scanning on oper channel, use whatever channel-type
> * is currently in use.
> */
> @@ -159,7 +157,7 @@ int ieee80211_hw_config(struct ieee80211_local *local, u32 changed)
> else
> channel_type = NL80211_CHAN_NO_HT;
> } else if (local->tmp_channel) {
> - chan = scan_chan = local->tmp_channel;
> + chan = local->tmp_channel;
> channel_type = local->tmp_channel_type;
> } else {
> chan = local->oper_channel;
^ permalink raw reply
* [PATCH] ath: Fix NULL ptr dereference in ath_reg_apply_world_flags
From: Helmut Schaa @ 2011-11-08 13:01 UTC (permalink / raw)
To: linux-wireless; +Cc: mcgrof, linville, Helmut Schaa
This happens with devices using a regulatory domain 0x68 that are only
5Ghz capable because ath_reg_apply_active_scan_flags assumes that we
always have a 2,4Ghz band.
CPU 0 Unable to handle kernel paging request at virtual address 00000000, epc == 82cd838c, ra == 82cd8384
Oops[#1]:
Cpu 0
$ 0 : 00000000 00000061 00000003 00000024
$ 4 : 00000003 000016c1 82f900ac 00000024
$ 8 : 00000000 82cda304 0058bad8 00000005
$12 : 005908f8 001e8481 00000003 1dcd6500
$16 : 00000002 00000000 82c700c0 82c700c0
$20 : 82d415e4 82c70d64 82c70200 82c715bc
$24 : 00000000 11e1a300
$28 : 82ce2000 82ce3c70 82c715a8 82cd8384
Hi : 00000000
Lo : 0000001e
epc : 82cd838c ath_reg_apply_world_flags+0x78/0x17c [ath]
Not tainted
ra : 82cd8384 ath_reg_apply_world_flags+0x70/0x17c [ath]
Status: 1000d403 KERNEL EXL IE
Cause : 80800008
BadVA : 00000000
PrId : 00019374 (MIPS 24Kc)
Modules linked in: ath9k(+) ath9k_common ath9k_hw ath mac80211 cfg80211
compat_firmware_class compat arc4 aes_generic deflate ecb cbc
leds_gpio button_hotplug gpio_buttons input_polldev ie
Process insmod (pid: 464, threadinfo=82ce2000, task=838b31d8, tls=00000000)
Stack : 00000000 00000002 82f900ac 82c700c0 82d415e4 82c70d64 00000000 00000068
82f900ac 82cd88f4 82c700c0 82cda304 00000001 000020f0 82f90000 82c70d40
00000002 82f90000 82f900ac 82d4207c 82d518a0 00000002 7fee6118 8017c0d8
00000008 8397ba00 82c70d40 00000000 82c70200 83813000 83813058 b0010000
82d518a0 00000002 7fee6118 82d4b8c8 83445cc0 80120dc0 83804000 800eeda0
...
Call Trace:
[<82cd838c>] ath_reg_apply_world_flags+0x78/0x17c [ath]
[<82cd88f4>] ath_regd_init+0x464/0x488 [ath]
[<82d4207c>] ath9k_init_device+0x6a4/0x6b4 [ath9k]
[<82d4b8c8>] ath_pci_probe+0x27c/0x358 [ath9k]
[<80181de0>] pci_device_probe+0x64/0xa4
[<8019e874>] driver_probe_device+0xb8/0x190
[<8019e9b8>] __driver_attach+0x6c/0xa4
[<8019dfc0>] bus_for_each_dev+0x60/0xb0
[<8019d744>] bus_add_driver+0xc4/0x25c
[<8019ed6c>] driver_register+0xe0/0x198
[<8018206c>] __pci_register_driver+0x50/0xe0
[<82dd0010>] ath9k_init+0x10/0x54 [ath9k]
[<8006b4a0>] do_one_initcall+0x68/0x1ec
[<800a901c>] sys_init_module+0xec/0x23c
[<80062544>] stack_done+0x20/0x3c
Signed-off-by: Helmut Schaa <helmut.schaa@googlemail.com>
---
drivers/net/wireless/ath/regd.c | 2 ++
1 files changed, 2 insertions(+), 0 deletions(-)
diff --git a/drivers/net/wireless/ath/regd.c b/drivers/net/wireless/ath/regd.c
index 028310f..f1be57f 100644
--- a/drivers/net/wireless/ath/regd.c
+++ b/drivers/net/wireless/ath/regd.c
@@ -253,6 +253,8 @@ ath_reg_apply_active_scan_flags(struct wiphy *wiphy,
int r;
sband = wiphy->bands[IEEE80211_BAND_2GHZ];
+ if (!sband)
+ return;
/*
* If no country IE has been received always enable active scan
--
1.7.3.4
^ permalink raw reply related
* regulatory crash
From: Johannes Berg @ 2011-11-08 12:52 UTC (permalink / raw)
To: Luis R. Rodriguez; +Cc: linux-wireless
After random poking with hwsim:
[ 640.357147] mac80211_hwsim: unregister radios
[ 640.357151] mac80211_hwsim: closing netlink
[ 640.871735] BUG: unable to handle kernel paging request at ffff88001a06b5ab
[ 640.879198] IP: [<ffffffffa030df9a>] reg_device_uevent+0x1a/0x50 [cfg80211]
[ 640.880507] PGD 1836063 PUD 183a063 PMD 1ffcb067 PTE 1a06b160
[ 640.880507] Oops: 0000 [#1] PREEMPT SMP DEBUG_PAGEALLOC
[ 640.880507] CPU 0
[ 640.880507] Modules linked in: cfg80211(-) [last unloaded: mac80211]
[ 640.880507]
[ 640.880507] Pid: 2279, comm: rmmod Tainted: G W 3.1.0-wl+ #663 Bochs Bochs
[ 640.880507] RIP: 0010:[<ffffffffa030df9a>] [<ffffffffa030df9a>] reg_device_uevent+0x1a/0x50 [cfg80211]
[ 640.880507] RSP: 0000:ffff88001c5f9d58 EFLAGS: 00010286
[ 640.880507] RAX: 0000000000000000 RBX: ffff88001d2eda88 RCX: ffff88001c7468fc
[ 640.880507] RDX: ffff88001a06b5a0 RSI: ffff88001c7467b0 RDI: ffff88001c7467b0
[ 640.880507] RBP: ffff88001c5f9d58 R08: 000000000000ffff R09: 000000000000ffff
[ 640.880507] R10: 0000000000000000 R11: 0000000000000001 R12: ffff88001c7467b0
[ 640.880507] R13: ffff88001d2eda78 R14: ffffffff8164a840 R15: 0000000000000001
[ 640.880507] FS: 00007f8a91d8a6e0(0000) GS:ffff88001fc00000(0000) knlGS:0000000000000000
[ 640.880507] CS: 0010 DS: 0000 ES: 0000 CR0: 000000008005003b
[ 640.880507] CR2: ffff88001a06b5ab CR3: 000000001c62e000 CR4: 00000000000006f0
[ 640.880507] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
[ 640.880507] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400
[ 640.880507] Process rmmod (pid: 2279, threadinfo ffff88001c5f8000, task ffff88000023c780)
[ 640.880507] Stack:
[ 640.880507] ffff88001c5f9d98 ffffffff812ff7e5 ffffffff8176ab3d ffff88001c7468c2
[ 640.880507] 000000000000ffff ffff88001d2eda88 ffff88001c7467b0 ffff880000114820
[ 640.880507] ffff88001c5f9e38 ffffffff81241dc7 ffff88001c5f9db8 ffffffff81040189
[ 640.880507] Call Trace:
[ 640.880507] [<ffffffff812ff7e5>] dev_uevent+0xc5/0x170
[ 640.880507] [<ffffffff81241dc7>] kobject_uevent_env+0x1f7/0x490
[ 640.880507] [<ffffffff81040189>] ? sub_preempt_count+0x29/0x60
[ 640.880507] [<ffffffff814cab1a>] ? _raw_spin_unlock_irqrestore+0x4a/0x90
[ 640.880507] [<ffffffff81305307>] ? devres_release_all+0x27/0x60
[ 640.880507] [<ffffffff8124206b>] kobject_uevent+0xb/0x10
[ 640.880507] [<ffffffff812fee27>] device_del+0x157/0x1b0
[ 640.880507] [<ffffffff8130377d>] platform_device_del+0x1d/0x90
[ 640.880507] [<ffffffff81303b76>] platform_device_unregister+0x16/0x30
[ 640.880507] [<ffffffffa030fffd>] regulatory_exit+0x5d/0x180 [cfg80211]
[ 640.880507] [<ffffffffa032bec3>] cfg80211_exit+0x2b/0x45 [cfg80211]
[ 640.880507] [<ffffffff8109a84c>] sys_delete_module+0x16c/0x220
[ 640.880507] [<ffffffff8108a23e>] ? trace_hardirqs_on_caller+0x7e/0x120
[ 640.880507] [<ffffffff814cba02>] system_call_fastpath+0x16/0x1b
[ 640.880507] Code: 5b 5d c3 66 0f 1f 44 00 00 bf 10 00 00 00 eb d1 90 55 48 89 e5 66 66 66 66 90 48 8b 15 b8 3b 02 00 31 c0 48 85 d2 48 89 f7 74 06
[ 640.880507] 7a 0b 00 74 08 5d c3 66 0f 1f 44 00 00 0f be 4a 09 48 c7 c6
[ 640.880507] RIP [<ffffffffa030df9a>] reg_device_uevent+0x1a/0x50 [cfg80211]
[ 640.880507] RSP <ffff88001c5f9d58>
[ 640.880507] CR2: ffff88001a06b5ab
[ 640.880507] ---[ end trace 147c5099a411e8c0 ]---
[ 640.880507] BUG: sleeping function called from invalid context at /home/johannes/sys/wireless-testing/kernel/rwsem.c:21
[ 640.880507] in_atomic(): 0, irqs_disabled(): 1, pid: 2279, name: rmmod
[ 640.880507] INFO: lockdep is turned off.
[ 640.880507] irq event stamp: 31652
[ 640.880507] hardirqs last enabled at (31651): [<ffffffff814bd1b0>] __slab_alloc.isra.58.constprop.63+0x3b8/0x3db
[ 640.880507] hardirqs last disabled at (31652): [<ffffffff814cb536>] error_sti+0x5/0x6
[ 640.880507] softirqs last enabled at (31204): [<ffffffff81052ab7>] __do_softirq+0x137/0x3c0
[ 640.880507] softirqs last disabled at (31185): [<ffffffff814cd07c>] call_softirq+0x1c/0x30
[ 640.880507] Pid: 2279, comm: rmmod Tainted: G D W 3.1.0-wl+ #663
[ 640.880507] Call Trace:
[ 640.880507] [<ffffffff81089740>] ? print_irqtrace_events+0xd0/0xe0
[ 640.880507] [<ffffffff8103b729>] __might_sleep.part.132+0xb9/0xd0
[ 640.880507] [<ffffffff8103b791>] __might_sleep+0x51/0x70
[ 640.880507] [<ffffffff814c9246>] down_read+0x26/0x9c
[ 640.880507] [<ffffffff810a39cb>] acct_collect+0x4b/0x1b0
[ 640.880507] [<ffffffff8104f1eb>] do_exit+0x30b/0x470
[ 640.880507] [<ffffffff81005b19>] oops_end+0x89/0xc0
[ 640.880507] [<ffffffff814b7864>] no_context+0x146/0x153
[ 640.880507] [<ffffffff814b7a42>] __bad_area_nosemaphore+0x1d1/0x1f0
[ 640.880507] [<ffffffff814caaa5>] ? _raw_spin_unlock+0x35/0x60
[ 640.880507] [<ffffffff814b7a74>] bad_area_nosemaphore+0x13/0x15
[ 640.880507] [<ffffffff8102a7ed>] do_page_fault+0x40d/0x4e0
[ 640.880507] [<ffffffff814bd1b0>] ? __slab_alloc.isra.58.constprop.63+0x3b8/0x3db
[ 640.880507] [<ffffffff8108a23e>] ? trace_hardirqs_on_caller+0x7e/0x120
[ 640.880507] [<ffffffff81249cde>] ? string.isra.5+0x3e/0xd0
[ 640.880507] [<ffffffff8124c91d>] ? trace_hardirqs_off_thunk+0x3a/0x3c
[ 640.880507] [<ffffffff814cb2f5>] page_fault+0x25/0x30
[ 640.880507] [<ffffffffa030df9a>] ? reg_device_uevent+0x1a/0x50 [cfg80211]
[ 640.880507] [<ffffffff81303560>] ? platform_uevent+0x30/0x40
[ 640.880507] [<ffffffff812ff7e5>] dev_uevent+0xc5/0x170
[ 640.880507] [<ffffffff81241dc7>] kobject_uevent_env+0x1f7/0x490
[ 640.880507] [<ffffffff81040189>] ? sub_preempt_count+0x29/0x60
[ 640.880507] [<ffffffff814cab1a>] ? _raw_spin_unlock_irqrestore+0x4a/0x90
[ 640.880507] [<ffffffff81305307>] ? devres_release_all+0x27/0x60
[ 640.880507] [<ffffffff8124206b>] kobject_uevent+0xb/0x10
[ 640.880507] [<ffffffff812fee27>] device_del+0x157/0x1b0
[ 640.880507] [<ffffffff8130377d>] platform_device_del+0x1d/0x90
[ 640.880507] [<ffffffff81303b76>] platform_device_unregister+0x16/0x30
[ 640.880507] [<ffffffffa030fffd>] regulatory_exit+0x5d/0x180 [cfg80211]
[ 640.880507] [<ffffffffa032bec3>] cfg80211_exit+0x2b/0x45 [cfg80211]
[ 640.880507] [<ffffffff8109a84c>] sys_delete_module+0x16c/0x220
[ 640.880507] [<ffffffff8108a23e>] ? trace_hardirqs_on_caller+0x7e/0x120
[ 640.880507] [<ffffffff814cba02>] system_call_fastpath+0x16/0x1b
^ permalink raw reply
* Re: [PATCH] wl12xx: fix wl12xx_scan_sched_scan_ssid_list() check that all given ssids are in filters
From: Luciano Coelho @ 2011-11-08 12:47 UTC (permalink / raw)
To: Eyal Shapira, linville; +Cc: linux-wireless
In-Reply-To: <1320756132-14625-1-git-send-email-eyal@wizery.com>
On Tue, 2011-11-08 at 14:42 +0200, Eyal Shapira wrote:
> A minor fix for the check that verifies that all given SSIDs (in req) exist
> in the filters (the match sets)
>
> Signed-off-by: Eyal Shapira <eyal@wizery.com>
> ---
Acked-by: Luciano Coelho <coelho@ti.com>
John, can you apply this to 3.2, please?
--
Cheers,
Luca.
^ permalink raw reply
* [PATCH] mac80211: fix bug in ieee80211_build_probe_req
From: Johannes Berg @ 2011-11-08 12:04 UTC (permalink / raw)
To: John Linville; +Cc: linux-wireless
From: Johannes Berg <johannes.berg@intel.com>
ieee80211_probereq_get() can return NULL in
which case we should clean up & return NULL
in ieee80211_build_probe_req() as well.
Cc: stable@vger.kernel.org
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
---
net/mac80211/util.c | 4 ++++
1 file changed, 4 insertions(+)
--- a/net/mac80211/util.c 2011-11-08 09:24:02.000000000 +0100
+++ b/net/mac80211/util.c 2011-11-08 12:50:12.000000000 +0100
@@ -880,6 +880,8 @@ struct sk_buff *ieee80211_build_probe_re
skb = ieee80211_probereq_get(&local->hw, &sdata->vif,
ssid, ssid_len,
buf, buf_len);
+ if (!skb)
+ goto out;
if (dst) {
mgmt = (struct ieee80211_mgmt *) skb->data;
@@ -888,6 +890,8 @@ struct sk_buff *ieee80211_build_probe_re
}
IEEE80211_SKB_CB(skb)->flags |= IEEE80211_TX_INTFL_DONT_ENCRYPT;
+
+ out:
kfree(buf);
return skb;
^ permalink raw reply
* [PATCH] mac80211: fix NULL dereference in radiotap code
From: Johannes Berg @ 2011-11-08 11:28 UTC (permalink / raw)
To: John Linville; +Cc: Xiaokang Qin, linux-wireless
From: Johannes Berg <johannes.berg@intel.com>
When receiving failed PLCP frames is enabled, there
won't be a rate pointer when we add the radiotap
header and thus the kernel will crash. Fix this by
not assuming the rate pointer is always valid. It's
still always valid for frames that have good PLCP
though, and that is checked & enforced.
This was broken by my
commit fc88518916793af8ad6a02e05ff254d95c36d875
Author: Johannes Berg <johannes.berg@intel.com>
Date: Fri Jul 30 13:23:12 2010 +0200
mac80211: don't check rates on PLCP error frames
where I removed the check in this case but didn't
take into account that the rate info would be used.
Reported-by: Xiaokang Qin <xiaokang.qin@intel.com>
Cc: stable@vger.kernel.org
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
---
net/mac80211/rx.c | 9 ++++++---
1 file changed, 6 insertions(+), 3 deletions(-)
--- a/net/mac80211/rx.c 2011-11-08 09:24:58.000000000 +0100
+++ b/net/mac80211/rx.c 2011-11-08 12:19:55.000000000 +0100
@@ -140,8 +140,9 @@ ieee80211_add_rx_radiotap_header(struct
pos++;
/* IEEE80211_RADIOTAP_RATE */
- if (status->flag & RX_FLAG_HT) {
+ if (!rate || status->flag & RX_FLAG_HT) {
/*
+ * Without rate information don't add it. If we have,
* MCS information is a separate field in radiotap,
* added below. The byte here is needed as padding
* for the channel though, so initialise it to 0.
@@ -162,12 +163,14 @@ ieee80211_add_rx_radiotap_header(struct
else if (status->flag & RX_FLAG_HT)
put_unaligned_le16(IEEE80211_CHAN_DYN | IEEE80211_CHAN_2GHZ,
pos);
- else if (rate->flags & IEEE80211_RATE_ERP_G)
+ else if (rate && rate->flags & IEEE80211_RATE_ERP_G)
put_unaligned_le16(IEEE80211_CHAN_OFDM | IEEE80211_CHAN_2GHZ,
pos);
- else
+ else if (rate)
put_unaligned_le16(IEEE80211_CHAN_CCK | IEEE80211_CHAN_2GHZ,
pos);
+ else
+ put_unaligned_le16(IEEE80211_CHAN_2GHZ, pos);
pos += 2;
/* IEEE80211_RADIOTAP_DBM_ANTSIGNAL */
^ permalink raw reply
page: next (older) | prev (newer) | latest
- recent:[subjects (threaded)|topics (new)|topics (active)]
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox