Linux wireless drivers development
 help / color / mirror / Atom feed
* Re: Google Summer of Code 2010 - Please resolve duplicates
From: Johannes Berg @ 2010-04-20  6:13 UTC (permalink / raw)
  To: Till Kamppeter
  Cc: Theodore Ts'o, Greg KH, Arnaldo Carvalho de Melo,
	Luis R. Rodriguez, linux-kernel, linux-wireless, Witold Sowa,
	Grant Likely
In-Reply-To: <4BCCB176.3060206@gmail.com>

On Mon, 2010-04-19 at 12:39 -0700, Till Kamppeter wrote:

> two students who applied for your projects have applied also for another 
> organization's project and they got accepted by us and by the other 
> organization.

I'm confused. How do I figure out which ones?

> Until Wednesday Google wants these situation to be resolved until 
> Wednesday April 21, 17:00 UTC. Please contact the students and/or the 
> organization to agree on one of the project for each student.
> 
> In addition, the ranking of the students (to decide who actually gets 
> our slots) and the mentor assignments have to be finalized by the same 
> date and time.
> 
> Duplicates not be resolved until then will be resolved on an IRC meeting 
> on Wednesday April 21 at 19:00 UTC. The meeting takes place in the #gsoc 
> channel on Freenode.
> 
> Please mail me if a mentor needs to be (re)assigned.

Oh wow so I wasn't paying attention much after the initial ranking.

I'm certainly not qualified to mentor the ACL project, would somebody
else do that?

johannes


^ permalink raw reply

* Re: [PATCH] ath9k-htc: speedup disconnect handling
From: Ming Lei @ 2010-04-20  5:59 UTC (permalink / raw)
  To: Sujith
  Cc: Luis Rodriguez, linux-wireless@vger.kernel.org,
	linville@tuxdriver.com
In-Reply-To: <19405.11838.119234.371361@gargle.gargle.HOWL>

2010/4/20 Sujith <Sujith.Manoharan@atheros.com>:
> tom.leiming@gmail.com wrote:
>> This patch detects the disconnect in wmi register write path,
>> then speedup the disconnect handling.
>
> What bug does this fix ? Submission of URBs in the REGOUT pipe
> should not really fail, and if it does, it is indicative of a deeper
> problem and recovery mechanisms are needed.

After the 9271 device is unplugged, you will find your machine hung for
several hundreds of milliseconds.

>
> If you do get WMI failures, can you post the relevant sections
> from the kernel log ?

If ATH_DBG_RESET is enabled, you will find the debug messages
below[1] during disconnecting.  From the messages, the short hang should
be caused by the 'RTC stuck in MAC reset'. Once the patch is applied,
no such issue will happen.

[1], debug messages during 9287 disconnecting

[12873.291066] usb 2-1.3: USB disconnect, address 15
[12873.291800] device: 'ep_01': device_unregister
[12873.291809] PM: Removing info for No Bus:ep_01
[12873.292465] device: 'ep_82': device_unregister
[12873.292472] PM: Removing info for No Bus:ep_82
[12873.292654] device: 'ep_83': device_unregister
[12873.292661] PM: Removing info for No Bus:ep_83
[12873.292828] device: 'ep_04': device_unregister
[12873.292834] PM: Removing info for No Bus:ep_04
[12873.292999] device: 'ep_05': device_unregister
[12873.293431] PM: Removing info for No Bus:ep_05
[12873.293612] device: 'ep_06': device_unregister
[12873.293689] PM: Removing info for No Bus:ep_06
[12873.293868] PM: Removing info for usb:2-1.3:1.0
[12873.294338] bus: 'usb': remove device 2-1.3:1.0
[12873.294373] usb 2-1.3: __pm_runtime_resume()!
[12873.294380] usb 2-1.3: __pm_runtime_resume() returns 1!
[12873.294392] device: 'ath9k-phy12::assoc': device_unregister
[12873.294399] PM: Removing info for No Bus:ath9k-phy12::assoc
[12873.294732] device: 'ath9k-phy12::assoc': device_create_release
[12873.294771] device: 'ath9k-phy12::tx': device_unregister
[12873.294778] PM: Removing info for No Bus:ath9k-phy12::tx
[12873.295676] device: 'ath9k-phy12::tx': device_create_release
[12873.295718] device: 'ath9k-phy12::rx': device_unregister
[12873.295725] PM: Removing info for No Bus:ath9k-phy12::rx
[12873.296316] device: 'ath9k-phy12::rx': device_create_release
[12873.296351] device: 'ath9k-phy12::radio': device_unregister
[12873.296358] PM: Removing info for No Bus:ath9k-phy12::radio
[12873.296701] device: 'ath9k-phy12::radio': device_create_release
[12874.349767] ath: timeout (100000 us) on reg 0x7000: 0xfffffffb &
0x00000003 != 0x00000000
[12874.349774] ath: RTC stuck in MAC reset
[12874.349777] ath: Chip reset failed
[12874.349779] ath: Unable to reset channel (2437 Mhz) reset status -22
[12874.349784] ath: Unable to set channel
[12874.349939] ath: ah->misc_mode 0x4
[12874.350750] ath: Unable to remove station entry for: 00:03:7f:13:02:d3
[12874.352092] phy12: Removed STA 00:03:7f:13:02:d3
[12874.352224] phy12: Destroyed STA 00:03:7f:13:02:d3
[12874.352232] wlan14: deauthenticating from 00:03:7f:13:02:d3 by
local choice (reason=3)
[12874.352494] phy12: device now idle
[12875.177375] ath: timeout (100000 us) on reg 0x7000: 0xfffffffb &
0x00000003 != 0x00000000
[12875.177382] ath: RTC stuck in MAC reset
[12875.988627] ath: timeout (100000 us) on reg 0x7000: 0xfffffffb &
0x00000003 != 0x00000000
[12875.988633] ath: RTC stuck in MAC reset
[12875.988638] ath: AWAKE -> FULL-SLEEP
[12876.000157] PM: Removing info for No Bus:wlan14
[12876.005146] cfg80211: All devices are disconnected, going to
restore regulatory settings
[12876.005157] cfg80211: Restoring regulatory settings
[12876.005175] cfg80211: Calling CRDA to update world regulatory domain
[12876.006494] PM: Removing info for No Bus:rfkill13
[12876.013231] PM: Removing info for No Bus:phy12
[12876.026482] usb 2-1.3: ath9k_htc: USB layer deinitialized
[12876.027680] device: 'ep_00': device_unregister
[12876.027684] PM: Removing info for No Bus:ep_00
[12876.027781] PM: Removing info for usb:2-1.3
[12876.029678] bus: 'usb': remove device 2-1.3
[12876.045047] cfg80211: World regulatory domain updated:
[12876.045051]     (start_freq - end_freq @ bandwidth),
(max_antenna_gain, max_eirp)
[12876.045054]     (2402000 KHz - 2472000 KHz @ 40000 KHz), (300 mBi, 2000 mBm)
[12876.045057]     (2457000 KHz - 2482000 KHz @ 20000 KHz), (300 mBi, 2000 mBm)
[12876.045060]     (2474000 KHz - 2494000 KHz @ 20000 KHz), (300 mBi, 2000 mBm)
[12876.045062]     (5170000 KHz - 5250000 KHz @ 40000 KHz), (300 mBi, 2000 mBm)
[12876.045065]     (5735000 KHz - 5835000 KHz @ 40000 KHz), (300 mBi, 2000 mBm)
[12876.144805] hub 2-1:1.0: __pm_runtime_suspend()!
[12876.144832] hub 2-1:1.0: __pm_runtime_suspend() returns 0!
[12878.705219] usb 2-1: __pm_runtime_suspend() from workqueue!
[12878.716694] usb 2-1: __pm_runtime_suspend() returns 0!
[12881.705105] usb usb2: __pm_runtime_suspend() from workqueue!
[12881.705175] usb usb2: __pm_runtime_suspend() returns 0!

-- 
Lei Ming

^ permalink raw reply

* Re: [RFC PATCHv3 1/2] mac80211: Determine dynamic PS timeout based on ps-qos network latency
From: Juuso Oikarinen @ 2010-04-20  5:08 UTC (permalink / raw)
  To: ext Johannes Berg; +Cc: linux-wireless@vger.kernel.org
In-Reply-To: <1271688177.23671.1.camel@jlt3.sipsolutions.net>

On Mon, 2010-04-19 at 16:42 +0200, ext Johannes Berg wrote:
> On Fri, 2010-04-16 at 12:14 +0300, Juuso Oikarinen wrote:
> > Determine the dynamic PS timeout based on the configured ps-qos network
> > latency. For backwards wext compatibility, allow the dynamic PS timeout
> > configured by the cfg80211 to overrule the automatically determined value.
> 
> This seems OK, but I fear that you'll write applications setting the
> pm_qos network latency just to affect this parameter?
> 

Well you have to see where I'm coming from - I must come up with a way
to tune the dynamic ps timeout value from user-space in a way that is
agreeable with others, and that is somewhat future-proof.

That said, obviously the network latency should be tuned as, well, the
expected network latency. In this phase though, there are no other
parameters affected by the network latency, so the result is quite
obvious - your fear will realise itself ;)

