* Re: [PATCH] minstrel_ht: mark minstrel_mcs_groups as static
From: Felix Fietkau @ 2010-06-24 16:47 UTC (permalink / raw)
To: John W. Linville; +Cc: linux-wireless
In-Reply-To: <1277392602-10578-1-git-send-email-linville@tuxdriver.com>
On 2010-06-24 5:16 PM, John W. Linville wrote:
> Signed-off-by: John W. Linville <linville@tuxdriver.com>
> ---
> net/mac80211/rc80211_minstrel_ht.c | 2 +-
> 1 files changed, 1 insertions(+), 1 deletions(-)
>
> diff --git a/net/mac80211/rc80211_minstrel_ht.c b/net/mac80211/rc80211_minstrel_ht.c
> index 7a04951..a8f658c 100644
> --- a/net/mac80211/rc80211_minstrel_ht.c
> +++ b/net/mac80211/rc80211_minstrel_ht.c
> @@ -59,7 +59,7 @@
> * groups, based on the number of streams and flags (HT40, SGI) that they
> * use.
> */
> -const struct mcs_group minstrel_mcs_groups[] = {
> +static const struct mcs_group minstrel_mcs_groups[] = {
NACK. minstrel_ht debugfs needs this. The proper fix for the warning is
to add this one to a header file instead.
- Felix
^ permalink raw reply
* Re: intel 5100/iwlagn bug in 2.6.35-rc2 during large file transfer
From: reinette chatre @ 2010-06-24 17:13 UTC (permalink / raw)
To: Richard Farina; +Cc: linux-wireless@vger.kernel.org
In-Reply-To: <4C2383E2.8000909@gmail.com>
Hi Richard,
On Thu, 2010-06-24 at 09:12 -0700, Richard Farina wrote:
> reinette chatre wrote:
> > On Wed, 2010-06-16 at 19:56 -0700, Richard Farina wrote:
> >
> >> The repeated line appears ad infinitum filling my dmesg buffer. This of
> >> hangcheck timer seem to trigger with every large file transfer on my
> >> intel 5100. What would you like me to do to provide a more useful
> >> output as this is currently extremely easy to reproduce. Kernel 2.6.34
> >> using compat-wireless stable 2.6.35-rc2
> >>
> >> Thanks,
> >> Rick Farina
> >>
> >> phy0: failed to reallocate TX buffer
> >> phy0: failed to reallocate TX buffer
> >> phy0: failed to reallocate TX buffer
> >> phy0: failed to reallocate TX buffer
> >> phy0: failed to reallocate TX buffer
> >> phy0: failed to reallocate TX buffer
> >> phy0: failed to reallocate TX buffer
> >>
> >
> > First mac80211 runs out of memory ... it cannot even allocate enough
> > memory for a skb header.
> >
> >
> >> net_ratelimit: 22 callbacks suppressed
> >> __alloc_pages_slowpath: 3799 callbacks suppressed
> >> swapper: page allocation failure. order:1, mode:0x4020
> >> Pid: 0, comm: swapper Not tainted 2.6.34-pentoo #5
> >> Call Trace:
> >> <IRQ> [<ffffffff8109cb74>] __alloc_pages_nodemask+0x571/0x5b9
> >> [<ffffffff816732e9>] ? skb_release_data+0xc4/0xc9
> >> [<ffffffffa04701e4>] iwlagn_rx_allocate+0x98/0x25a [iwlagn]
> >>
> >
> > Next driver runs out of memory.
> >
> > Note that the above are all atomic allocations that fail and should be
> > able to recover.
> >
> > Is your system low on memory? Are you running applications that take a
> > lot of memory? Does your wifi connection drop or otherwise suffer at the
> > time you see these messages?
> >
> >
> I have 4GB of RAM on this system, I often run a VM which wastes like
> half that but that still leaves 2GB for linux and I'm running XFCE4 so
> not exactly a memory hog. It's possible that firefox leaks ram until I'm
> out but that would be a LOT of leak, much more than I usually see.
There has been an issue with atomic memory allocations ever since
2.6.31. This used to be easy to trigger with iwlagn, but we fixed a
number of issues. There are still issue with any atomic memory
allocation (not just iwlagn) and this issue is still open. You can find
more information at https://bugzilla.kernel.org/show_bug.cgi?id=14141
> Yeah, as you may guess these errors cause my wifi connection to slow
> drastically.
The driver, when unable to allocate memory atomically, will reattempt
the allocation later when it can use GFP_KERNEL. I think there may be
ways in which we can try to optimize this since right now it will only
schedule this when there are about 8 buffers remaining. I was looking at
your trace again and even though you state "Kernel 2.6.34 using
compat-wireless stable 2.6.35-rc2" ... the trace you provide does not
seem to match the driver code from 2.6.35-rc2. Could you please confirm
which version of driver you are running so that I can prepare a patch?
> If I had to guess, since this happens when I make a large
> file transfer it is likely that something related is leaking RAM. I'm
> using wget or axel to download and NFS to dump the files on a NAS. I'll
> try to trigger this again
Does this happen every time you run this test? I would like to get an
idea whether we will get a clear indication whether our changes will
help or not.
> and watch memory usage to see if I can find
> something other than the driver that could be leaking. Failing that,
> what do I need to enable to find a leak in the driver?
Perhaps kmemleak?
Reinette
^ permalink raw reply
* Re: [PATCH] minstrel_ht: mark minstrel_mcs_groups as static
From: John W. Linville @ 2010-06-24 17:07 UTC (permalink / raw)
To: Felix Fietkau; +Cc: linux-wireless
In-Reply-To: <4C238C3A.6090905@openwrt.org>
On Thu, Jun 24, 2010 at 06:47:54PM +0200, Felix Fietkau wrote:
> On 2010-06-24 5:16 PM, John W. Linville wrote:
> > Signed-off-by: John W. Linville <linville@tuxdriver.com>
> > ---
> > net/mac80211/rc80211_minstrel_ht.c | 2 +-
> > 1 files changed, 1 insertions(+), 1 deletions(-)
> >
> > diff --git a/net/mac80211/rc80211_minstrel_ht.c b/net/mac80211/rc80211_minstrel_ht.c
> > index 7a04951..a8f658c 100644
> > --- a/net/mac80211/rc80211_minstrel_ht.c
> > +++ b/net/mac80211/rc80211_minstrel_ht.c
> > @@ -59,7 +59,7 @@
> > * groups, based on the number of streams and flags (HT40, SGI) that they
> > * use.
> > */
> > -const struct mcs_group minstrel_mcs_groups[] = {
> > +static const struct mcs_group minstrel_mcs_groups[] = {
> NACK. minstrel_ht debugfs needs this. The proper fix for the warning is
> to add this one to a header file instead.
Yup, fair enough. Replacement patch to follow.
--
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
* [PATCH] minstrel_ht: move minstrel_mcs_groups declaration to header file
From: John W. Linville @ 2010-06-24 17:06 UTC (permalink / raw)
To: linux-wireless; +Cc: Felix Fietkau, John W. Linville
In-Reply-To: <1277392602-10578-1-git-send-email-linville@tuxdriver.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
---
net/mac80211/rc80211_minstrel_ht.h | 2 ++
net/mac80211/rc80211_minstrel_ht_debugfs.c | 2 --
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/net/mac80211/rc80211_minstrel_ht.h b/net/mac80211/rc80211_minstrel_ht.h
index 696c0fc..462d2b2 100644
--- a/net/mac80211/rc80211_minstrel_ht.h
+++ b/net/mac80211/rc80211_minstrel_ht.h
@@ -29,6 +29,8 @@ struct mcs_group {
unsigned int duration[MCS_GROUP_RATES];
};
+extern const struct mcs_group minstrel_mcs_groups[];
+
struct minstrel_rate_stats {
/* current / last sampling period attempts/success counters */
unsigned int attempts, last_attempts;
diff --git a/net/mac80211/rc80211_minstrel_ht_debugfs.c b/net/mac80211/rc80211_minstrel_ht_debugfs.c
index 4fb3ccb..4a5a4b3 100644
--- a/net/mac80211/rc80211_minstrel_ht_debugfs.c
+++ b/net/mac80211/rc80211_minstrel_ht_debugfs.c
@@ -14,8 +14,6 @@
#include "rc80211_minstrel.h"
#include "rc80211_minstrel_ht.h"
-extern const struct mcs_group minstrel_mcs_groups[];
-
static int
minstrel_ht_stats_open(struct inode *inode, struct file *file)
{
--
1.7.0.1
^ permalink raw reply related
* Re: [PATCH] minstrel_ht: move minstrel_mcs_groups declaration to header file
From: Felix Fietkau @ 2010-06-24 17:26 UTC (permalink / raw)
To: John W. Linville; +Cc: linux-wireless
In-Reply-To: <1277399207-17462-1-git-send-email-linville@tuxdriver.com>
On 2010-06-24 7:06 PM, John W. Linville wrote:
> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Acked-by: Felix Fietkau <nbd@openwrt.org>
(for the other minstrel_ht patch as well)
- Felix
^ permalink raw reply
* Re: intel 5100/iwlagn bug in 2.6.35-rc2 during large file transfer
From: Richard Farina @ 2010-06-24 17:30 UTC (permalink / raw)
To: reinette chatre; +Cc: linux-wireless@vger.kernel.org
In-Reply-To: <1277399636.25793.2389.camel@rchatre-DESK>
reinette chatre wrote:
> Hi Richard,
>
> On Thu, 2010-06-24 at 09:12 -0700, Richard Farina wrote:
>
>> reinette chatre wrote:
>>
>>> On Wed, 2010-06-16 at 19:56 -0700, Richard Farina wrote:
>>>
>>>
>>>> The repeated line appears ad infinitum filling my dmesg buffer. This of
>>>> hangcheck timer seem to trigger with every large file transfer on my
>>>> intel 5100. What would you like me to do to provide a more useful
>>>> output as this is currently extremely easy to reproduce. Kernel 2.6.34
>>>> using compat-wireless stable 2.6.35-rc2
>>>>
>>>> Thanks,
>>>> Rick Farina
>>>>
>>>> phy0: failed to reallocate TX buffer
>>>> phy0: failed to reallocate TX buffer
>>>> phy0: failed to reallocate TX buffer
>>>> phy0: failed to reallocate TX buffer
>>>> phy0: failed to reallocate TX buffer
>>>> phy0: failed to reallocate TX buffer
>>>> phy0: failed to reallocate TX buffer
>>>>
>>>>
>>> First mac80211 runs out of memory ... it cannot even allocate enough
>>> memory for a skb header.
>>>
>>>
>>>
>>>> net_ratelimit: 22 callbacks suppressed
>>>> __alloc_pages_slowpath: 3799 callbacks suppressed
>>>> swapper: page allocation failure. order:1, mode:0x4020
>>>> Pid: 0, comm: swapper Not tainted 2.6.34-pentoo #5
>>>> Call Trace:
>>>> <IRQ> [<ffffffff8109cb74>] __alloc_pages_nodemask+0x571/0x5b9
>>>> [<ffffffff816732e9>] ? skb_release_data+0xc4/0xc9
>>>> [<ffffffffa04701e4>] iwlagn_rx_allocate+0x98/0x25a [iwlagn]
>>>>
>>>>
>>> Next driver runs out of memory.
>>>
>>> Note that the above are all atomic allocations that fail and should be
>>> able to recover.
>>>
>>> Is your system low on memory? Are you running applications that take a
>>> lot of memory? Does your wifi connection drop or otherwise suffer at the
>>> time you see these messages?
>>>
>>>
>>>
>> I have 4GB of RAM on this system, I often run a VM which wastes like
>> half that but that still leaves 2GB for linux and I'm running XFCE4 so
>> not exactly a memory hog. It's possible that firefox leaks ram until I'm
>> out but that would be a LOT of leak, much more than I usually see.
>>
>
> There has been an issue with atomic memory allocations ever since
> 2.6.31. This used to be easy to trigger with iwlagn, but we fixed a
> number of issues. There are still issue with any atomic memory
> allocation (not just iwlagn) and this issue is still open. You can find
> more information at https://bugzilla.kernel.org/show_bug.cgi?id=14141
>
>
>> Yeah, as you may guess these errors cause my wifi connection to slow
>> drastically.
>>
>
> The driver, when unable to allocate memory atomically, will reattempt
> the allocation later when it can use GFP_KERNEL. I think there may be
> ways in which we can try to optimize this since right now it will only
> schedule this when there are about 8 buffers remaining. I was looking at
> your trace again and even though you state "Kernel 2.6.34 using
> compat-wireless stable 2.6.35-rc2" ... the trace you provide does not
> seem to match the driver code from 2.6.35-rc2. Could you please confirm
> which version of driver you are running so that I can prepare a patch?
>
>
There were two compat-wireless releases for 2.6.35_rc2 because Luis had
asked me to test and then he changed it for the official release. I'll
use the official 2.6.35_rc2 release for the current testing so if there
are any patches you wish to toss my way please base them on that. The
other option is you tell me what to do, I can run any kernel, any git
snapshot, whatever you say. Like I said, all I have to do is download
something or transfer something large so it is pretty easily
reproducible here so I'll test whatever you like.
Thanks,
Rick Farina
>> If I had to guess, since this happens when I make a large
>> file transfer it is likely that something related is leaking RAM. I'm
>> using wget or axel to download and NFS to dump the files on a NAS. I'll
>> try to trigger this again
>>
>
> Does this happen every time you run this test? I would like to get an
> idea whether we will get a clear indication whether our changes will
> help or not.
>
>
>> and watch memory usage to see if I can find
>> something other than the driver that could be leaking. Failing that,
>> what do I need to enable to find a leak in the driver?
>>
>
> Perhaps kmemleak?
>
> Reinette
>
>
>
>
>
^ permalink raw reply
* Re: intel 5100/iwlagn bug in 2.6.35-rc2 during large file transfer
From: reinette chatre @ 2010-06-24 17:48 UTC (permalink / raw)
To: Richard Farina; +Cc: linux-wireless@vger.kernel.org
In-Reply-To: <4C23961D.7050500@gmail.com>
On Thu, 2010-06-24 at 10:30 -0700, Richard Farina wrote:
> There were two compat-wireless releases for 2.6.35_rc2 because Luis had
> asked me to test and then he changed it for the official release. I'll
> use the official 2.6.35_rc2 release for the current testing so if there
> are any patches you wish to toss my way please base them on that. The
> other option is you tell me what to do, I can run any kernel, any git
> snapshot, whatever you say. Like I said, all I have to do is download
> something or transfer something large so it is pretty easily
> reproducible here so I'll test whatever you like.
Could you please try out this patch? It is based on the latest linux-2.6
so should apply cleanly to your latest 2.6.35 stable compat.
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn-lib.c b/drivers/net/wireless/iwlwifi/iwl-agn-lib.c
index 0f292a2..028db74 100644
--- a/drivers/net/wireless/iwlwifi/iwl-agn-lib.c
+++ b/drivers/net/wireless/iwlwifi/iwl-agn-lib.c
@@ -613,7 +613,7 @@ void iwlagn_rx_allocate(struct iwl_priv *priv, gfp_t priority)
}
spin_unlock_irqrestore(&rxq->lock, flags);
- if (rxq->free_count > RX_LOW_WATERMARK)
+ if (rxq->free_count > 8)
gfp_mask |= __GFP_NOWARN;
if (priv->hw_params.rx_page_order > 0)
diff --git a/drivers/net/wireless/iwlwifi/iwl-fh.h b/drivers/net/wireless/iwlwifi/iwl-fh.h
index 113c366..396a16c 100644
--- a/drivers/net/wireless/iwlwifi/iwl-fh.h
+++ b/drivers/net/wireless/iwlwifi/iwl-fh.h
@@ -426,7 +426,7 @@
* RX related structures and functions
*/
#define RX_FREE_BUFFERS 64
-#define RX_LOW_WATERMARK 8
+#define RX_LOW_WATERMARK 64
/* Size of one Rx buffer in host DRAM */
#define IWL_RX_BUF_SIZE_3K (3 * 1000) /* 3945 only */
^ permalink raw reply related
* [PATCH 2/2] mac80211: use netif_receive_skb in ieee80211_tx_status callpath
From: John W. Linville @ 2010-06-24 18:47 UTC (permalink / raw)
To: linux-wireless; +Cc: johannes, John W. Linville
This avoids the extra queueing from calling netif_rx.
Signed-off-by: John W. Linville <linville@tuxdriver.com>
---
net/mac80211/status.c | 4 ++--
1 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/net/mac80211/status.c b/net/mac80211/status.c
index 34da679..10caec5 100644
--- a/net/mac80211/status.c
+++ b/net/mac80211/status.c
@@ -377,7 +377,7 @@ void ieee80211_tx_status(struct ieee80211_hw *hw, struct sk_buff *skb)
skb2 = skb_clone(skb, GFP_ATOMIC);
if (skb2) {
skb2->dev = prev_dev;
- netif_rx(skb2);
+ netif_receive_skb(skb2);
}
}
@@ -386,7 +386,7 @@ void ieee80211_tx_status(struct ieee80211_hw *hw, struct sk_buff *skb)
}
if (prev_dev) {
skb->dev = prev_dev;
- netif_rx(skb);
+ netif_receive_skb(skb);
skb = NULL;
}
rcu_read_unlock();
--
1.7.0.1
^ permalink raw reply related
* [PATCH 1/2] mac80211: use netif_receive_skb in ieee80211_rx callpath
From: John W. Linville @ 2010-06-24 18:47 UTC (permalink / raw)
To: linux-wireless; +Cc: johannes, John W. Linville
This avoids the extra queueing from calling netif_rx.
Signed-off-by: John W. Linville <linville@tuxdriver.com>
---
net/mac80211/rx.c | 10 +++++-----
1 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c
index ab58a5d..d70e1a9 100644
--- a/net/mac80211/rx.c
+++ b/net/mac80211/rx.c
@@ -293,7 +293,7 @@ ieee80211_rx_monitor(struct ieee80211_local *local, struct sk_buff *origskb,
skb2 = skb_clone(skb, GFP_ATOMIC);
if (skb2) {
skb2->dev = prev_dev;
- netif_rx(skb2);
+ netif_receive_skb(skb2);
}
}
@@ -304,7 +304,7 @@ ieee80211_rx_monitor(struct ieee80211_local *local, struct sk_buff *origskb,
if (prev_dev) {
skb->dev = prev_dev;
- netif_rx(skb);
+ netif_receive_skb(skb);
} else
dev_kfree_skb(skb);
@@ -1578,7 +1578,7 @@ ieee80211_deliver_skb(struct ieee80211_rx_data *rx)
/* deliver to local stack */
skb->protocol = eth_type_trans(skb, dev);
memset(skb->cb, 0, sizeof(skb->cb));
- netif_rx(skb);
+ netif_receive_skb(skb);
}
}
@@ -2244,7 +2244,7 @@ static void ieee80211_rx_cooked_monitor(struct ieee80211_rx_data *rx,
skb2 = skb_clone(skb, GFP_ATOMIC);
if (skb2) {
skb2->dev = prev_dev;
- netif_rx(skb2);
+ netif_receive_skb(skb2);
}
}
@@ -2255,7 +2255,7 @@ static void ieee80211_rx_cooked_monitor(struct ieee80211_rx_data *rx,
if (prev_dev) {
skb->dev = prev_dev;
- netif_rx(skb);
+ netif_receive_skb(skb);
skb = NULL;
} else
goto out_free_skb;
--
1.7.0.1
^ permalink raw reply related
* Re: [PATCH 0/3] b43: logging cleanups
From: John W. Linville @ 2010-06-24 18:53 UTC (permalink / raw)
To: Joe Perches
Cc: Stefano Brivio, linux-wireless, netdev, linux-kernel,
Larry.Finger, mb, zajec5
In-Reply-To: <cover.1276988387.git.joe@perches.com>
On Sat, Jun 19, 2010 at 04:30:08PM -0700, Joe Perches wrote:
> Just some small cleanups
>
> Joe Perches (3):
> drivers/net/wireless/b43: Use local ratelimit_state
> drivers/net/wireless/b43: Logging cleanups
> drivers/net/wireless/b43: Rename b43_debug to b43_debugging
Any of the b43 guys want to express an opinion on these?
--
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
* Compat-wireless release for 2010-06-24 is baked
From: Compat-wireless cronjob account @ 2010-06-24 19:03 UTC (permalink / raw)
To: linux-wireless, linux-bluetooth
>From git://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next
951149c..2e58c02 history -> origin/history
+ fca5ab0...df17781 master -> origin/master (forced update)
* [new tag] next-20100624 -> next-20100624
compat-wireless code metrics
494218 - Total upstream lines of code being pulled
^ permalink raw reply
* Re: [PATCH 0/3] b43: logging cleanups
From: Larry Finger @ 2010-06-24 19:20 UTC (permalink / raw)
To: John W. Linville
Cc: Joe Perches, Stefano Brivio, linux-wireless, netdev, linux-kernel,
mb, zajec5
In-Reply-To: <20100624185339.GC2368@tuxdriver.com>
On 06/24/2010 01:53 PM, John W. Linville wrote:
> On Sat, Jun 19, 2010 at 04:30:08PM -0700, Joe Perches wrote:
>> Just some small cleanups
>>
>> Joe Perches (3):
>> drivers/net/wireless/b43: Use local ratelimit_state
>> drivers/net/wireless/b43: Logging cleanups
>> drivers/net/wireless/b43: Rename b43_debug to b43_debugging
>
> Any of the b43 guys want to express an opinion on these?
The local ratelimit patch is OK. My personal opinion is that the others
are just churning the source for no real reason, but I have no major
objections.
Larry
^ permalink raw reply
* Re: [PATCH 0/3] b43: logging cleanups
From: Joe Perches @ 2010-06-24 19:40 UTC (permalink / raw)
To: John W. Linville
Cc: Stefano Brivio, linux-wireless, netdev, linux-kernel,
Larry.Finger, mb, zajec5
In-Reply-To: <20100624185339.GC2368@tuxdriver.com>
On Thu, 2010-06-24 at 14:53 -0400, John W. Linville wrote:
> On Sat, Jun 19, 2010 at 04:30:08PM -0700, Joe Perches wrote:
> > Just some small cleanups
> > Joe Perches (3):
> > drivers/net/wireless/b43: Use local ratelimit_state
> > drivers/net/wireless/b43: Logging cleanups
> > drivers/net/wireless/b43: Rename b43_debug to b43_debugging
> Any of the b43 guys want to express an opinion on these?
Stefano, are you active here?
Your last ack for b43 was Feb 2008.
There have been 400+ commits to b43 without your ack.
Should your name be moved from MAINTAINERS to CREDITS?
$ ./scripts/get_maintainer.pl --rolestats -f drivers/net/wireless/b43/
Stefano Brivio <stefano.brivio@polimi.it> (maintainer:B43 WIRELESS DRIVER)
"John W. Linville" <linville@tuxdriver.com> (maintainer:NETWORKING [WIREL...,commit_signer:204/240=85%)
"Rafał Miłecki" <zajec5@gmail.com> (commit_signer:83/240=35%)
"Gábor Stefanik" <netrolller.3d@gmail.com> (commit_signer:44/240=18%)
Michael Buesch <mb@bu3sch.de> (commit_signer:39/240=16%)
Larry Finger <Larry.Finger@lwfinger.net> (commit_signer:13/240=5%)
linux-wireless@vger.kernel.org (open list:B43 WIRELESS DRIVER)
netdev@vger.kernel.org (open list:NETWORKING DRIVERS)
linux-kernel@vger.kernel.org (open list)
^ permalink raw reply
* Re: [PATCH 0/3] b43: logging cleanups
From: Larry Finger @ 2010-06-24 19:56 UTC (permalink / raw)
To: Joe Perches
Cc: John W. Linville, Stefano Brivio, linux-wireless, netdev,
linux-kernel, mb, zajec5
In-Reply-To: <1277408432.1654.80.camel@Joe-Laptop.home>
On 06/24/2010 02:40 PM, Joe Perches wrote:
> On Thu, 2010-06-24 at 14:53 -0400, John W. Linville wrote:
>> On Sat, Jun 19, 2010 at 04:30:08PM -0700, Joe Perches wrote:
>>> Just some small cleanups
>>> Joe Perches (3):
>>> drivers/net/wireless/b43: Use local ratelimit_state
>>> drivers/net/wireless/b43: Logging cleanups
>>> drivers/net/wireless/b43: Rename b43_debug to b43_debugging
>> Any of the b43 guys want to express an opinion on these?
>
> Stefano, are you active here?
> Your last ack for b43 was Feb 2008.
> There have been 400+ commits to b43 without your ack.
>
> Should your name be moved from MAINTAINERS to CREDITS?
>
> $ ./scripts/get_maintainer.pl --rolestats -f drivers/net/wireless/b43/
> Stefano Brivio <stefano.brivio@polimi.it> (maintainer:B43 WIRELESS DRIVER)
> "John W. Linville" <linville@tuxdriver.com> (maintainer:NETWORKING [WIREL...,commit_signer:204/240=85%)
> "Rafał Miłecki" <zajec5@gmail.com> (commit_signer:83/240=35%)
> "Gábor Stefanik" <netrolller.3d@gmail.com> (commit_signer:44/240=18%)
> Michael Buesch <mb@bu3sch.de> (commit_signer:39/240=16%)
> Larry Finger <Larry.Finger@lwfinger.net> (commit_signer:13/240=5%)
> linux-wireless@vger.kernel.org (open list:B43 WIRELESS DRIVER)
> netdev@vger.kernel.org (open list:NETWORKING DRIVERS)
> linux-kernel@vger.kernel.org (open list)
The primary arbitrator for patches to the subtle parts of b43 is Michael
Buesch; however, he is no longer an official MAINTAINER. I can ACK some
things; however, any changes that are associated with my reverse
engineering of the Broadcom drivers are off limits.
Larry
^ permalink raw reply
* [PATCH] compat: backport skb_queue_splice_init
From: Hauke Mehrtens @ 2010-06-24 20:59 UTC (permalink / raw)
To: lrodriguez; +Cc: linux-wireless, mcgrof, Hauke Mehrtens
This is needed by iwmc3200wifi.
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
---
include/linux/compat-2.6.28.h | 17 +++++++++++++++++
1 files changed, 17 insertions(+), 0 deletions(-)
diff --git a/include/linux/compat-2.6.28.h b/include/linux/compat-2.6.28.h
index 2cab320..7160548 100644
--- a/include/linux/compat-2.6.28.h
+++ b/include/linux/compat-2.6.28.h
@@ -147,6 +147,23 @@ static inline void skb_queue_splice(const struct sk_buff_head *list,
}
/**
+ * skb_queue_splice - join two skb lists and reinitialise the emptied list
+ * @list: the new list to add
+ * @head: the place to add it in the first list
+ *
+ * The list at @list is reinitialised
+ */
+static inline void skb_queue_splice_init(struct sk_buff_head *list,
+ struct sk_buff_head *head)
+{
+ if (!skb_queue_empty(list)) {
+ __skb_queue_splice(list, (struct sk_buff *) head, head->next);
+ head->qlen += list->qlen;
+ __skb_queue_head_init(list);
+ }
+}
+
+/**
* skb_queue_splice_tail - join two skb lists and reinitialise the emptied list
* @list: the new list to add
* @head: the place to add it in the first list
--
1.7.0.4
^ permalink raw reply related
* [PATCH 2/2] compat-wireless: activate iwmc3200wifi and WL1271_SDIO
From: Hauke Mehrtens @ 2010-06-24 21:00 UTC (permalink / raw)
To: lrodriguez; +Cc: linux-wireless, mcgrof, Hauke Mehrtens
In-Reply-To: <1277413205-6753-1-git-send-email-hauke@hauke-m.de>
netdev_ops for iwmc3200wifi is backported now.
CONFIG_WL1271_SDIO does not depend on ARM any more in mainline, but it
needs at least kernel 2.6.32.
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
---
config.mk | 6 +-----
1 files changed, 1 insertions(+), 5 deletions(-)
diff --git a/config.mk b/config.mk
index 04a6f7e..e8ec458 100644
--- a/config.mk
+++ b/config.mk
@@ -433,7 +433,7 @@ CONFIG_SSB_SDIOHOST=y
CONFIG_B43_SDIO=y
CONFIG_WL1251_SDIO=m
-ifneq ($(CONFIG_ARM),)
+ifndef CONFIG_COMPAT_KERNEL_32
CONFIG_WL1271_SDIO=m
endif
@@ -445,12 +445,8 @@ CONFIG_LIBERTAS_SDIO=m
NEED_LIBERTAS=y
endif
-# Activate iwmc3200wifi support only on kernel >= 2.6.29.
-# iwmc3200wifi uses new netdev_ops api no supported by old kernel.
-ifndef CONFIG_COMPAT_KERNEL_29
CONFIG_IWM=m
# CONFIG_IWM_DEBUG=y
-endif
endif # end of SDIO driver list
--
1.7.0.4
^ permalink raw reply related
* [PATCH 1/2] compat-wireless: refresh patches
From: Hauke Mehrtens @ 2010-06-24 21:00 UTC (permalink / raw)
To: lrodriguez; +Cc: linux-wireless, mcgrof, Hauke Mehrtens
refresh patches and backport netdev_ops for iwmc3200wifi
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
---
crap/0002-ath9k-Add-pktlog-support.patch | 20 ++++++++++----------
patches/01-netdev.patch | 26 ++++++++++++++------------
patches/03-rfkill.patch | 2 +-
patches/05-usb.patch | 2 +-
| 12 ------------
patches/08-rename-iwl4965-config.patch | 4 ++--
patches/19-kfifo.patch | 8 ++++----
patches/25-multicast-list_head.patch | 4 ++--
patches/28-pm-qos-params.patch | 2 +-
9 files changed, 35 insertions(+), 45 deletions(-)
diff --git a/crap/0002-ath9k-Add-pktlog-support.patch b/crap/0002-ath9k-Add-pktlog-support.patch
index 2649ee3..b64715f 100644
--- a/crap/0002-ath9k-Add-pktlog-support.patch
+++ b/crap/0002-ath9k-Add-pktlog-support.patch
@@ -105,15 +105,15 @@ Signed-off-by: Vasanthakumar Thiagarajan <vasanth@atheros.com>
/*
* Header for the ath9k.ko driver core *only* -- hw code nor any other driver
-@@ -516,6 +517,7 @@ void ath_deinit_leds(struct ath_softc *s
- #define SC_OP_TSF_RESET BIT(11)
+@@ -517,6 +518,7 @@ void ath_deinit_leds(struct ath_softc *s
#define SC_OP_BT_PRIORITY_DETECTED BIT(12)
#define SC_OP_BT_SCAN BIT(13)
-+#define SC_OP_PKTLOGGING BIT(14)
+ #define SC_OP_ANI_RUN BIT(14)
++#define SC_OP_PKTLOGGING BIT(15)
/* Powersave flags */
#define PS_WAIT_FOR_BEACON BIT(0)
-@@ -594,6 +596,10 @@ struct ath_softc {
+@@ -595,6 +597,10 @@ struct ath_softc {
#ifdef CONFIG_ATH9K_DEBUGFS
struct ath9k_debug debug;
#endif
@@ -161,7 +161,7 @@ Signed-off-by: Vasanthakumar Thiagarajan <vasanth@atheros.com>
static inline void ath9k_hw_set11n_txdesc(struct ath_hw *ah, void *ds,
--- a/drivers/net/wireless/ath/ath9k/hw.c
+++ b/drivers/net/wireless/ath/ath9k/hw.c
-@@ -2396,7 +2396,7 @@ void ath9k_hw_setrxfilter(struct ath_hw
+@@ -2417,7 +2417,7 @@ void ath9k_hw_setrxfilter(struct ath_hw
phybits |= AR_PHY_ERR_RADAR;
if (bits & ATH9K_RX_FILTER_PHYERR)
phybits |= AR_PHY_ERR_OFDM_TIMING | AR_PHY_ERR_CCK_TIMING;
@@ -172,7 +172,7 @@ Signed-off-by: Vasanthakumar Thiagarajan <vasanth@atheros.com>
REG_WRITE(ah, AR_RXCFG,
--- a/drivers/net/wireless/ath/ath9k/hw.h
+++ b/drivers/net/wireless/ath/ath9k/hw.h
-@@ -602,7 +602,7 @@ struct ath_hw_ops {
+@@ -603,7 +603,7 @@ struct ath_hw_ops {
const void *ds0, dma_addr_t buf_addr,
unsigned int qcu);
int (*proc_txdesc)(struct ath_hw *ah, void *ds,
@@ -181,10 +181,10 @@ Signed-off-by: Vasanthakumar Thiagarajan <vasanth@atheros.com>
void (*set11n_txdesc)(struct ath_hw *ah, void *ds,
u32 pktLen, enum ath9k_pkt_type type,
u32 txPower, u32 keyIx,
-@@ -819,6 +819,8 @@ struct ath_hw {
-
- u32 paprd_gain_table_entries[PAPRD_GAIN_TABLE_ENTRIES];
- u8 paprd_gain_table_index[PAPRD_GAIN_TABLE_ENTRIES];
+@@ -826,6 +826,8 @@ struct ath_hw {
+ * this register when in sleep states.
+ */
+ u32 WARegVal;
+
+ bool is_pkt_logging;
};
diff --git a/patches/01-netdev.patch b/patches/01-netdev.patch
index 98cb477..32afc2f 100644
--- a/patches/01-netdev.patch
+++ b/patches/01-netdev.patch
@@ -215,9 +215,20 @@ without creating a headache on maintenance of the pathes.
priv->wireless_data.spy_data = &priv->ieee->spy_data;
net_dev->wireless_data = &priv->wireless_data;
net_dev->wireless_handlers = &ipw_wx_handler_def;
+--- a/drivers/net/wireless/iwmc3200wifi/netdev.c
++++ b/drivers/net/wireless/iwmc3200wifi/netdev.c
+@@ -129,7 +129,7 @@ void *iwm_if_alloc(int sizeof_bus, struc
+ goto out_priv;
+ }
+
+- ndev->netdev_ops = &iwm_netdev_ops;
++ netdev_attach_ops(ndev, &iwm_netdev_ops);
+ ndev->ieee80211_ptr = wdev;
+ SET_NETDEV_DEV(ndev, wiphy_dev(wdev->wiphy));
+ wdev->netdev = ndev;
--- a/drivers/net/wireless/libertas/main.c
+++ b/drivers/net/wireless/libertas/main.c
-@@ -968,7 +968,7 @@ struct lbs_private *lbs_add_card(void *c
+@@ -866,7 +866,7 @@ struct lbs_private *lbs_add_card(void *c
wdev->netdev = dev;
priv->dev = dev;
@@ -225,19 +236,10 @@ without creating a headache on maintenance of the pathes.
+ netdev_attach_ops(dev, &lbs_netdev_ops);
dev->watchdog_timeo = 5 * HZ;
dev->ethtool_ops = &lbs_ethtool_ops;
- #ifdef WIRELESS_EXT
-@@ -1304,7 +1304,7 @@ static int lbs_add_rtap(struct lbs_priva
-
- memcpy(rtap_dev->dev_addr, priv->current_addr, ETH_ALEN);
- rtap_dev->type = ARPHRD_IEEE80211_RADIOTAP;
-- rtap_dev->netdev_ops = &rtap_netdev_ops;
-+ netdev_attach_ops(rtap_dev, &rtap_netdev_ops);
- rtap_dev->ml_priv = priv;
- SET_NETDEV_DEV(rtap_dev, priv->dev->dev.parent);
-
+ dev->flags |= IFF_BROADCAST | IFF_MULTICAST;
--- a/drivers/net/wireless/libertas/mesh.c
+++ b/drivers/net/wireless/libertas/mesh.c
-@@ -363,7 +363,7 @@ int lbs_add_mesh(struct lbs_private *pri
+@@ -364,7 +364,7 @@ int lbs_add_mesh(struct lbs_private *pri
mesh_dev->ml_priv = priv;
priv->mesh_dev = mesh_dev;
diff --git a/patches/03-rfkill.patch b/patches/03-rfkill.patch
index c7c242b..2ddf967 100644
--- a/patches/03-rfkill.patch
+++ b/patches/03-rfkill.patch
@@ -208,7 +208,7 @@ This would do the policing from within mac80211.
#include <net/cfg80211.h>
--- a/drivers/net/wireless/ath/ath9k/hw.c
+++ b/drivers/net/wireless/ath/ath9k/hw.c
-@@ -2171,7 +2171,7 @@ int ath9k_hw_fill_cap_info(struct ath_hw
+@@ -2192,7 +2192,7 @@ int ath9k_hw_fill_cap_info(struct ath_hw
pCap->hw_caps |= ATH9K_HW_CAP_ENHANCEDPM;
diff --git a/patches/05-usb.patch b/patches/05-usb.patch
index 5d6fbda..a231b0f 100644
--- a/patches/05-usb.patch
+++ b/patches/05-usb.patch
@@ -14,7 +14,7 @@ USB opt soft_unbid was added as of 2.6.27.
static int __init p54u_init(void)
--- a/drivers/net/wireless/ath/ath9k/hif_usb.c
+++ b/drivers/net/wireless/ath/ath9k/hif_usb.c
-@@ -1030,7 +1030,9 @@ static struct usb_driver ath9k_hif_usb_d
+@@ -1039,7 +1039,9 @@ static struct usb_driver ath9k_hif_usb_d
.reset_resume = ath9k_hif_usb_resume,
#endif
.id_table = ath9k_hif_usb_ids,
--git a/patches/06-header-changes.patch b/patches/06-header-changes.patch
index b3c71fb..e0846f5 100644
--- a/patches/06-header-changes.patch
+++ b/patches/06-header-changes.patch
@@ -16,18 +16,6 @@ cases.
struct b43_wldev;
---- a/drivers/net/wireless/libertas/assoc.c
-+++ b/drivers/net/wireless/libertas/assoc.c
-@@ -6,6 +6,9 @@
- #include <linux/if_arp.h>
- #include <linux/slab.h>
- #include <net/lib80211.h>
-+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,29))
-+#include <asm/unaligned.h>
-+#endif
-
- #include "assoc.h"
- #include "decl.h"
--- a/drivers/net/wireless/wl12xx/wl1251_main.c
+++ b/drivers/net/wireless/wl12xx/wl1251_main.c
@@ -26,6 +26,9 @@
diff --git a/patches/08-rename-iwl4965-config.patch b/patches/08-rename-iwl4965-config.patch
index 1329994..681ff22 100644
--- a/patches/08-rename-iwl4965-config.patch
+++ b/patches/08-rename-iwl4965-config.patch
@@ -6,7 +6,7 @@ CONFIG_IWL4965 has to be set to y, to build correctly.
--- a/drivers/net/wireless/iwlwifi/Makefile
+++ b/drivers/net/wireless/iwlwifi/Makefile
@@ -14,7 +14,7 @@ iwlagn-objs += iwl-agn-ucode.o iwl-agn-
- iwlagn-objs += iwl-agn-lib.o
+ iwlagn-objs += iwl-agn-lib.o iwl-agn-rx.o iwl-agn-calib.o
iwlagn-$(CONFIG_IWLWIFI_DEBUGFS) += iwl-agn-debugfs.o
-iwlagn-$(CONFIG_IWL4965) += iwl-4965.o
@@ -16,7 +16,7 @@ CONFIG_IWL4965 has to be set to y, to build correctly.
iwlagn-$(CONFIG_IWL5000) += iwl-1000.o
--- a/drivers/net/wireless/iwlwifi/iwl-agn.c
+++ b/drivers/net/wireless/iwlwifi/iwl-agn.c
-@@ -4080,10 +4080,10 @@ static void __devexit iwl_pci_remove(str
+@@ -4079,10 +4079,10 @@ static void __devexit iwl_pci_remove(str
/* Hardware specific file defines the PCI IDs table for that hardware module */
static DEFINE_PCI_DEVICE_TABLE(iwl_hw_card_ids) = {
diff --git a/patches/19-kfifo.patch b/patches/19-kfifo.patch
index b957599..66a0287 100644
--- a/patches/19-kfifo.patch
+++ b/patches/19-kfifo.patch
@@ -3,7 +3,7 @@ not be backported easily with defines in the compat module.
--- a/drivers/net/wireless/libertas/dev.h
+++ b/drivers/net/wireless/libertas/dev.h
-@@ -125,7 +125,11 @@ struct lbs_private {
+@@ -126,7 +126,11 @@ struct lbs_private {
u32 resp_len[2];
/* Events sent from hardware to driver */
@@ -17,7 +17,7 @@ not be backported easily with defines in the compat module.
struct task_struct *main_thread;
--- a/drivers/net/wireless/libertas/main.c
+++ b/drivers/net/wireless/libertas/main.c
-@@ -887,8 +887,14 @@ static int lbs_init_adapter(struct lbs_p
+@@ -788,8 +788,14 @@ static int lbs_init_adapter(struct lbs_p
priv->resp_len[0] = priv->resp_len[1] = 0;
/* Create the event FIFO */
@@ -32,7 +32,7 @@ not be backported easily with defines in the compat module.
lbs_pr_err("Out of memory allocating event FIFO buffer\n");
goto out;
}
-@@ -904,7 +910,12 @@ static void lbs_free_adapter(struct lbs_
+@@ -805,7 +811,12 @@ static void lbs_free_adapter(struct lbs_
lbs_deb_enter(LBS_DEB_MAIN);
lbs_free_cmd_buffer(priv);
@@ -44,4 +44,4 @@ not be backported easily with defines in the compat module.
+#endif
del_timer(&priv->command_timer);
del_timer(&priv->auto_deepsleep_timer);
- kfree(priv->networks);
+
diff --git a/patches/25-multicast-list_head.patch b/patches/25-multicast-list_head.patch
index d90e4b1..f7304cb 100644
--- a/patches/25-multicast-list_head.patch
+++ b/patches/25-multicast-list_head.patch
@@ -229,7 +229,7 @@ This also backport commit 2f787b0b76bf5de2eaa3ca3a29d89123ae03c856
return ((u64)(mfilt[1]) << 32) | mfilt[0];
--- a/drivers/net/wireless/libertas/main.c
+++ b/drivers/net/wireless/libertas/main.c
-@@ -328,18 +328,34 @@ static int lbs_add_mcast_addrs(struct cm
+@@ -247,18 +247,34 @@ static int lbs_add_mcast_addrs(struct cm
netif_addr_lock_bh(dev);
cnt = netdev_mc_count(dev);
netdev_for_each_mc_addr(ha, dev) {
@@ -576,7 +576,7 @@ This also backport commit 2f787b0b76bf5de2eaa3ca3a29d89123ae03c856
return hash.low | ((u64)hash.high << 32);
--- a/include/net/mac80211.h
+++ b/include/net/mac80211.h
-@@ -1686,7 +1686,11 @@ struct ieee80211_ops {
+@@ -1695,7 +1695,11 @@ struct ieee80211_ops {
struct ieee80211_bss_conf *info,
u32 changed);
u64 (*prepare_multicast)(struct ieee80211_hw *hw,
diff --git a/patches/28-pm-qos-params.patch b/patches/28-pm-qos-params.patch
index 20cbc28..204ade5 100644
--- a/patches/28-pm-qos-params.patch
+++ b/patches/28-pm-qos-params.patch
@@ -61,7 +61,7 @@
module_init(ipw2100_init);
--- a/net/mac80211/mlme.c
+++ b/net/mac80211/mlme.c
-@@ -556,7 +556,11 @@ void ieee80211_recalc_ps(struct ieee8021
+@@ -590,7 +590,11 @@ void ieee80211_recalc_ps(struct ieee8021
s32 beaconint_us;
if (latency < 0)
--
1.7.0.4
^ permalink raw reply related
* Re: Problems connectring to an AP with Acer Aspire Revo
From: reinette chatre @ 2010-06-24 21:57 UTC (permalink / raw)
To: Johannes Berg; +Cc: Christian P. Schmidt, linux-wireless@vger.kernel.org
In-Reply-To: <1275669638.2091.34633.camel@rchatre-DESK>
On Fri, 2010-06-04 at 09:40 -0700, reinette chatre wrote:
> On Thu, 2010-06-03 at 23:48 -0700, Johannes Berg wrote:
> > On Thu, 2010-06-03 at 17:56 +0200, Christian P. Schmidt wrote:
> >
> > > > Maybe try the rfkill tool:
> > > > http://wireless.kernel.org/en/users/Documentation/rfkill
> > >
> > > Yes, it was the rfkill tool that caused my attempts to fail. However,
> > > this didn't change my association attempt problems.
> > > I also took my time to look at the PCIe port - steady 3.3V on the RFKILL
> > > pin, which means "no RFKILL".
> > >
> > > Any further ideas?
> >
> > Unfortunately not. It would seem that something is causing your frames
> > not to be transmitted correctly, but I see no reason for that right now.
>
> The logs provided contains a lot of useful information. Among this is
> that the device is unable to transmit data with the firmware returning a
> "TX_LOCKED" status. From what I understand this is a regulatory check
> failure based on the channel type, which does not make sense in this
> regard since from what I can tell channel 8, which is an active channel,
> is used. I passed this question to our firmware folks and now waiting
> for an answer.
Unfortunately, since the firmware does not actually assert, the firmware
folks are unable to dig into this. I tried to take a second look at your
logs and one thing that I was able to see that is interesting is that,
when scanning, the device picks up very few frames that are good. I see
that there were five scans, none of which contained a since good frame
on 5GHz. On 2.4GHz there was a bit better success, but not consistent.
In the five scans there was the following on 2.4GHz:
1st scan: one good frame each on channels 5, 7, and 8.
2st scan: one good frame on channel 1
3st scan: one good frame each on channels 2, 7, and 9.
4st scan: one good frame each on channels 3, 5, 7, and 8.
5st scan: one good frame each on channels 1, 8, and 9.
If you want to check on this yourself, take a look at the lines:
[223263.179493] ieee80211 phy2: I iwl_rx_scan_results_notif Scan ch.res:
2 [802.11bg] (TSF: 0x00000000:05627B90) - 1 elapsed=33837 usec
The number before "elapsed" indicates the number of good frames seen
while scanning the channel. In the above example there was one.
This seems to indicate that there is some trouble on this platform ...
and makes me start thinking that this card may not work well on this
platform.
Some things you can try:
- are any APs on A band? If not, can you try to activate an AP on A band
to see if you have better success there?
- monitor the RX statistics ...
(/sys/kernel/debug/ieee80211/phy0/iwlagn/debug/ucode_rx_stats) to see if
there is an issue with crc checks and perhaps false alarms and plcp
also.
- something that you could try ... not sure how much it will help if you
are having noise issues ... is to vary how you scan. Since you know
which AP you are associating with, perhaps you can try to limit your
scan to that channel ... and also try passive instead of active. This
can be done with iw.
These are the only things I can think of.
Reinette
^ permalink raw reply
* Re: [PATCH 2/2] wl1251: fix ELP_CTRL register reads
From: Denis 'GNUtoo' Carikli @ 2010-06-24 23:09 UTC (permalink / raw)
To: Grazvydas Ignotas
Cc: Bob Copeland, Kalle Valo, John W.Linville, linux-wireless
In-Reply-To: <1277249607.2233.270.camel@gnutoo-laptop>
[-- Attachment #1: Type: text/plain, Size: 5450 bytes --]
On Wed, 2010-06-23 at 01:33 +0200, Denis 'GNUtoo' Carikli wrote:
> On Tue, 2010-06-22 at 01:48 +0300, Grazvydas Ignotas wrote:
> > >> Probably not relevant to power saving, but:
> > >>
> > >> Are you using the dedicated irq line or sdio interrupt?
> > >> It makes a big difference in overall throughput to use
> > >> the former.
> > > I don't know. what should I grep for?
> >
> > It might actually be related.. Try adding this to your board file to
> > enable GPIO irq:
> >
> > static void wl1251_set_power(bool enable)
> > {
> > }
> >
> > static struct wl12xx_platform_data wl1251_pdata = {
> > .set_power = wl1251_set_power,
> > };
> >
> > static struct platform_device wl1251_data = {
> > .name = "wl1251_data",
> > .id = -1,
> > .dev = {
> > .platform_data = &wl1251_pdata,
> > },
> > };
> >
> > .. then from some init function:
> >
> > // WIFI_IRQ_GPIO is the GPIO number connected to wl1251 irq line
> > wl1251_pdata.irq = gpio_to_irq(WIFI_IRQ_GPIO);
> > platform_device_register(&wl1251_pdata);
> Thanks a lot for the infos,they were really helpfull.
>
> I've applied that patch(as it was not for submitting,just for reading I
> didn't bother sending with git-send-email):
> Index: sources/arch/arm/mach-msm/board-trout.c
> ===================================================================
> --- sources.orig/arch/arm/mach-msm/board-trout.c 2010-06-23
> 00:41:54.601288614 +0200
> +++ sources/arch/arm/mach-msm/board-trout.c 2010-06-23
> 00:43:59.893158944 +0200
> @@ -52,6 +52,7 @@
> #include <asm/mach/mmc.h>
> #include <linux/mmc/sdio_ids.h>
> #include <linux/msm_audio.h>
> +#include <linux/spi/wl12xx.h>
>
> #include "board-trout.h"
>
> @@ -363,6 +364,17 @@
> },
> };
>
> +struct wl12xx_platform_data wl12xx_data = {
> +};
> +
> +static struct platform_device wl12xx = {
> + .name = "wl1251_data",
> + .id = -1,
> + .dev = {
> + .platform_data = &wl12xx_data,
> + },
> +};
> +
> #ifdef CONFIG_HTC_HEADSET
> static void h2w_config_cpld(int route)
> {
> @@ -650,6 +662,7 @@
> &trout_pwr_sink,
> #endif
> &trout_snd,
> + &wl12xx,
> };
>
> extern struct sys_timer msm_timer;
> @@ -745,6 +758,7 @@
>
> static void __init config_gpios(void)
> {
> + wl12xx_data.irq = gpio_to_irq(29);
> config_gpio_table(gpio_table, ARRAY_SIZE(gpio_table));
> config_camera_off_gpios();
> }
> Index: sources/include/linux/spi/wl12xx.h
> ===================================================================
> --- sources.orig/include/linux/spi/wl12xx.h 2010-06-23
> 00:42:03.641283312 +0200
> +++ sources/include/linux/spi/wl12xx.h 2010-06-23 00:42:48.103178185
> +0200
> @@ -26,6 +26,7 @@
>
> struct wl12xx_platform_data {
> void (*set_power)(bool enable);
> + int irq;
> };
>
> #endif
>
> The patch was made from someone in irc and modified by me later.
>
> Then I load the wifi as usual:
> modprobe wl1251_sdio #it doesn't crash
> modprobe msm_wifi
> the modprobe msm_wifi gives the following result:
> [ 1366.500427] wifi probe start
> [ 1366.500457] trout_wifi_power: 1
> [ 1366.927185] trout_wifi_reset: 0
> [ 1367.030944] trout_wifi_set_carddetect: 1
> [ 1367.030975] mmc0: card_present 1
> [ 1367.030975] mmc0: Slot status change detected (0 -> 1)
> [ 1367.031036] wifi probe done
> And then I've an invisible crash/kernel panic which result in the
> machine lockup and then reboot(so it should be a kernel panic).
> Note that I've no serial yet(I think I should really get a serial cable
> for this machine)
>
> msm_wifi comes from here:
> http://bobcopeland.com/srcs/android/msm_wifi.patch
>
> I had already some wifi structures which may have conflicted:
>
> struct wifi_platform_data trout_wifi_control = {
> .set_power = trout_wifi_power,
> .set_reset = trout_wifi_reset,
> .set_carddetect = trout_wifi_set_carddetect,
> #ifdef CONFIG_WIFI_MEM_PREALLOC
> .mem_prealloc = trout_wifi_mem_prealloc,
> #else
> .mem_prealloc = NULL,
> #endif
> };
I've changed that struct to wl12xx_platform_Data and added the irq
int,and I've still the following errors:
[ 541.676849] wl1251: ERROR sdio_writeb failed (-84)
[ 542.006378] mmc0: Command timeout
[ 542.011444] mmc0:0001: error -110 reading SDIO_CCCR_INTx
[ 543.016357] mmc0: Command CRC error
[ 543.016418] mmc0:0001: error -84 reading SDIO_CCCR_INTx
[ 544.026367] mmc0: Command timeout
[ 544.031433] mmc0:0001: error -110 reading SDIO_CCCR_INTx
[ 545.036376] mmc0: Command CRC error
[ 545.036437] mmc0:0001: error -84 reading SDIO_CCCR_INTx
[ 546.066345] mmc0: Command timeout
[ 546.071411] mmc0:0001: error -110 reading SDIO_CCCR_INTx
[ 547.076354] mmc0: Command CRC error
[ 547.076416] mmc0:0001: error -84 reading SDIO_CCCR_INTx
[ 548.106384] mmc0: Command timeout
[ 548.111450] mmc0:0001: error -110 reading SDIO_CCCR_INTx
[ 548.706665] mmc0: Command CRC error
[ 548.706726] wl1251: ERROR sdio_writeb failed (-84)
[ 549.136383] mmc0: Command timeout
[ 549.141479] mmc0:0001: error -110 reading SDIO_CCCR_INTx
[ 549.676635] mmc0: Command CRC error
[ 549.676696] wl1251: ERROR sdio_writeb failed (-84)
[ 550.166381] mmc0: Command timeout
[ 550.171447] mmc0:0001: error -110 reading SDIO_CCCR_INTx
[ 550.676269] wlan0: no IPv6 routers present
[ 551.176361] mmc0: Command CRC error
[ 551.176422] mmc0:0001: error -84 reading SDIO_CCCR_INTx
[ 552.186340] mmc0: Command timeout
The patch is attached.
Denis.
[-- Attachment #2: cleaner_wifi_patch_quilt.patch --]
[-- Type: text/x-patch, Size: 4876 bytes --]
Index: sources/arch/arm/mach-msm/board-trout-wifi.c
===================================================================
--- sources.orig/arch/arm/mach-msm/board-trout-wifi.c 2010-06-24 23:58:13.194099802 +0200
+++ sources/arch/arm/mach-msm/board-trout-wifi.c 2010-06-24 23:58:21.385931197 +0200
@@ -20,7 +20,7 @@
#include <linux/platform_device.h>
#include <linux/vmalloc.h>
#include <linux/err.h>
-#include <linux/wifi_tiwlan.h>
+#include <linux/spi/wl12xx.h>
extern int trout_wifi_set_carddetect(int val);
extern int trout_wifi_power(int on);
@@ -60,7 +60,7 @@
}
#endif
-struct wifi_platform_data trout_wifi_control = {
+struct wl12xx_platform_data trout_wifi_control = {
.set_power = trout_wifi_power,
.set_reset = trout_wifi_reset,
.set_carddetect = trout_wifi_set_carddetect,
Index: sources/arch/arm/mach-msm/board-trout.c
===================================================================
--- sources.orig/arch/arm/mach-msm/board-trout.c 2010-06-24 23:58:13.234055563 +0200
+++ sources/arch/arm/mach-msm/board-trout.c 2010-06-25 00:40:37.324053664 +0200
@@ -66,7 +66,7 @@
#include <mach/htc_headset.h>
#endif
#ifdef CONFIG_WIFI_CONTROL_FUNC
-#include <linux/wifi_tiwlan.h>
+#include <linux/spi/wl12xx.h>
#endif
#include "proc_comm.h"
@@ -80,7 +80,7 @@
#ifdef CONFIG_WIFI_MEM_PREALLOC
extern int trout_init_wifi_mem(void);
#endif
-extern struct wifi_platform_data trout_wifi_control;
+extern struct wl12xx_platform_data trout_wifi_control;
#endif
struct trout_axis_info {
@@ -545,6 +545,28 @@
.ram_console_size = MSM_RAM_CONSOLE_SIZE,
};
+
+static void trout_wl1251_init(void)
+{
+ int ret;
+
+ ret = gpio_request(TROUT_WIFI_IRQ_GPIO, "wl1251 irq");
+ if (ret < 0)
+ goto fail_irq;
+
+ ret = gpio_direction_input(TROUT_WIFI_IRQ_GPIO);
+ if (ret < 0)
+ goto fail_irq;
+
+ trout_wifi_control.irq = gpio_to_irq(TROUT_WIFI_IRQ_GPIO);
+ if (trout_wifi_control.irq < 0)
+ goto fail_irq;
+
+ return;
+
+fail_irq:
+ gpio_free(TROUT_WIFI_IRQ_GPIO);
+}
#ifdef CONFIG_WIFI_CONTROL_FUNC
static struct platform_device trout_wifi = {
.name = "msm_wifi",
@@ -823,6 +845,7 @@
/* SD card door should wake the device */
set_irq_wake(TROUT_GPIO_TO_INT(TROUT_GPIO_SD_DOOR_N), 1);
+ trout_wl1251_init();
}
static struct map_desc trout_io_desc[] __initdata = {
Index: sources/arch/arm/mach-msm/board-trout.h
===================================================================
--- sources.orig/arch/arm/mach-msm/board-trout.h 2010-06-24 23:58:13.294049700 +0200
+++ sources/arch/arm/mach-msm/board-trout.h 2010-06-24 23:58:21.385931197 +0200
@@ -74,6 +74,7 @@
#define TROUT_GPIO_HAPTIC_PWM (28)
#define TROUT_GPIO_PS_HOLD (25)
+#define TROUT_WIFI_IRQ_GPIO (29)
#define TROUT_GPIO_MISC2_BASE (TROUT_GPIO_START + 0x00)
#define TROUT_GPIO_MISC3_BASE (TROUT_GPIO_START + 0x08)
Index: sources/arch/arm/mach-msm/msm_wifi.c
===================================================================
--- sources.orig/arch/arm/mach-msm/msm_wifi.c 2010-06-24 23:58:13.344052459 +0200
+++ sources/arch/arm/mach-msm/msm_wifi.c 2010-06-24 23:58:21.385931197 +0200
@@ -18,12 +18,12 @@
* Copyright (C) 2008 Google Inc
*/
#include <linux/platform_device.h>
-#include <linux/wifi_tiwlan.h>
+#include <linux/spi/wl12xx.h>
static int wifi_probe(struct platform_device *pdev)
{
- struct wifi_platform_data *wifi_ctrl =
- (struct wifi_platform_data *)(pdev->dev.platform_data);
+ struct wl12xx_platform_data *wifi_ctrl =
+ (struct wl12xx_platform_data *)(pdev->dev.platform_data);
printk(KERN_DEBUG "wifi probe start\n");
@@ -43,8 +43,8 @@
static int wifi_remove(struct platform_device *pdev)
{
- struct wifi_platform_data *wifi_ctrl =
- (struct wifi_platform_data *)(pdev->dev.platform_data);
+ struct wl12xx_platform_data *wifi_ctrl =
+ (struct w12xx_platform_data *)(pdev->dev.platform_data);
printk(KERN_DEBUG "wifi remove start\n");
if (!wifi_ctrl)
Index: sources/include/linux/spi/wl12xx.h
===================================================================
--- sources.orig/include/linux/spi/wl12xx.h 2010-06-24 23:58:13.404053597 +0200
+++ sources/include/linux/spi/wl12xx.h 2010-06-24 23:58:21.385931197 +0200
@@ -24,8 +24,19 @@
#ifndef _LINUX_SPI_WL12XX_H
#define _LINUX_SPI_WL12XX_H
+#define WMPA_NUMBER_OF_SECTIONS 3
+#define WMPA_NUMBER_OF_BUFFERS 160
+#define WMPA_SECTION_HEADER 24
+#define WMPA_SECTION_SIZE_0 (WMPA_NUMBER_OF_BUFFERS * 64)
+#define WMPA_SECTION_SIZE_1 (WMPA_NUMBER_OF_BUFFERS * 256)
+#define WMPA_SECTION_SIZE_2 (WMPA_NUMBER_OF_BUFFERS * 2048)
+
struct wl12xx_platform_data {
- void (*set_power)(bool enable);
+ int (*set_power)(bool enable);
+ int (*set_reset)(bool enable);
+ int (*set_carddetect)(bool enable);
+ void *(*mem_prealloc)(int section, unsigned long size);
+ int irq;
};
#endif
^ permalink raw reply
* [PATCH] ath9k: fix retry count for A-MPDU rate control status reports
From: Felix Fietkau @ 2010-06-24 23:26 UTC (permalink / raw)
To: linux-wireless; +Cc: Luis R. Rodriguez, John W. Linville, Björn Smedman
The 'bf_retries' field of the ath_buf structure was used for both
software retries (AMPDU subframes) and hardware retries (legacy
frames). This led to a wrong retry count being reported for the A-MPDU
rate control stats.
This patch changes the code to no longer use bf_retries for reporting
retry counts, but instead always using the real on-chip retry count
from the ath_tx_status.
Additionally, if the first subframe of an A-MPDU was not acked, the tx
status report is submitted along with the first acked subframe, which
may not contain the correct rates in the tx info.
This is easily corrected by saving the tx rate info before looping over
subframes, and then copying it back once the A-MPDU status report is
submitted.
In my tests this change improves throughput visibly.
Signed-off-by: Felix Fietkau <nbd@openwrt.org>
Reported-by: Björn Smedman <bjorn.smedman@venatech.se>
Cc: stable@kernel.org
---
--- a/drivers/net/wireless/ath/ath9k/xmit.c
+++ b/drivers/net/wireless/ath/ath9k/xmit.c
@@ -328,6 +328,7 @@ static void ath_tx_complete_aggr(struct ath_softc *sc, struct ath_txq *txq,
u32 ba[WME_BA_BMP_SIZE >> 5];
int isaggr, txfail, txpending, sendbar = 0, needreset = 0, nbad = 0;
bool rc_update = true;
+ struct ieee80211_tx_rate rates[4];
skb = bf->bf_mpdu;
hdr = (struct ieee80211_hdr *)skb->data;
@@ -335,6 +336,8 @@ static void ath_tx_complete_aggr(struct ath_softc *sc, struct ath_txq *txq,
tx_info = IEEE80211_SKB_CB(skb);
hw = bf->aphy->hw;
+ memcpy(rates, tx_info->control.rates, sizeof(rates));
+
rcu_read_lock();
/* XXX: use ieee80211_find_sta! */
@@ -375,6 +378,9 @@ static void ath_tx_complete_aggr(struct ath_softc *sc, struct ath_txq *txq,
txfail = txpending = 0;
bf_next = bf->bf_next;
+ skb = bf->bf_mpdu;
+ tx_info = IEEE80211_SKB_CB(skb);
+
if (ATH_BA_ISSET(ba, ATH_BA_INDEX(seq_st, bf->bf_seqno))) {
/* transmit completion, subframe is
* acked by block ack */
@@ -428,6 +434,7 @@ static void ath_tx_complete_aggr(struct ath_softc *sc, struct ath_txq *txq,
spin_unlock_bh(&txq->axq_lock);
if (rc_update && (acked_cnt == 1 || txfail_cnt == 1)) {
+ memcpy(tx_info->control.rates, rates, sizeof(rates));
ath_tx_rc_status(bf, ts, nbad, txok, true);
rc_update = false;
} else {
@@ -2033,7 +2040,7 @@ static void ath_tx_rc_status(struct ath_buf *bf, struct ath_tx_status *ts,
tx_info->status.rates[i].idx = -1;
}
- tx_info->status.rates[tx_rateindex].count = bf->bf_retries + 1;
+ tx_info->status.rates[tx_rateindex].count = ts->ts_longretry + 1;
}
static void ath_wake_mac80211_queue(struct ath_softc *sc, struct ath_txq *txq)
@@ -2144,7 +2151,6 @@ static void ath_tx_processq(struct ath_softc *sc, struct ath_txq *txq)
* This frame is sent out as a single frame.
* Use hardware retry status for this frame.
*/
- bf->bf_retries = ts.ts_longretry;
if (ts.ts_status & ATH9K_TXERR_XRETRY)
bf->bf_state.bf_type |= BUF_XRETRY;
ath_tx_rc_status(bf, &ts, 0, txok, true);
@@ -2274,7 +2280,6 @@ void ath_tx_edma_tasklet(struct ath_softc *sc)
}
if (!bf_isampdu(bf)) {
- bf->bf_retries = txs.ts_longretry;
if (txs.ts_status & ATH9K_TXERR_XRETRY)
bf->bf_state.bf_type |= BUF_XRETRY;
ath_tx_rc_status(bf, &txs, 0, txok, true);
^ permalink raw reply
* Re: [PATCH 2/2] wl1251: fix ELP_CTRL register reads
From: Grazvydas Ignotas @ 2010-06-24 23:34 UTC (permalink / raw)
To: Denis 'GNUtoo' Carikli
Cc: Bob Copeland, Kalle Valo, John W.Linville, linux-wireless
In-Reply-To: <1277420940.28625.30.camel@gnutoo-laptop>
> I've changed that struct to wl12xx_platform_Data and added the irq
> int,and I've still the following errors:
> [ 541.676849] wl1251: ERROR sdio_writeb failed (-84)
> [ 542.006378] mmc0: Command timeout
> [ 542.011444] mmc0:0001: error -110 reading SDIO_CCCR_INTx
> [ 543.016357] mmc0: Command CRC error
> [ 543.016418] mmc0:0001: error -84 reading SDIO_CCCR_INTx
> [ 544.026367] mmc0: Command timeout
> [ 544.031433] mmc0:0001: error -110 reading SDIO_CCCR_INTx
> [ 545.036376] mmc0: Command CRC error
Has powersaving ever worked on your device with this driver? It does
work fine on pandora (OMAP3).
^ permalink raw reply
* [PATCH] mac80211: fix the for_each_sta_info macro
From: Felix Fietkau @ 2010-06-24 23:44 UTC (permalink / raw)
To: linux-wireless; +Cc: Johannes Berg, John W. Linville
Because of an ambiguity in the for_each_sta_info macro, it can
currently only be used if the third parameter is set to 'sta'.
Fix this by renaming the parameter to '_sta'.
Signed-off-by: Felix Fietkau <nbd@openwrt.org>
---
diff --git a/net/mac80211/sta_info.h b/net/mac80211/sta_info.h
--- a/net/mac80211/sta_info.h
+++ b/net/mac80211/sta_info.h
@@ -427,20 +427,20 @@ void for_each_sta_info_type_check(struct ieee80211_local *local,
{
}
-#define for_each_sta_info(local, _addr, sta, nxt) \
+#define for_each_sta_info(local, _addr, _sta, nxt) \
for ( /* initialise loop */ \
- sta = rcu_dereference(local->sta_hash[STA_HASH(_addr)]),\
- nxt = sta ? rcu_dereference(sta->hnext) : NULL; \
+ _sta = rcu_dereference(local->sta_hash[STA_HASH(_addr)]),\
+ nxt = _sta ? rcu_dereference(_sta->hnext) : NULL; \
/* typecheck */ \
- for_each_sta_info_type_check(local, (_addr), sta, nxt), \
+ for_each_sta_info_type_check(local, (_addr), _sta, nxt),\
/* continue condition */ \
- sta; \
+ _sta; \
/* advance loop */ \
- sta = nxt, \
- nxt = sta ? rcu_dereference(sta->hnext) : NULL \
+ _sta = nxt, \
+ nxt = _sta ? rcu_dereference(_sta->hnext) : NULL \
) \
/* compare address and run code only if it matches */ \
- if (memcmp(sta->sta.addr, (_addr), ETH_ALEN) == 0)
+ if (memcmp(_sta->sta.addr, (_addr), ETH_ALEN) == 0)
/*
* Get STA info by index, BROKEN!
^ permalink raw reply
* [PATCH net-next] MAINTAINERS: b43 updates
From: Joe Perches @ 2010-06-24 23:45 UTC (permalink / raw)
To: Larry Finger
Cc: John W. Linville, Stefano Brivio, linux-wireless, netdev,
linux-kernel, mb, zajec5
In-Reply-To: <4C23B877.4060209@lwfinger.net>
On Thu, 2010-06-24 at 14:56 -0500, Larry Finger wrote:
> The primary arbitrator for patches to the subtle parts of b43 is Michael
> Buesch; however, he is no longer an official MAINTAINER. I can ACK some
> things; however, any changes that are associated with my reverse
> engineering of the Broadcom drivers are off limits.
Add Stefano Brivio's name and email address to CREDITS
Removed Stefano Brivio's from B43 MAINTAINERS
Added the b43 development mailing lists
Changed B43 status to "Odd Fixes"
Signed-off-by: Joe Perches <joe@perches.com>
---
CREDITS | 4 ++++
MAINTAINERS | 5 +++--
2 files changed, 7 insertions(+), 2 deletions(-)
diff --git a/CREDITS b/CREDITS
index 72b4878..30215f0 100644
--- a/CREDITS
+++ b/CREDITS
@@ -495,6 +495,10 @@ S: Kopmansg 2
S: 411 13 Goteborg
S: Sweden
+N: Stefano Brivio
+E: stefano.brivio@polimi.it
+D: B43 wireless driver
+
N: Paul Bristow
E: paul@paulbristow.net
W: http://paulbristow.net/linux/idefloppy.html
diff --git a/MAINTAINERS b/MAINTAINERS
index 6d119c9..5bc296c 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -1225,16 +1225,17 @@ F: include/net/ax25.h
F: net/ax25/
B43 WIRELESS DRIVER
-M: Stefano Brivio <stefano.brivio@polimi.it>
L: linux-wireless@vger.kernel.org
+L: b43-dev@lists.infradead.org
W: http://linuxwireless.org/en/users/Drivers/b43
-S: Maintained
+S: Odd Fixes
F: drivers/net/wireless/b43/
B43LEGACY WIRELESS DRIVER
M: Larry Finger <Larry.Finger@lwfinger.net>
M: Stefano Brivio <stefano.brivio@polimi.it>
L: linux-wireless@vger.kernel.org
+L: b43-dev@lists.infradead.org
W: http://linuxwireless.org/en/users/Drivers/b43
S: Maintained
F: drivers/net/wireless/b43legacy/
^ permalink raw reply related
* Re: [PATCH net-next] MAINTAINERS: b43 updates
From: Larry Finger @ 2010-06-24 23:53 UTC (permalink / raw)
To: Joe Perches
Cc: John W. Linville, Stefano Brivio, linux-wireless, netdev,
linux-kernel, mb, zajec5
In-Reply-To: <1277423102.1654.107.camel@Joe-Laptop.home>
On 06/24/2010 06:45 PM, Joe Perches wrote:
> On Thu, 2010-06-24 at 14:56 -0500, Larry Finger wrote:
>> The primary arbitrator for patches to the subtle parts of b43 is Michael
>> Buesch; however, he is no longer an official MAINTAINER. I can ACK some
>> things; however, any changes that are associated with my reverse
>> engineering of the Broadcom drivers are off limits.
>
> Add Stefano Brivio's name and email address to CREDITS
> Removed Stefano Brivio's from B43 MAINTAINERS
> Added the b43 development mailing lists
> Changed B43 status to "Odd Fixes"
>
> Signed-off-by: Joe Perches <joe@perches.com>
> ---
> CREDITS | 4 ++++
> MAINTAINERS | 5 +++--
> 2 files changed, 7 insertions(+), 2 deletions(-)
>
> diff --git a/CREDITS b/CREDITS
> index 72b4878..30215f0 100644
> --- a/CREDITS
> +++ b/CREDITS
> @@ -495,6 +495,10 @@ S: Kopmansg 2
> S: 411 13 Goteborg
> S: Sweden
>
> +N: Stefano Brivio
> +E: stefano.brivio@polimi.it
> +D: B43 wireless driver
> +
> N: Paul Bristow
> E: paul@paulbristow.net
> W: http://paulbristow.net/linux/idefloppy.html
> diff --git a/MAINTAINERS b/MAINTAINERS
> index 6d119c9..5bc296c 100644
> --- a/MAINTAINERS
> +++ b/MAINTAINERS
> @@ -1225,16 +1225,17 @@ F: include/net/ax25.h
> F: net/ax25/
>
> B43 WIRELESS DRIVER
> -M: Stefano Brivio <stefano.brivio@polimi.it>
> L: linux-wireless@vger.kernel.org
> +L: b43-dev@lists.infradead.org
> W: http://linuxwireless.org/en/users/Drivers/b43
> -S: Maintained
> +S: Odd Fixes
> F: drivers/net/wireless/b43/
>
> B43LEGACY WIRELESS DRIVER
> M: Larry Finger <Larry.Finger@lwfinger.net>
> M: Stefano Brivio <stefano.brivio@polimi.it>
> L: linux-wireless@vger.kernel.org
> +L: b43-dev@lists.infradead.org
> W: http://linuxwireless.org/en/users/Drivers/b43
> S: Maintained
> F: drivers/net/wireless/b43legacy/
NACK. I never said that b43 is unmaintained. It is definitely getting much
more than "odd fixes".
Larry
^ permalink raw reply
* Re: [PATCH net-next] MAINTAINERS: b43 updates
From: Joe Perches @ 2010-06-24 23:57 UTC (permalink / raw)
To: Larry Finger
Cc: John W. Linville, Stefano Brivio, linux-wireless, netdev,
linux-kernel, mb, zajec5
In-Reply-To: <4C23EFDE.3000702@lwfinger.net>
On Thu, 2010-06-24 at 18:53 -0500, Larry Finger wrote:
> I never said that b43 is unmaintained. It is definitely getting much
> more than "odd fixes".
If Stefano isn't maintaining it, who is?
^ 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