* [RFC PATCHv2 0/1] mac80211: Shared BT/WLAN antenna co-existence management
From: Juuso Oikarinen @ 2010-05-31 7:05 UTC (permalink / raw)
To: linux-wireless
v2 of these RFC patches only add more elaboration to the description of the
patch itself.
The following patch proposes an implementation to handle WLAN-Bluetooth
coexistence in the case of a shared WLAN/BT antenna.
The patch adds to mac80211 an interface for the driver to be able to
temporarily disable dynamic power save. When power save is enabled, a call to
the function will cause mac80211 to immediately enter full PSM until the driver
indicates that dynamic PSM can be resumed. If power save is enabled the
function does nothing.
The driver uses this function to disable dynamic PSM whenever there are bursts
Bluetooth traffic. Full PSM allows the WLAN hardware to relinquish the antenna
for use by BT during the inactive WLAN periods.
The driver gets information on Bluetooth traffic from the WLAN chipset. The
chipset has hardware lines to coordinate the co-existence, and the chipset will
indicate to the driver whenever there is Bluetooth traffic.
Comments are welcomed!
Juuso Oikarinen (1):
mac80211: Add interface for driver to temporarily disable dynamic ps
include/net/mac80211.h | 15 +++++++++++++++
net/mac80211/ieee80211_i.h | 3 +++
net/mac80211/iface.c | 1 +
net/mac80211/mlme.c | 20 +++++++++++++++++++-
net/mac80211/rx.c | 3 ++-
net/mac80211/tx.c | 4 ++++
6 files changed, 44 insertions(+), 2 deletions(-)
^ permalink raw reply
* [RFC PATCHv2 1/1] mac80211: Add interface for driver to temporarily disable dynamic ps
From: Juuso Oikarinen @ 2010-05-31 7:05 UTC (permalink / raw)
To: linux-wireless
In-Reply-To: <1275289547-7104-1-git-send-email-juuso.oikarinen@nokia.com>
This mechanism introduced in this patch applies (at least) for hardware
designs using a single shared antenna for both WLAN and BT. In these designs,
the antenna must be toggled between WLAN and BT.
In those hardware, managing WLAN co-existence with Bluetooth requires WLAN
full power save whenever there is Bluetooth activity in order for WLAN to be
able to periodically relinquish the antenna to be used for BT. This is because
BT can only access the shared antenna when WLAN is idle or asleep.
Some hardware, for instance the wl1271, are able to indicate to the host
whenever there is BT traffic. In essence, the hardware will send an indication
to the host whenever there is, for example, SCO traffic or A2DP traffic, and
will send another indication when the traffic is over.
The hardware gets information of Bluetooth traffic via hardware co-existence
control lines - these lines are used to negotiate the shared antenna
ownership. The hardware will give the antenna to BT whenever WLAN is sleeping.
This patch adds the interface to mac80211 to facilitate temporarily disabling
of dynamic power save as per request of the WLAN driver. This interface will
immediately force WLAN to full powersave, hence allowing BT coexistence as
described above.
In these kind of shared antenna desings, when WLAN powersave is fully disabled,
Bluetooth will not work simultaneously with WLAN at all. This patch does not
address that problem. This interface will not change PSM state, so if PSM is
disabled it will remain so. Solving this problem requires knowledge about BT
state, and is best done in user-space.
Signed-off-by: Juuso Oikarinen <juuso.oikarinen@nokia.com>
---
include/net/mac80211.h | 15 +++++++++++++++
net/mac80211/ieee80211_i.h | 3 +++
net/mac80211/iface.c | 1 +
net/mac80211/mlme.c | 20 +++++++++++++++++++-
net/mac80211/rx.c | 3 ++-
net/mac80211/tx.c | 4 ++++
6 files changed, 44 insertions(+), 2 deletions(-)
diff --git a/include/net/mac80211.h b/include/net/mac80211.h
index de22cbf..e4a97ea 100644
--- a/include/net/mac80211.h
+++ b/include/net/mac80211.h
@@ -2460,6 +2460,21 @@ void ieee80211_beacon_loss(struct ieee80211_vif *vif);
void ieee80211_connection_loss(struct ieee80211_vif *vif);
/**
+ * ieee80211_disable_dyn_ps - force mac80211 to temporarily disable dynamic psm
+ *
+ * @vif: &struct ieee80211_vif pointer from the add_interface callback.
+ *
+ * Some hardware require full power save to manage simultaneous BT traffic
+ * on the WLAN frequency. Full PSM is required periodically, whenever there are
+ * burst of BT traffic. The hardware gets information of BT traffic via
+ * hardware co-existence lines, and consequentially requests mac80211 to
+ * (temporarily) enter full psm.
+ * This function will only temporarily disable dynamic PS, not enable PSM if
+ * it was not already enabled.
+ */
+void ieee80211_disable_dyn_ps(struct ieee80211_vif *vif, bool disable);
+
+/**
* ieee80211_cqm_rssi_notify - inform a configured connection quality monitoring
* rssi threshold triggered
*
diff --git a/net/mac80211/ieee80211_i.h b/net/mac80211/ieee80211_i.h
index 1a9e2da..cab32c7 100644
--- a/net/mac80211/ieee80211_i.h
+++ b/net/mac80211/ieee80211_i.h
@@ -505,6 +505,9 @@ struct ieee80211_sub_if_data {
*/
bool ht_opmode_valid;
+ /* dynamic powersave temporarily disabled by driver */
+ bool disable_dyn_ps;
+
/* Fragment table for host-based reassembly */
struct ieee80211_fragment_entry fragments[IEEE80211_FRAGMENT_MAX];
unsigned int fragment_next;
diff --git a/net/mac80211/iface.c b/net/mac80211/iface.c
index 50deb01..ac2b8a5 100644
--- a/net/mac80211/iface.c
+++ b/net/mac80211/iface.c
@@ -421,6 +421,7 @@ static int ieee80211_stop(struct net_device *dev)
del_timer_sync(&local->dynamic_ps_timer);
cancel_work_sync(&local->dynamic_ps_enable_work);
+ sdata->disable_dyn_ps = false;
/* APs need special treatment */
if (sdata->vif.type == NL80211_IFTYPE_AP) {
diff --git a/net/mac80211/mlme.c b/net/mac80211/mlme.c
index 0839c4e..aaa86ee 100644
--- a/net/mac80211/mlme.c
+++ b/net/mac80211/mlme.c
@@ -478,6 +478,24 @@ static void ieee80211_handle_pwr_constr(struct ieee80211_sub_if_data *sdata,
}
}
+void ieee80211_disable_dyn_ps(struct ieee80211_vif *vif, bool disable)
+{
+ struct ieee80211_sub_if_data *sdata = vif_to_sdata(vif);
+ struct ieee80211_local *local = sdata->local;
+
+ WARN_ON(sdata->vif.type != NL80211_IFTYPE_STATION);
+
+ sdata->disable_dyn_ps = disable;
+
+ /* immediately go to psm */
+ if (disable && timer_pending(&local->dynamic_ps_timer)) {
+ ieee80211_queue_work(&local->hw,
+ &local->dynamic_ps_enable_work);
+ del_timer_sync(&local->dynamic_ps_timer);
+ }
+}
+EXPORT_SYMBOL(ieee80211_disable_dyn_ps);
+
/* powersave */
static void ieee80211_enable_ps(struct ieee80211_local *local,
struct ieee80211_sub_if_data *sdata)
@@ -491,7 +509,7 @@ static void ieee80211_enable_ps(struct ieee80211_local *local,
if (local->scanning)
return;
- if (conf->dynamic_ps_timeout > 0 &&
+ if (conf->dynamic_ps_timeout > 0 && !sdata->disable_dyn_ps &&
!(local->hw.flags & IEEE80211_HW_SUPPORTS_DYNAMIC_PS)) {
mod_timer(&local->dynamic_ps_timer, jiffies +
msecs_to_jiffies(conf->dynamic_ps_timeout));
diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c
index 6e2a7bc..e11d52b 100644
--- a/net/mac80211/rx.c
+++ b/net/mac80211/rx.c
@@ -1793,7 +1793,8 @@ ieee80211_rx_h_data(struct ieee80211_rx_data *rx)
if (ieee80211_is_data(hdr->frame_control) &&
!is_multicast_ether_addr(hdr->addr1) &&
- local->hw.conf.dynamic_ps_timeout > 0 && local->ps_sdata) {
+ local->hw.conf.dynamic_ps_timeout > 0 && !sdata->disable_dyn_ps &&
+ local->ps_sdata) {
mod_timer(&local->dynamic_ps_timer, jiffies +
msecs_to_jiffies(local->hw.conf.dynamic_ps_timeout));
}
diff --git a/net/mac80211/tx.c b/net/mac80211/tx.c
index 680bcb7..6f6b046 100644
--- a/net/mac80211/tx.c
+++ b/net/mac80211/tx.c
@@ -194,6 +194,10 @@ ieee80211_tx_h_dynamic_ps(struct ieee80211_tx_data *tx)
if (local->hw.flags & IEEE80211_HW_SUPPORTS_DYNAMIC_PS)
return TX_CONTINUE;
+ /* dynamic PS has not been temporarily disabled by driver */
+ if (tx->sdata->disable_dyn_ps)
+ return TX_CONTINUE;
+
/* dynamic power save disabled */
if (local->hw.conf.dynamic_ps_timeout <= 0)
return TX_CONTINUE;
--
1.6.3.3
^ permalink raw reply related
* Re: [ath5k-devel] [PATCH] ath5k: disable ASPM
From: Bruno Randolf @ 2010-05-31 1:06 UTC (permalink / raw)
To: ath5k-devel; +Cc: Pavel Roskin, Jussi Kivilinna, linux-wireless
In-Reply-To: <1275078476.18152.10.camel@mj>
On Saturday 29 May 2010 05:27:56 Pavel Roskin wrote:
> If we need to add GPL code to ath5k, it could go to a separate file.
> But if that separation becomes inconvenient, we could drop BSD
> compatibility from ath5k. I don't see any benefit from dual licensing,
> unless some existing ath5k contributors are BSD developers who would
> stop working on the code in case of relicensing, but I don't think it's
> the case.
afaik, one of the reasons for the dual license is that *BSDs (our ancestors
from a ath5k point of view) should be able to benefit from improvements we
make. this applies mostly to atheros chipset related things, and is irrelevant
for linux-only implementation specifics.
also we can mix BSD and GPL in one file - see debug.c
bruno
^ permalink raw reply
* Re: wireless-regdb: FI/CZ updates
From: Carlos Laué @ 2010-05-30 22:20 UTC (permalink / raw)
To: linux-wireless; +Cc: Pekka Pietikainen
In-Reply-To: <20100528124258.GA27491@ee.oulu.fi>
I've helped with the regulatory rules for CZ, and I thought we should use lower power limits for 5.25 & 5.47 GHz, because we cannot assure TPC is enabled or not.
Apparently it should be fine to use this higher limit ( 200 mW / 1000 mW ).
Carlos
PS: This was discussed here in linux-wireless in december 2008, and Michael Green wrote:
> The tx power levels are worth discussing more. Even though the European
> countries are harmonized on EN301 893 which enforces 200mW EIRP in 5.15-5.35 and
> 1W EIRP in 5.470-5.725, vendors must not blindly set new hardware to transmit at
> these upper limits.
>
> Each board design must undergo conformance testing to the applicable RF
> conformance spec (in this case 301 893) at which time the vendor will discover
> that various other tests in the conformance spec will limit the achievable
> compliant tx power for that design and it's associated antennas (i.e. power
> spectral density, spurious emissions, etc. So using 200mW and 1W EIRP in code
> may be fine as an upper limit, fail safe, users of the code / hardware
> developers must be educated to ensure awareness that there is no universal
> "compliant tx power" that you can assign for a country that applies to all the
> different hardware out there.
>
> Michael Green
> Atheros Communications, Inc.
> mgreen@atheros.com
^ permalink raw reply
* Association problems - again
From: Jaroslav Fojtik @ 2010-05-30 22:08 UTC (permalink / raw)
To: linux-wireless
Dears,
I have found that ATH5k has severe problems during association to AP.
Sometimes it needs more than 100 attempts to association, before it connects
to AP.
ATH0="wlan1"
n=1
while (( $n <= 200 ))
do
ASOC=`iwconfig wlan1 | grep "Access Point: 00:15"`
if [[ $ASOC == "" ]]
then
echo Asoc failed $n!
ifconfig $ATH0 down
iwconfig $ATH0 txpower 12 channel 36 essid "dvrmn.heaven-czfree.net"
ifconfig $ATH0 up
sleep 2
else
echo Asociated - $ASOC.
break
fi
n=$(( n+1 ))
done
It consumes more than 200 seconds to finish association:
[ 149.690938] ath5k phy1: failed to put device on hold
[ 149.735596] ADDRCONF(NETDEV_UP): wlan1: link is not ready
[ 149.926717] wlan1: direct probe to 00:15:6d:d6:2a:9d (try 1)
[ 150.013353] eth3: no IPv6 routers present
[ 150.126699] wlan1: direct probe to 00:15:6d:d6:2a:9d (try 2)
[ 150.326707] wlan1: direct probe to 00:15:6d:d6:2a:9d (try 3)
[ 150.526696] wlan1: direct probe to 00:15:6d:d6:2a:9d timed out
[ 160.292015] eth3: link up, 100Mbps, full-duplex, lpa 0x41E1
[ 160.514233] ADDRCONF(NETDEV_UP): wlan1: link is not ready
[ 160.706709] wlan1: direct probe to 00:15:6d:d6:2a:9d (try 1)
[ 160.906713] wlan1: direct probe to 00:15:6d:d6:2a:9d (try 2)
[ 161.106715] wlan1: direct probe to 00:15:6d:d6:2a:9d (try 3)
[ 161.306696] wlan1: direct probe to 00:15:6d:d6:2a:9d timed out
[ 162.566424] ADDRCONF(NETDEV_UP): wlan1: link is not ready
[ 162.756713] wlan1: direct probe to 00:15:6d:d6:2a:9d (try 1)
[ 162.956705] wlan1: direct probe to 00:15:6d:d6:2a:9d (try 2)
[ 163.156702] wlan1: direct probe to 00:15:6d:d6:2a:9d (try 3)
[ 163.356701] wlan1: direct probe to 00:15:6d:d6:2a:9d timed out
[ 164.616070] ADDRCONF(NETDEV_UP): wlan1: link is not ready
[ 164.806727] wlan1: direct probe to 00:15:6d:d6:2a:9d (try 1)
[ 165.006713] wlan1: direct probe to 00:15:6d:d6:2a:9d (try 2)
[ 165.206705] wlan1: direct probe to 00:15:6d:d6:2a:9d (try 3)
[ 165.406713] wlan1: direct probe to 00:15:6d:d6:2a:9d timed out
[ 166.664287] ADDRCONF(NETDEV_UP): wlan1: link is not ready
[ 166.856483] wlan1: direct probe to 00:15:6d:d6:2a:9d (try 1)
[ 167.053379] wlan1: direct probe to 00:15:6d:d6:2a:9d (try 2)
[ 167.253367] wlan1: direct probe to 00:15:6d:d6:2a:9d (try 3)
[ 167.453376] wlan1: direct probe to 00:15:6d:d6:2a:9d timed out
[ 168.714132] ADDRCONF(NETDEV_UP): wlan1: link is not ready
[ 168.906485] wlan1: direct probe to 00:15:6d:d6:2a:9d (try 1)
[ 169.103365] wlan1: direct probe to 00:15:6d:d6:2a:9d (try 2)
[ 169.303364] wlan1: direct probe to 00:15:6d:d6:2a:9d (try 3)
[ 169.503375] wlan1: direct probe to 00:15:6d:d6:2a:9d timed out
[ 170.560019] eth3: no IPv6 routers present
[ 170.762425] ADDRCONF(NETDEV_UP): wlan1: link is not ready
[ 170.953462] wlan1: direct probe to 00:15:6d:d6:2a:9d (try 1)
[ 171.153379] wlan1: direct probe to 00:15:6d:d6:2a:9d (try 2)
[ 171.353371] wlan1: direct probe to 00:15:6d:d6:2a:9d (try 3)
[ 171.553366] wlan1: direct probe to 00:15:6d:d6:2a:9d timed out
[ 181.333624] eth3: link up, 100Mbps, full-duplex, lpa 0x41E1
[ 181.581997] ADDRCONF(NETDEV_UP): wlan1: link is not ready
[ 181.773383] wlan1: direct probe to 00:15:6d:d6:2a:9d (try 1)
[ 181.973363] wlan1: direct probe to 00:15:6d:d6:2a:9d (try 2)
[ 182.173362] wlan1: direct probe to 00:15:6d:d6:2a:9d (try 3)
[ 182.373367] wlan1: direct probe to 00:15:6d:d6:2a:9d timed out
[ 183.643261] ADDRCONF(NETDEV_UP): wlan1: link is not ready
[ 183.833377] wlan1: direct probe to 00:15:6d:d6:2a:9d (try 1)
[ 184.033370] wlan1: direct probe to 00:15:6d:d6:2a:9d (try 2)
[ 184.233371] wlan1: direct probe to 00:15:6d:d6:2a:9d (try 3)
[ 184.433365] wlan1: direct probe to 00:15:6d:d6:2a:9d timed out
[ 185.692285] ADDRCONF(NETDEV_UP): wlan1: link is not ready
[ 185.883687] wlan1: direct probe to 00:15:6d:d6:2a:9d (try 1)
[ 186.083378] wlan1: direct probe to 00:15:6d:d6:2a:9d (try 2)
[ 186.283371] wlan1: direct probe to 00:15:6d:d6:2a:9d (try 3)
[ 186.483368] wlan1: direct probe to 00:15:6d:d6:2a:9d timed out
[ 187.741481] ADDRCONF(NETDEV_UP): wlan1: link is not ready
[ 187.933379] wlan1: direct probe to 00:15:6d:d6:2a:9d (try 1)
[ 188.133362] wlan1: direct probe to 00:15:6d:d6:2a:9d (try 2)
[ 188.333370] wlan1: direct probe to 00:15:6d:d6:2a:9d (try 3)
[ 188.533366] wlan1: direct probe to 00:15:6d:d6:2a:9d timed out
[ 189.791035] ADDRCONF(NETDEV_UP): wlan1: link is not ready
[ 189.983882] wlan1: direct probe to 00:15:6d:d6:2a:9d (try 1)
[ 190.183371] wlan1: direct probe to 00:15:6d:d6:2a:9d (try 2)
[ 190.383364] wlan1: direct probe to 00:15:6d:d6:2a:9d (try 3)
[ 190.583359] wlan1: direct probe to 00:15:6d:d6:2a:9d timed out
[ 191.840237] ADDRCONF(NETDEV_UP): wlan1: link is not ready
[ 191.996686] eth3: no IPv6 routers present
[ 192.033413] wlan1: direct probe to 00:15:6d:d6:2a:9d (try 1)
[ 192.233377] wlan1: direct probe to 00:15:6d:d6:2a:9d (try 2)
[ 192.433370] wlan1: direct probe to 00:15:6d:d6:2a:9d (try 3)
[ 192.633359] wlan1: direct probe to 00:15:6d:d6:2a:9d timed out
[ 202.423994] eth3: link up, 100Mbps, full-duplex, lpa 0x41E1
[ 202.650309] ADDRCONF(NETDEV_UP): wlan1: link is not ready
[ 202.846714] wlan1: direct probe to 00:15:6d:d6:2a:9d (try 1)
[ 203.046695] wlan1: direct probe to 00:15:6d:d6:2a:9d (try 2)
[ 203.246704] wlan1: direct probe to 00:15:6d:d6:2a:9d (try 3)
[ 203.446706] wlan1: direct probe to 00:15:6d:d6:2a:9d timed out
[ 204.711466] ADDRCONF(NETDEV_UP): wlan1: link is not ready
[ 204.903883] wlan1: direct probe to 00:15:6d:d6:2a:9d (try 1)
[ 205.103360] wlan1: direct probe to 00:15:6d:d6:2a:9d (try 2)
[ 205.303366] wlan1: direct probe to 00:15:6d:d6:2a:9d (try 3)
[ 205.503368] wlan1: direct probe to 00:15:6d:d6:2a:9d timed out
[ 206.760057] ADDRCONF(NETDEV_UP): wlan1: link is not ready
[ 206.949867] wlan1: direct probe to 00:15:6d:d6:2a:9d (try 1)
[ 207.146703] wlan1: direct probe to 00:15:6d:d6:2a:9d (try 2)
[ 207.347163] wlan1: direct probe to 00:15:6d:d6:2a:9d (try 3)
[ 207.546704] wlan1: direct probe to 00:15:6d:d6:2a:9d timed out
[ 208.809326] ADDRCONF(NETDEV_UP): wlan1: link is not ready
[ 208.999864] wlan1: direct probe to 00:15:6d:d6:2a:9d (try 1)
[ 209.196698] wlan1: direct probe to 00:15:6d:d6:2a:9d (try 2)
[ 209.396701] wlan1: direct probe to 00:15:6d:d6:2a:9d (try 3)
[ 209.596696] wlan1: direct probe to 00:15:6d:d6:2a:9d timed out
[ 210.857783] ADDRCONF(NETDEV_UP): wlan1: link is not ready
[ 211.049811] wlan1: direct probe to 00:15:6d:d6:2a:9d (try 1)
[ 211.246704] wlan1: direct probe to 00:15:6d:d6:2a:9d (try 2)
[ 211.446701] wlan1: direct probe to 00:15:6d:d6:2a:9d (try 3)
[ 211.646705] wlan1: direct probe to 00:15:6d:d6:2a:9d timed out
[ 212.426682] eth3: no IPv6 routers present
[ 212.907265] ADDRCONF(NETDEV_UP): wlan1: link is not ready
[ 213.099820] wlan1: direct probe to 00:15:6d:d6:2a:9d (try 1)
[ 213.296710] wlan1: direct probe to 00:15:6d:d6:2a:9d (try 2)
[ 213.496706] wlan1: direct probe to 00:15:6d:d6:2a:9d (try 3)
[ 213.696695] wlan1: direct probe to 00:15:6d:d6:2a:9d timed out
[ 223.477970] eth3: link up, 100Mbps, full-duplex, lpa 0x41E1
[ 223.718622] ADDRCONF(NETDEV_UP): wlan1: link is not ready
[ 223.910122] wlan1: direct probe to 00:15:6d:d6:2a:9d (try 1)
[ 224.110035] wlan1: direct probe to 00:15:6d:d6:2a:9d (try 2)
[ 224.310027] wlan1: direct probe to 00:15:6d:d6:2a:9d (try 3)
[ 224.510024] wlan1: direct probe to 00:15:6d:d6:2a:9d timed out
[ 225.787482] ADDRCONF(NETDEV_UP): wlan1: link is not ready
[ 225.979812] wlan1: direct probe to 00:15:6d:d6:2a:9d (try 1)
[ 226.176693] wlan1: direct probe to 00:15:6d:d6:2a:9d (try 2)
[ 226.376697] wlan1: direct probe to 00:15:6d:d6:2a:9d (try 3)
[ 226.576691] wlan1: direct probe to 00:15:6d:d6:2a:9d timed out
[ 227.836521] ADDRCONF(NETDEV_UP): wlan1: link is not ready
[ 228.026489] wlan1: direct probe to 00:15:6d:d6:2a:9d (try 1)
[ 228.223418] wlan1: direct probe to 00:15:6d:d6:2a:9d (try 2)
[ 228.423372] wlan1: direct probe to 00:15:6d:d6:2a:9d (try 3)
[ 228.623358] wlan1: direct probe to 00:15:6d:d6:2a:9d timed out
[ 229.885582] ADDRCONF(NETDEV_UP): wlan1: link is not ready
[ 230.080558] wlan1: direct probe to 00:15:6d:d6:2a:9d (try 1)
[ 230.280545] wlan1: direct probe to 00:15:6d:d6:2a:9d (try 2)
[ 230.480546] wlan1: direct probe to 00:15:6d:d6:2a:9d (try 3)
[ 230.680541] wlan1: direct probe to 00:15:6d:d6:2a:9d timed out
[ 231.935080] ADDRCONF(NETDEV_UP): wlan1: link is not ready
[ 232.126716] wlan1: direct probe to 00:15:6d:d6:2a:9d (try 1)
[ 232.326702] wlan1: direct probe to 00:15:6d:d6:2a:9d (try 2)
[ 232.526693] wlan1: direct probe to 00:15:6d:d6:2a:9d (try 3)
[ 232.726688] wlan1: direct probe to 00:15:6d:d6:2a:9d timed out
[ 233.984012] ADDRCONF(NETDEV_UP): wlan1: link is not ready
[ 234.053347] eth3: no IPv6 routers present
[ 234.176479] wlan1: direct probe to 00:15:6d:d6:2a:9d (try 1)
[ 234.373386] wlan1: direct probe to 00:15:6d:d6:2a:9d (try 2)
[ 234.573374] wlan1: direct probe to 00:15:6d:d6:2a:9d (try 3)
[ 234.773359] wlan1: direct probe to 00:15:6d:d6:2a:9d timed out
[ 244.558830] eth3: link up, 100Mbps, full-duplex, lpa 0x41E1
[ 244.785451] ADDRCONF(NETDEV_UP): wlan1: link is not ready
[ 244.976492] wlan1: direct probe to 00:15:6d:d6:2a:9d (try 1)
[ 245.173365] wlan1: direct probe to 00:15:6d:d6:2a:9d (try 2)
[ 245.373362] wlan1: direct probe to 00:15:6d:d6:2a:9d (try 3)
[ 245.573360] wlan1: direct probe to 00:15:6d:d6:2a:9d timed out
[ 246.846439] ADDRCONF(NETDEV_UP): wlan1: link is not ready
[ 247.036701] wlan1: direct probe to 00:15:6d:d6:2a:9d (try 1)
[ 247.236695] wlan1: direct probe to 00:15:6d:d6:2a:9d (try 2)
[ 247.436699] wlan1: direct probe to 00:15:6d:d6:2a:9d (try 3)
[ 247.636688] wlan1: direct probe to 00:15:6d:d6:2a:9d timed out
[ 248.895403] ADDRCONF(NETDEV_UP): wlan1: link is not ready
[ 250.944729] ADDRCONF(NETDEV_UP): wlan1: link is not ready
[ 251.136496] wlan1: direct probe to 00:15:6d:d6:2a:9d (try 1)
[ 251.333367] wlan1: direct probe to 00:15:6d:d6:2a:9d (try 2)
[ 251.533368] wlan1: direct probe to 00:15:6d:d6:2a:9d (try 3)
[ 251.733360] wlan1: direct probe to 00:15:6d:d6:2a:9d timed out
[ 252.993801] ADDRCONF(NETDEV_UP): wlan1: link is not ready
[ 253.186478] wlan1: direct probe to 00:15:6d:d6:2a:9d (try 1)
[ 253.383361] wlan1: direct probe to 00:15:6d:d6:2a:9d (try 2)
[ 253.583362] wlan1: direct probe to 00:15:6d:d6:2a:9d (try 3)
[ 253.783357] wlan1: direct probe to 00:15:6d:d6:2a:9d timed out
[ 255.042771] ADDRCONF(NETDEV_UP): wlan1: link is not ready
[ 255.233146] wlan1: direct probe to 00:15:6d:d6:2a:9d (try 1)
[ 255.430034] wlan1: direct probe to 00:15:6d:d6:2a:9d (try 2)
[ 255.436682] eth3: no IPv6 routers present
[ 255.630037] wlan1: direct probe to 00:15:6d:d6:2a:9d (try 3)
[ 255.830023] wlan1: direct probe to 00:15:6d:d6:2a:9d timed out
[ 273.252513] eth3: link up, 100Mbps, full-duplex, lpa 0x41E1
[ 273.478721] ADDRCONF(NETDEV_UP): wlan1: link is not ready
[ 273.673211] wlan1: direct probe to 00:15:6d:d6:2a:9d (try 1)
[ 273.870025] wlan1: direct probe to 00:15:6d:d6:2a:9d (try 2)
[ 274.070021] wlan1: direct probe to 00:15:6d:d6:2a:9d (try 3)
[ 274.270024] wlan1: direct probe to 00:15:6d:d6:2a:9d timed out
[ 275.548287] ADDRCONF(NETDEV_UP): wlan1: link is not ready
[ 275.739808] wlan1: direct probe to 00:15:6d:d6:2a:9d (try 1)
[ 275.936697] wlan1: direct probe to 00:15:6d:d6:2a:9d (try 2)
[ 276.136686] wlan1: direct probe to 00:15:6d:d6:2a:9d (try 3)
[ 276.336687] wlan1: direct probe to 00:15:6d:d6:2a:9d timed out
[ 277.597522] ADDRCONF(NETDEV_UP): wlan1: link is not ready
[ 277.789806] wlan1: direct probe to 00:15:6d:d6:2a:9d (try 1)
[ 277.986694] wlan1: direct probe to 00:15:6d:d6:2a:9d (try 2)
[ 278.186686] wlan1: direct probe to 00:15:6d:d6:2a:9d (try 3)
[ 278.386695] wlan1: direct probe to 00:15:6d:d6:2a:9d timed out
[ 279.646296] ADDRCONF(NETDEV_UP): wlan1: link is not ready
[ 279.836487] wlan1: direct probe to 00:15:6d:d6:2a:9d (try 1)
[ 280.033361] wlan1: direct probe to 00:15:6d:d6:2a:9d (try 2)
[ 280.233355] wlan1: direct probe to 00:15:6d:d6:2a:9d (try 3)
[ 280.433355] wlan1: direct probe to 00:15:6d:d6:2a:9d timed out
[ 281.695678] ADDRCONF(NETDEV_UP): wlan1: link is not ready
[ 281.886472] wlan1: direct probe to 00:15:6d:d6:2a:9d (try 1)
[ 282.083360] wlan1: direct probe to 00:15:6d:d6:2a:9d (try 2)
[ 282.283359] wlan1: direct probe to 00:15:6d:d6:2a:9d (try 3)
[ 282.483355] wlan1: direct probe to 00:15:6d:d6:2a:9d timed out
[ 283.306676] eth3: no IPv6 routers present
[ 283.744406] ADDRCONF(NETDEV_UP): wlan1: link is not ready
[ 283.936709] wlan1: direct probe to 00:15:6d:d6:2a:9d (try 1)
[ 284.136700] wlan1: direct probe to 00:15:6d:d6:2a:9d (try 2)
[ 284.336690] wlan1: direct probe to 00:15:6d:d6:2a:9d (try 3)
[ 284.536689] wlan1: direct probe to 00:15:6d:d6:2a:9d timed out
[ 294.320546] eth3: link up, 100Mbps, full-duplex, lpa 0x41E1
[ 294.563434] ADDRCONF(NETDEV_UP): wlan1: link is not ready
[ 294.756472] wlan1: direct probe to 00:15:6d:d6:2a:9d (try 1)
[ 294.953366] wlan1: direct probe to 00:15:6d:d6:2a:9d (try 2)
[ 295.153354] wlan1: direct probe to 00:15:6d:d6:2a:9d (try 3)
[ 295.353357] wlan1: direct probe to 00:15:6d:d6:2a:9d timed out
[ 296.616435] ADDRCONF(NETDEV_UP): wlan1: link is not ready
[ 296.806715] wlan1: direct probe to 00:15:6d:d6:2a:9d (try 1)
[ 297.006686] wlan1: direct probe to 00:15:6d:d6:2a:9d (try 2)
[ 297.206682] wlan1: direct probe to 00:15:6d:d6:2a:9d (try 3)
[ 297.406693] wlan1: direct probe to 00:15:6d:d6:2a:9d timed out
[ 298.664775] ADDRCONF(NETDEV_UP): wlan1: link is not ready
[ 298.856699] wlan1: direct probe to 00:15:6d:d6:2a:9d (try 1)
[ 299.056694] wlan1: direct probe to 00:15:6d:d6:2a:9d (try 2)
[ 299.256684] wlan1: direct probe to 00:15:6d:d6:2a:9d (try 3)
[ 299.456695] wlan1: direct probe to 00:15:6d:d6:2a:9d timed out
[ 300.714297] ADDRCONF(NETDEV_UP): wlan1: link is not ready
[ 300.906535] wlan1: authenticate with 00:15:6d:d6:2a:9d (try 1)
[ 300.907495] wlan1: authenticated
[ 300.907586] wlan1: associate with 00:15:6d:d6:2a:9d (try 1)
[ 300.908710] wlan1: RX AssocResp from 00:15:6d:d6:2a:9d (capab=0x401 status=0 aid=1)
[ 300.908732] wlan1: associated
[ 300.913565] ADDRCONF(NETDEV_CHANGE): wlan1: link becomes ready
[ 304.836660] eth3: no IPv6 routers present
[ 311.373341] wlan1: no IPv6 routers present
[ 314.990007] wlan0: no IPv6 routers present
regards
Jara
^ permalink raw reply
* Re: MDNS is broken in latest -git
From: Maxim Levitsky @ 2010-05-30 14:44 UTC (permalink / raw)
To: netdev@vger.kernel.org; +Cc: linux-wireless
In-Reply-To: <1275066591.3390.4.camel@maxim-laptop>
On Fri, 2010-05-28 at 20:09 +0300, Maxim Levitsky wrote:
> On Fri, 2010-05-28 at 18:02 +0300, Maxim Levitsky wrote:
> > On latest git, it became impossible to use hostname.local alias to
> > access my network hosts.
> >
> > In fact when I look at 'avahi-discover' I see nothing but local
> > services.
> >
> > I did a bisect, but unfortunely ended with merge commit, although
> > bisection seem to be normal (and I didn't do any shortcuts).
>
> Since starting 'wireshark' magicly temporarly fixes this, I suspect that
> mulicast packets don't get through.
>
> This smells like iwl3945 bug.
>
> I use linus' master tree now.
Anybody?
Best regards,
Maxim Levitsky
^ permalink raw reply
* [PATCH] mac80211: drop control frames after processing
From: Johannes Berg @ 2010-05-30 12:53 UTC (permalink / raw)
To: John Linville; +Cc: linux-wireless
After ieee80211_rx_h_ctrl() processing we only
want to process management (including action)
frames, so there's no point in letting control
frames continue.
Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
---
net/mac80211/rx.c | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
--- wireless-testing.orig/net/mac80211/rx.c 2010-05-30 14:49:30.000000000 +0200
+++ wireless-testing/net/mac80211/rx.c 2010-05-30 14:50:13.000000000 +0200
@@ -1853,7 +1853,12 @@ ieee80211_rx_h_ctrl(struct ieee80211_rx_
return RX_QUEUED;
}
- return RX_CONTINUE;
+ /*
+ * After this point, we only want management frames,
+ * so we can drop all remaining control frames to
+ * cooked monitor interfaces.
+ */
+ return RX_DROP_MONITOR;
}
static void ieee80211_process_sa_query_req(struct ieee80211_sub_if_data *sdata,
^ permalink raw reply
* [PATCH 2.6.34] mac80211: fix blockack-req processing
From: Johannes Berg @ 2010-05-30 12:52 UTC (permalink / raw)
To: John Linville; +Cc: linux-wireless, Daniel Halperin
Daniel reported that the paged RX changes had
broken blockack request frame processing due
to using data that wasn't really part of the
skb data.
Fix this using skb_copy_bits() for the needed
data. As a side effect, this adds a check on
processing too short frames, which previously
this code could do.
Reported-by: Daniel Halperin <dhalperi@cs.washington.edu>
Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
---
Ok so maybe this patch is better than the
linearize one after all since we only ever
process this type of control frame anyway,
and unlike skb_linearize() skb_copy_bits()
cannot fail (unless the bits didn't exist
in the frame to start with).
net/mac80211/rx.c | 13 +++++++++++--
1 file changed, 11 insertions(+), 2 deletions(-)
--- wireless-testing.orig/net/mac80211/rx.c 2010-05-28 22:25:07.000000000 +0200
+++ wireless-testing/net/mac80211/rx.c 2010-05-30 14:44:00.000000000 +0200
@@ -1819,17 +1819,26 @@ ieee80211_rx_h_ctrl(struct ieee80211_rx_
return RX_CONTINUE;
if (ieee80211_is_back_req(bar->frame_control)) {
+ struct {
+ __le16 control, start_seq_num;
+ } __packed bar_data;
+
if (!rx->sta)
return RX_DROP_MONITOR;
+
+ if (skb_copy_bits(skb, offsetof(struct ieee80211_bar, control),
+ &bar_data, sizeof(bar_data)))
+ return RX_DROP_MONITOR;
+
spin_lock(&rx->sta->lock);
- tid = le16_to_cpu(bar->control) >> 12;
+ tid = le16_to_cpu(bar_data.control) >> 12;
if (!rx->sta->ampdu_mlme.tid_active_rx[tid]) {
spin_unlock(&rx->sta->lock);
return RX_DROP_MONITOR;
}
tid_agg_rx = rx->sta->ampdu_mlme.tid_rx[tid];
- start_seq_num = le16_to_cpu(bar->start_seq_num) >> 4;
+ start_seq_num = le16_to_cpu(bar_data.start_seq_num) >> 4;
/* reset session timer */
if (tid_agg_rx->timeout)
^ permalink raw reply
* [PATCH] ath5k: depend on CONFIG_PM_SLEEP for suspend/resume functions
From: Tobias Doerffel @ 2010-05-29 22:02 UTC (permalink / raw)
To: ath5k-devel; +Cc: linux-wireless, Tobias Doerffel
When building a kernel with CONFIG_PM=y but neither suspend nor
hibernate support, the compiler complains about the static functions
ath5k_pci_suspend() and ath5k_pci_resume() not being used:
drivers/net/wireless/ath/ath5k/base.c:713:12: warning: ‘ath5k_pci_suspend’ defined but not used
drivers/net/wireless/ath/ath5k/base.c:722:12: warning: ‘ath5k_pci_resume’ defined but not used
Depending on CONFIG_PM_SLEEP rather than CONFIG_PM fixes the issue.
Signed-off-by: Tobias Doerffel <tobias.doerffel@gmail.com>
---
drivers/net/wireless/ath/ath5k/base.c | 8 ++++----
1 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/drivers/net/wireless/ath/ath5k/base.c b/drivers/net/wireless/ath/ath5k/base.c
index 8a36aa6..d4bab48 100644
--- a/drivers/net/wireless/ath/ath5k/base.c
+++ b/drivers/net/wireless/ath/ath5k/base.c
@@ -195,7 +195,7 @@ static const struct ieee80211_rate ath5k_rates[] = {
static int __devinit ath5k_pci_probe(struct pci_dev *pdev,
const struct pci_device_id *id);
static void __devexit ath5k_pci_remove(struct pci_dev *pdev);
-#ifdef CONFIG_PM
+#ifdef CONFIG_PM_SLEEP
static int ath5k_pci_suspend(struct device *dev);
static int ath5k_pci_resume(struct device *dev);
@@ -203,7 +203,7 @@ static SIMPLE_DEV_PM_OPS(ath5k_pm_ops, ath5k_pci_suspend, ath5k_pci_resume);
#define ATH5K_PM_OPS (&ath5k_pm_ops)
#else
#define ATH5K_PM_OPS NULL
-#endif /* CONFIG_PM */
+#endif /* CONFIG_PM_SLEEP */
static struct pci_driver ath5k_pci_driver = {
.name = KBUILD_MODNAME,
@@ -709,7 +709,7 @@ ath5k_pci_remove(struct pci_dev *pdev)
ieee80211_free_hw(hw);
}
-#ifdef CONFIG_PM
+#ifdef CONFIG_PM_SLEEP
static int ath5k_pci_suspend(struct device *dev)
{
struct ieee80211_hw *hw = pci_get_drvdata(to_pci_dev(dev));
@@ -735,7 +735,7 @@ static int ath5k_pci_resume(struct device *dev)
ath5k_led_enable(sc);
return 0;
}
-#endif /* CONFIG_PM */
+#endif /* CONFIG_PM_SLEEP */
/***********************\
--
1.7.0.4
^ permalink raw reply related
* Commit 6b5d11 breaks association with WPA enabled APs
From: Tobias Doerffel @ 2010-05-29 21:36 UTC (permalink / raw)
To: ath5k-devel; +Cc: linux-wireless
[-- Attachment #1: Type: Text/Plain, Size: 3277 bytes --]
Hi,
using the latest kernel (Linus master branch) breaks my wireless connection
(ath5k/AR5001), i.e. I'm not able to connect to my WPA-secured AP anymore.
It's been working fine up to (and including) 2.6.34.
Verbose output of wpa_supplicant:
Selecting BSS from priority group 0
Try to find WPA-enabled AP
0: 00:XX:XX:XX:XX:c6 ssid='myAP' wpa_ie_len=0 rsn_ie_len=20 caps=0x11
skip - SSID mismatch
selected based on RSN IE
selected WPA AP 00:XX:11:XX:XX:c6 ssid='myAP'
Trying to associate with 00:XX:XX:XX:XX:c6 (SSID='myAP' freq=2462 MHz)
Cancelling scan request
WPA: clearing own WPA/RSN IE
Automatic auth_alg selection: 0x1
RSN: using IEEE 802.11i/D9.0
WPA: Selected cipher suites: group 16 pairwise 16 key_mgmt 2 proto 2
WPA: clearing AP WPA IE
WPA: set AP RSN IE - hexdump(len=22): 30 14 01 00 00 0f ac 04 01 00 00 0f ac
04 01 00 00 0f ac 02 00 00
WPA: using GTK CCMP
WPA: using PTK CCMP
WPA: using KEY_MGMT WPA-PSK
WPA: not using MGMT group cipher
WPA: Set own WPA IE default - hexdump(len=22): 30 14 01 00 00 0f ac 04 01 00
00 0f ac 04 01 00 00 0f ac 02 00 00
No keys have been configured - skip key clearing
wpa_driver_wext_set_drop_unencrypted
State: SCANNING -> ASSOCIATING
wpa_driver_wext_set_operstate: operstate 0->0 (DORMANT)
WEXT: Operstate: linkmode=-1, operstate=5
wpa_driver_wext_associate
wpa_driver_wext_set_psk
Setting authentication timeout: 10 sec 0 usec
EAPOL: External notification - EAP success=0
EAPOL: External notification - EAP fail=0
EAPOL: External notification - portControl=Auto
RSN: Ignored PMKID candidate without preauth flag
RTM_NEWLINK: operstate=0 ifi_flags=0x1003 ([UP])
RTM_NEWLINK, IFLA_IFNAME: Interface 'wlan0' added
Wireless event: cmd=0x8b06 len=8
RTM_NEWLINK: operstate=0 ifi_flags=0x1003 ([UP])
RTM_NEWLINK, IFLA_IFNAME: Interface 'wlan0' added
Wireless event: cmd=0x8b04 len=12
RTM_NEWLINK: operstate=0 ifi_flags=0x1003 ([UP])
RTM_NEWLINK, IFLA_IFNAME: Interface 'wlan0' added
Wireless event: cmd=0x8b1a len=15
[delay of some seconds]
Authentication with 00:XX:X:XX:XX:c6 timed out.
Added BSSID 00:XX:XX:XX:XX:c6 into blacklist
No keys have been configured - skip key clearing
State: ASSOCIATING -> DISCONNECTED
wpa_driver_wext_set_operstate: operstate 0->0 (DORMANT)
WEXT: Operstate: linkmode=-1, operstate=5
EAPOL: External notification - portEnabled=0
EAPOL: External notification - portValid=0
EAPOL: External notification - EAP success=0
Setting scan request: 0 sec 0 usec
State: DISCONNECTED -> SCANNING
Starting AP scan (broadcast SSID)
Scan requested (ret=0) - scan timeout 30 seconds
RTM_NEWLINK: operstate=0 ifi_flags=0x1003 ([UP])
RTM_NEWLINK, IFLA_IFNAME: Interface 'wlan0' added
Wireless event: cmd=0x8b19 len=8
Received 3379 bytes of scan results (10 BSSes)
New scan results available
Selecting BSS from priority group 2
Try to find WPA-enabled AP
...
and the whole procedure starts over and over again. I therefore started to
bisect the issue and finally was able to blame commit
6b5d117eddc09cd976ad8030d715f4350f598a22 ("ath5k: clean up queue
manipulation"). After reverting the commit on-top of my branch, everything
works fine again! So please have a look at it and/or revert the commit.
Regards
Toby
[-- Attachment #2: This is a digitally signed message part. --]
[-- Type: application/pgp-signature, Size: 198 bytes --]
^ permalink raw reply
* Re: [PATCH 3/3] compat-wireless: run refresh only on last applied directory
From: Luis R. Rodriguez @ 2010-05-29 18:05 UTC (permalink / raw)
To: Hauke Mehrtens; +Cc: linux-wireless, mcgrof
In-Reply-To: <1275140672-4785-1-git-send-email-hauke@hauke-m.de>
On Sat, May 29, 2010 at 6:44 AM, Hauke Mehrtens <hauke@hauke-m.de> wrote:
> Running "./scripts/admin-refresh.sh -n -p -c refresh" failed because
> patchRefresh refreshes and applies every patch form the series and
> then reverse them all. If a patch from the next series in an other
> directory depends on that it will not apply any more.
>
> Now only the last series/directory will be refresh.
>
> Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
All applied, thanks!
Luis
^ permalink raw reply
* [PATCH 3/3] compat-wireless: run refresh only on last applied directory
From: Hauke Mehrtens @ 2010-05-29 13:44 UTC (permalink / raw)
To: lrodriguez; +Cc: linux-wireless, mcgrof, Hauke Mehrtens
In-Reply-To: <1275140107-4616-3-git-send-email-hauke@hauke-m.de>
Running "./scripts/admin-refresh.sh -n -p -c refresh" failed because
patchRefresh refreshes and applies every patch form the series and
then reverse them all. If a patch from the next series in an other
directory depends on that it will not apply any more.
Now only the last series/directory will be refresh.
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
---
commit comment was not ready ;-)
scripts/admin-update.sh | 14 ++++++++------
1 files changed, 8 insertions(+), 6 deletions(-)
diff --git a/scripts/admin-update.sh b/scripts/admin-update.sh
index 99ab6c3..36cce31 100755
--- a/scripts/admin-update.sh
+++ b/scripts/admin-update.sh
@@ -391,12 +391,6 @@ patchRefresh() {
rm -rf patches.orig .pc $1/series
}
-if [[ "$REFRESH" = "y" ]]; then
- for dir in $EXTRA_PATCHES; do
- patchRefresh $dir
- done
-fi
-
ORIG_CODE=$(find ./ -type f -name \*.[ch] |
egrep -v "^./compat/|include/linux/compat" |
xargs wc -l | tail -1 | awk '{print $1}')
@@ -404,6 +398,14 @@ printf "\n${CYAN}compat-wireless code metrics${NORMAL}\n\n" > $CODE_METRICS
printf "${PURPLE}%10s${NORMAL} - Total upstream code being pulled\n" $ORIG_CODE >> $CODE_METRICS
for dir in $EXTRA_PATCHES; do
+ LAST_ELEM=$dir
+done
+
+for dir in $EXTRA_PATCHES; do
+ if [[ $LAST_ELEM = $dir && "$REFRESH" = y ]]; then
+ patchRefresh $dir
+ fi
+
FOUND=$(find $dir/ -name \*.patch | wc -l)
if [ $FOUND -eq 0 ]; then
continue
--
1.7.0.4
^ permalink raw reply related
* [PATCH 3/3] compat-wireless: run refresh only on last applied directory
From: Hauke Mehrtens @ 2010-05-29 13:35 UTC (permalink / raw)
To: lrodriguez; +Cc: linux-wireless, mcgrof, Hauke Mehrtens
In-Reply-To: <1275140107-4616-1-git-send-email-hauke@hauke-m.de>
running "./scripts/admin-refresh.sh -n -p -c refresh" failed because the patches were applied but
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
---
scripts/admin-update.sh | 14 ++++++++------
1 files changed, 8 insertions(+), 6 deletions(-)
diff --git a/scripts/admin-update.sh b/scripts/admin-update.sh
index 99ab6c3..36cce31 100755
--- a/scripts/admin-update.sh
+++ b/scripts/admin-update.sh
@@ -391,12 +391,6 @@ patchRefresh() {
rm -rf patches.orig .pc $1/series
}
-if [[ "$REFRESH" = "y" ]]; then
- for dir in $EXTRA_PATCHES; do
- patchRefresh $dir
- done
-fi
-
ORIG_CODE=$(find ./ -type f -name \*.[ch] |
egrep -v "^./compat/|include/linux/compat" |
xargs wc -l | tail -1 | awk '{print $1}')
@@ -404,6 +398,14 @@ printf "\n${CYAN}compat-wireless code metrics${NORMAL}\n\n" > $CODE_METRICS
printf "${PURPLE}%10s${NORMAL} - Total upstream code being pulled\n" $ORIG_CODE >> $CODE_METRICS
for dir in $EXTRA_PATCHES; do
+ LAST_ELEM=$dir
+done
+
+for dir in $EXTRA_PATCHES; do
+ if [[ $LAST_ELEM = $dir && "$REFRESH" = y ]]; then
+ patchRefresh $dir
+ fi
+
FOUND=$(find $dir/ -name \*.patch | wc -l)
if [ $FOUND -eq 0 ]; then
continue
--
1.7.0.4
^ permalink raw reply related
* [PATCH 2/3] compat-wireless: use /etc/init.d/ and not sudo service
From: Hauke Mehrtens @ 2010-05-29 13:35 UTC (permalink / raw)
To: lrodriguez; +Cc: linux-wireless, mcgrof, Hauke Mehrtens
In-Reply-To: <1275140107-4616-1-git-send-email-hauke@hauke-m.de>
sudo is not installed and used on all distributions. the user should
call the script with the needed rights and the script should not
include sudo. This fails on debian lenny.
service is only available on very recent distributions and not on old
ons like debian lenny in the default configuration. Use the old init.d
script. This also works on ubuntu 10.04.
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
---
scripts/btload.sh | 4 ++--
scripts/btunload.sh | 4 ++--
scripts/load.sh | 4 ++--
scripts/unload.sh | 4 ++--
4 files changed, 8 insertions(+), 8 deletions(-)
diff --git a/scripts/btload.sh b/scripts/btload.sh
index 50f37b6..e3f7cef 100755
--- a/scripts/btload.sh
+++ b/scripts/btload.sh
@@ -5,6 +5,6 @@ for i in $MODULES; do
modprobe $i
done
echo Starting bluetooth service..
-sudo service bluetooth start
-sudo service bluetooth status
+/etc/init.d/bluetooth start
+/etc/init.d/bluetooth status
diff --git a/scripts/btunload.sh b/scripts/btunload.sh
index c14f8c6..56046c2 100755
--- a/scripts/btunload.sh
+++ b/scripts/btunload.sh
@@ -1,8 +1,8 @@
#!/bin/bash
MODULES="hidp rfcomm bnep l2cap sco btusb bluetooth"
echo Stoping bluetooth service..
-sudo service bluetooth stop
-sudo service bluetooth status
+/etc/init.d/bluetooth stop
+/etc/init.d/bluetooth status
for i in $MODULES; do
grep ^$i /proc/modules 2>&1 > /dev/null
diff --git a/scripts/load.sh b/scripts/load.sh
index 9f82e2c..304798c 100755
--- a/scripts/load.sh
+++ b/scripts/load.sh
@@ -22,5 +22,5 @@ athload ath5k
# For b43 we must make sure to unload bcm43xx first
b43load b43
echo Starting bluetooth service..
-sudo service bluetooth start
-sudo service bluetooth status
+/etc/init.d/bluetooth start
+/etc/init.d/bluetooth status
diff --git a/scripts/unload.sh b/scripts/unload.sh
index 0cd8a0a..12bb35c 100755
--- a/scripts/unload.sh
+++ b/scripts/unload.sh
@@ -31,8 +31,8 @@ MODULES="$MODULES mac80211 cfg80211 lib80211"
MODULES="$MODULES hidp rfcomm bnep l2cap sco btusb bluetooth"
MODULES="$MODULES compat"
echo Stoping bluetooth service..
-sudo service bluetooth stop
-sudo service bluetooth status
+/etc/init.d/bluetooth stop
+/etc/init.d/bluetooth status
MADWIFI_MODULES="ath_pci ath_rate_sample wlan_scan_sta wlan ath_hal"
IPW3945D="/sbin/ipw3945d-`uname -r`"
--
1.7.0.4
^ permalink raw reply related
* [PATCH 1/3] compat-wireless: update clean scripts
From: Hauke Mehrtens @ 2010-05-29 13:35 UTC (permalink / raw)
To: lrodriguez; +Cc: linux-wireless, mcgrof, Hauke Mehrtens
Without this patch make fails after calling make clean because compat_*
files were deleted.
Delete all files generated by scripts/admin-update.sh in
scripts/admin-clean.sh and not in make clean
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
---
Makefile | 2 --
scripts/admin-clean.sh | 12 +++++++-----
2 files changed, 7 insertions(+), 7 deletions(-)
diff --git a/Makefile b/Makefile
index 1da7e87..e204112 100644
--- a/Makefile
+++ b/Makefile
@@ -337,8 +337,6 @@ clean:
$(MAKE) -C $(KLIB_BUILD) M=$(PWD) clean ;\
fi
@rm -f $(CREL_PRE)*
- @rm -f code-metrics.txt
- @rm -f compat_base_tree compat_base_tree_version compat_version
unload:
@./scripts/unload.sh
diff --git a/scripts/admin-clean.sh b/scripts/admin-clean.sh
index ae5f188..86d5460 100755
--- a/scripts/admin-clean.sh
+++ b/scripts/admin-clean.sh
@@ -2,12 +2,14 @@
if [ -d net ] ; then
make clean
fi
-rm -rf net drivers include
+rm -rf net
rm -rf drivers
rm -rf include
-rm -f Module.symvers
-rm -f git-describe
+rm -rf compat
+rm -rf udev
rm -f master-tag
-rm -f compat-git-release
-rm -f compat-release
+rm -f compat_base_tree
+rm -f compat_base_tree_version
+rm -f compat_version
+rm -f code-metrics.txt
echo "Cleaned wireless-bt-compat-2.6"
--
1.7.0.4
^ permalink raw reply related
* Re: pull request: wireless-2.6 2010-05-28
From: Sedat Dilek @ 2010-05-29 13:34 UTC (permalink / raw)
To: John W. Linville
Cc: davem, linux-wireless, netdev, linux-kernel, jiajia.zheng,
Abhijeet Kolekar, Johannes Berg, Reinette Chatre
In-Reply-To: <20100528180952.GC2405@tuxdriver.com>
Hi,
I have pulled wireless-2.6 GIT (master-2010-05-28) into Linus-tree
(2.6.34-git15) [0] and Intel Linux-Wireless Bug #2208 is present.
Two people confirmed the patch in [2] fixes:
1. iwlwifi-2.6 GIT master (commit f10a237c95abd6d64a3a24553bd1d3bcddd9108b)
2. compat-wireless (2010-05-21)
And it fixes also the above mentionned combination.
As a suggestion:
What about "copying" bug-reports (incl. its history) from IWL-BTS into
linux-wireless ML?
For example (dri-devel related) bug-reports from
bugzilla.freedesktop.org are "copied" into dri-devel ML.
Hope [2] gets quickly into wireless-2.6 GIT.
Kind Regards,
- Sedat -
References:
------------------
[0] commit 24010e460454ec0d2f4f0213b667b4349cbdb8e1:
Merge branch 'drm-linus' of git://git./linux/kernel/git/airlied/drm-2.6
[1] http://bugzilla.intellinuxwireless.org/show_bug.cgi?id=2208
[2] http://bugzilla.intellinuxwireless.org/attachment.cgi?id=2447
[3] http://bugzilla.intellinuxwireless.org/show_bug.cgi?id=2208#c8
[4] http://bugzilla.intellinuxwireless.org/show_bug.cgi?id=2208#c9
[ 446.893181] BUG: unable to handle kernel NULL pointer dereference at (null)
[ 446.893192] IP: [<f8e9eb54>]
iwl3945_get_channels_for_scan+0xb4/0x315 [iwl3945]
[ 446.893214] *pde = 00000000
[ 446.893220] Oops: 0000 [#1] PREEMPT SMP
[ 446.893228] last sysfs file:
/sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
[ 446.893233] Modules linked in: btrfs zlib_deflate crc32c libcrc32c
ufs qnx4 hfsplus hfs minix ntfs vfat msdos fat jfs xfs exportfs
reiserfs ext2 radeon ttm drm_kms_helper drm i2c_algo_bit i2c_core
acpi_cpufreq mperf cpufreq_ondemand cpufreq_stats freq_table
cpufreq_performance cpufreq_conservative cpufreq_powersave sco bridge
stp bnep rfcomm l2cap bluetooth aes_i586 aes_generic ppdev lp
kvm_intel kvm binfmt_misc ipv6 af_packet fuse ext4 jbd2 crc16
snd_hda_codec_si3054 snd_hda_codec_analog snd_hda_intel snd_hda_codec
snd_hwdep snd_pcm_oss snd_mixer_oss snd_pcm snd_seq_dummy snd_seq_oss
snd_seq_midi arc4 snd_rawmidi ecb snd_seq_midi_event iwl3945 iwlcore
snd_seq snd_timer snd_seq_device sierra usbserial snd parport_pc
mac80211 hp_wmi parport soundcore snd_page_alloc cfg80211 rfkill
joydev pcmcia irda pcspkr intel_agp tifm_7xx1 tifm_core rng_core
iTCO_wdt iTCO_vendor_support hp_accel yenta_socket pcmcia_rsrc
pcmcia_core psmouse evdev tpm_infineon crc_ccitt wmi video output
serio_raw lis3lv02d container battery rtc_cmos tpm_tis tpm rtc_core
tpm_bios rtc_lib input_polldev ac processor button ext3 jbd mbcache
dm_mod usbhid hid sg sr_mod cdrom sd_mod fan pata_acpi ata_generic
sdhci_pci sdhci ata_piix uhci_hcd ahci libahci mmc_core led_class
ehci_hcd tg3 libata thermal scsi_mod usbcore nls_base [last unloaded:
i2c_core]
[ 446.893460]
[ 446.893466] Pid: 1312, comm: iwl3945 Not tainted
2.6.34-git15.sd.1-iniza-686-kms #1 30AC/HP Compaq nc6400 (RH572EA#ABD)
[ 446.893473] EIP: 0060:[<f8e9eb54>] EFLAGS: 00010283 CPU: 0
[ 446.893488] EIP is at iwl3945_get_channels_for_scan+0xb4/0x315 [iwl3945]
[ 446.893494] EAX: f712a000 EBX: f0548ae0 ECX: 00000000 EDX: 00000000
[ 446.893500] ESI: f05c00f2 EDI: 00000058 EBP: 00000000 ESP: f6bc5ecc
[ 446.893505] DS: 007b ES: 007b FS: 00d8 GS: 0000 SS: 0068
[ 446.893511] Process iwl3945 (pid: 1312, ti=f6bc4000 task=f04c79c0
task.ti=f6bc4000)
[ 446.893516] Stack:
[ 446.893519] 00000067 f04c79ec 00000000 00000000 00000000 00210001
c10272fc c13b0401
[ 446.893532] <0> c1225b2d c13b0400 f054f0f0 0002ff00 00000058
00000021 0057f0f0 f0548ae0
[ 446.893546] <0> 00000000 00000005 f05c0000 f8ea1cc1 00000000
f05c00f2 00000000 c1071393
[ 446.893561] Call Trace:
[ 446.893572] [<c10272fc>] ? add_preempt_count+0x8f/0x91
[ 446.893581] [<c1225b2d>] ? _raw_spin_lock_irqsave+0x1c/0x35
[ 446.893598] [<f8ea1cc1>] ? iwl3945_request_scan+0x697/0x799 [iwl3945]
[ 446.893607] [<c1071393>] ? perf_event_task_sched_in+0xe/0x71
[ 446.893614] [<c1225cf8>] ? _raw_spin_unlock_irq+0x1e/0x28
[ 446.893631] [<f8e62768>] ? iwl_bg_start_internal_scan+0x280/0x299 [iwlcore]
[ 446.893639] [<c103c530>] ? run_workqueue+0x65/0xe1
[ 446.893654] [<f8e624e8>] ? iwl_bg_start_internal_scan+0x0/0x299 [iwlcore]
[ 446.893661] [<c103c65b>] ? worker_thread+0xaf/0xbb
[ 446.893669] [<c103f22a>] ? autoremove_wake_function+0x0/0x29
[ 446.893676] [<c103c5ac>] ? worker_thread+0x0/0xbb
[ 446.893683] [<c103ef3f>] ? kthread+0x5f/0x64
[ 446.893690] [<c103eee0>] ? kthread+0x0/0x64
[ 446.893698] [<c10033b6>] ? kernel_thread_helper+0x6/0x10
[ 446.893702] Code: 88 44 24 1c 83 e8 02 88 44 24 2d 8d 4f ff 0f b7
c7 89 44 24 30 66 89 4c 24 3a e9 ea 01 00 00 8b 54 24 10 8b 4c 24 08
8b 6c 90 20 <39> 4d 00 0f 85 d1 01 00 00 66 8b 4d 06 89 d8 88 4e 01 8b
54 24
[ 446.893784] EIP: [<f8e9eb54>]
iwl3945_get_channels_for_scan+0xb4/0x315 [iwl3945] SS:ESP
0068:f6bc5ecc
[ 446.893801] CR2: 0000000000000000
[ 446.893812] ---[ end trace 7a6cdfd823c4f035 ]---
On Fri, May 28, 2010 at 8:09 PM, John W. Linville
<linville@tuxdriver.com> wrote:
> Dave,
>
> Here are a few small fixes intended for 2.6.35. Included are a null
> pointer dereference fix, and a use-after-free fix, as well as some more
> minor stuff. It also include the revert of a earlier patch that I
> inadvertantly merged out of order, effectively creating a bug rather
> than fixing one. The reverted patch will now be pointed at 2.6.36
> instead.
>
> Please let me know if there are problems!
>
> Thanks,
>
> John
>
> ---
>
> The following changes since commit 045de01a174d9f0734f657eb4b3313d89b4fd5ad:
> Scott Feldman (1):
> netlink: bug fix: wrong size was calculated for vfinfo list blob
>
> are available in the git repository at:
>
> git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6.git master
>
> Christian Lamparter (1):
> ar9170usb: fix read from freed driver context
>
> Christoph Fritz (1):
> ssb: fix NULL ptr deref when pcihost_wrapper is used
>
> Johannes Berg (1):
> mac80211: make a function static
>
> John W. Linville (1):
> Revert "rt2x00: Fix rt2800usb TX descriptor writing."
>
> Justin P. Mattock (1):
> ath9k: Fix ath_print in xmit for hardware reset.
>
> Prarit Bhargava (1):
> libertas: fix uninitialized variable warning
>
> Vasanthakumar Thiagarajan (1):
> ath9k: Fix bug in the way "bf_tx_aborted" of struct ath_buf is used
>
> drivers/net/wireless/ath/ar9170/usb.c | 14 ++++++++++++--
> drivers/net/wireless/ath/ath9k/xmit.c | 6 ++++--
> drivers/net/wireless/libertas/rx.c | 5 ++---
> drivers/net/wireless/rt2x00/rt2800usb.c | 2 +-
> drivers/ssb/pci.c | 9 ++++++---
> drivers/ssb/sprom.c | 1 +
> net/mac80211/chan.c | 2 +-
> 7 files changed, 27 insertions(+), 12 deletions(-)
>
> diff --git a/drivers/net/wireless/ath/ar9170/usb.c b/drivers/net/wireless/ath/ar9170/usb.c
> index 82ab532..a93dc18 100644
> --- a/drivers/net/wireless/ath/ar9170/usb.c
> +++ b/drivers/net/wireless/ath/ar9170/usb.c
> @@ -739,17 +739,27 @@ err_out:
> static void ar9170_usb_firmware_failed(struct ar9170_usb *aru)
> {
> struct device *parent = aru->udev->dev.parent;
> + struct usb_device *udev;
> +
> + /*
> + * Store a copy of the usb_device pointer locally.
> + * This is because device_release_driver initiates
> + * ar9170_usb_disconnect, which in turn frees our
> + * driver context (aru).
> + */
> + udev = aru->udev;
>
> complete(&aru->firmware_loading_complete);
>
> /* unbind anything failed */
> if (parent)
> device_lock(parent);
> - device_release_driver(&aru->udev->dev);
> +
> + device_release_driver(&udev->dev);
> if (parent)
> device_unlock(parent);
>
> - usb_put_dev(aru->udev);
> + usb_put_dev(udev);
> }
>
> static void ar9170_usb_firmware_finish(const struct firmware *fw, void *context)
> diff --git a/drivers/net/wireless/ath/ath9k/xmit.c b/drivers/net/wireless/ath/ath9k/xmit.c
> index 3db1917..859aa4a 100644
> --- a/drivers/net/wireless/ath/ath9k/xmit.c
> +++ b/drivers/net/wireless/ath/ath9k/xmit.c
> @@ -1198,7 +1198,7 @@ void ath_drain_all_txq(struct ath_softc *sc, bool retry_tx)
> int r;
>
> ath_print(common, ATH_DBG_FATAL,
> - "Unable to stop TxDMA. Reset HAL!\n");
> + "Failed to stop TX DMA. Resetting hardware!\n");
>
> spin_lock_bh(&sc->sc_resetlock);
> r = ath9k_hw_reset(ah, sc->sc_ah->curchan, false);
> @@ -1728,6 +1728,8 @@ static int ath_tx_setup_buffer(struct ieee80211_hw *hw, struct ath_buf *bf,
> } else
> bf->bf_isnullfunc = false;
>
> + bf->bf_tx_aborted = false;
> +
> return 0;
> }
>
> @@ -1989,7 +1991,7 @@ static int ath_tx_num_badfrms(struct ath_softc *sc, struct ath_buf *bf,
> int nbad = 0;
> int isaggr = 0;
>
> - if (bf->bf_tx_aborted)
> + if (bf->bf_lastbf->bf_tx_aborted)
> return 0;
>
> isaggr = bf_isaggr(bf);
> diff --git a/drivers/net/wireless/libertas/rx.c b/drivers/net/wireless/libertas/rx.c
> index a115bfa..7a377f5 100644
> --- a/drivers/net/wireless/libertas/rx.c
> +++ b/drivers/net/wireless/libertas/rx.c
> @@ -329,9 +329,8 @@ static int process_rxed_802_11_packet(struct lbs_private *priv,
> /* create the exported radio header */
>
> /* radiotap header */
> - radiotap_hdr.hdr.it_version = 0;
> - /* XXX must check this value for pad */
> - radiotap_hdr.hdr.it_pad = 0;
> + memset(&radiotap_hdr, 0, sizeof(radiotap_hdr));
> + /* XXX must check radiotap_hdr.hdr.it_pad for pad */
> radiotap_hdr.hdr.it_len = cpu_to_le16 (sizeof(struct rx_radiotap_hdr));
> radiotap_hdr.hdr.it_present = cpu_to_le32 (RX_RADIOTAP_PRESENT);
> radiotap_hdr.rate = convert_mv_rate_to_radiotap(prxpd->rx_rate);
> diff --git a/drivers/net/wireless/rt2x00/rt2800usb.c b/drivers/net/wireless/rt2x00/rt2800usb.c
> index 6991613..0f8b84b 100644
> --- a/drivers/net/wireless/rt2x00/rt2800usb.c
> +++ b/drivers/net/wireless/rt2x00/rt2800usb.c
> @@ -413,7 +413,7 @@ static void rt2800usb_write_tx_desc(struct rt2x00_dev *rt2x00dev,
> */
> rt2x00_desc_read(txi, 0, &word);
> rt2x00_set_field32(&word, TXINFO_W0_USB_DMA_TX_PKT_LEN,
> - skb->len - TXINFO_DESC_SIZE);
> + skb->len + TXWI_DESC_SIZE);
> rt2x00_set_field32(&word, TXINFO_W0_WIV,
> !test_bit(ENTRY_TXD_ENCRYPT_IV, &txdesc->flags));
> rt2x00_set_field32(&word, TXINFO_W0_QSEL, 2);
> diff --git a/drivers/ssb/pci.c b/drivers/ssb/pci.c
> index 989e275..6dcda86 100644
> --- a/drivers/ssb/pci.c
> +++ b/drivers/ssb/pci.c
> @@ -625,9 +625,12 @@ static int ssb_pci_sprom_get(struct ssb_bus *bus,
> ssb_printk(KERN_ERR PFX "No SPROM available!\n");
> return -ENODEV;
> }
> -
> - bus->sprom_offset = (bus->chipco.dev->id.revision < 31) ?
> - SSB_SPROM_BASE1 : SSB_SPROM_BASE31;
> + if (bus->chipco.dev) { /* can be unavailible! */
> + bus->sprom_offset = (bus->chipco.dev->id.revision < 31) ?
> + SSB_SPROM_BASE1 : SSB_SPROM_BASE31;
> + } else {
> + bus->sprom_offset = SSB_SPROM_BASE1;
> + }
>
> buf = kcalloc(SSB_SPROMSIZE_WORDS_R123, sizeof(u16), GFP_KERNEL);
> if (!buf)
> diff --git a/drivers/ssb/sprom.c b/drivers/ssb/sprom.c
> index 007bc3a..4f7cc8d 100644
> --- a/drivers/ssb/sprom.c
> +++ b/drivers/ssb/sprom.c
> @@ -185,6 +185,7 @@ bool ssb_is_sprom_available(struct ssb_bus *bus)
> /* this routine differs from specs as we do not access SPROM directly
> on PCMCIA */
> if (bus->bustype == SSB_BUSTYPE_PCI &&
> + bus->chipco.dev && /* can be unavailible! */
> bus->chipco.dev->id.revision >= 31)
> return bus->chipco.capabilities & SSB_CHIPCO_CAP_SPROM;
>
> diff --git a/net/mac80211/chan.c b/net/mac80211/chan.c
> index 5d218c5..32be11e 100644
> --- a/net/mac80211/chan.c
> +++ b/net/mac80211/chan.c
> @@ -5,7 +5,7 @@
> #include <linux/nl80211.h>
> #include "ieee80211_i.h"
>
> -enum ieee80211_chan_mode
> +static enum ieee80211_chan_mode
> __ieee80211_get_channel_mode(struct ieee80211_local *local,
> struct ieee80211_sub_if_data *ignore)
> {
> --
> John W. Linville Someday the world will need a hero, and you
> linville@tuxdriver.com might be all we have. Be ready.
> --
> To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
>
^ permalink raw reply
* Re: paged RX skbs and BlockAck Request packets
From: Johannes Berg @ 2010-05-29 6:17 UTC (permalink / raw)
To: Daniel Halperin; +Cc: ipw3945-devel, linux-wireless
In-Reply-To: <9F6635B9-D6BE-4C6A-AA12-37662043B70E@cs.washington.edu>
On Fri, 2010-05-28 at 14:38 -0700, Daniel Halperin wrote:
> On May 28, 2010, at 1:34 PM, Johannes Berg wrote:
> > One thing I ask myself though is do we ever check that the frame is long
> > enough? In the patch below I will by checking the skb_copy_bits() return
> > value, but without that we don't, as far as I can tell?
>
> Good point.
> > + if (skb_copy_bits(skb, offsetof(struct ieee80211_bar, control),
> > + &bar_data, sizeof(bar_data)))
> > + return RX_DROP_MONITOR;
> > +
> > if (!rx->sta)
> > return RX_DROP_MONITOR;
>
> Maybe invert the order of these two exit conditions? Figure most CPUs
> will speculate anyway, but the second check seems a more efficient
> short-circuit.
Yeah, true. I think it probably makes more sense to just linearize
control frames like you did, and separately add a length check.
johannes
^ permalink raw reply
* Re: pull request: wireless-2.6 2010-05-28
From: David Miller @ 2010-05-29 6:01 UTC (permalink / raw)
To: linville; +Cc: linux-wireless, netdev, linux-kernel
In-Reply-To: <20100528180952.GC2405@tuxdriver.com>
From: "John W. Linville" <linville@tuxdriver.com>
Date: Fri, 28 May 2010 14:09:53 -0400
> Here are a few small fixes intended for 2.6.35. Included are a null
> pointer dereference fix, and a use-after-free fix, as well as some more
> minor stuff. It also include the revert of a earlier patch that I
> inadvertantly merged out of order, effectively creating a bug rather
> than fixing one. The reverted patch will now be pointed at 2.6.36
> instead.
>
> Please let me know if there are problems!
Pulled, thanks John.
^ permalink raw reply
* Re: paged RX skbs and BlockAck Request packets
From: Daniel Halperin @ 2010-05-28 21:38 UTC (permalink / raw)
To: Johannes Berg; +Cc: ipw3945-devel, linux-wireless
In-Reply-To: <1275078893.3909.117.camel@jlt3.sipsolutions.net>
On May 28, 2010, at 1:34 PM, Johannes Berg wrote:
> One thing I ask myself though is do we ever check that the frame is long
> enough? In the patch below I will by checking the skb_copy_bits() return
> value, but without that we don't, as far as I can tell?
Good point.
> --- wireless-testing.orig/net/mac80211/rx.c 2010-05-28 22:25:07.000000000 +0200
> +++ wireless-testing/net/mac80211/rx.c 2010-05-28 22:33:30.000000000 +0200
> @@ -1819,17 +1819,26 @@ ieee80211_rx_h_ctrl(struct ieee80211_rx_
> return RX_CONTINUE;
>
> if (ieee80211_is_back_req(bar->frame_control)) {
> + struct {
> + __le16 control, start_seq_num;
> + } __packed bar_data;
> +
> + if (skb_copy_bits(skb, offsetof(struct ieee80211_bar, control),
> + &bar_data, sizeof(bar_data)))
> + return RX_DROP_MONITOR;
> +
> if (!rx->sta)
> return RX_DROP_MONITOR;
Maybe invert the order of these two exit conditions? Figure most CPUs will speculate anyway, but the second check seems a more efficient short-circuit.
Dan
^ permalink raw reply
* Re: [PATCH]: ath: Fix uninitialized variable warnings
From: Pavel Roskin @ 2010-05-28 20:44 UTC (permalink / raw)
To: John W. Linville; +Cc: Prarit Bhargava, linux-wireless, ath9k-devel
In-Reply-To: <20100528173431.GB2405@tuxdriver.com>
On Fri, 2010-05-28 at 13:34 -0400, John W. Linville wrote:
> On Thu, May 27, 2010 at 02:14:54PM -0400, Prarit Bhargava wrote:
> > Fixes 'make -j24 CONFIG_DEBUG_SECTION_MISMATCH=y' warning:
> >
> > drivers/net/wireless/ath/ath9k/eeprom_4k.c: In function ‘ath9k_hw_get_4k_gain_boundaries_pdadcs.clone.1’:
> > drivers/net/wireless/ath/ath9k/eeprom_4k.c:311: error: ‘minPwrT4’ may be used uninitialized in this function
> > drivers/net/wireless/ath/ath9k/eeprom_9287.c: In function ‘ath9k_hw_get_AR9287_gain_boundaries_pdadcs’:
> > drivers/net/wireless/ath/ath9k/eeprom_9287.c:302: error: ‘minPwrT4’ may be used uninitialized in this function
> > drivers/net/wireless/ath/ath9k/eeprom_def.c: In function ‘ath9k_hw_get_def_gain_boundaries_pdadcs.clone.0’:
> > drivers/net/wireless/ath/ath9k/eeprom_def.c:679: error: ‘minPwrT4’ may be used uninitialized in this function
> >
> > Signed-off-by: Prarit Bhargava <prarit@redhat.com>
>
> It looks to me like minPwrT4 will get initialized as long as
> numXpdGains is non-zero in all cases. Anyone know if this is true?
It's calculated based on a value from EEPROM (xpdMask). If xpdMask is
0, numXpdGain would be 0. So bogus EEPROM can lead to bogus
tMinCalPower. But the good thing is that tMinCalPower is never used.
So let's just eliminate tMinCalPower in all three files, as well as the
corresponding function arguments.
--
Regards,
Pavel Roskin
^ permalink raw reply
* Re: paged RX skbs and BlockAck Request packets
From: Johannes Berg @ 2010-05-28 20:34 UTC (permalink / raw)
To: Daniel Halperin; +Cc: ipw3945-devel, linux-wireless
In-Reply-To: <7994C719-E1C8-4818-A03E-0566E8380CC3@cs.washington.edu>
On Fri, 2010-05-28 at 12:46 -0700, Daniel Halperin wrote:
> I'm using the latest iwlwifi-2.6.git from
> http://git.kernel.org/?p=linux/kernel/git/iwlwifi/iwlwifi-2.6.git
>
> When using 802.11n aggregation and the other endpoint sends a BlockAck
> Request, many times the transfer will completely stall.
>
> It looks like the relevant code is in
> net/mac80211/rx.c:ieee80211_rx_h_ctrl . I found that the sequence
> numbers used are invalid. If instead I linearize the SKB, then the
> sequence numbers become valid, so I believe it's a problem with the
> use of paged RX skbs. Mailing both lists since I'm not sure where the
> fix should go.
>
> The paged RX SKBs are set up in
> drivers/net/wireless/iwlwifi:iwl-agn-lib.c:iwl_pass_packet_to_mac80211. I made a temporary fix at net/mac80211/rx.c:__ieee80211_rx_handle_packet
>
> by changing
>
> if (ieee80211_is_mgmt(fc))
> err = skb_linearize(skb);
>
> to
>
> if (ieee80211_is_mgmt(fc) || ieee80211_is_ctl(fc))
> err = skb_linearize(skb);
>
> Can anyone more knowledgeable than I please tell me the right fix?
Wow, good catch. FWIW, that seems like a perfectly appropriate fix,
since control frames are typically very short I don't see any problem in
linearizing them, in fact I'd think the skb should already have enough
space at this point. If you wanted to avoid that, you need a patch like
the one below.
One thing I ask myself though is do we ever check that the frame is long
enough? In the patch below I will by checking the skb_copy_bits() return
value, but without that we don't, as far as I can tell?
johannes
--- wireless-testing.orig/net/mac80211/rx.c 2010-05-28 22:25:07.000000000 +0200
+++ wireless-testing/net/mac80211/rx.c 2010-05-28 22:33:30.000000000 +0200
@@ -1819,17 +1819,26 @@ ieee80211_rx_h_ctrl(struct ieee80211_rx_
return RX_CONTINUE;
if (ieee80211_is_back_req(bar->frame_control)) {
+ struct {
+ __le16 control, start_seq_num;
+ } __packed bar_data;
+
+ if (skb_copy_bits(skb, offsetof(struct ieee80211_bar, control),
+ &bar_data, sizeof(bar_data)))
+ return RX_DROP_MONITOR;
+
if (!rx->sta)
return RX_DROP_MONITOR;
+
spin_lock(&rx->sta->lock);
- tid = le16_to_cpu(bar->control) >> 12;
+ tid = le16_to_cpu(bar_data.control) >> 12;
if (!rx->sta->ampdu_mlme.tid_active_rx[tid]) {
spin_unlock(&rx->sta->lock);
return RX_DROP_MONITOR;
}
tid_agg_rx = rx->sta->ampdu_mlme.tid_rx[tid];
- start_seq_num = le16_to_cpu(bar->start_seq_num) >> 4;
+ start_seq_num = le16_to_cpu(bar_data.start_seq_num) >> 4;
/* reset session timer */
if (tid_agg_rx->timeout)
^ permalink raw reply
* Re: [ath5k-devel] [PATCH] ath5k: disable ASPM
From: Pavel Roskin @ 2010-05-28 20:27 UTC (permalink / raw)
To: Jussi Kivilinna; +Cc: ath5k-devel, linux-wireless
In-Reply-To: <20100528212523.213125g8t0an4mn4@hayate.sektori.org>
On Fri, 2010-05-28 at 21:25 +0300, Jussi Kivilinna wrote:
> I used code from e1000e which does this same way, which now suddenly
> reminds me of that ath5k is dual lisenced, right? Can I even reuse
> code from GPL driver in ath5k?
That's another reason why we don't want this code to be all over the
place.
If you could generalize the code sufficiently, it could be an inline
function in pci.h or some other GPL licensed header.
If we need to add GPL code to ath5k, it could go to a separate file.
But if that separation becomes inconvenient, we could drop BSD
compatibility from ath5k. I don't see any benefit from dual licensing,
unless some existing ath5k contributors are BSD developers who would
stop working on the code in case of relicensing, but I don't think it's
the case.
--
Regards,
Pavel Roskin
^ permalink raw reply
* paged RX skbs and BlockAck Request packets
From: Daniel Halperin @ 2010-05-28 19:46 UTC (permalink / raw)
To: ipw3945-devel, linux-wireless
I'm using the latest iwlwifi-2.6.git from http://git.kernel.org/?p=linux/kernel/git/iwlwifi/iwlwifi-2.6.git
When using 802.11n aggregation and the other endpoint sends a BlockAck Request, many times the transfer will completely stall.
It looks like the relevant code is in net/mac80211/rx.c:ieee80211_rx_h_ctrl . I found that the sequence numbers used are invalid. If instead I linearize the SKB, then the sequence numbers become valid, so I believe it's a problem with the use of paged RX skbs. Mailing both lists since I'm not sure where the fix should go.
The paged RX SKBs are set up in drivers/net/wireless/iwlwifi:iwl-agn-lib.c:iwl_pass_packet_to_mac80211. I made a temporary fix at net/mac80211/rx.c:__ieee80211_rx_handle_packet
by changing
if (ieee80211_is_mgmt(fc))
err = skb_linearize(skb);
to
if (ieee80211_is_mgmt(fc) || ieee80211_is_ctl(fc))
err = skb_linearize(skb);
Can anyone more knowledgeable than I please tell me the right fix?
Thanks!
-Dan
^ permalink raw reply
* Re: New procedure for reg dbase
From: Luis R. Rodriguez @ 2010-05-28 19:11 UTC (permalink / raw)
To: Michael Green; +Cc: linux-wireless, David Quan
In-Reply-To: <93781E992CBA7843962D8B0E7D683F3C1117B01DFD@SC1EXMB-MBCL.global.atheros.com>
Some notes by Michael about possible procedures. I think this makes
sense. Michael, some comments below, and please keep this thread
public, and please do reply publicly.
Luis
On Fri, May 28, 2010 at 8:28 AM, Michael Green
<Michael.Green@atheros.com> wrote:
>
> Hi Luis,
>
> I think we can argue that although anyone can send a proposed
> patch for the wireless-regdb, only certain people are qualified to review/accept
> them. ATHR need not be the only “approver”, but it does need to be
> regulatory experts (not Linux experts) who advise what proposed
> patches should be implemented. Reason is that although anyone can
> read through a doc from a regulator which seems to state what channels
> are allowed, it takes a qualified regulatory person to understand how that
> doc may or may not fit in with other knowledge and to interpret the
> doc correctly.
Michael, I understand your suggestion but I don't think we can apply
this to wireless-regdb. I think the best we can do is take 'regulatory
expert' opinions more seriously and value their input more than
someone posting some random patch who never has posted anything on
linux-wireless before. So what I mean by this is anyone should be able
to post patches but those who do dedicate their full time job to
regulatory would obviously be able to chime in and help with better
interpretation of local regulatory rules.
> So I propose your community consider a group such as
> “regulatory reviewers”. Notices or proposed patches can be sent
> to this group. After a set turnaround time (7 days? 14 days? 30 days?)?
> If there is no further discussion or disagreement over the proposed
> patch, then it is accepted. And during that time, there will likely
> be concensus by the “regulatory reviewers” to recommend the patch
> be rejected, accepted or fixed+accepted.
Right now I think you're our only true 'regulatory expert', not sure
if we'd have any others, so I think the best we can probably do is
just take your those expert's review/suggestions into high
consideration but do not think they should have final say. The final
say must come from consensus from the community. I think generally the
consensus naturally will steer towards listening to the experts but
that is not something you can or should mandate IMHO.
> Then any company can nominate their RF regulatory expert to
> join the “regulatory reviewers”. The actual distribution list can be cc’ed to
> whoever should be included. But the physical group of “regulatory
> reviewers” ought to be considered carefully to ensure it’s the
> regulatory experts who give concensus on each proposed patch.
Not sure if we have enough of those to even consider such a thing. I
think the current model works OK but what we do need is a better
documented process of how long it may take to get a change included,
and who to CC to help review changes. The reviewers must also be
wiling to comment publicly on threads and engage with the specific
patch submitters.
Also what do we do for example if you are on vacation? :)
> And Linville in the end will make final decision (but he will have
> a firm consensus and reference to regulatory documents from the
> reg. reviewers as basis for his final decision.
>
> Any company with an RF regulatory person, is
> welcome to be added to the “reg reviewers” group. This should only
> include people involved in radio spectrum activities and regulatory
> conformance.
I think this would be great but right now I think we just have you as
a qualified regulatory expert.
> Michael Green
>
> Manager, Global Product Compliance
>
> Atheros Communications, Inc.
>
> 5480 Great America Parkway
> Santa Clara CA 95054
> 781-400-1491 (office)
> 508-380-4921 (cell)
> www.atheros.com
Luis
^ permalink raw reply
* [RFC 7/7] mac80211: always process blockack action from workqueue
From: Johannes Berg @ 2010-05-28 18:53 UTC (permalink / raw)
To: linux-wireless
In-Reply-To: <20100528185302.639535282@sipsolutions.net>
From: Johannes Berg <johannes.berg@intel.com>
To prepare for making the ampdu_action callback
sleep, make mac80211 always process blockack
action frames from the skb queue. This gets rid
of the current special case for managed mode
interfaces as well.
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
---
net/mac80211/iface.c | 35 ++++++++++++++++++++++++++++++++++-
net/mac80211/mlme.c | 38 --------------------------------------
net/mac80211/rx.c | 29 +++++++++++++----------------
3 files changed, 47 insertions(+), 55 deletions(-)
--- wireless-testing.orig/net/mac80211/iface.c 2010-05-28 20:37:10.000000000 +0200
+++ wireless-testing/net/mac80211/iface.c 2010-05-28 20:37:13.000000000 +0200
@@ -727,7 +727,40 @@ static void ieee80211_iface_work(struct
/* first process frames */
while ((skb = skb_dequeue(&sdata->skb_queue))) {
- switch (sdata->vif.type) {
+ struct ieee80211_mgmt *mgmt = (void *)skb->data;
+
+ if (ieee80211_is_action(mgmt->frame_control) &&
+ mgmt->u.action.category == WLAN_CATEGORY_BACK) {
+ int len = skb->len;
+ struct sta_info *sta;
+
+ rcu_read_lock();
+ sta = sta_info_get(sdata, mgmt->sa);
+ if (sta) {
+ local_bh_disable();
+
+ switch (mgmt->u.action.u.addba_req.action_code) {
+ case WLAN_ACTION_ADDBA_REQ:
+ ieee80211_process_addba_request(
+ local, sta, mgmt, len);
+ break;
+ case WLAN_ACTION_ADDBA_RESP:
+ ieee80211_process_addba_resp(local, sta,
+ mgmt, len);
+ break;
+ case WLAN_ACTION_DELBA:
+ ieee80211_process_delba(sdata, sta,
+ mgmt, len);
+ break;
+ default:
+ WARN_ON(1);
+ break;
+ }
+
+ local_bh_enable();
+ }
+ rcu_read_unlock();
+ } else switch (sdata->vif.type) {
case NL80211_IFTYPE_STATION:
ieee80211_sta_rx_queued_mgmt(sdata, skb);
break;
--- wireless-testing.orig/net/mac80211/mlme.c 2010-05-28 20:37:11.000000000 +0200
+++ wireless-testing/net/mac80211/mlme.c 2010-05-28 20:37:13.000000000 +0200
@@ -1666,44 +1666,6 @@ void ieee80211_sta_rx_queued_mgmt(struct
break;
case IEEE80211_STYPE_ACTION:
switch (mgmt->u.action.category) {
- case WLAN_CATEGORY_BACK: {
- struct ieee80211_local *local = sdata->local;
- int len = skb->len;
- struct sta_info *sta;
-
- rcu_read_lock();
- sta = sta_info_get(sdata, mgmt->sa);
- if (!sta) {
- rcu_read_unlock();
- break;
- }
-
- local_bh_disable();
-
- switch (mgmt->u.action.u.addba_req.action_code) {
- case WLAN_ACTION_ADDBA_REQ:
- if (len < (IEEE80211_MIN_ACTION_SIZE +
- sizeof(mgmt->u.action.u.addba_req)))
- break;
- ieee80211_process_addba_request(local, sta, mgmt, len);
- break;
- case WLAN_ACTION_ADDBA_RESP:
- if (len < (IEEE80211_MIN_ACTION_SIZE +
- sizeof(mgmt->u.action.u.addba_resp)))
- break;
- ieee80211_process_addba_resp(local, sta, mgmt, len);
- break;
- case WLAN_ACTION_DELBA:
- if (len < (IEEE80211_MIN_ACTION_SIZE +
- sizeof(mgmt->u.action.u.delba)))
- break;
- ieee80211_process_delba(sdata, sta, mgmt, len);
- break;
- }
- local_bh_enable();
- rcu_read_unlock();
- break;
- }
case WLAN_CATEGORY_SPECTRUM_MGMT:
ieee80211_sta_process_chanswitch(sdata,
&mgmt->u.action.u.chan_switch.sw_elem,
--- wireless-testing.orig/net/mac80211/rx.c 2010-05-28 20:37:11.000000000 +0200
+++ wireless-testing/net/mac80211/rx.c 2010-05-28 20:37:13.000000000 +0200
@@ -1936,33 +1936,29 @@ ieee80211_rx_h_action(struct ieee80211_r
if (len < IEEE80211_MIN_ACTION_SIZE + 1)
break;
- if (sdata->vif.type == NL80211_IFTYPE_STATION) {
- skb_queue_tail(&sdata->skb_queue, rx->skb);
- ieee80211_queue_work(&local->hw, &sdata->work);
- return RX_QUEUED;
- }
-
switch (mgmt->u.action.u.addba_req.action_code) {
case WLAN_ACTION_ADDBA_REQ:
if (len < (IEEE80211_MIN_ACTION_SIZE +
sizeof(mgmt->u.action.u.addba_req)))
- return RX_DROP_MONITOR;
- ieee80211_process_addba_request(local, rx->sta, mgmt, len);
- goto handled;
+ goto invalid;
+ break;
case WLAN_ACTION_ADDBA_RESP:
if (len < (IEEE80211_MIN_ACTION_SIZE +
sizeof(mgmt->u.action.u.addba_resp)))
- break;
- ieee80211_process_addba_resp(local, rx->sta, mgmt, len);
- goto handled;
+ goto invalid;
+ break;
case WLAN_ACTION_DELBA:
if (len < (IEEE80211_MIN_ACTION_SIZE +
sizeof(mgmt->u.action.u.delba)))
- break;
- ieee80211_process_delba(sdata, rx->sta, mgmt, len);
- goto handled;
+ goto invalid;
+ break;
+ default:
+ goto invalid;
}
- break;
+
+ skb_queue_tail(&sdata->skb_queue, rx->skb);
+ ieee80211_queue_work(&local->hw, &sdata->work);
+ return RX_QUEUED;
case WLAN_CATEGORY_SPECTRUM_MGMT:
if (local->hw.conf.channel->band != IEEE80211_BAND_5GHZ)
break;
@@ -2019,6 +2015,7 @@ ieee80211_rx_h_action(struct ieee80211_r
return RX_QUEUED;
}
+ invalid:
/*
* For AP mode, hostapd is responsible for handling any action
* frames that we didn't handle, including returning unknown
^ 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