> > Signed-off-by: Juuso Oikarinen <juuso.oikarinen@nokia.com>
> > ---
> >  include/net/mac80211.h |    5 ++++-
> >  net/mac80211/cfg.c     |    4 ++--
> >  net/mac80211/main.c    |    2 ++
> >  net/mac80211/mlme.c    |   14 ++++++++++++++
> >  4 files changed, 22 insertions(+), 3 deletions(-)
> > 
> > diff --git a/include/net/mac80211.h b/include/net/mac80211.h
> > index dcf3c5f..243e4ab 100644
> > --- a/include/net/mac80211.h
> > +++ b/include/net/mac80211.h
> > @@ -661,6 +661,9 @@ enum ieee80211_smps_mode {
> >   * @dynamic_ps_timeout: The dynamic powersave timeout (in ms), see the
> >   *	powersave documentation below. This variable is valid only when
> >   *	the CONF_PS flag is set.
> > + * @dynamic_ps_forced_timeout: The dynamic powersave timeout (in ms) configured
> > + *	by cfg80211 (essentially, wext) If set, this value overrules the value
> > + *	chosen by mac80211 based on ps qos network latency.
> >   *
> >   * @power_level: requested transmit power (in dBm)
> >   *
> > @@ -680,7 +683,7 @@ enum ieee80211_smps_mode {
> >   */
> >  struct ieee80211_conf {
> >  	u32 flags;
> > -	int power_level, dynamic_ps_timeout;
> > +	int power_level, dynamic_ps_timeout, dynamic_ps_forced_timeout;
> >  	int max_sleep_period;
> >  
> >  	u16 listen_interval;
> > diff --git a/net/mac80211/cfg.c b/net/mac80211/cfg.c
> > index 7dd7cda..9a1a91c 100644
> > --- a/net/mac80211/cfg.c
> > +++ b/net/mac80211/cfg.c
> > @@ -1388,11 +1388,11 @@ static int ieee80211_set_power_mgmt(struct wiphy *wiphy, struct net_device *dev,
> >  		return -EOPNOTSUPP;
> >  
> >  	if (enabled == sdata->u.mgd.powersave &&
> > -	    timeout == conf->dynamic_ps_timeout)
> > +	    timeout == conf->dynamic_ps_forced_timeout)
> >  		return 0;
> >  
> >  	sdata->u.mgd.powersave = enabled;
> > -	conf->dynamic_ps_timeout = timeout;
> > +	conf->dynamic_ps_forced_timeout = timeout;
> >  
> >  	/* no change, but if automatic follow powersave */
> >  	mutex_lock(&sdata->u.mgd.mtx);
> > diff --git a/net/mac80211/main.c b/net/mac80211/main.c
> > index 4afe851..ebcca0e 100644
> > --- a/net/mac80211/main.c
> > +++ b/net/mac80211/main.c
> > @@ -569,6 +569,8 @@ int ieee80211_register_hw(struct ieee80211_hw *hw)
> >  
> >  	local->hw.conf.listen_interval = local->hw.max_listen_interval;
> >  
> > +	local->hw.conf.dynamic_ps_forced_timeout = -1;
> > +
> >  	result = sta_info_start(local);
> >  	if (result < 0)
> >  		goto fail_sta_info;
> > diff --git a/net/mac80211/mlme.c b/net/mac80211/mlme.c
> > index 35d8502..6402997 100644
> > --- a/net/mac80211/mlme.c
> > +++ b/net/mac80211/mlme.c
> > @@ -476,6 +476,7 @@ void ieee80211_recalc_ps(struct ieee80211_local *local, s32 latency)
> >  {
> >  	struct ieee80211_sub_if_data *sdata, *found = NULL;
> >  	int count = 0;
> > +	int timeout;
> >  
> >  	if (!(local->hw.flags & IEEE80211_HW_SUPPORTS_PS)) {
> >  		local->ps_sdata = NULL;
> > @@ -509,6 +510,19 @@ void ieee80211_recalc_ps(struct ieee80211_local *local, s32 latency)
> >  		beaconint_us = ieee80211_tu_to_usec(
> >  					found->vif.bss_conf.beacon_int);
> >  
> > +		timeout = local->hw.conf.dynamic_ps_forced_timeout;
> > +		if (timeout < 0) {
> > +			if (latency <= 50000)
> > +				timeout = 300;
> > +			else if (latency <= 2000000000)
> > +				timeout = 100;
> > +			else if (latency <= 2100000000)
> > +				timeout = 50;
> > +			else
> > +				timeout = 0;
> 
> Is it even possible to set it larger than 2000 seconds?

Good question. I have not yet had the opportunity to test this, so I
can't tell. You could be right. ;)

-Juuso

> johannes
> 



^ permalink raw reply

* Re: [RFC PATCHv3 2/2] cfg80211: Remove default dynamic PS timeout value
From: Juuso Oikarinen @ 2010-04-20  4:58 UTC (permalink / raw)
  To: ext Johannes Berg; +Cc: linux-wireless@vger.kernel.org
In-Reply-To: <1271688229.23671.2.camel@jlt3.sipsolutions.net>

On Mon, 2010-04-19 at 16:43 +0200, ext Johannes Berg wrote:
> On Fri, 2010-04-16 at 12:14 +0300, Juuso Oikarinen wrote:
> > Now that the mac80211 is choosing dynamic ps timeouts based on the ps-qos
> > network latency configuration, configure a default value of -1 as the dynamic
> > ps timeout in cfg80211. This value allows the mac80211 to determine the value
> > to be used.
> > 
> > Signed-off-by: Juuso Oikarinen <juuso.oikarinen@nokia.com>
> > ---
> >  net/wireless/core.c |    3 ++-
> >  1 files changed, 2 insertions(+), 1 deletions(-)
> > 
> > diff --git a/net/wireless/core.c b/net/wireless/core.c
> > index 6ac70c1..37d0e0a 100644
> > --- a/net/wireless/core.c
> > +++ b/net/wireless/core.c
> > @@ -705,7 +705,8 @@ static int cfg80211_netdev_notifier_call(struct notifier_block * nb,
> >  			wdev->ps = true;
> >  		else
> >  			wdev->ps = false;
> > -		wdev->ps_timeout = 100;
> > +		/* allow mac80211 to determine the timeout */
> > +		wdev->ps_timeout = -1;
> >  		if (rdev->ops->set_power_mgmt)
> >  			if (rdev->ops->set_power_mgmt(wdev->wiphy, dev,
> >  						      wdev->ps,
> 
> Does that need some API doc updates to indicate, as part of the cfg80211
> API, that -1 means some way of setting it by default?
> 
> Or actually, wouldn't it make sense to move the pm_qos logic here (into
> cfg80211)?

I thought about that but then I realised that would contradict with one
of the arguments presented against the dynamic ps API I proposed
earlier. The argument specifically stated we don't want the API as in
the future there will be some uber-cool psm implementations in some
(full-mac?) chipsets that don't even use a value like this.

Therefore I opted to leave the implementation in mac80211, thinking that
the entire configuration option will be removed from the cfg80211 once
the wext is gone.

-Juuso

> johannes
> 



^ permalink raw reply

* [PATCH] ath9k-htc: speedup disconnect handling
From: Sujith @ 2010-04-20  4:31 UTC (permalink / raw)
  To: tom.leiming@gmail.com
  Cc: Luis Rodriguez, linux-wireless@vger.kernel.org,
	linville@tuxdriver.com
In-Reply-To: <1271691883-13133-1-git-send-email-tom.leiming@gmail.com>

tom.leiming@gmail.com wrote:
> This patch detects the disconnect in wmi register write path,
> then speedup the disconnect handling.

What bug does this fix ? Submission of URBs in the REGOUT pipe
should not really fail, and if it does, it is indicative of a deeper
problem and recovery mechanisms are needed.

If you do get WMI failures, can you post the relevant sections
from the kernel log ?

Sujith

^ permalink raw reply

* Re: 2.6.34-rc5: Reported regressions from 2.6.33
From: Rafael J. Wysocki @ 2010-04-20  4:13 UTC (permalink / raw)
  To: Andrew Morton
  Cc: Linux Kernel Mailing List, Maciej Rutecki, Linus Torvalds,
	Kernel Testers List, Network Development, Linux ACPI,
	Linux PM List, Linux SCSI List, Linux Wireless List, DRI
In-Reply-To: <20100419205723.8724338c.akpm@linux-foundation.org>

On Tuesday 20 April 2010, Andrew Morton wrote:
> On Tue, 20 Apr 2010 05:15:57 +0200 (CEST) "Rafael J. Wysocki" <rjw@sisk.pl> wrote:
> 
> > Bug-Entry	: http://bugzilla.kernel.org/show_bug.cgi?id=15812
> > Subject		: utsname.domainname not set in x86_32 processes (causing "YPBINDPROC_DOMAIN: domain not bound" errors)
> > Submitter	:  <adi@hexapodia.org>
> > Date		: 2010-04-19 21:28 (1 days old)
> 
> I merged hch's fix for this twelve seconds ago.

I updated the entry.

^ permalink raw reply

* Re: 2.6.34-rc5: Reported regressions from 2.6.33
From: Andrew Morton @ 2010-04-20  0:57 UTC (permalink / raw)
  To: Rafael J. Wysocki
  Cc: Linux Kernel Mailing List, Maciej Rutecki, Linus Torvalds,
	Kernel Testers List, Network Development, Linux ACPI,
	Linux PM List, Linux SCSI List, Linux Wireless List, DRI
In-Reply-To: <deuQKFRcc0B.A.3EG.BRSzLB@tosh>

On Tue, 20 Apr 2010 05:15:57 +0200 (CEST) "Rafael J. Wysocki" <rjw@sisk.pl> wrote:

> Bug-Entry	: http://bugzilla.kernel.org/show_bug.cgi?id=15812
> Subject		: utsname.domainname not set in x86_32 processes (causing "YPBINDPROC_DOMAIN: domain not bound" errors)
> Submitter	:  <adi@hexapodia.org>
> Date		: 2010-04-19 21:28 (1 days old)

I merged hch's fix for this twelve seconds ago.

^ permalink raw reply

* 2.6.34-rc5: Reported regressions from 2.6.33
From: Rafael J. Wysocki @ 2010-04-20  3:15 UTC (permalink / raw)
  To: Linux Kernel Mailing List
  Cc: Maciej Rutecki, Andrew Morton, Linus Torvalds,
	Kernel Testers List, Network Development, Linux ACPI,
	Linux PM List, Linux SCSI List, Linux Wireless List, DRI

This message contains a list of some regressions from 2.6.33,
for which there are no fixes in the mainline known to the tracking team.
If any of them have been fixed already, please let us know.

If you know of any other unresolved regressions from 2.6.33, please let us
know either and we'll add them to the list.  Also, please let us know
if any of the entries below are invalid.

Each entry from the list will be sent additionally in an automatic reply
to this message with CCs to the people involved in reporting and handling
the issue.


Listed regressions statistics:

  Date          Total  Pending  Unresolved
  ----------------------------------------
  2010-04-20       64       35          34
  2010-04-07       48       35          33
  2010-03-21       15       13          10


Unresolved regressions
----------------------

Bug-Entry	: http://bugzilla.kernel.org/show_bug.cgi?id=15812
Subject		: utsname.domainname not set in x86_32 processes (causing "YPBINDPROC_DOMAIN: domain not bound" errors)
Submitter	:  <adi@hexapodia.org>
Date		: 2010-04-19 21:28 (1 days old)


Bug-Entry	: http://bugzilla.kernel.org/show_bug.cgi?id=15805
Subject		: reiserfs locking
Submitter	: Alexander Beregalov <a.beregalov@gmail.com>
Date		: 2010-04-15 21:02 (5 days old)
Message-ID	: <t2ka4423d671004151402n7b2dc425mdc9c6bb9640d63fb@mail.gmail.com>
References	: http://marc.info/?l=linux-kernel&m=127136535323933&w=2


Bug-Entry	: http://bugzilla.kernel.org/show_bug.cgi?id=15796
Subject		: [REGRESSION bisected] Sound goes too fast due to commit 7b3a177b0
Submitter	: Éric Piel <Eric.Piel@tremplin-utc.net>
Date		: 2010-04-13 21:54 (7 days old)
First-Bad-Commit: http://kernel.org/git/linus/7b3a177b0d4f92b3431b8dca777313a07533a710
Message-ID	: <4BC4E812.6050602@tremplin-utc.net>
References	: http://marc.info/?l=linux-kernel&m=127119569009790&w=2
Handled-By	: Takashi Iwai <tiwai@suse.de>


Bug-Entry	: http://bugzilla.kernel.org/show_bug.cgi?id=15795
Subject		: 2.6.34-rc4 : OOPS in unmap_vma
Submitter	: Parag Warudkar <parag.lkml@gmail.com>
Date		: 2010-04-14 (6 days old)
Message-ID	: <alpine.DEB.2.00.1004132147260.1881@parag-laptop>
References	: http://marc.info/?l=linux-kernel&m=127121006625429&w=2


Bug-Entry	: http://bugzilla.kernel.org/show_bug.cgi?id=15790
Subject		: Meta-Bug: Regressions
Submitter	: Florian Mickler <fmickler@gmx.de>
Date		: 2010-04-15 18:21 (5 days old)


Bug-Entry	: http://bugzilla.kernel.org/show_bug.cgi?id=15788
Subject		: external usb sound card doesn't work after resume
Submitter	: François Valenduc <francois.valenduc@tvcablenet.be>
Date		: 2010-04-15 10:16 (5 days old)


Bug-Entry	: http://bugzilla.kernel.org/show_bug.cgi?id=15774
Subject		: 2.6.34-rc3: eth0 (8139too): transmit queue 0 timed out
Submitter	: Németh Márton <nm127@freemail.hu>
Date		: 2010-04-10 12:33 (10 days old)
Message-ID	: <4BC07022.6000708@freemail.hu>
References	: http://marc.info/?l=linux-kernel&m=127090287021976&w=2


Bug-Entry	: http://bugzilla.kernel.org/show_bug.cgi?id=15768
Subject		: Incorrectly calculated free blocks result in ENOSPC from writepage
Submitter	: Dmitry Monakhov <dmonakhov@openvz.org>
Date		: 2010-04-12 11:24 (8 days old)


Bug-Entry	: http://bugzilla.kernel.org/show_bug.cgi?id=15744
Subject		: [2.6.34-rc1 REGRESSION] ahci 0000:00:1f.2: controller reset failed (0xffffffff)
Submitter	: Andy Isaacson <adi@hexapodia.org>
Date		: 2010-04-06 22:54 (14 days old)
Message-ID	: <<4BC51312.6080302@oracle.com></desc>>
References	: http://marc.info/?l=linux-kernel&m=127059449031511&w=2


Bug-Entry	: http://bugzilla.kernel.org/show_bug.cgi?id=15730
Subject		: Ugly rmap NULL ptr deref oopsie on hibernate (was Linux 2.6.34-rc3)
Submitter	: Borislav Petkov <bp@alien8.de>
Date		: 2010-04-02 17:59 (18 days old)
Message-ID	: <20100402175937.GA19690@liondog.tnic>
References	: http://marc.info/?l=linux-kernel&m=127023173329741&w=2


Bug-Entry	: http://bugzilla.kernel.org/show_bug.cgi?id=15729
Subject		: BUG: physmap modprobe & rmmod
Submitter	: Randy Dunlap <randy.dunlap@oracle.com>
Date		: 2010-04-02 20:40 (18 days old)
Message-ID	: <20100402134058.c4682716.randy.dunlap@oracle.com>
References	: http://marc.info/?l=linux-kernel&m=127024096210230&w=2


Bug-Entry	: http://bugzilla.kernel.org/show_bug.cgi?id=15719
Subject		: virtio_net causing kernel BUG when running under VirtualBox
Submitter	: Thomas Müller <thomas@mathtm.de>
Date		: 2010-03-27 14:32 (24 days old)
First-Bad-Commit: http://kernel.org/git/linus/9ab86bbcf8be755256f0a5e994e0b38af6b4d399
Message-ID	: <4BAE1707.2050803@mathtm.de>
References	: http://marc.info/?l=linux-kernel&m=126970039227740&w=4
Handled-By	: Shirley Ma <mashirle@us.ibm.com>


Bug-Entry	: http://bugzilla.kernel.org/show_bug.cgi?id=15717
Subject		: bluetooth oops
Submitter	: Pavel Machek <pavel@ucw.cz>
Date		: 2010-03-14 20:14 (37 days old)
Message-ID	: <20100314201434.GE22059@elf.ucw.cz>
References	: http://marc.info/?l=linux-kernel&m=126859771528426&w=4
Handled-By	: Marcel Holtmann <marcel@holtmann.org>


Bug-Entry	: http://bugzilla.kernel.org/show_bug.cgi?id=15713
Subject		: hackbench regression due to commit 9dfc6e68bfe6e
Submitter	: Alex Shi <alex.shi@intel.com>
Date		: 2010-03-25 8:40 (26 days old)
First-Bad-Commit: http://kernel.org/git/linus/9dfc6e68bfe6ee452efb1a4e9ca26a9007f2b864
Message-ID	: <1269506457.4513.141.camel@alexs-hp.sh.intel.com>
References	: http://marc.info/?l=linux-kernel&m=126950632920682&w=4
Handled-By	: Christoph Lameter <cl@linux-foundation.org>
		  Pekka Enberg <penberg@cs.helsinki.fi>


Bug-Entry	: http://bugzilla.kernel.org/show_bug.cgi?id=15712
Subject		: [regression] 2.6.34-rc1 to -rc3 on zaurus: no longer boots
Submitter	: Pavel Machek <pavel@ucw.cz>
Date		: 2010-04-01 6:06 (19 days old)
Message-ID	: <20100401060624.GA1329@ucw.cz>
References	: http://marc.info/?l=linux-kernel&m=127010200817402&w=2


Bug-Entry	: http://bugzilla.kernel.org/show_bug.cgi?id=15711
Subject		: 2.6.34-rc3, BUG at mm/slab.c:2989
Submitter	: Heinz Diehl <htd@fancy-poultry.org>
Date		: 2010-04-01 17:52 (19 days old)
Message-ID	: <20100401175225.GA6581@fancy-poultry.org>
References	: http://marc.info/?l=linux-kernel&m=127014437406250&w=2


Bug-Entry	: http://bugzilla.kernel.org/show_bug.cgi?id=15704
Subject		: [r8169] WARNING: at net/sched/sch_generic.c
Submitter	: Sergey Senozhatsky <sergey.senozhatsky@gmail.com>
Date		: 2010-03-31 10:21 (20 days old)
Message-ID	: <<20100331102142.GA3294@swordfish.minsk.epam.com>>
References	: http://marc.info/?l=linux-kernel&m=127003090406108&w=2


Bug-Entry	: http://bugzilla.kernel.org/show_bug.cgi?id=15698
Subject		: Freeze on power-off / suspend to ram
Submitter	: arond <hector1987@gmail.com>
Date		: 2010-04-05 13:53 (15 days old)


Bug-Entry	: http://bugzilla.kernel.org/show_bug.cgi?id=15673
Subject		: 2.6.34-rc2: "ima_dec_counts: open/free imbalance"?
Submitter	: Thomas Meyer <thomas@m3y3r.de>
Date		: 2010-03-28 11:31 (23 days old)
Message-ID	: <1269775909.5301.4.camel@localhost.localdomain>
References	: http://marc.info/?l=linux-kernel&m=126977593326800&w=2


Bug-Entry	: http://bugzilla.kernel.org/show_bug.cgi?id=15672
Subject		: KVM bug, git bisected
Submitter	: Kent Overstreet <kent.overstreet@gmail.com>
Date		: 2010-03-27 12:43 (24 days old)
First-Bad-Commit: http://kernel.org/git/linus/5beb49305251e5669852ed541e8e2f2f7696c53e
Message-ID	: <4BADFD74.8060904@gmail.com>
References	: http://marc.info/?l=linux-kernel&m=126969385121711&w=2


Bug-Entry	: http://bugzilla.kernel.org/show_bug.cgi?id=15671
Subject		: intel graphic card hanging (Hangcheck timer elapsed... GPU hung)
Submitter	: Norbert Preining <preining@logic.at>
Date		: 2010-03-27 16:11 (24 days old)
Message-ID	: <20100327161104.GA12043@gamma.logic.tuwien.ac.at>
References	: http://marc.info/?l=linux-kernel&m=126970883105262&w=2


Bug-Entry	: http://bugzilla.kernel.org/show_bug.cgi?id=15669
Subject		: INFO: suspicious rcu_dereference_check()
Submitter	: Zdenek Kabelac <zdenek.kabelac@gmail.com>
Date		: 2010-03-08 1:26 (43 days old)
Message-ID	: <c4e36d111003250348q678eb2e6w4f3e8133e7fd6e58@mail.gmail.com>
References	: http://marc.info/?l=linux-kernel&m=126801163107713&w=2


Bug-Entry	: http://bugzilla.kernel.org/show_bug.cgi?id=15668
Subject		: start_kernel(): bug: interrupts were enabled early
Submitter	: Rabin Vincent <rabin@rab.in>
Date		: 2010-03-25 19:53 (26 days old)
First-Bad-Commit: http://kernel.org/git/linus/773e3eb7b81e5ba13b5155dfb3bb75b8ce37f8f9
Message-ID	: <20100325194100.GA2364@debian>
References	: http://marc.info/?l=linux-kernel&m=126954607216519&w=2


Bug-Entry	: http://bugzilla.kernel.org/show_bug.cgi?id=15664
Subject		: Graphics hang and kernel backtrace when starting Azureus with Compiz enabled
Submitter	: Alex Villacis Lasso <avillaci@ceibo.fiec.espol.edu.ec>
Date		: 2010-04-01 01:09 (19 days old)


Bug-Entry	: http://bugzilla.kernel.org/show_bug.cgi?id=15661
Subject		: PROBLEM: crash on halt with 2.6.34-0.16.rc2.git0.fc14.x86_64
Submitter	: Jon Masters <jonathan@jonmasters.org>
Date		: 2010-03-26 15:29 (25 days old)
Message-ID	: <<1269617372.3779.234.camel@localhost>>
References	: http://marc.info/?l=linux-kernel&m=126961739803949&w=2


Bug-Entry	: http://bugzilla.kernel.org/show_bug.cgi?id=15659
Subject		: [Regresion] [2.6.34-rc1] [drm:i915_hangcheck_elapsed] *ERROR* Hangcheck timer elapsed... GPU hung
Submitter	: Maciej Rutecki <maciej.rutecki@gmail.com>
Date		: 2010-03-25 20:04 (26 days old)
Message-ID	: <201003252104.24965.maciej.rutecki@gmail.com>
References	: http://marc.info/?l=linux-kernel&m=126954749618319&w=2


Bug-Entry	: http://bugzilla.kernel.org/show_bug.cgi?id=15625
Subject		: BUG: 2.6.34-rc1, RIP is (null)
Submitter	: Randy Dunlap <randy.dunlap@oracle.com>
Date		: 2010-03-18 22:22 (33 days old)
Message-ID	: <4BA2A7A9.4080503@oracle.com>
References	: http://marc.info/?l=linux-kernel&m=126895098217351&w=2


Bug-Entry	: http://bugzilla.kernel.org/show_bug.cgi?id=15611
Subject		: Failure with the 2.6.34-rc1 kernel
Submitter	: Rupjyoti Sarmah <rsarmah@amcc.com>
Date		: 2010-03-16 15:45 (35 days old)
Message-ID	: <AC311A8E81420D4EBC1F26E6479848FE065B7D3D@SDCEXCHANGE01.ad.amcc.com>
References	: http://marc.info/?l=linux-kernel&m=126875435718396&w=2


Bug-Entry	: http://bugzilla.kernel.org/show_bug.cgi?id=15610
Subject		: fsck leads to swapper - BUG: unable to handle kernel NULL pointer dereference & panic
Submitter	: Ozgur Yuksel <ozgur.yuksel@oracle.com>
Date		: 2010-03-22 15:59 (29 days old)


Bug-Entry	: http://bugzilla.kernel.org/show_bug.cgi?id=15601
Subject		: [BUG] SLOB breaks Crypto
Submitter	: michael-dev@fami-braun.de
Date		: 2010-03-15 13:39 (36 days old)
Message-ID	: <4B9E38AF.70309@fami-braun.de>
References	: http://marc.info/?l=linux-kernel&m=126866044724539&w=2


Bug-Entry	: http://bugzilla.kernel.org/show_bug.cgi?id=15590
Subject		: 2.6.34-rc1: regression: ^Z no longer stops sound
Submitter	: Pavel Machek <pavel@ucw.cz>
Date		: 2010-03-14 7:58 (37 days old)
Message-ID	: <20100314075831.GA13457@elf.ucw.cz>
References	: http://marc.info/?l=linux-kernel&m=126855353122623&w=2


Bug-Entry	: http://bugzilla.kernel.org/show_bug.cgi?id=15589
Subject		: 2.6.34-rc1: Badness at fs/proc/generic.c:316
Submitter	: Christian Kujau <lists@nerdbynature.de>
Date		: 2010-03-13 23:53 (38 days old)
Message-ID	: <alpine.DEB.2.01.1003131544340.5493@bogon.housecafe.de>
References	: http://marc.info/?l=linux-kernel&m=126852442903680&w=2


Bug-Entry	: http://bugzilla.kernel.org/show_bug.cgi?id=15553
Subject		: Screen backlight doesn't come back on after lid was closed (GM45)
Submitter	:  <bugs@kaijauch.de>
Date		: 2010-03-17 14:35 (34 days old)


Bug-Entry	: http://bugzilla.kernel.org/show_bug.cgi?id=15551
Subject		: WARNING: at net/mac80211/work.c:811 ieee80211_work_work+0x7f/0xde8 [mac80211]()
Submitter	: Alex Zhavnerchik <alex.vizor@gmail.com>
Date		: 2010-03-16 22:03 (35 days old)


Regressions with patches
------------------------

Bug-Entry	: http://bugzilla.kernel.org/show_bug.cgi?id=15505
Subject		: No more b43 wireless interface since 2.6.34-rc1
Submitter	: Christian Casteyde <casteyde.christian@free.fr>
Date		: 2010-03-10 06:59 (41 days old)
Handled-By	: Yinghai Lu <yinghai@kernel.org>
Patch		: https://bugzilla.kernel.org/show_bug.cgi?id=15505#c11


For details, please visit the bug entries and follow the links given in
references.

As you can see, there is a Bugzilla entry for each of the listed regressions.
There also is a Bugzilla entry used for tracking the regressions from 2.6.33,
unresolved as well as resolved, at:

http://bugzilla.kernel.org/show_bug.cgi?id=15310

Please let the tracking team know if there are any Bugzilla entries that
should be added to the list in there.

Thanks!


^ permalink raw reply

* Re: [PATCH v2] compat: backport convert multicast list to list_head.
From: Luis R. Rodriguez @ 2010-04-20  0:25 UTC (permalink / raw)
  To: Hauke Mehrtens; +Cc: linux-wireless, mcgrof, proski
In-Reply-To: <1271707616-4150-1-git-send-email-hauke@hauke-m.de>

On Mon, Apr 19, 2010 at 1:06 PM, Hauke Mehrtens <hauke@hauke-m.de> wrote:
>
> Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
> ---
>  include/linux/compat-2.6.35.h |    3 +++
>  1 files changed, 3 insertions(+), 0 deletions(-)
>
> diff --git a/include/linux/compat-2.6.35.h b/include/linux/compat-2.6.35.h
> index 964e8dc..4d3483a 100644
> --- a/include/linux/compat-2.6.35.h
> +++ b/include/linux/compat-2.6.35.h
> @@ -4,6 +4,7 @@
>  #include <linux/version.h>
>
>  #if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,35))
> +#include <linux/etherdevice.h>
>
>  #define IW_HANDLER(id, func)                   \
>        [IW_IOCTL_IDX(id)] = func
> @@ -11,6 +12,8 @@
>  #define  SDIO_BUS_ECSI         0x20    /* Enable continuous SPI interrupt */
>  #define  SDIO_BUS_SCSI         0x40    /* Support continuous SPI interrupt */
>
> +#define netdev_hw_addr dev_mc_list
> +
>  #endif /* (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,35)) */
>
>  #endif /* LINUX_26_35_COMPAT_H */

Lets go with this approach for now, and if it bites us in the ass we
now not to do that again :)

BTW Thanks so much for all these patches, I'm merging them now, I
counted 6, 3 for compat, 3 for compat-wireless, if I missed anything
please let me know. Going to force out a new tarball now.

compat:

    compat: backport convert multicast list to list_head.
    compat: Add linux/version.h include before using it.
    compat: Add definitions needed for libertas sdio driver.

compat-wireless:

    compat-wireless: include net and trace includes form compat
    compat-wireless: Remove use of sdio quirks attribute
    compat-wireless: backport convert multicast list to list_head.

  Luis

^ permalink raw reply

* Re: iwlagn unexpected AddBA Req
From: Luis R. Rodriguez @ 2010-04-19 23:20 UTC (permalink / raw)
  To: reinette chatre; +Cc: linux-wireless, Felix Fietkau
In-Reply-To: <1271699405.14052.18189.camel@rchatre-DESK>

On Mon, Apr 19, 2010 at 10:50 AM, reinette chatre
<reinette.chatre@intel.com> wrote:
> On Thu, 2010-04-01 at 21:45 -0700, Luis R. Rodriguez wrote:
>> [  117.491303] unexpected AddBA Req from 00:22:6b:56:fd:e9 on tid 0
>> [  178.467383] unexpected AddBA Req from 00:22:6b:56:fd:e9 on tid 0
>> [  239.447236] unexpected AddBA Req from 00:22:6b:56:fd:e9 on tid 0
>>
>> I get a lof of these at spurious times against my WRT610N using
>> today's wireless-testing on iwlagn.
>
> If you still have this setup available, could you please try out the
> recent patch "mac80211: pass HT changes to driver when off
> channel" (http://thread.gmane.org/gmane.linux.kernel.wireless.general/49855 ) ?

Thanks Reinette, I've given my hardware to nbd.

  Luis

^ permalink raw reply

* Re: Google Summer of Code 2010 - Please resolve duplicates
From: Hin-Tak Leung @ 2010-04-19 22:58 UTC (permalink / raw)
  To: Greg KH
  Cc: Till Kamppeter, Theodore Ts'o, Arnaldo Carvalho de Melo,
	Luis R. Rodriguez, linux-kernel, linux-wireless, Witold Sowa,
	Johannes Berg, Grant Likely
In-Reply-To: <20100419224634.GG1800@kroah.com>

On Mon, Apr 19, 2010 at 11:46 PM, Greg KH <greg@kroah.com> wrote:
<snipped>
>> I have opened the duplicate information for students to all of your
>> orgs. If you view your student proposals now the ones that are ranked
>> to be accepted that are duplicated with another org will be marked in
>> red. If you click on the proposal you will see the contact information
>> for the other organization(s)'s admins near the bottom of the
>> proposal.

<snipped>
> Have a pointer to the web site to do this?

I think the idea from the original announcement is for each pair of
organizations with duplicate applications, to contact each other, for
one of the organization to drop the student's application so the other
one can proceed. e.g. if a student applies to both linux foundation
and gnome (for example), the linux foundation admin should contact the
gnome admin to decide which organization to take the student (and
which one to withdraw. As for the question itself, somewhere under:
 - http://socghop.appspot.com/gsoc/program/home/google/gsoc2010

^ permalink raw reply

* Re: Google Summer of Code 2010 - Please resolve duplicates
From: Till Kamppeter @ 2010-04-19 22:57 UTC (permalink / raw)
  To: Greg KH
  Cc: Theodore Ts'o, Arnaldo Carvalho de Melo, Luis R. Rodriguez,
	linux-kernel, linux-wireless, Witold Sowa, Johannes Berg,
	Grant Likely
In-Reply-To: <20100419224634.GG1800@kroah.com>

On 04/19/2010 03:46 PM, Greg KH wrote:
> On Mon, Apr 19, 2010 at 12:39:34PM -0700, Till Kamppeter wrote:
>> Hi,
>>
>> two students who applied for your projects have applied also for
>> another organization's project and they got accepted by us and by
>> the other organization.
>>
>> Until Wednesday Google wants these situation to be resolved until
>> Wednesday April 21, 17:00 UTC. Please contact the students and/or
>> the organization to agree on one of the project for each student.
>>
>> In addition, the ranking of the students (to decide who actually
>> gets our slots) and the mentor assignments have to be finalized by
>> the same date and time.
>>
>> Duplicates not be resolved until then will be resolved on an IRC
>> meeting on Wednesday April 21 at 19:00 UTC. The meeting takes place
>> in the #gsoc channel on Freenode.
>>
>> Please mail me if a mentor needs to be (re)assigned.
>>
>>     Till
>>
>>
>>
>> ----------------------------------------------------------------------
>>
>> Hi all,
>>
>> I have opened the duplicate information for students to all of your
>> orgs. If you view your student proposals now the ones that are ranked
>> to be accepted that are duplicated with another org will be marked in
>> red. If you click on the proposal you will see the contact information
>> for the other organization(s)'s admins near the bottom of the
>> proposal.
>>
>> You must also have a mentor assigned to all the students in your top N
>> slots by now. If you do not have a mentor assigned to them the
>> duplicate detection script will not pick them up and we may have
>> duplicates we don't know about. That is bad, please fix that if its
>> the case.
>>
>> Please try to resolve as many of these duplicate situations via email
>> in the next two days as possible - contact your fellow organizations,
>> be clear with each other about who is taking the student, and then
>> rank the student up if you are accepting him/her or mark the student
>> ineligible with a public comment that you have marked it ineligible
>> because of a duplicate situation if you are not taking the student.
>>
>> The deadline for changing rankings is 17:00UTC on Wednesday, April 21.
>> All duplicates that have not been resolved by 17:00 UTC will be taken
>> to the IRC meeting at 19:00 UTC.
>
> Have a pointer to the web site to do this?
>
> thanks,
>
> greg k-h
>

Sorry, here we go:

http://socghop.appspot.com/gsoc/org/list_proposals/google/gsoc2010/lf

Requires login as mentor.

    Till

^ permalink raw reply

* Re: Google Summer of Code 2010 - Please resolve duplicates
From: Greg KH @ 2010-04-19 22:46 UTC (permalink / raw)
  To: Till Kamppeter
  Cc: Theodore Ts'o, Arnaldo Carvalho de Melo, Luis R. Rodriguez,
	linux-kernel, linux-wireless, Witold Sowa, Johannes Berg,
	Grant Likely
In-Reply-To: <4BCCB176.3060206@gmail.com>

On Mon, Apr 19, 2010 at 12:39:34PM -0700, Till Kamppeter wrote:
> Hi,
> 
> two students who applied for your projects have applied also for
> another organization's project and they got accepted by us and by
> the other organization.
> 
> Until Wednesday Google wants these situation to be resolved until
> Wednesday April 21, 17:00 UTC. Please contact the students and/or
> the organization to agree on one of the project for each student.
> 
> In addition, the ranking of the students (to decide who actually
> gets our slots) and the mentor assignments have to be finalized by
> the same date and time.
> 
> Duplicates not be resolved until then will be resolved on an IRC
> meeting on Wednesday April 21 at 19:00 UTC. The meeting takes place
> in the #gsoc channel on Freenode.
> 
> Please mail me if a mentor needs to be (re)assigned.
> 
>    Till
> 
> 
> 
> ----------------------------------------------------------------------
> 
> Hi all,
> 
> I have opened the duplicate information for students to all of your
> orgs. If you view your student proposals now the ones that are ranked
> to be accepted that are duplicated with another org will be marked in
> red. If you click on the proposal you will see the contact information
> for the other organization(s)'s admins near the bottom of the
> proposal.
> 
> You must also have a mentor assigned to all the students in your top N
> slots by now. If you do not have a mentor assigned to them the
> duplicate detection script will not pick them up and we may have
> duplicates we don't know about. That is bad, please fix that if its
> the case.
> 
> Please try to resolve as many of these duplicate situations via email
> in the next two days as possible - contact your fellow organizations,
> be clear with each other about who is taking the student, and then
> rank the student up if you are accepting him/her or mark the student
> ineligible with a public comment that you have marked it ineligible
> because of a duplicate situation if you are not taking the student.
> 
> The deadline for changing rankings is 17:00UTC on Wednesday, April 21.
> All duplicates that have not been resolved by 17:00 UTC will be taken
> to the IRC meeting at 19:00 UTC.

Have a pointer to the web site to do this?

thanks,

greg k-h

^ permalink raw reply

* [PATCH v2 1/3] compat-wireless: backport convert multicast list to list_head.
From: Hauke Mehrtens @ 2010-04-19 20:06 UTC (permalink / raw)
  To: lrodriguez; +Cc: linux-wireless, mcgrof, proski, Hauke Mehrtens
In-Reply-To: <4BCCA1D9.30208@hauke-m.de>

Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
---
  v2: add #define netdev_hw_addr dev_mc_list and remove ifdefs

 patches/25-multicast-list_head.patch |  706 ++++++++++++++++++++++++++++++++++
 1 files changed, 706 insertions(+), 0 deletions(-)
 create mode 100644 patches/25-multicast-list_head.patch

diff --git a/patches/25-multicast-list_head.patch b/patches/25-multicast-list_head.patch
new file mode 100644
index 0000000..bd8f2bd
--- /dev/null
+++ b/patches/25-multicast-list_head.patch
@@ -0,0 +1,706 @@
+Backport commit 22bedad3ce112d5ca1eaf043d4990fa2ed698c87:
+  net: convert multicast list to list_head
+
+  Converts the list and the core manipulating with it to be the same as uc_list.
+
+  +uses two functions for adding/removing mc address (normal and "global"
+   variant) instead of a function parameter.
+  +removes dev_mcast.c completely.
+  +exposes netdev_hw_addr_list_* macros along with __hw_addr_* functions for
+   manipulation with lists on a sandbox (used in bonding and 80211 drivers)
+
+This also backport commit 2f787b0b76bf5de2eaa3ca3a29d89123ae03c856
+
+--- a/drivers/net/atl1c/atl1c_main.c
++++ b/drivers/net/atl1c/atl1c_main.c
+@@ -378,7 +378,11 @@ static void atl1c_set_multi(struct net_d
+ 
+ 	/* comoute mc addresses' hash value ,and put it into hash table */
+ 	netdev_for_each_mc_addr(ha, netdev) {
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35))
+ 		hash_value = atl1c_hash_mc_addr(hw, ha->addr);
++#else
++		hash_value = atl1c_hash_mc_addr(hw, ha->dmi_addr);
++#endif
+ 		atl1c_hash_set(hw, hash_value);
+ 	}
+ }
+--- a/drivers/net/atl1e/atl1e_main.c
++++ b/drivers/net/atl1e/atl1e_main.c
+@@ -308,7 +308,11 @@ static void atl1e_set_multi(struct net_d
+ 
+ 	/* comoute mc addresses' hash value ,and put it into hash table */
+ 	netdev_for_each_mc_addr(ha, netdev) {
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35))
+ 		hash_value = atl1e_hash_mc_addr(hw, ha->addr);
++#else
++		hash_value = atl1e_hash_mc_addr(hw, ha->dmi_addr);
++#endif
+ 		atl1e_hash_set(hw, hash_value);
+ 	}
+ }
+--- a/drivers/net/atlx/atl2.c
++++ b/drivers/net/atlx/atl2.c
+@@ -159,7 +159,11 @@ static void atl2_set_multi(struct net_de
+ 
+ 	/* comoute mc addresses' hash value ,and put it into hash table */
+ 	netdev_for_each_mc_addr(ha, netdev) {
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35))
+ 		hash_value = atl2_hash_mc_addr(hw, ha->addr);
++#else
++		hash_value = atl2_hash_mc_addr(hw, ha->dmi_addr);
++#endif
+ 		atl2_hash_set(hw, hash_value);
+ 	}
+ }
+--- a/drivers/net/atlx/atlx.c
++++ b/drivers/net/atlx/atlx.c
+@@ -145,7 +145,11 @@ static void atlx_set_multi(struct net_de
+ 
+ 	/* compute mc addresses' hash value ,and put it into hash table */
+ 	netdev_for_each_mc_addr(ha, netdev) {
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35))
+ 		hash_value = atlx_hash_mc_addr(hw, ha->addr);
++#else
++		hash_value = atlx_hash_mc_addr(hw, ha->dmi_addr);
++#endif
+ 		atlx_hash_set(hw, hash_value);
+ 	}
+ }
+--- a/drivers/net/b44.c
++++ b/drivers/net/b44.c
+@@ -1689,7 +1689,11 @@ static int __b44_load_mcast(struct b44 *
+ 	netdev_for_each_mc_addr(ha, dev) {
+ 		if (i == num_ents)
+ 			break;
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35))
+ 		__b44_cam_write(bp, ha->addr, i++ + 1);
++#else
++		__b44_cam_write(bp, ha->dmi_addr, i++ + 1);
++#endif
+ 	}
+ 	return i+1;
+ }
+--- a/drivers/net/wireless/adm8211.c
++++ b/drivers/net/wireless/adm8211.c
+@@ -1318,19 +1318,37 @@ static void adm8211_bss_info_changed(str
+ }
+ 
+ static u64 adm8211_prepare_multicast(struct ieee80211_hw *hw,
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35))
+ 				     struct netdev_hw_addr_list *mc_list)
++#else
++				     int mc_count, struct dev_addr_list *ha)
++#endif
+ {
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35))
+ 	unsigned int bit_nr;
+-	u32 mc_filter[2];
+ 	struct netdev_hw_addr *ha;
++#else
++	unsigned int bit_nr, i;
++#endif
++	u32 mc_filter[2];
+ 
+ 	mc_filter[1] = mc_filter[0] = 0;
+ 
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35))
+ 	netdev_hw_addr_list_for_each(ha, mc_list) {
+ 		bit_nr = ether_crc(ETH_ALEN, ha->addr) >> 26;
++#else
++	for (i = 0; i < mc_count; i++) {
++		if (!ha)
++			break;
++		bit_nr = ether_crc(ETH_ALEN, ha->dmi_addr) >> 26;
++#endif
+ 
+ 		bit_nr &= 0x3F;
+ 		mc_filter[bit_nr >> 5] |= 1 << (bit_nr & 31);
++#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,35))
++		ha = ha->next;
++#endif
+ 	}
+ 
+ 	return mc_filter[0] | ((u64)(mc_filter[1]) << 32);
+--- a/drivers/net/wireless/ath/ar9170/main.c
++++ b/drivers/net/wireless/ath/ar9170/main.c
+@@ -2047,17 +2047,35 @@ out:
+ 	return err;
+ }
+ 
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35))
+ static u64 ar9170_op_prepare_multicast(struct ieee80211_hw *hw,
+ 				       struct netdev_hw_addr_list *mc_list)
++#else
++static u64 ar9170_op_prepare_multicast(struct ieee80211_hw *hw, int mc_count,
++				       struct dev_addr_list *ha)
++#endif
+ {
+ 	u64 mchash;
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35))
+ 	struct netdev_hw_addr *ha;
++#else
++	int i;
++#endif
+ 
+ 	/* always get broadcast frames */
+ 	mchash = 1ULL << (0xff >> 2);
+ 
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35))
+ 	netdev_hw_addr_list_for_each(ha, mc_list)
+ 		mchash |= 1ULL << (ha->addr[5] >> 2);
++#else
++	for (i = 0; i < mc_count; i++) {
++		if (WARN_ON(!ha))
++			break;
++		mchash |= 1ULL << (ha->dmi_addr[5] >> 2);
++		ha = ha->next;
++	}
++#endif
+ 
+ 	return mchash;
+ }
+--- a/drivers/net/wireless/ath/ath5k/base.c
++++ b/drivers/net/wireless/ath/ath5k/base.c
+@@ -263,7 +263,11 @@ static void ath5k_remove_interface(struc
+ 		struct ieee80211_vif *vif);
+ static int ath5k_config(struct ieee80211_hw *hw, u32 changed);
+ static u64 ath5k_prepare_multicast(struct ieee80211_hw *hw,
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35))
+ 				   struct netdev_hw_addr_list *mc_list);
++#else
++				   int mc_count, struct dev_addr_list *mc_list);
++#endif
+ static void ath5k_configure_filter(struct ieee80211_hw *hw,
+ 		unsigned int changed_flags,
+ 		unsigned int *new_flags,
+@@ -3105,20 +3109,42 @@ unlock:
+ }
+ 
+ static u64 ath5k_prepare_multicast(struct ieee80211_hw *hw,
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35))
+ 				   struct netdev_hw_addr_list *mc_list)
++#else
++				   int mc_count, struct dev_addr_list *ha)
++#endif
+ {
+ 	u32 mfilt[2], val;
+ 	u8 pos;
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35))
+ 	struct netdev_hw_addr *ha;
++#else
++	int i;
++#endif
+ 
+ 	mfilt[0] = 0;
+ 	mfilt[1] = 1;
+ 
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35))
+ 	netdev_hw_addr_list_for_each(ha, mc_list) {
++#else
++	for (i = 0; i < mc_count; i++) {
++		if (!ha)
++			break;
++#endif
+ 		/* calculate XOR of eight 6-bit values */
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35))
+ 		val = get_unaligned_le32(ha->addr + 0);
++#else
++		val = get_unaligned_le32(ha->dmi_addr + 0);
++#endif
+ 		pos = (val >> 18) ^ (val >> 12) ^ (val >> 6) ^ val;
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35))
+ 		val = get_unaligned_le32(ha->addr + 3);
++#else
++		val = get_unaligned_le32(ha->dmi_addr + 3);
++#endif
+ 		pos ^= (val >> 18) ^ (val >> 12) ^ (val >> 6) ^ val;
+ 		pos &= 0x3f;
+ 		mfilt[pos / 32] |= (1 << (pos % 32));
+@@ -3127,6 +3153,9 @@ static u64 ath5k_prepare_multicast(struc
+ 		* neet to inform below to not reset the mcast */
+ 		/* ath5k_hw_set_mcast_filterindex(ah,
+ 		 *      ha->addr[5]); */
++#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,35))
++		ha = ha->next;
++#endif
+ 	}
+ 
+ 	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
+ 	netif_addr_lock_bh(dev);
+ 	cnt = netdev_mc_count(dev);
+ 	netdev_for_each_mc_addr(ha, dev) {
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35))
+ 		if (mac_in_list(cmd->maclist, nr_addrs, ha->addr)) {
++#else
++		if (mac_in_list(cmd->maclist, nr_addrs, ha->dmi_addr)) {
++#endif
+ 			lbs_deb_net("mcast address %s:%pM skipped\n", dev->name,
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35))
+ 				    ha->addr);
++#else
++				    ha->dmi_addr);
++#endif
+ 			cnt--;
+ 			continue;
+ 		}
+ 
+ 		if (i == MRVDRV_MAX_MULTICAST_LIST_SIZE)
+ 			break;
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35))
+ 		memcpy(&cmd->maclist[6*i], ha->addr, ETH_ALEN);
++#else
++		memcpy(&cmd->maclist[6*i], ha->dmi_addr, ETH_ALEN);
++#endif
+ 		lbs_deb_net("mcast address %s:%pM added to filter\n", dev->name,
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35))
+ 			    ha->addr);
++#else
++			    ha->dmi_addr);
++#endif
+ 		i++;
+ 		cnt--;
+ 	}
+--- a/drivers/net/wireless/libertas_tf/main.c
++++ b/drivers/net/wireless/libertas_tf/main.c
+@@ -369,20 +369,36 @@ static int lbtf_op_config(struct ieee802
+ }
+ 
+ static u64 lbtf_op_prepare_multicast(struct ieee80211_hw *hw,
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35))
+ 				     struct netdev_hw_addr_list *mc_list)
++#else
++				     int mc_count, struct dev_addr_list *ha)
++#endif
+ {
+ 	struct lbtf_private *priv = hw->priv;
+ 	int i;
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35))
+ 	struct netdev_hw_addr *ha;
+ 	int mc_count = netdev_hw_addr_list_count(mc_list);
++#endif
+ 
+ 	if (!mc_count || mc_count > MRVDRV_MAX_MULTICAST_LIST_SIZE)
+ 		return mc_count;
+ 
+ 	priv->nr_of_multicastmacaddr = mc_count;
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35))
+ 	i = 0;
+ 	netdev_hw_addr_list_for_each(ha, mc_list)
+ 		memcpy(&priv->multicastlist[i++], ha->addr, ETH_ALEN);
++#else
++	for (i = 0; i < mc_count; i++) {
++		if (!ha)
++			break;
++		memcpy(&priv->multicastlist[i], ha->da_addr,
++				ETH_ALEN);
++		ha = ha->next;
++	}
++#endif
+ 
+ 	return mc_count;
+ }
+--- a/drivers/net/wireless/mwl8k.c
++++ b/drivers/net/wireless/mwl8k.c
+@@ -1939,15 +1939,21 @@ struct mwl8k_cmd_mac_multicast_adr {
+ 
+ static struct mwl8k_cmd_pkt *
+ __mwl8k_cmd_mac_multicast_adr(struct ieee80211_hw *hw, int allmulti,
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35))
+ 			      struct netdev_hw_addr_list *mc_list)
++#else
++			      int mc_count, struct dev_addr_list *ha)
++#endif
+ {
+ 	struct mwl8k_priv *priv = hw->priv;
+ 	struct mwl8k_cmd_mac_multicast_adr *cmd;
+ 	int size;
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35))
+ 	int mc_count = 0;
+ 
+ 	if (mc_list)
+ 		mc_count = netdev_hw_addr_list_count(mc_list);
++#endif
+ 
+ 	if (allmulti || mc_count > priv->num_mcaddrs) {
+ 		allmulti = 1;
+@@ -1968,13 +1974,27 @@ __mwl8k_cmd_mac_multicast_adr(struct iee
+ 	if (allmulti) {
+ 		cmd->action |= cpu_to_le16(MWL8K_ENABLE_RX_ALL_MULTICAST);
+ 	} else if (mc_count) {
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35))
+ 		struct netdev_hw_addr *ha;
+ 		int i = 0;
++#else
++		int i;
++#endif
+ 
+ 		cmd->action |= cpu_to_le16(MWL8K_ENABLE_RX_MULTICAST);
+ 		cmd->numaddr = cpu_to_le16(mc_count);
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35))
+ 		netdev_hw_addr_list_for_each(ha, mc_list) {
+ 			memcpy(cmd->addr[i], ha->addr, ETH_ALEN);
++#else
++		for (i = 0; i < mc_count && ha; i++) {
++			if (ha->da_addrlen != ETH_ALEN) {
++				kfree(cmd);
++				return NULL;
++			}
++			memcpy(cmd->addr[i], ha->da_addr, ETH_ALEN);
++			ha = ha->next;
++#endif
+ 		}
+ 	}
+ 
+@@ -3553,7 +3573,11 @@ mwl8k_bss_info_changed(struct ieee80211_
+ }
+ 
+ static u64 mwl8k_prepare_multicast(struct ieee80211_hw *hw,
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35))
+ 				   struct netdev_hw_addr_list *mc_list)
++#else
++				   int mc_count, struct dev_addr_list *ha)
++#endif
+ {
+ 	struct mwl8k_cmd_pkt *cmd;
+ 
+@@ -3564,7 +3588,11 @@ static u64 mwl8k_prepare_multicast(struc
+ 	 * we'll end up throwing this packet away and creating a new
+ 	 * one in mwl8k_configure_filter().
+ 	 */
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35))
+ 	cmd = __mwl8k_cmd_mac_multicast_adr(hw, 0, mc_list);
++#else
++	cmd = __mwl8k_cmd_mac_multicast_adr(hw, 0, mc_count, ha);
++#endif
+ 
+ 	return (unsigned long)cmd;
+ }
+@@ -3687,7 +3715,11 @@ static void mwl8k_configure_filter(struc
+ 	 */
+ 	if (*total_flags & FIF_ALLMULTI) {
+ 		kfree(cmd);
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35))
+ 		cmd = __mwl8k_cmd_mac_multicast_adr(hw, 1, NULL);
++#else
++		cmd = __mwl8k_cmd_mac_multicast_adr(hw, 1, 0, NULL);
++#endif
+ 	}
+ 
+ 	if (cmd != NULL) {
+--- a/drivers/net/wireless/orinoco/hw.c
++++ b/drivers/net/wireless/orinoco/hw.c
+@@ -1063,7 +1063,11 @@ int __orinoco_hw_set_multicast_list(stru
+ 		netdev_for_each_mc_addr(ha, dev) {
+ 			if (i == mc_count)
+ 				break;
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35))
+ 			memcpy(mclist.addr[i++], ha->addr, ETH_ALEN);
++#else
++			memcpy(mclist.addr[i++], ha->dmi_addr, ETH_ALEN);
++#endif
+ 		}
+ 
+ 		err = hermes_write_ltv(hw, USER_BAP,
+--- a/drivers/net/wireless/orinoco/hw.h
++++ b/drivers/net/wireless/orinoco/hw.h
+@@ -22,6 +22,9 @@
+ 
+ /* Forward declarations */
+ struct orinoco_private;
++#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,35))
++struct dev_addr_list;
++#endif
+ 
+ int determine_fw_capabilities(struct orinoco_private *priv, char *fw_name,
+ 			      size_t fw_name_len, u32 *hw_ver);
+--- a/drivers/net/wireless/rndis_wlan.c
++++ b/drivers/net/wireless/rndis_wlan.c
+@@ -1587,7 +1587,11 @@ static void set_multicast_list(struct us
+ 
+ 		netdev_for_each_mc_addr(ha, usbdev->net)
+ 			memcpy(mc_addrs + i++ * ETH_ALEN,
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35))
+ 			       ha->addr, ETH_ALEN);
++#else
++			       ha->dmi_addr, ETH_ALEN);
++#endif
+ 	}
+ 	netif_addr_unlock_bh(usbdev->net);
+ 
+--- a/drivers/net/wireless/rtl818x/rtl8180_dev.c
++++ b/drivers/net/wireless/rtl818x/rtl8180_dev.c
+@@ -724,10 +724,19 @@ static void rtl8180_bss_info_changed(str
+ 	        priv->rf->conf_erp(dev, info);
+ }
+ 
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35))
+ static u64 rtl8180_prepare_multicast(struct ieee80211_hw *dev,
+ 				     struct netdev_hw_addr_list *mc_list)
++#else
++static u64 rtl8180_prepare_multicast(struct ieee80211_hw *dev, int mc_count,
++				     struct dev_addr_list *mc_list)
++#endif
+ {
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35))
+ 	return netdev_hw_addr_list_count(mc_list);
++#else
++	return mc_count;
++#endif
+ }
+ 
+ static void rtl8180_configure_filter(struct ieee80211_hw *dev,
+--- a/drivers/net/wireless/rtl818x/rtl8187_dev.c
++++ b/drivers/net/wireless/rtl818x/rtl8187_dev.c
+@@ -1194,9 +1194,17 @@ static void rtl8187_bss_info_changed(str
+ }
+ 
+ static u64 rtl8187_prepare_multicast(struct ieee80211_hw *dev,
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35))
+ 				     struct netdev_hw_addr_list *mc_list)
++#else
++				     int mc_count, struct dev_addr_list *mc_list)
++#endif
+ {
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35))
+ 	return netdev_hw_addr_list_count(mc_list);
++#else
++	return mc_count;
++#endif
+ }
+ 
+ static void rtl8187_configure_filter(struct ieee80211_hw *dev,
+--- a/drivers/net/wireless/wl12xx/wl1271_main.c
++++ b/drivers/net/wireless/wl12xx/wl1271_main.c
+@@ -1305,11 +1305,20 @@ struct wl1271_filter_params {
+ 	u8 mc_list[ACX_MC_ADDRESS_GROUP_MAX][ETH_ALEN];
+ };
+ 
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35))
+ static u64 wl1271_op_prepare_multicast(struct ieee80211_hw *hw,
+ 				       struct netdev_hw_addr_list *mc_list)
++#else
++static u64 wl1271_op_prepare_multicast(struct ieee80211_hw *hw, int mc_count,
++				       struct dev_addr_list *mc_list)
++#endif
+ {
+ 	struct wl1271_filter_params *fp;
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35))
+ 	struct netdev_hw_addr *ha;
++#else
++	int i;
++#endif
+ 	struct wl1271 *wl = hw->priv;
+ 
+ 	if (unlikely(wl->state == WL1271_STATE_OFF))
+@@ -1322,16 +1331,40 @@ static u64 wl1271_op_prepare_multicast(s
+ 	}
+ 
+ 	/* update multicast filtering parameters */
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35))
+ 	fp->mc_list_length = 0;
+ 	if (netdev_hw_addr_list_count(mc_list) > ACX_MC_ADDRESS_GROUP_MAX) {
++#else
++	fp->enabled = true;
++	if (mc_count > ACX_MC_ADDRESS_GROUP_MAX) {
++		mc_count = 0;
++#endif
+ 		fp->enabled = false;
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35))
+ 	} else {
+ 		fp->enabled = true;
+ 		netdev_hw_addr_list_for_each(ha, mc_list) {
++#else
++	}
++
++	fp->mc_list_length = 0;
++	for (i = 0; i < mc_count; i++) {
++		if (mc_list->da_addrlen == ETH_ALEN) {
++#endif
+ 			memcpy(fp->mc_list[fp->mc_list_length],
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35))
+ 					ha->addr, ETH_ALEN);
++#else
++			       mc_list->da_addr, ETH_ALEN);
++#endif
+ 			fp->mc_list_length++;
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35))
+ 		}
++#else
++		} else
++			wl1271_warning("Unknown mc address length.");
++		mc_list = mc_list->next;
++#endif
+ 	}
+ 
+ 	return (u64)(unsigned long)fp;
+--- a/drivers/net/wireless/zd1211rw/zd_mac.c
++++ b/drivers/net/wireless/zd1211rw/zd_mac.c
+@@ -948,17 +948,34 @@ static void set_rx_filter_handler(struct
+ }
+ 
+ static u64 zd_op_prepare_multicast(struct ieee80211_hw *hw,
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35))
+ 				   struct netdev_hw_addr_list *mc_list)
++#else
++				   int mc_count, struct dev_addr_list *ha)
++#endif
+ {
+ 	struct zd_mac *mac = zd_hw_mac(hw);
+ 	struct zd_mc_hash hash;
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35))
+ 	struct netdev_hw_addr *ha;
++#else
++	int i;
++#endif
+ 
+ 	zd_mc_clear(&hash);
+ 
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35))
+ 	netdev_hw_addr_list_for_each(ha, mc_list) {
+ 		dev_dbg_f(zd_mac_dev(mac), "mc addr %pM\n", ha->addr);
+ 		zd_mc_add_addr(&hash, ha->addr);
++#else
++	for (i = 0; i < mc_count; i++) {
++		if (!ha)
++			break;
++		dev_dbg_f(zd_mac_dev(mac), "mc addr %pM\n", ha->dmi_addr);
++		zd_mc_add_addr(&hash, ha->dmi_addr);
++		ha = ha->next;
++#endif
+ 	}
+ 
+ 	return hash.low | ((u64)hash.high << 32);
+--- a/include/net/mac80211.h
++++ b/include/net/mac80211.h
+@@ -1631,7 +1631,11 @@ struct ieee80211_ops {
+ 				 struct ieee80211_bss_conf *info,
+ 				 u32 changed);
+ 	u64 (*prepare_multicast)(struct ieee80211_hw *hw,
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35))
+ 				 struct netdev_hw_addr_list *mc_list);
++#else
++				 int mc_count, struct dev_addr_list *mc_list);
++#endif
+ 	void (*configure_filter)(struct ieee80211_hw *hw,
+ 				 unsigned int changed_flags,
+ 				 unsigned int *total_flags,
+--- a/net/bluetooth/bnep/netdev.c
++++ b/net/bluetooth/bnep/netdev.c
+@@ -102,8 +102,13 @@ static void bnep_net_set_mc_list(struct 
+ 		netdev_for_each_mc_addr(ha, dev) {
+ 			if (i == BNEP_MAX_MULTICAST_FILTERS)
+ 				break;
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35))
+ 			memcpy(__skb_put(skb, ETH_ALEN), ha->addr, ETH_ALEN);
+ 			memcpy(__skb_put(skb, ETH_ALEN), ha->addr, ETH_ALEN);
++#else
++			memcpy(__skb_put(skb, ETH_ALEN), ha->dmi_addr, ETH_ALEN);
++			memcpy(__skb_put(skb, ETH_ALEN), ha->dmi_addr, ETH_ALEN);
++#endif
+ 		}
+ 		r->len = htons(skb->len - len);
+ 	}
+--- a/net/mac80211/driver-ops.h
++++ b/net/mac80211/driver-ops.h
+@@ -84,14 +84,28 @@ static inline void drv_bss_info_changed(
+ }
+ 
+ static inline u64 drv_prepare_multicast(struct ieee80211_local *local,
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35))
+ 					struct netdev_hw_addr_list *mc_list)
++#else
++					int mc_count,
++					struct dev_addr_list *mc_list)
++#endif
+ {
+ 	u64 ret = 0;
+ 
+ 	if (local->ops->prepare_multicast)
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35))
+ 		ret = local->ops->prepare_multicast(&local->hw, mc_list);
++#else
++		ret = local->ops->prepare_multicast(&local->hw, mc_count,
++						    mc_list);
++#endif
+ 
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35))
+ 	trace_drv_prepare_multicast(local, mc_list->count, ret);
++#else
++	trace_drv_prepare_multicast(local, mc_count, ret);
++#endif
+ 
+ 	return ret;
+ }
+--- a/net/mac80211/ieee80211_i.h
++++ b/net/mac80211/ieee80211_i.h
+@@ -665,7 +665,12 @@ struct ieee80211_local {
+ 	struct work_struct recalc_smps;
+ 
+ 	/* aggregated multicast list */
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35))
+ 	struct netdev_hw_addr_list mc_list;
++#else
++	struct dev_addr_list *mc_list;
++	int mc_count;
++#endif
+ 
+ 	bool tim_in_locked_section; /* see ieee80211_beacon_get() */
+ 
+--- a/net/mac80211/iface.c
++++ b/net/mac80211/iface.c
+@@ -413,7 +413,12 @@ static int ieee80211_stop(struct net_dev
+ 
+ 	netif_addr_lock_bh(dev);
+ 	spin_lock_bh(&local->filter_lock);
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35))
+ 	__hw_addr_unsync(&local->mc_list, &dev->mc, dev->addr_len);
++#else
++	__dev_addr_unsync(&local->mc_list, &local->mc_count,
++			  &dev->mc_list, &dev->mc_count);
++#endif
+ 	spin_unlock_bh(&local->filter_lock);
+ 	netif_addr_unlock_bh(dev);
+ 
+@@ -596,7 +601,12 @@ static void ieee80211_set_multicast_list
+ 		sdata->flags ^= IEEE80211_SDATA_PROMISC;
+ 	}
+ 	spin_lock_bh(&local->filter_lock);
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35))
+ 	__hw_addr_sync(&local->mc_list, &dev->mc, dev->addr_len);
++#else
++	__dev_addr_sync(&local->mc_list, &local->mc_count,
++			&dev->mc_list, &dev->mc_count);
++#endif
+ 	spin_unlock_bh(&local->filter_lock);
+ 	ieee80211_queue_work(&local->hw, &local->reconfig_filter);
+ }
+--- a/net/mac80211/main.c
++++ b/net/mac80211/main.c
+@@ -71,7 +71,11 @@ void ieee80211_configure_filter(struct i
+ 	spin_lock_bh(&local->filter_lock);
+ 	changed_flags = local->filter_flags ^ new_flags;
+ 
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35))
+ 	mc = drv_prepare_multicast(local, &local->mc_list);
++#else
++	mc = drv_prepare_multicast(local, local->mc_count, local->mc_list);
++#endif
+ 	spin_unlock_bh(&local->filter_lock);
+ 
+ 	/* be a bit nasty */
+@@ -390,9 +394,11 @@ struct ieee80211_hw *ieee80211_alloc_hw(
+ 	local->uapsd_max_sp_len = IEEE80211_DEFAULT_MAX_SP_LEN;
+ 
+ 	INIT_LIST_HEAD(&local->interfaces);
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35))
+ 
+ 	__hw_addr_init(&local->mc_list);
+ 
++#endif
+ 	mutex_init(&local->iflist_mtx);
+ 	mutex_init(&local->scan_mtx);
+ 
-- 
1.6.3.3


^ permalink raw reply related

* [PATCH v2] compat: backport convert multicast list to list_head.
From: Hauke Mehrtens @ 2010-04-19 20:06 UTC (permalink / raw)
  To: lrodriguez; +Cc: linux-wireless, mcgrof, proski, Hauke Mehrtens
In-Reply-To: <4BCCA1D9.30208@hauke-m.de>


Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
---
 include/linux/compat-2.6.35.h |    3 +++
 1 files changed, 3 insertions(+), 0 deletions(-)

diff --git a/include/linux/compat-2.6.35.h b/include/linux/compat-2.6.35.h
index 964e8dc..4d3483a 100644
--- a/include/linux/compat-2.6.35.h
+++ b/include/linux/compat-2.6.35.h
@@ -4,6 +4,7 @@
 #include <linux/version.h>
 
 #if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,35))
+#include <linux/etherdevice.h>
 
 #define IW_HANDLER(id, func)			\
 	[IW_IOCTL_IDX(id)] = func
@@ -11,6 +12,8 @@
 #define  SDIO_BUS_ECSI		0x20	/* Enable continuous SPI interrupt */
 #define  SDIO_BUS_SCSI		0x40	/* Support continuous SPI interrupt */
 
+#define netdev_hw_addr dev_mc_list
+
 #endif /* (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,35)) */
 
 #endif /* LINUX_26_35_COMPAT_H */
-- 
1.6.3.3


^ permalink raw reply related

* Google Summer of Code 2010 - Please resolve duplicates
From: Till Kamppeter @ 2010-04-19 19:39 UTC (permalink / raw)
  To: Theodore Ts'o, Greg KH, Arnaldo Carvalho de Melo,
	Luis R. Rodriguez, linux-kernel, linux-wireless, Witold Sowa,
	Johannes Berg, Grant Likely

Hi,

two students who applied for your projects have applied also for another 
organization's project and they got accepted by us and by the other 
organization.

Until Wednesday Google wants these situation to be resolved until 
Wednesday April 21, 17:00 UTC. Please contact the students and/or the 
organization to agree on one of the project for each student.

In addition, the ranking of the students (to decide who actually gets 
our slots) and the mentor assignments have to be finalized by the same 
date and time.

Duplicates not be resolved until then will be resolved on an IRC meeting 
on Wednesday April 21 at 19:00 UTC. The meeting takes place in the #gsoc 
channel on Freenode.

Please mail me if a mentor needs to be (re)assigned.

    Till



----------------------------------------------------------------------

Hi all,

I have opened the duplicate information for students to all of your
orgs. If you view your student proposals now the ones that are ranked
to be accepted that are duplicated with another org will be marked in
red. If you click on the proposal you will see the contact information
for the other organization(s)'s admins near the bottom of the
proposal.

You must also have a mentor assigned to all the students in your top N
slots by now. If you do not have a mentor assigned to them the
duplicate detection script will not pick them up and we may have
duplicates we don't know about. That is bad, please fix that if its
the case.

Please try to resolve as many of these duplicate situations via email
in the next two days as possible - contact your fellow organizations,
be clear with each other about who is taking the student, and then
rank the student up if you are accepting him/her or mark the student
ineligible with a public comment that you have marked it ineligible
because of a duplicate situation if you are not taking the student.

The deadline for changing rankings is 17:00UTC on Wednesday, April 21.
All duplicates that have not been resolved by 17:00 UTC will be taken
to the IRC meeting at 19:00 UTC.

Cheers,
Carol


^ permalink raw reply

* Re: [PATCH v2 1/9] ath9k: check for specific rx stuck conditions and recover from them
From: Felix Fietkau @ 2010-04-19 19:07 UTC (permalink / raw)
  To: Pavel Roskin; +Cc: linux-wireless, linville, lrodriguez
In-Reply-To: <1271703852.19879.1.camel@mj>

On 2010-04-19 9:04 PM, Pavel Roskin wrote:
> On Mon, 2010-04-19 at 19:57 +0200, Felix Fietkau wrote:
>> +		if ((reg & 0x7E7FFFEF) == 0x00702400)
>> +			continue;
>> +
>> +		switch (reg & 0x7E000B00) {
>> +		case 0x1E000000:
>> +		case 0x52000B00:
>> +		case 0x18000B00:
>> +			continue;
> 
> Where did you get all that magic?  If it's from Atheros documentation,
> maybe you could give those numbers descriptive names?
I don't have any names for that. It's stuff from a debugging register -
adapted from Atheros code...

- Felix

^ permalink raw reply

* Re: [PATCH v2 1/9] ath9k: check for specific rx stuck conditions and recover from them
From: Pavel Roskin @ 2010-04-19 19:04 UTC (permalink / raw)
  To: Felix Fietkau; +Cc: linux-wireless, linville, lrodriguez
In-Reply-To: <1271699857-12366-1-git-send-email-nbd@openwrt.org>

On Mon, 2010-04-19 at 19:57 +0200, Felix Fietkau wrote:
> +		if ((reg & 0x7E7FFFEF) == 0x00702400)
> +			continue;
> +
> +		switch (reg & 0x7E000B00) {
> +		case 0x1E000000:
> +		case 0x52000B00:
> +		case 0x18000B00:
> +			continue;

Where did you get all that magic?  If it's from Atheros documentation,
maybe you could give those numbers descriptive names?

-- 
Regards,
Pavel Roskin

^ permalink raw reply

* Re: [PATCH 1/3] compat-wireless: backport convert multicast list to list_head.
From: Hauke Mehrtens @ 2010-04-19 18:32 UTC (permalink / raw)
  To: Pavel Roskin; +Cc: lrodriguez, linux-wireless, mcgrof
In-Reply-To: <20100418101514.q7rwgz9zwgk8sg0k-cebfxv@webmail.spamcop.net>

[-- Attachment #1: Type: text/plain, Size: 2265 bytes --]

Hi Pavel,

thank you for your comments on this.
Pavel Roskin wrote:
> Hello, Hauke!
> 
> Thank you for doing this effort!  I would prefer that we avoid patching
> as much as possible.  Patches tend to break as the code changes.  I
> think there are several cases where patching can be eliminated.
> 
>> ++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35))
>> +     struct netdev_hw_addr *ha;
>> ++#else
>> ++    struct dev_mc_list *ha;
>> ++#endif
> 
> We could simply use this in some header:
> 
> #define dev_mc_list netdev_hw_addr
This will be possible, but as I see, only in some easy parts where the
patch looks like the quote above.
I will change that and resend this patch.
> 
>> +     /* comoute mc addresses' hash value ,and put it into hash table */
> 
> Someone had a bout of dyslexia, and it will be fixed, breaking the patch
> :-)
> 
>> +     netdev_for_each_mc_addr(ha, netdev) {
>> ++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35))
>> +         hash_value = atl1c_hash_mc_addr(hw, ha->addr);
>> ++#else
>> ++        hash_value = atl1c_hash_mc_addr(hw, ha->dmi_addr);
>> ++#endif
> 
> #define addr dmi_addr
> 
> OK, this is likely to break if done in a header, but maybe it could be
> done in the C code away from the rest of the code.
I think the if defs are better than a conditional define in every file
that needs it. It will result in strange compile errors if someone uses
addr for an other addresses.
> 
>> ++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35))
>> +     __hw_addr_unsync(&local->mc_list, &dev->mc, dev->addr_len);
>> ++#else
>> ++    __dev_addr_unsync(&local->mc_list, &local->mc_count,
>> ++              &dev->mc_list, &dev->mc_count);
>> ++#endif
> 
> Cannot we reimplement __hw_addr_unsync()?
This change depends on some changes structs in
net/mac80211/ieee80211_i.h I do not see a way to reimplement this.
> 
>> ++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35))
>> +
>> +     __hw_addr_init(&local->mc_list);
>> +
>> ++#endif
> 
> That could be an empty function.
Yes that could be done, but I think it is much more clear to use this
patch here, because we do not need __hw_addr_init, because
local->mc_list is of a completely different type.

Hauke


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 898 bytes --]

^ permalink raw reply

* Re: rc80211_minstrel.c:70 WARNING with 2.6.34-rc4
From: Felix Fietkau @ 2010-04-19 18:00 UTC (permalink / raw)
  To: Richard Zidlicky; +Cc: Pavel Roskin, linux-wireless
In-Reply-To: <20100419175508.GB5312@linux-m68k.org>

On 2010-04-19 7:55 PM, Richard Zidlicky wrote:
> On Mon, Apr 19, 2010 at 07:41:32PM +0200, Felix Fietkau wrote:
> 
> 
>> This warning typically shows up, whenever the driver reports a rate to
>> minstrel in the tx status that is not part of the supported/negotiated
>> rate set - that's the reason the index lookup above fails.
> 
> can that happen when both ends are configured to a fixed rate of 11M?
No idea. I've never used fixed-rate. I guess it could, if it uses 11M
for communicating with a peer that it for some reason did not enable
this rate for.

 - Felix

^ permalink raw reply

* [PATCH v2 9/9] ath9k: set the STBC flag in rate control if the peer supports it
From: Felix Fietkau @ 2010-04-19 17:57 UTC (permalink / raw)
  To: linux-wireless; +Cc: linville, lrodriguez
In-Reply-To: <1271699857-12366-8-git-send-email-nbd@openwrt.org>

Signed-off-by: Felix Fietkau <nbd@openwrt.org>
---
 drivers/net/wireless/ath/ath9k/rc.c |    4 ++++
 1 files changed, 4 insertions(+), 0 deletions(-)

diff --git a/drivers/net/wireless/ath/ath9k/rc.c b/drivers/net/wireless/ath/ath9k/rc.c
index bf3ad7a..8519452 100644
--- a/drivers/net/wireless/ath/ath9k/rc.c
+++ b/drivers/net/wireless/ath/ath9k/rc.c
@@ -700,6 +700,10 @@ static void ath_get_rate(void *priv, struct ieee80211_sta *sta, void *priv_sta,
 	    (sta->ht_cap.cap & IEEE80211_HT_CAP_LDPC_CODING))
 		tx_info->flags |= IEEE80211_TX_CTL_LDPC;
 
+	if (conf_is_ht(&sc->hw->conf) &&
+	    (sta->ht_cap.cap & IEEE80211_HT_CAP_TX_STBC))
+		tx_info->flags |= (1 << IEEE80211_TX_CTL_STBC_SHIFT);
+
 	if (is_probe) {
 		/* set one try for probe rates. For the
 		 * probes don't enable rts */
-- 
1.6.4.2


^ permalink raw reply related

* [PATCH v2 1/9] ath9k: check for specific rx stuck conditions and recover from them
From: Felix Fietkau @ 2010-04-19 17:57 UTC (permalink / raw)
  To: linux-wireless; +Cc: linville, lrodriguez

Signed-off-by: Felix Fietkau <nbd@openwrt.org>
---
 drivers/net/wireless/ath/ath9k/hw.c   |   28 ++++++++++++++++++++++++++++
 drivers/net/wireless/ath/ath9k/hw.h   |    1 +
 drivers/net/wireless/ath/ath9k/main.c |    3 ++-
 3 files changed, 31 insertions(+), 1 deletions(-)

diff --git a/drivers/net/wireless/ath/ath9k/hw.c b/drivers/net/wireless/ath/ath9k/hw.c
index 9aa40df..5a29048 100644
--- a/drivers/net/wireless/ath/ath9k/hw.c
+++ b/drivers/net/wireless/ath/ath9k/hw.c
@@ -1160,6 +1160,34 @@ static bool ath9k_hw_channel_change(struct ath_hw *ah,
 	return true;
 }
 
+bool ath9k_hw_check_alive(struct ath_hw *ah)
+{
+	int count = 50;
+	u32 reg;
+
+	if (AR_SREV_9285_10_OR_LATER(ah))
+		return true;
+
+	do {
+		reg = REG_READ(ah, AR_OBS_BUS_1);
+
+		if ((reg & 0x7E7FFFEF) == 0x00702400)
+			continue;
+
+		switch (reg & 0x7E000B00) {
+		case 0x1E000000:
+		case 0x52000B00:
+		case 0x18000B00:
+			continue;
+		default:
+			return true;
+		}
+	} while (count-- > 0);
+
+	return false;
+}
+EXPORT_SYMBOL(ath9k_hw_check_alive);
+
 int ath9k_hw_reset(struct ath_hw *ah, struct ath9k_channel *chan,
 		    bool bChannelChange)
 {
diff --git a/drivers/net/wireless/ath/ath9k/hw.h b/drivers/net/wireless/ath/ath9k/hw.h
index 8158e8e..a78e09b 100644
--- a/drivers/net/wireless/ath/ath9k/hw.h
+++ b/drivers/net/wireless/ath/ath9k/hw.h
@@ -869,6 +869,7 @@ void ath9k_hw_set11nmac2040(struct ath_hw *ah);
 void ath9k_hw_beaconinit(struct ath_hw *ah, u32 next_beacon, u32 beacon_period);
 void ath9k_hw_set_sta_beacon_timers(struct ath_hw *ah,
 				    const struct ath9k_beacon_state *bs);
+bool ath9k_hw_check_alive(struct ath_hw *ah);
 
 bool ath9k_hw_setpower(struct ath_hw *ah, enum ath9k_power_mode mode);
 
diff --git a/drivers/net/wireless/ath/ath9k/main.c b/drivers/net/wireless/ath/ath9k/main.c
index 1f4ea74..0246e7a 100644
--- a/drivers/net/wireless/ath/ath9k/main.c
+++ b/drivers/net/wireless/ath/ath9k/main.c
@@ -405,7 +405,8 @@ void ath9k_tasklet(unsigned long data)
 
 	ath9k_ps_wakeup(sc);
 
-	if (status & ATH9K_INT_FATAL) {
+	if ((status & ATH9K_INT_FATAL) ||
+	    !ath9k_hw_check_alive(ah)) {
 		ath_reset(sc, false);
 		ath9k_ps_restore(sc);
 		return;
-- 
1.6.4.2


^ permalink raw reply related

* [PATCH v2 6/9] ath9k: initialize the number of tx/rx streams correctly
From: Felix Fietkau @ 2010-04-19 17:57 UTC (permalink / raw)
  To: linux-wireless; +Cc: linville, lrodriguez
In-Reply-To: <1271699857-12366-5-git-send-email-nbd@openwrt.org>

AR9300 based hardware can 3x3 MCS rates, this should be set in the
HT capabilities.

Signed-off-by: Felix Fietkau <nbd@openwrt.org>
---
 drivers/net/wireless/ath/ath9k/init.c |   39 +++++++++++++++++++++++---------
 1 files changed, 28 insertions(+), 11 deletions(-)

diff --git a/drivers/net/wireless/ath/ath9k/init.c b/drivers/net/wireless/ath/ath9k/init.c
index ca6e781..2c0630e 100644
--- a/drivers/net/wireless/ath/ath9k/init.c
+++ b/drivers/net/wireless/ath/ath9k/init.c
@@ -175,6 +175,18 @@ static const struct ath_ops ath9k_common_ops = {
 	.write = ath9k_iowrite32,
 };
 
+static int count_streams(unsigned int chainmask, int max)
+{
+	int streams = 0;
+
+	do {
+		if (++streams == max)
+			break;
+	} while ((chainmask = chainmask & (chainmask - 1)));
+
+	return streams;
+}
+
 /**************************/
 /*     Initialization     */
 /**************************/
@@ -182,8 +194,10 @@ static const struct ath_ops ath9k_common_ops = {
 static void setup_ht_cap(struct ath_softc *sc,
 			 struct ieee80211_sta_ht_cap *ht_info)
 {
-	struct ath_common *common = ath9k_hw_common(sc->sc_ah);
+	struct ath_hw *ah = sc->sc_ah;
+	struct ath_common *common = ath9k_hw_common(ah);
 	u8 tx_streams, rx_streams;
+	int i, max_streams;
 
 	ht_info->ht_supported = true;
 	ht_info->cap = IEEE80211_HT_CAP_SUP_WIDTH_20_40 |
@@ -197,25 +211,28 @@ static void setup_ht_cap(struct ath_softc *sc,
 	ht_info->ampdu_factor = IEEE80211_HT_MAX_AMPDU_64K;
 	ht_info->ampdu_density = IEEE80211_HT_MPDU_DENSITY_8;
 
+	if (AR_SREV_9300_20_OR_LATER(ah))
+		max_streams = 3;
+	else
+		max_streams = 2;
+
 	/* set up supported mcs set */
 	memset(&ht_info->mcs, 0, sizeof(ht_info->mcs));
-	tx_streams = !(common->tx_chainmask & (common->tx_chainmask - 1)) ?
-		     1 : 2;
-	rx_streams = !(common->rx_chainmask & (common->rx_chainmask - 1)) ?
-		     1 : 2;
+	tx_streams = count_streams(common->tx_chainmask, max_streams);
+	rx_streams = count_streams(common->rx_chainmask, max_streams);
+
+	ath_print(common, ATH_DBG_CONFIG,
+		  "TX streams %d, RX streams: %d\n",
+		  tx_streams, rx_streams);
 
 	if (tx_streams != rx_streams) {
-		ath_print(common, ATH_DBG_CONFIG,
-			  "TX streams %d, RX streams: %d\n",
-			  tx_streams, rx_streams);
 		ht_info->mcs.tx_params |= IEEE80211_HT_MCS_TX_RX_DIFF;
 		ht_info->mcs.tx_params |= ((tx_streams - 1) <<
 				IEEE80211_HT_MCS_TX_MAX_STREAMS_SHIFT);
 	}
 
-	ht_info->mcs.rx_mask[0] = 0xff;
-	if (rx_streams >= 2)
-		ht_info->mcs.rx_mask[1] = 0xff;
+	for (i = 0; i < rx_streams; i++)
+		ht_info->mcs.rx_mask[i] = 0xff;
 
 	ht_info->mcs.tx_params |= IEEE80211_HT_MCS_TX_DEFINED;
 }
-- 
1.6.4.2


^ permalink raw reply related

* [PATCH v2 2/9] ath9k: clean up tx buffer handling
From: Felix Fietkau @ 2010-04-19 17:57 UTC (permalink / raw)
  To: linux-wireless; +Cc: linville, lrodriguez
In-Reply-To: <1271699857-12366-1-git-send-email-nbd@openwrt.org>

Signed-off-by: Felix Fietkau <nbd@openwrt.org>
---
 drivers/net/wireless/ath/ath9k/xmit.c |   67 ++++++++++++++++-----------------
 1 files changed, 32 insertions(+), 35 deletions(-)

diff --git a/drivers/net/wireless/ath/ath9k/xmit.c b/drivers/net/wireless/ath/ath9k/xmit.c
index cac178a..fcbb4a8 100644
--- a/drivers/net/wireless/ath/ath9k/xmit.c
+++ b/drivers/net/wireless/ath/ath9k/xmit.c
@@ -261,19 +261,40 @@ static void ath_tx_set_retry(struct ath_softc *sc, struct ath_txq *txq,
 	hdr->frame_control |= cpu_to_le16(IEEE80211_FCTL_RETRY);
 }
 
-static struct ath_buf* ath_clone_txbuf(struct ath_softc *sc, struct ath_buf *bf)
+static struct ath_buf *ath_tx_get_buffer(struct ath_softc *sc)
 {
-	struct ath_buf *tbf;
+	struct ath_buf *bf = NULL;
 
 	spin_lock_bh(&sc->tx.txbuflock);
-	if (WARN_ON(list_empty(&sc->tx.txbuf))) {
+
+	if (unlikely(list_empty(&sc->tx.txbuf))) {
 		spin_unlock_bh(&sc->tx.txbuflock);
 		return NULL;
 	}
-	tbf = list_first_entry(&sc->tx.txbuf, struct ath_buf, list);
-	list_del(&tbf->list);
+
+	bf = list_first_entry(&sc->tx.txbuf, struct ath_buf, list);
+	list_del(&bf->list);
+
 	spin_unlock_bh(&sc->tx.txbuflock);
 
+	return bf;
+}
+
+static void ath_tx_return_buffer(struct ath_softc *sc, struct ath_buf *bf)
+{
+	spin_lock_bh(&sc->tx.txbuflock);
+	list_add_tail(&bf->list, &sc->tx.txbuf);
+	spin_unlock_bh(&sc->tx.txbuflock);
+}
+
+static struct ath_buf* ath_clone_txbuf(struct ath_softc *sc, struct ath_buf *bf)
+{
+	struct ath_buf *tbf;
+
+	tbf = ath_tx_get_buffer(sc);
+	if (WARN_ON(!tbf))
+		return NULL;
+
 	ATH_TXBUF_RESET(tbf);
 
 	tbf->aphy = bf->aphy;
@@ -1081,9 +1102,7 @@ void ath_draintxq(struct ath_softc *sc, struct ath_txq *txq, bool retry_tx)
 				list_del(&bf->list);
 				spin_unlock_bh(&txq->axq_lock);
 
-				spin_lock_bh(&sc->tx.txbuflock);
-				list_add_tail(&bf->list, &sc->tx.txbuf);
-				spin_unlock_bh(&sc->tx.txbuflock);
+				ath_tx_return_buffer(sc, bf);
 				continue;
 			}
 		}
@@ -1325,25 +1344,6 @@ static void ath_tx_txqaddbuf(struct ath_softc *sc, struct ath_txq *txq,
 	txq->axq_depth++;
 }
 
-static struct ath_buf *ath_tx_get_buffer(struct ath_softc *sc)
-{
-	struct ath_buf *bf = NULL;
-
-	spin_lock_bh(&sc->tx.txbuflock);
-
-	if (unlikely(list_empty(&sc->tx.txbuf))) {
-		spin_unlock_bh(&sc->tx.txbuflock);
-		return NULL;
-	}
-
-	bf = list_first_entry(&sc->tx.txbuf, struct ath_buf, list);
-	list_del(&bf->list);
-
-	spin_unlock_bh(&sc->tx.txbuflock);
-
-	return bf;
-}
-
 static void ath_tx_send_ampdu(struct ath_softc *sc, struct ath_atx_tid *tid,
 			      struct list_head *bf_head,
 			      struct ath_tx_control *txctl)
@@ -1825,9 +1825,7 @@ int ath_tx_start(struct ieee80211_hw *hw, struct sk_buff *skb,
 		}
 		spin_unlock_bh(&txq->axq_lock);
 
-		spin_lock_bh(&sc->tx.txbuflock);
-		list_add_tail(&bf->list, &sc->tx.txbuf);
-		spin_unlock_bh(&sc->tx.txbuflock);
+		ath_tx_return_buffer(sc, bf);
 
 		return r;
 	}
@@ -2141,13 +2139,12 @@ static void ath_tx_processq(struct ath_softc *sc, struct ath_txq *txq)
 		txq->axq_depth--;
 		txok = !(ts.ts_status & ATH9K_TXERR_MASK);
 		txq->axq_tx_inprogress = false;
+		if (bf_held)
+			list_del(&bf_held->list);
 		spin_unlock_bh(&txq->axq_lock);
 
-		if (bf_held) {
-			spin_lock_bh(&sc->tx.txbuflock);
-			list_move_tail(&bf_held->list, &sc->tx.txbuf);
-			spin_unlock_bh(&sc->tx.txbuflock);
-		}
+		if (bf_held)
+			ath_tx_return_buffer(sc, bf_held);
 
 		if (!bf_isampdu(bf)) {
 			/*
-- 
1.6.4.2


^ permalink raw reply related

* [PATCH v2 4/9] ath9k: update the ath_max_4ms_framelen table
From: Felix Fietkau @ 2010-04-19 17:57 UTC (permalink / raw)
  To: linux-wireless; +Cc: linville, lrodriguez
In-Reply-To: <1271699857-12366-3-git-send-email-nbd@openwrt.org>

Include MCS0-31 and also add SGI for HT20. This makes it
possible to support more different rate combinations with
newer hardware.

Based on a patch by Selvam. T.

Signed-off-by: Felix Fietkau <nbd@openwrt.org>
---
 drivers/net/wireless/ath/ath9k/xmit.c |   41 +++++++++++++++++++++-----------
 1 files changed, 27 insertions(+), 14 deletions(-)

diff --git a/drivers/net/wireless/ath/ath9k/xmit.c b/drivers/net/wireless/ath/ath9k/xmit.c
index 5d3d563..4078982 100644
--- a/drivers/net/wireless/ath/ath9k/xmit.c
+++ b/drivers/net/wireless/ath/ath9k/xmit.c
@@ -71,24 +71,36 @@ static void ath_tx_rc_status(struct ath_buf *bf, struct ath_tx_status *ts,
 			     int nbad, int txok, bool update_rc);
 
 enum {
-	MCS_DEFAULT,
+	MCS_HT20,
+	MCS_HT20_SGI,
 	MCS_HT40,
 	MCS_HT40_SGI,
 };
 
-static int ath_max_4ms_framelen[3][16] = {
-	[MCS_DEFAULT] = {
-		3216,  6434,  9650,  12868, 19304, 25740,  28956,  32180,
-		6430,  12860, 19300, 25736, 38600, 51472,  57890,  64320,
+static int ath_max_4ms_framelen[4][32] = {
+	[MCS_HT20] = {
+		3212,  6432,  9648,  12864,  19300,  25736,  28952,  32172,
+		6424,  12852, 19280, 25708,  38568,  51424,  57852,  64280,
+		9628,  19260, 28896, 38528,  57792,  65532,  65532,  65532,
+		12828, 25656, 38488, 51320,  65532,  65532,  65532,  65532,
+	},
+	[MCS_HT20_SGI] = {
+		3572,  7144,  10720,  14296,  21444,  28596,  32172,  35744,
+		7140,  14284, 21428,  28568,  42856,  57144,  64288,  65532,
+		10700, 21408, 32112,  42816,  64228,  65532,  65532,  65532,
+		14256, 28516, 42780,  57040,  65532,  65532,  65532,  65532,
 	},
 	[MCS_HT40] = {
-		6684,  13368, 20052, 26738, 40104, 53476,  60156,  66840,
-		13360, 26720, 40080, 53440, 80160, 106880, 120240, 133600,
+		6680,  13360,  20044,  26724,  40092,  53456,  60140,  65532,
+		13348, 26700,  40052,  53400,  65532,  65532,  65532,  65532,
+		20004, 40008,  60016,  65532,  65532,  65532,  65532,  65532,
+		26644, 53292,  65532,  65532,  65532,  65532,  65532,  65532,
 	},
 	[MCS_HT40_SGI] = {
-		/* TODO: Only MCS 7 and 15 updated, recalculate the rest */
-		6684,  13368, 20052, 26738, 40104, 53476,  60156,  74200,
-		13360, 26720, 40080, 53440, 80160, 106880, 120240, 148400,
+		7420,  14844,  22272,  29696,  44544,  59396,  65532,  65532,
+		14832, 29668,  44504,  59340,  65532,  65532,  65532,  65532,
+		22232, 44464,  65532,  65532,  65532,  65532,  65532,  65532,
+		29616, 59232,  65532,  65532,  65532,  65532,  65532,  65532,
 	}
 };
 
@@ -538,12 +550,13 @@ static u32 ath_lookup_rate(struct ath_softc *sc, struct ath_buf *bf,
 				break;
 			}
 
-			if (rates[i].flags & IEEE80211_TX_RC_SHORT_GI)
-				modeidx = MCS_HT40_SGI;
-			else if (rates[i].flags & IEEE80211_TX_RC_40_MHZ_WIDTH)
+			if (rates[i].flags & IEEE80211_TX_RC_40_MHZ_WIDTH)
 				modeidx = MCS_HT40;
 			else
-				modeidx = MCS_DEFAULT;
+				modeidx = MCS_HT20;
+
+			if (rates[i].flags & IEEE80211_TX_RC_SHORT_GI)
+				modeidx++;
 
 			frmlen = ath_max_4ms_framelen[modeidx][rates[i].idx];
 			max_4ms_framelen = min(max_4ms_framelen, frmlen);
-- 
1.6.4.2


^ permalink raw reply related


This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox