Linux wireless drivers development
 help / color / mirror / Atom feed
* WARNING at net/wireless/reg.c when wireless network is disconnected
From: Thomas Bächler @ 2010-08-04 11:36 UTC (permalink / raw)
  To: linux-wireless; +Cc: linux-kernel, Johannes Berg, Luis R. Rodriguez

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

Hello,

this warning has been around ever since I switched to 2.6.34, has
accompanied me through the 2.6.35-rc* phase and is still there with
2.6.35. I didn't bother to report it so far, as there seems to be no harm.

Whenever I disconnect/get disconnected from the wireless, I receive the
below warning:

------------[ cut here ]------------
WARNING: at net/wireless/reg.c:272
regulatory_hint_disconnect+0x1b3/0x230 [cfg80211]()
Hardware name: TECRA A11
Unexpected user alpha2: de
Modules linked in: hidp rfcomm sco bnep l2cap bridge stp llc microcode
cpufreq_ondemand tun btusb bluetooth uvcvideo videodev tpm_infineon
v4l2_compat_ioctl32 arc4 snd_seq_dummy snd_seq_oss ecb
snd_seq_midi_event snd_seq snd_seq_device snd_pcm_oss
snd_hda_codec_intelhdmi snd_mixer_oss snd_hda_codec_realtek
snd_hda_intel snd_hda_codec ath9k snd_hwdep kvm_intel ath9k_common kvm
snd_pcm ath9k_hw snd_timer snd tpm_tis ehci_hcd ath sdhci_pci
acpi_cpufreq sdhci soundcore mac80211 freq_table mmc_core tpm cfg80211
usbcore snd_page_alloc tpm_bios e1000e mperf led_class psmouse sr_mod
iTCO_wdt sg evdev toshiba_acpi toshiba_bluetooth cdrom battery ac
thermal processor rfkill nls_base rtc_cmos rtc_core rtc_lib fpu
aesni_intel cryptd aes_x86_64 aes_generic xts gf128mul dm_crypt dm_mod
sd_mod ahci libahci libata scsi_mod ext4 mbcache jbd2 crc16 i915
drm_kms_helper drm i2c_algo_bit cfbcopyarea video backlight output
cfbimgblt cfbfillrect intel_agp agpgart
Pid: 15, comm: events/0 Not tainted 2.6.35 #28
Call Trace:
 [<ffffffff8103e98b>] ? warn_slowpath_common+0x7b/0xc0
 [<ffffffffa0337760>] ? disconnect_work+0x0/0x30 [cfg80211]
 [<ffffffff8103ea85>] ? warn_slowpath_fmt+0x45/0x50
 [<ffffffffa0337760>] ? disconnect_work+0x0/0x30 [cfg80211]
 [<ffffffffa0325163>] ? regulatory_hint_disconnect+0x1b3/0x230 [cfg80211]
 [<ffffffffa0337760>] ? disconnect_work+0x0/0x30 [cfg80211]
 [<ffffffff81052df8>] ? worker_thread+0x158/0x230
 [<ffffffff810574d0>] ? autoremove_wake_function+0x0/0x30
 [<ffffffff81052ca0>] ? worker_thread+0x0/0x230
 [<ffffffff8105703e>] ? kthread+0x8e/0xa0
 [<ffffffff810032d4>] ? kernel_thread_helper+0x4/0x10
 [<ffffffff81056fb0>] ? kthread+0x0/0xa0
 [<ffffffff810032d0>] ? kernel_thread_helper+0x0/0x10
---[ end trace cbb09501d5faaa20 ]---


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

^ permalink raw reply

* Re: [PATCH v2 03/20] mmc: support embedded data field in mmc_host
From: Ohad Ben-Cohen @ 2010-08-04 11:24 UTC (permalink / raw)
  To: Vitaly Wool
  Cc: linux-wireless, linux-mmc, linux-omap, Kalle Valo, Pandita Vikram,
	linux, Nicolas Pitre, Tony Lindgren, Roger Quadros, San Mehat,
	Chikkature Rajashekar Madhusudhan, Luciano Coelho, akpm,
	linux-arm-kernel
In-Reply-To: <AANLkTin4m8gJR50zwMB2b0jRMHdNA6CQToKBTAhOL9wF@mail.gmail.com>

Hi Vitaly,

On Tue, Aug 3, 2010 at 5:17 PM, Vitaly Wool <vitalywool@gmail.com> wrote:
> On Mon, Aug 2, 2010 at 11:35 PM, Ohad Ben-Cohen <ohad@wizery.com> wrote:
>> I'm honestly trying to understand your concerns, but I'm afraid that
>> just saying "it's a hack" is not too informative. Can you please
>> explain what do you think is technically wrong with the proposed
>> solution ? is it not general enough for other use cases ? will it
>> break something ?

> So if I'd like to set the *same* structure for the *same* WL1271
> driver, provided that I'm working with the other platform, I'll need
> to do the following:
> - add the pointer to the board-specific header;
> - add the structure to the board-specific C file and propagate its
> pointer to the controller driver;
> - add setting the pointer in the core structure into the controller driver.
>
> This is far from being intuitive. This means we need to hack,
> generally speaking, all the MMC controller drivers to get it working
> on all platforms. This is error prone.

You make it sound really complex.

Let's see what it means to add it to a totally different platform.

As an example, let's take Google's ADP1 which is based on a different
host controller (msm-sdcc), and add the required support (untested of
course, just a quick sketch, patch is based on android's msm git):

diff --git a/arch/arm/mach-msm/board-trout-mmc.c b/arch/arm/mach-msm/board-trout
index 13755f5..df32b2f 100644
--- a/arch/arm/mach-msm/board-trout-mmc.c
+++ b/arch/arm/mach-msm/board-trout-mmc.c
@@ -10,6 +10,7 @@
 #include <linux/mmc/sdio_ids.h>
 #include <linux/err.h>
 #include <linux/debugfs.h>
+#include <linux/wl12xx.h>

 #include <asm/gpio.h>
 #include <asm/io.h>
@@ -297,11 +298,16 @@ int trout_wifi_reset(int on)
 EXPORT_SYMBOL(trout_wifi_reset);
 #endif

+struct wl12xx_platform_data trout_wlan_data = {
+       .irq = 62, /* put here your irq number */
+       .board_ref_clock = 1, /* put here your ref clock */
+};
+
 static struct mmc_platform_data trout_wifi_data = {
        .ocr_mask               = MMC_VDD_28_29,
        .status                 = trout_wifi_status,
        .register_status_notify = trout_wifi_status_register,
-       .embedded_sdio          = &trout_wifi_emb_data,
+       .embedded_sdio          = &trout_wlan_data,
 };

 int __init trout_init_mmc(unsigned int sys_rev)
diff --git a/drivers/mmc/host/msm_sdcc.c b/drivers/mmc/host/msm_sdcc.c
index 1697d42..c40f0d1 100755
--- a/drivers/mmc/host/msm_sdcc.c
+++ b/drivers/mmc/host/msm_sdcc.c
@@ -1261,6 +1261,7 @@ msmsdcc_probe(struct platform_device *pdev)
        mmc->f_min = msmsdcc_fmin;
        mmc->f_max = msmsdcc_fmax;
        mmc->ocr_avail = plat->ocr_mask;
+        mmc_set_embedded_data(mmc, plat->embedded_sdio);

        if (msmsdcc_4bit)
                mmc->caps |= MMC_CAP_4_BIT_DATA;




Is it really that complex ?

Thanks,
Ohad.

^ permalink raw reply related

* [PATCH] ath9k_htc: Update firmware
From: Sujith @ 2010-08-04 10:19 UTC (permalink / raw)
  To: David.Woodhouse; +Cc: linux-wireless, Rajkumar.Manoharan
In-Reply-To: <19538.29003.558266.597779@gargle.gargle.HOWL>

David,

Can you drop this patch ?
An issue is yet to be fixed, a revised firmware
update would be sent later.

Sorry for the inconvenience.

thanks,
Sujith

Sujith wrote:
> Fix incorrect handling of USB_PORT_FEAT_ENABLE.
> 
> Signed-off-by: Sujith <Sujith.Manoharan@atheros.com>
> ---
>  ar9271.fw |  Bin 51280 -> 51312 bytes
>  1 files changed, 0 insertions(+), 0 deletions(-)
> 
> diff --git a/ar9271.fw b/ar9271.fw
> index 0ec953b404c1912dc64fa3b0171cffae82b0f375..f4bcabd925d7e7b2597a9e6ead243d74be44b1c0 100644
> GIT binary patch
> delta 10073
> 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
> 
> delta 9256
> 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
> aGSy5Z0x_ay1)*p;`RQkT?!WOD*Zm(IJoy*^
> 
> -- 
> 1.7.2.1
> 
> 

^ permalink raw reply

* [PATCH] ath9k_htc: Fix Bulk endpoint issue
From: Sujith @ 2010-08-04 10:18 UTC (permalink / raw)
  To: linville; +Cc: linux-wireless, Rajkumar.Manoharan
In-Reply-To: <19538.28927.259256.23273@gargle.gargle.HOWL>

John,

Can you drop this patch ?
There is an issue which hasn't been fixed yet.
The patch would be resent after more testing.

thanks,
Sujith

Sujith wrote:
> AR9271 devices use four endpoints, of which EP3 and EP4
> are used for register read/write. Currently they are misconfigured
> as Interrupt endpoints. On downloading the firmware to the
> target, the USB descriptors are 'patched' to change the type
> of the endpoints to Bulk. To re-read the descriptors, the target
> has to be reset, triggering a re-enumeration, and the descriptors
> are identified properly.
> 
> A firmware fix is also needed here, to handle an invalid way
> of handling USB_PORT_FEAT_ENABLE, which is cleared as part of
> the reset.
> 
> Also, the target has to be rebooted in the suspend() routine.
> This is needed because, earlier the target was powered down in
> the USB_PORT_FEAT_ENABLE handler routine. Since this is no longer
> the case now, an explicit reboot is required.
> 
> With this fix, the CPU usage during a scan run comes down to
> acceptable levels. The time taken to complete a scan run is also
> reasonably fast, since register reads/writes go over Bulk endpoints.
> 
> Both AR7010 and AR9271 have this issue, but this patch addresses only
> the AR9271 family. Once the FW has been updated for AR7010, the host
> driver can be updated.
> 
> Signed-off-by: Sujith <Sujith.Manoharan@atheros.com>
> ---
>  drivers/net/wireless/ath/ath9k/hif_usb.c |  111 +++++++++++++++++++++++------
>  drivers/net/wireless/ath/ath9k/hif_usb.h |    1 +
>  2 files changed, 89 insertions(+), 23 deletions(-)
> 
> diff --git a/drivers/net/wireless/ath/ath9k/hif_usb.c b/drivers/net/wireless/ath/ath9k/hif_usb.c
> index 61c1bee..6efc46f 100644
> --- a/drivers/net/wireless/ath/ath9k/hif_usb.c
> +++ b/drivers/net/wireless/ath/ath9k/hif_usb.c
> @@ -92,10 +92,19 @@ static int hif_usb_send_regout(struct hif_device_usb *hif_dev,
>  	cmd->skb = skb;
>  	cmd->hif_dev = hif_dev;
>  
> -	usb_fill_int_urb(urb, hif_dev->udev,
> -			 usb_sndintpipe(hif_dev->udev, USB_REG_OUT_PIPE),
> -			 skb->data, skb->len,
> -			 hif_usb_regout_cb, cmd, 1);
> +	if (hif_dev->flags & HIF_USB_AR9271) {
> +		usb_fill_bulk_urb(urb, hif_dev->udev,
> +				  usb_sndbulkpipe(hif_dev->udev,
> +						  USB_REG_OUT_PIPE),
> +				  skb->data, skb->len,
> +				  hif_usb_regout_cb, cmd);
> +	} else {
> +		usb_fill_int_urb(urb, hif_dev->udev,
> +				 usb_sndintpipe(hif_dev->udev,
> +						USB_REG_OUT_PIPE),
> +				 skb->data, skb->len,
> +				 hif_usb_regout_cb, cmd, 1);
> +	}
>  
>  	usb_anchor_urb(urb, &hif_dev->regout_submitted);
>  	ret = usb_submit_urb(urb, GFP_KERNEL);
> @@ -540,10 +549,19 @@ static void ath9k_hif_usb_reg_in_cb(struct urb *urb)
>  			return;
>  		}
>  
> -		usb_fill_int_urb(urb, hif_dev->udev,
> -				 usb_rcvintpipe(hif_dev->udev, USB_REG_IN_PIPE),
> -				 nskb->data, MAX_REG_IN_BUF_SIZE,
> -				 ath9k_hif_usb_reg_in_cb, nskb, 1);
> +		if (hif_dev->flags & HIF_USB_AR9271) {
> +			usb_fill_bulk_urb(urb, hif_dev->udev,
> +					  usb_rcvbulkpipe(hif_dev->udev,
> +							  USB_REG_IN_PIPE),
> +					  nskb->data, MAX_REG_IN_BUF_SIZE,
> +					  ath9k_hif_usb_reg_in_cb, nskb);
> +		} else {
> +			usb_fill_int_urb(urb, hif_dev->udev,
> +					 usb_rcvintpipe(hif_dev->udev,
> +							USB_REG_IN_PIPE),
> +					 nskb->data, MAX_REG_IN_BUF_SIZE,
> +					 ath9k_hif_usb_reg_in_cb, nskb, 1);
> +		}
>  
>  		ret = usb_submit_urb(urb, GFP_ATOMIC);
>  		if (ret) {
> @@ -719,10 +737,17 @@ static int ath9k_hif_usb_alloc_reg_in_urb(struct hif_device_usb *hif_dev)
>  	if (!skb)
>  		goto err;
>  
> -	usb_fill_int_urb(hif_dev->reg_in_urb, hif_dev->udev,
> -			 usb_rcvintpipe(hif_dev->udev, USB_REG_IN_PIPE),
> -			 skb->data, MAX_REG_IN_BUF_SIZE,
> -			 ath9k_hif_usb_reg_in_cb, skb, 1);
> +	if (hif_dev->flags & HIF_USB_AR9271) {
> +		usb_fill_bulk_urb(hif_dev->reg_in_urb, hif_dev->udev,
> +				  usb_rcvbulkpipe(hif_dev->udev, USB_REG_IN_PIPE),
> +				  skb->data, MAX_REG_IN_BUF_SIZE,
> +				  ath9k_hif_usb_reg_in_cb, skb);
> +	} else {
> +		usb_fill_int_urb(hif_dev->reg_in_urb, hif_dev->udev,
> +				 usb_rcvintpipe(hif_dev->udev, USB_REG_IN_PIPE),
> +				 skb->data, MAX_REG_IN_BUF_SIZE,
> +				 ath9k_hif_usb_reg_in_cb, skb, 1);
> +	}
>  
>  	if (usb_submit_urb(hif_dev->reg_in_urb, GFP_KERNEL) != 0)
>  		goto err;
> @@ -822,7 +847,9 @@ static int ath9k_hif_usb_download_fw(struct hif_device_usb *hif_dev)
>  
>  static int ath9k_hif_usb_dev_init(struct hif_device_usb *hif_dev)
>  {
> -	int ret;
> +	struct usb_host_interface *iface_desc;
> +	struct usb_endpoint_descriptor *endpoint;
> +	int i, ret;
>  
>  	/* Request firmware */
>  	ret = request_firmware(&hif_dev->firmware, hif_dev->fw_name,
> @@ -833,14 +860,6 @@ static int ath9k_hif_usb_dev_init(struct hif_device_usb *hif_dev)
>  		goto err_fw_req;
>  	}
>  
> -	/* Alloc URBs */
> -	ret = ath9k_hif_usb_alloc_urbs(hif_dev);
> -	if (ret) {
> -		dev_err(&hif_dev->udev->dev,
> -			"ath9k_htc: Unable to allocate URBs\n");
> -		goto err_urb;
> -	}
> -
>  	/* Download firmware */
>  	ret = ath9k_hif_usb_download_fw(hif_dev);
>  	if (ret) {
> @@ -850,11 +869,46 @@ static int ath9k_hif_usb_dev_init(struct hif_device_usb *hif_dev)
>  		goto err_fw_download;
>  	}
>  
> +	/*
> +	 * If any of the endpoints have been configured as Interrupt,
> +	 * reset the device to trigger re-enumeration.
> +	 *
> +	 * Re-enumeration changes the endpoints from Interrupt to Bulk,
> +	 * since the firmware 'patches' the USB descriptors.
> +	 *
> +	 * For now, do this only for AR9271. AR7010 based devices
> +	 * also need this hack, but until the corresponding FW is fixed,
> +	 * keep using EP3 and EP4 as Interrupt endpoints for AR7010.
> +	 */
> +
> +	if (hif_dev->flags & HIF_USB_AR9271) {
> +		iface_desc = hif_dev->interface->cur_altsetting;
> +
> +		for (i = 0; i < iface_desc->desc.bNumEndpoints; ++i) {
> +			endpoint = &iface_desc->endpoint[i].desc;
> +
> +			if (usb_endpoint_is_int_in(endpoint) ||
> +			    usb_endpoint_is_int_out(endpoint)) {
> +				ret = usb_reset_device(hif_dev->udev);
> +				if (ret)
> +					return ret;
> +			}
> +		}
> +	}
> +
> +	/* Alloc URBs */
> +	ret = ath9k_hif_usb_alloc_urbs(hif_dev);
> +	if (ret) {
> +		dev_err(&hif_dev->udev->dev,
> +			"ath9k_htc: Unable to allocate URBs\n");
> +		goto err_urb;
> +	}
> +
>  	return 0;
>  
> -err_fw_download:
> -	ath9k_hif_usb_dealloc_urbs(hif_dev);
>  err_urb:
> +	ath9k_hif_usb_dealloc_urbs(hif_dev);
> +err_fw_download:
>  	release_firmware(hif_dev->firmware);
>  err_fw_req:
>  	hif_dev->firmware = NULL;
> @@ -909,6 +963,7 @@ static int ath9k_hif_usb_probe(struct usb_interface *interface,
>  		break;
>  	default:
>  		hif_dev->fw_name = FIRMWARE_AR9271;
> +		hif_dev->flags |= HIF_USB_AR9271;
>  		break;
>  	}
>  
> @@ -995,6 +1050,16 @@ static int ath9k_hif_usb_suspend(struct usb_interface *interface,
>  
>  	ath9k_hif_usb_dealloc_urbs(hif_dev);
>  
> +	/*
> +	 * Issue a reboot to the target, since it
> +	 * has be powered down.
> +	 *
> +	 * The 0xffffff command is a special case that
> +	 * is handled in the firmware.
> +	 */
> +	if (hif_dev->flags & HIF_USB_AR9271)
> +		ath9k_hif_usb_reboot(hif_dev->udev);
> +
>  	return 0;
>  }
>  
> diff --git a/drivers/net/wireless/ath/ath9k/hif_usb.h b/drivers/net/wireless/ath/ath9k/hif_usb.h
> index 2daf97b..ced63cb 100644
> --- a/drivers/net/wireless/ath/ath9k/hif_usb.h
> +++ b/drivers/net/wireless/ath/ath9k/hif_usb.h
> @@ -62,6 +62,7 @@ struct tx_buf {
>  };
>  
>  #define HIF_USB_TX_STOP  BIT(0)
> +#define HIF_USB_AR9271   BIT(1)
>  
>  struct hif_usb_tx {
>  	u8 flags;
> -- 
> 1.7.2.1
> 
> 

^ permalink raw reply

* Re: iwlwifi connection problems
From: Johannes Berg @ 2010-08-04  7:52 UTC (permalink / raw)
  To: Alex Romosan; +Cc: Guy, Wey-Yi, linux-wireless@vger.kernel.org
In-Reply-To: <87mxt3n9xh.fsf@sycorax.lbl.gov>

On Tue, 2010-08-03 at 05:43 -0700, Alex Romosan wrote:
> Johannes Berg <johannes@sipsolutions.net> writes:
> 
> > Yes, thank you, but it's very strange. But it's probably ok, let's
> > remove the call then, it wasn't there before. Want to post a patch
> > yourself?
> 
> btw, the old code had this comment
> 
>  /* We avoid iwl_commit_rxon here to commit the new filter flags
>   * since mac80211 will call ieee80211_hw_config immediately.
>   * (mc_list is not supported at this time). Otherwise, we need to
>   * queue a background iwl_commit_rxon work.
>   */

Yes, but that predates this callback being able to sleep, which
according to the comment is the reason for not committing here. Now that
the callback could sleep, I figured we could safely commit there, I have
no idea why that caused issues with your AP.

I realised though that mac80211 will sometimes call the filter config
w/o calling hw_config() immediately, so I'd prefer actually figuring out
what the issue with your AP is. Could you rebuild your kernel with
CONFIG_MAC80211_DRIVER_API_TRACER and CONFIG_IWLWIFI_DEVICE_TRACING, get
trace-cmd from
git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/trace-cmd.git and
record traces for me? I'd like to have
	trace-cmd record -e iwlwifi -e mac80211
for both the working and non-working case, preferably the same kernel
with that single line of code changed. Please compress the output.

johannes


^ permalink raw reply

* Re: [wt PATCH 0/5] libertas: make association work again
From: Johannes Berg @ 2010-08-04  7:46 UTC (permalink / raw)
  To: Dan Williams; +Cc: John W. Linville, linux-wireless
In-Reply-To: <1280900467.2665.6.camel@dcbw.foobar.com>

On Wed, 2010-08-04 at 00:41 -0500, Dan Williams wrote:
> On Fri, 2010-07-30 at 08:35 +0200, Johannes Berg wrote:
> > On Thu, 2010-07-29 at 23:07 -0700, Dan Williams wrote:
> > > This series makes libertas actually associate with APs after the
> > > cfg80211 conversion.  There was a pretty big TODO where if cfg80211
> > > didn't pass in the BSSID of the AP to associate with, then libertas
> > > would fail because the firmware really, really, really wants a BSSID.
> > > So lets do a scan to find that BSSID.  The other notable change is
> > > a fix to make sure all supported rates are included in the firmware's
> > > association request, lack of which caused some APs to deny the attempt.
> > 
> > I'm a bit tempted to say we could use the connect logic in cfg80211 to
> > provide this? cfg80211 _already_ provides this if the hardware wants
> > auth()/assoc() rather than connect() calls, so it seems fairly simple to
> > also (optionally) do it here?
> 
> Yeah, I thought about that too.  Do you want me to work on that now
> instead of letting this patch through?  I can revert the relevant bits
> of this later if that's acceptable too.

Either way works for me since I don't care about any cruft in
libertas ;)

johannes


^ permalink raw reply

* Re: [PATCH 06/11] rt2x00: do not use PCI resources before pci_enable_device()
From: Ivo Van Doorn @ 2010-08-04  6:59 UTC (permalink / raw)
  To: Kulikov Vasiliy
  Cc: kernel-janitors, John W. Linville, Helmut Schaa, Alban Browaeys,
	linux-wireless, users, netdev, linux-kernel, Gertjan van Wingerde
In-Reply-To: <AANLkTinzvwP74oNaS+mWRnostnGrZZ-iY2SsjMzo=CW4@mail.gmail.com>

On Tue, Aug 3, 2010 at 6:14 PM, Gertjan van Wingerde
<gwingerde@gmail.com> wrote:
> On Tue, Aug 3, 2010 at 5:43 PM, Kulikov Vasiliy <segooon@gmail.com> wrote:
>> IRQ and resource[] may not have correct values until
>> after PCI hotplug setup occurs at pci_enable_device() time.
>>
>> The semantic match that finds this problem is as follows:
>>
>> // <smpl>
>> @@
>> identifier x;
>> identifier request ~= "pci_request.*|pci_resource.*";
>> @@
>>
>> (
>> * x->irq
>> |
>> * x->resource
>> |
>> * request(x, ...)
>> )
>>  ...
>> *pci_enable_device(x)
>> // </smpl>
>>
>> Signed-off-by: Kulikov Vasiliy <segooon@gmail.com>
>
> Good catch.
>
> Acked-by: Gertjan van Wingerde <gwingerde@gmail.com>

Acked-by: Ivo van Doorn <IvDoorn@gmail.com>

>> ---
>>  drivers/net/wireless/rt2x00/rt2x00pci.c |   21 ++++++++++-----------
>>  1 files changed, 10 insertions(+), 11 deletions(-)
>>
>> diff --git a/drivers/net/wireless/rt2x00/rt2x00pci.c b/drivers/net/wireless/rt2x00/rt2x00pci.c
>> index 19b262e..63c2cc4 100644
>> --- a/drivers/net/wireless/rt2x00/rt2x00pci.c
>> +++ b/drivers/net/wireless/rt2x00/rt2x00pci.c
>> @@ -240,16 +240,16 @@ int rt2x00pci_probe(struct pci_dev *pci_dev, const struct pci_device_id *id)
>>        struct rt2x00_dev *rt2x00dev;
>>        int retval;
>>
>> -       retval = pci_request_regions(pci_dev, pci_name(pci_dev));
>> +       retval = pci_enable_device(pci_dev);
>>        if (retval) {
>> -               ERROR_PROBE("PCI request regions failed.\n");
>> +               ERROR_PROBE("Enable device failed.\n");
>>                return retval;
>>        }
>>
>> -       retval = pci_enable_device(pci_dev);
>> +       retval = pci_request_regions(pci_dev, pci_name(pci_dev));
>>        if (retval) {
>> -               ERROR_PROBE("Enable device failed.\n");
>> -               goto exit_release_regions;
>> +               ERROR_PROBE("PCI request regions failed.\n");
>> +               goto exit_disable_device;
>>        }
>>
>>        pci_set_master(pci_dev);
>> @@ -260,14 +260,14 @@ int rt2x00pci_probe(struct pci_dev *pci_dev, const struct pci_device_id *id)
>>        if (dma_set_mask(&pci_dev->dev, DMA_BIT_MASK(32))) {
>>                ERROR_PROBE("PCI DMA not supported.\n");
>>                retval = -EIO;
>> -               goto exit_disable_device;
>> +               goto exit_release_regions;
>>        }
>>
>>        hw = ieee80211_alloc_hw(sizeof(struct rt2x00_dev), ops->hw);
>>        if (!hw) {
>>                ERROR_PROBE("Failed to allocate hardware.\n");
>>                retval = -ENOMEM;
>> -               goto exit_disable_device;
>> +               goto exit_release_regions;
>>        }
>>
>>        pci_set_drvdata(pci_dev, hw);
>> @@ -300,13 +300,12 @@ exit_free_reg:
>>  exit_free_device:
>>        ieee80211_free_hw(hw);
>>
>> -exit_disable_device:
>> -       if (retval != -EBUSY)
>> -               pci_disable_device(pci_dev);
>> -
>>  exit_release_regions:
>>        pci_release_regions(pci_dev);
>>
>> +exit_disable_device:
>> +       pci_disable_device(pci_dev);
>> +
>>        pci_set_drvdata(pci_dev, NULL);
>>
>>        return retval;
>> --
>> 1.7.0.4
>>
>>
>

^ permalink raw reply

* [wt PATCH 5/5 v2] libertas: scan before assocation if no BSSID was given
From: Dan Williams @ 2010-08-04  5:43 UTC (permalink / raw)
  To: John W. Linville; +Cc: linux-wireless
In-Reply-To: <1280470711.14523.16.camel@dcbw.foobar.com>

Fix this leftover TODO from the cfg80211 conversion by doing a scan
if cfg80211 didn't pass in the BSSID for us.  Since the scan code
uses so much of the cfg80211_scan_request structure to build up the
firmware command, we just fake one when the scan request is triggered
internally.  But we need to make sure that internal 'fake' cfg82011
scan request does not get back to cfg82011 via cfg80211_scan_done().

Signed-off-by: Dan Williams <dcbw@redhat.com>
---
 drivers/net/wireless/libertas/cfg.c  |  148 ++++++++++++++++++++++++++--------
 drivers/net/wireless/libertas/dev.h  |    5 +
 drivers/net/wireless/libertas/main.c |    1 +
 3 files changed, 121 insertions(+), 33 deletions(-)

v2: fixed commit message

diff --git a/drivers/net/wireless/libertas/cfg.c b/drivers/net/wireless/libertas/cfg.c
index a8c0126..623b81e 100644
--- a/drivers/net/wireless/libertas/cfg.c
+++ b/drivers/net/wireless/libertas/cfg.c
@@ -715,8 +715,13 @@ static void lbs_scan_worker(struct work_struct *work)
 
 	if (priv->scan_channel >= priv->scan_req->n_channels) {
 		/* Mark scan done */
-		cfg80211_scan_done(priv->scan_req, false);
+		if (priv->internal_scan)
+			kfree(priv->scan_req);
+		else
+			cfg80211_scan_done(priv->scan_req, false);
+
 		priv->scan_req = NULL;
+		priv->last_scan = jiffies;
 	}
 
 	/* Restart network */
@@ -727,10 +732,33 @@ static void lbs_scan_worker(struct work_struct *work)
 
 	kfree(scan_cmd);
 
+	/* Wake up anything waiting on scan completion */
+	if (priv->scan_req == NULL) {
+		lbs_deb_scan("scan: waking up waiters\n");
+		wake_up_all(&priv->scan_q);
+	}
+
  out_no_scan_cmd:
 	lbs_deb_leave(LBS_DEB_SCAN);
 }
 
+static void _internal_start_scan(struct lbs_private *priv, bool internal,
+	struct cfg80211_scan_request *request)
+{
+	lbs_deb_enter(LBS_DEB_CFG80211);
+
+	lbs_deb_scan("scan: ssids %d, channels %d, ie_len %zd\n",
+		request->n_ssids, request->n_channels, request->ie_len);
+
+	priv->scan_channel = 0;
+	queue_delayed_work(priv->work_thread, &priv->scan_work,
+		msecs_to_jiffies(50));
+
+	priv->scan_req = request;
+	priv->internal_scan = internal;
+
+	lbs_deb_leave(LBS_DEB_CFG80211);
+}
 
 static int lbs_cfg_scan(struct wiphy *wiphy,
 	struct net_device *dev,
@@ -747,18 +775,11 @@ static int lbs_cfg_scan(struct wiphy *wiphy,
 		goto out;
 	}
 
-	lbs_deb_scan("scan: ssids %d, channels %d, ie_len %zd\n",
-		request->n_ssids, request->n_channels, request->ie_len);
-
-	priv->scan_channel = 0;
-	queue_delayed_work(priv->work_thread, &priv->scan_work,
-		msecs_to_jiffies(50));
+	_internal_start_scan(priv, false, request);
 
 	if (priv->surpriseremoved)
 		ret = -EIO;
 
-	priv->scan_req = request;
-
  out:
 	lbs_deb_leave_args(LBS_DEB_CFG80211, "ret %d", ret);
 	return ret;
@@ -1193,7 +1214,62 @@ done:
 	return ret;
 }
 
+static struct cfg80211_scan_request *
+_new_connect_scan_req(struct wiphy *wiphy, struct cfg80211_connect_params *sme)
+{
+	struct cfg80211_scan_request *creq = NULL;
+	int i, n_channels = 0;
+	enum ieee80211_band band;
+
+	for (band = 0; band < IEEE80211_NUM_BANDS; band++) {
+		if (wiphy->bands[band])
+			n_channels += wiphy->bands[band]->n_channels;
+	}
+
+	creq = kzalloc(sizeof(*creq) + sizeof(struct cfg80211_ssid) +
+		       n_channels * sizeof(void *),
+		       GFP_ATOMIC);
+	if (!creq)
+		return NULL;
+
+	/* SSIDs come after channels */
+	creq->ssids = (void *)&creq->channels[n_channels];
+	creq->n_channels = n_channels;
+	creq->n_ssids = 1;
+
+	/* Scan all available channels */
+	i = 0;
+	for (band = 0; band < IEEE80211_NUM_BANDS; band++) {
+		int j;
+
+		if (!wiphy->bands[band])
+			continue;
+
+		for (j = 0; j < wiphy->bands[band]->n_channels; j++) {
+			/* ignore disabled channels */
+			if (wiphy->bands[band]->channels[j].flags &
+						IEEE80211_CHAN_DISABLED)
+				continue;
+
+			creq->channels[i] = &wiphy->bands[band]->channels[j];
+			i++;
+		}
+	}
+	if (i) {
+		/* Set real number of channels specified in creq->channels[] */
+		creq->n_channels = i;
+
+		/* Scan for the SSID we're going to connect to */
+		memcpy(creq->ssids[0].ssid, sme->ssid, sme->ssid_len);
+		creq->ssids[0].ssid_len = sme->ssid_len;
+	} else {
+		/* No channels found... */
+		kfree(creq);
+		creq = NULL;
+	}
 
+	return creq;
+}
 
 static int lbs_cfg_connect(struct wiphy *wiphy, struct net_device *dev,
 			   struct cfg80211_connect_params *sme)
@@ -1205,37 +1281,43 @@ static int lbs_cfg_connect(struct wiphy *wiphy, struct net_device *dev,
 
 	lbs_deb_enter(LBS_DEB_CFG80211);
 
-	if (sme->bssid) {
-		bss = cfg80211_get_bss(wiphy, sme->channel, sme->bssid,
-			sme->ssid, sme->ssid_len,
-			WLAN_CAPABILITY_ESS, WLAN_CAPABILITY_ESS);
-	} else {
-		/*
-		 * Here we have an impedance mismatch. The firmware command
-		 * CMD_802_11_ASSOCIATE always needs a BSSID, it cannot
-		 * connect otherwise. However, for the connect-API of
-		 * cfg80211 the bssid is purely optional. We don't get one,
-		 * except the user specifies one on the "iw" command line.
-		 *
-		 * If we don't got one, we could initiate a scan and look
-		 * for the best matching cfg80211_bss entry.
-		 *
-		 * Or, better yet, net/wireless/sme.c get's rewritten into
-		 * something more generally useful.
+	if (!sme->bssid) {
+		/* Run a scan if one isn't in-progress already and if the last
+		 * scan was done more than 2 seconds ago.
 		 */
-		lbs_pr_err("TODO: no BSS specified\n");
-		ret = -ENOTSUPP;
-		goto done;
-	}
+		if (priv->scan_req == NULL &&
+		    time_after(jiffies, priv->last_scan + (2 * HZ))) {
+			struct cfg80211_scan_request *creq;
 
+			creq = _new_connect_scan_req(wiphy, sme);
+			if (!creq) {
+				ret = -EINVAL;
+				goto done;
+			}
+
+			lbs_deb_assoc("assoc: scanning for compatible AP\n");
+			_internal_start_scan(priv, true, creq);
+		}
+
+		/* Wait for any in-progress scan to complete */
+		lbs_deb_assoc("assoc: waiting for scan to complete\n");
+		wait_event_interruptible_timeout(priv->scan_q,
+						 (priv->scan_req == NULL),
+						 (15 * HZ));
+		lbs_deb_assoc("assoc: scanning competed\n");
+	}
 
+	/* Find the BSS we want using available scan results */
+	bss = cfg80211_get_bss(wiphy, sme->channel, sme->bssid,
+		sme->ssid, sme->ssid_len,
+		WLAN_CAPABILITY_ESS, WLAN_CAPABILITY_ESS);
 	if (!bss) {
-		lbs_pr_err("assicate: bss %pM not in scan results\n",
+		lbs_pr_err("assoc: bss %pM not in scan results\n",
 			   sme->bssid);
 		ret = -ENOENT;
 		goto done;
 	}
-	lbs_deb_assoc("trying %pM", sme->bssid);
+	lbs_deb_assoc("trying %pM\n", bss->bssid);
 	lbs_deb_assoc("cipher 0x%x, key index %d, key len %d\n",
 		      sme->crypto.cipher_group,
 		      sme->key_idx, sme->key_len);
@@ -1298,7 +1380,7 @@ static int lbs_cfg_connect(struct wiphy *wiphy, struct net_device *dev,
 	lbs_set_radio(priv, preamble, 1);
 
 	/* Do the actual association */
-	lbs_associate(priv, bss, sme);
+	ret = lbs_associate(priv, bss, sme);
 
  done:
 	if (bss)
diff --git a/drivers/net/wireless/libertas/dev.h b/drivers/net/wireless/libertas/dev.h
index 3c7e255..f062ed5 100644
--- a/drivers/net/wireless/libertas/dev.h
+++ b/drivers/net/wireless/libertas/dev.h
@@ -161,6 +161,11 @@ struct lbs_private {
 	/** Scanning */
 	struct delayed_work scan_work;
 	int scan_channel;
+	/* Queue of things waiting for scan completion */
+	wait_queue_head_t scan_q;
+	/* Whether the scan was initiated internally and not by cfg80211 */
+	bool internal_scan;
+	unsigned long last_scan;
 };
 
 extern struct cmd_confirm_sleep confirm_sleep;
diff --git a/drivers/net/wireless/libertas/main.c b/drivers/net/wireless/libertas/main.c
index 2589671..24958a8 100644
--- a/drivers/net/wireless/libertas/main.c
+++ b/drivers/net/wireless/libertas/main.c
@@ -719,6 +719,7 @@ static int lbs_init_adapter(struct lbs_private *priv)
 	priv->deep_sleep_required = 0;
 	priv->wakeup_dev_required = 0;
 	init_waitqueue_head(&priv->ds_awake_q);
+	init_waitqueue_head(&priv->scan_q);
 	priv->authtype_auto = 1;
 	priv->is_host_sleep_configured = 0;
 	priv->is_host_sleep_activated = 0;
-- 
1.7.2



^ permalink raw reply related

* Re: [wt PATCH 0/5] libertas: make association work again
From: Dan Williams @ 2010-08-04  5:41 UTC (permalink / raw)
  To: Johannes Berg; +Cc: John W. Linville, linux-wireless
In-Reply-To: <1280471706.3710.5.camel@jlt3.sipsolutions.net>

On Fri, 2010-07-30 at 08:35 +0200, Johannes Berg wrote:
> On Thu, 2010-07-29 at 23:07 -0700, Dan Williams wrote:
> > This series makes libertas actually associate with APs after the
> > cfg80211 conversion.  There was a pretty big TODO where if cfg80211
> > didn't pass in the BSSID of the AP to associate with, then libertas
> > would fail because the firmware really, really, really wants a BSSID.
> > So lets do a scan to find that BSSID.  The other notable change is
> > a fix to make sure all supported rates are included in the firmware's
> > association request, lack of which caused some APs to deny the attempt.
> 
> I'm a bit tempted to say we could use the connect logic in cfg80211 to
> provide this? cfg80211 _already_ provides this if the hardware wants
> auth()/assoc() rather than connect() calls, so it seems fairly simple to
> also (optionally) do it here?

Yeah, I thought about that too.  Do you want me to work on that now
instead of letting this patch through?  I can revert the relevant bits
of this later if that's acceptable too.

Dan



^ permalink raw reply

* Re: virtual access point setup
From: Ryszard @ 2010-08-03 20:05 UTC (permalink / raw)
  To: Ben Greear; +Cc: Florian Fainelli, Patrick McHardy, linux-wireless
In-Reply-To: <4C58316C.2050009@candelatech.com>

ah, good tip, thx!

On 4 August 2010 01:10, Ben Greear <greearb@candelatech.com> wrote:
>
> On 08/02/2010 10:46 PM, Ryszard wrote:
>>
>> hey ben,  any idea on which config would be best for an AMD geode proc?
>> i'm thinking either the c3 or p4 compat configs ..
>
> You could start with either, and then change the CPU type as needed.
>
> You only need the -compat version if you are running on older user-space
> OS's..so you might try w/out compat first.
>
> Thanks,
> Ben
>
> --
> Ben Greear <greearb@candelatech.com>
> Candela Technologies Inc  http://www.candelatech.com

^ permalink raw reply

* Compat-wireless release for 2010-08-03 is baked
From: Compat-wireless cronjob account @ 2010-08-03 19:03 UTC (permalink / raw)
  To: linux-wireless

>From git://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next
   523343a..e67e41a  history    -> origin/history
 + 539c54f...a74255d master     -> origin/master  (forced update)
 * [new tag]         next-20100803 -> next-20100803
cat: /var/opt/compat/compat-wireless-2.6/compat_version: No such file or directory
cat: compat_base_tree: No such file or directory
cat: compat_base_tree_version: No such file or directory
cat: compat_version: No such file or directory
cat: /var/opt/compat/compat-wireless-2.6/compat_version: No such file or directory
scripts/Makefile.clean:17: /var/opt/compat/compat-wireless-2.6/drivers/net/wireless/hostap/Makefile: No such file or directory
make[4]: *** No rule to make target `/var/opt/compat/compat-wireless-2.6/drivers/net/wireless/hostap/Makefile'.  Stop.
make[3]: *** [/var/opt/compat/compat-wireless-2.6/drivers/net/wireless/hostap] Error 2
make[2]: *** [/var/opt/compat/compat-wireless-2.6/drivers/net/wireless] Error 2
make[1]: *** [_clean_/var/opt/compat/compat-wireless-2.6] Error 2
make: *** [clean] Error 2

compat-wireless code metrics

    494063 - Total upstream lines of code being pulled

^ permalink raw reply

* Re: Compat-wireless release for 2010-07-31 is baked
From: Luis R. Rodriguez @ 2010-08-03 16:52 UTC (permalink / raw)
  To: Pavel Roskin; +Cc: linux-wireless
In-Reply-To: <1280853967.26054.2.camel@mj>

On Tue, Aug 3, 2010 at 9:46 AM, Pavel Roskin <proski@gnu.org> wrote:
> On Sat, 2010-07-31 at 15:02 -0400, Compat-wireless cronjob account
> wrote:
>> compat-wireless code metrics
> ...
>> Base tree: linux-next.git
>> Base tree version: next-20100730
>> compat-wireless release: compat-wireless-2010-07-13-4-g04898a5
>
> Can we have the version based on 2.6.35 please?  Even if it's the same
> as 2.6.35-rc6, the release based compat-wireless would be more readily
> adopted.
>
> Linux 2.6.35 adds ath9k_htc among other things.  Ubuntu 10.04 provides
> compat-wireless based on 2.6.34 now.  Ububtu users keep asking about
> ath9k_htc.  Let's make them happy :)
>

Sure thing, I'll work on that today.

  LUis

^ permalink raw reply

* Re: Compat-wireless release for 2010-07-31 is baked
From: Pavel Roskin @ 2010-08-03 16:46 UTC (permalink / raw)
  To: linux-wireless
In-Reply-To: <20100731190245.76295404FA@repository3.orbit-lab.org>

On Sat, 2010-07-31 at 15:02 -0400, Compat-wireless cronjob account
wrote:
> compat-wireless code metrics
...
> Base tree: linux-next.git
> Base tree version: next-20100730
> compat-wireless release: compat-wireless-2010-07-13-4-g04898a5

Can we have the version based on 2.6.35 please?  Even if it's the same
as 2.6.35-rc6, the release based compat-wireless would be more readily
adopted.

Linux 2.6.35 adds ath9k_htc among other things.  Ubuntu 10.04 provides
compat-wireless based on 2.6.34 now.  Ububtu users keep asking about
ath9k_htc.  Let's make them happy :)

-- 
Regards,
Pavel Roskin

^ permalink raw reply

* Re: [PATCH 06/11] rt2x00: do not use PCI resources before pci_enable_device()
From: Gertjan van Wingerde @ 2010-08-03 16:14 UTC (permalink / raw)
  To: Kulikov Vasiliy
  Cc: kernel-janitors, Ivo van Doorn, John W. Linville, Helmut Schaa,
	Alban Browaeys, linux-wireless, users, netdev, linux-kernel
In-Reply-To: <1280850203-5532-1-git-send-email-segooon@gmail.com>

On Tue, Aug 3, 2010 at 5:43 PM, Kulikov Vasiliy <segooon@gmail.com> wrote:
> IRQ and resource[] may not have correct values until
> after PCI hotplug setup occurs at pci_enable_device() time.
>
> The semantic match that finds this problem is as follows:
>
> // <smpl>
> @@
> identifier x;
> identifier request ~= "pci_request.*|pci_resource.*";
> @@
>
> (
> * x->irq
> |
> * x->resource
> |
> * request(x, ...)
> )
>  ...
> *pci_enable_device(x)
> // </smpl>
>
> Signed-off-by: Kulikov Vasiliy <segooon@gmail.com>

Good catch.

Acked-by: Gertjan van Wingerde <gwingerde@gmail.com>

> ---
>  drivers/net/wireless/rt2x00/rt2x00pci.c |   21 ++++++++++-----------
>  1 files changed, 10 insertions(+), 11 deletions(-)
>
> diff --git a/drivers/net/wireless/rt2x00/rt2x00pci.c b/drivers/net/wireless/rt2x00/rt2x00pci.c
> index 19b262e..63c2cc4 100644
> --- a/drivers/net/wireless/rt2x00/rt2x00pci.c
> +++ b/drivers/net/wireless/rt2x00/rt2x00pci.c
> @@ -240,16 +240,16 @@ int rt2x00pci_probe(struct pci_dev *pci_dev, const struct pci_device_id *id)
>        struct rt2x00_dev *rt2x00dev;
>        int retval;
>
> -       retval = pci_request_regions(pci_dev, pci_name(pci_dev));
> +       retval = pci_enable_device(pci_dev);
>        if (retval) {
> -               ERROR_PROBE("PCI request regions failed.\n");
> +               ERROR_PROBE("Enable device failed.\n");
>                return retval;
>        }
>
> -       retval = pci_enable_device(pci_dev);
> +       retval = pci_request_regions(pci_dev, pci_name(pci_dev));
>        if (retval) {
> -               ERROR_PROBE("Enable device failed.\n");
> -               goto exit_release_regions;
> +               ERROR_PROBE("PCI request regions failed.\n");
> +               goto exit_disable_device;
>        }
>
>        pci_set_master(pci_dev);
> @@ -260,14 +260,14 @@ int rt2x00pci_probe(struct pci_dev *pci_dev, const struct pci_device_id *id)
>        if (dma_set_mask(&pci_dev->dev, DMA_BIT_MASK(32))) {
>                ERROR_PROBE("PCI DMA not supported.\n");
>                retval = -EIO;
> -               goto exit_disable_device;
> +               goto exit_release_regions;
>        }
>
>        hw = ieee80211_alloc_hw(sizeof(struct rt2x00_dev), ops->hw);
>        if (!hw) {
>                ERROR_PROBE("Failed to allocate hardware.\n");
>                retval = -ENOMEM;
> -               goto exit_disable_device;
> +               goto exit_release_regions;
>        }
>
>        pci_set_drvdata(pci_dev, hw);
> @@ -300,13 +300,12 @@ exit_free_reg:
>  exit_free_device:
>        ieee80211_free_hw(hw);
>
> -exit_disable_device:
> -       if (retval != -EBUSY)
> -               pci_disable_device(pci_dev);
> -
>  exit_release_regions:
>        pci_release_regions(pci_dev);
>
> +exit_disable_device:
> +       pci_disable_device(pci_dev);
> +
>        pci_set_drvdata(pci_dev, NULL);
>
>        return retval;
> --
> 1.7.0.4
>
>

^ permalink raw reply

* iw set channel failed
From: Zhongliang Zhao @ 2010-08-03 16:10 UTC (permalink / raw)
  To: linux-wireless

Hi all,

When using iw to set the channel of mesh nodes working in ad hoc 
mode(with iw-tool installed), I got error:

# iw --debug dev wlan1 set channel 5

-- Debug: Received Message:
--------------------------   BEGIN NETLINK MESSAGE 
---------------------------
   [HEADER] 16 octets
     .nlmsg_len = 36
     .nlmsg_type = 2 <ERROR>
     .nlmsg_flags = 0 <>
     .nlmsg_seq = 947833964
     .nlmsg_pid = 2734
   [ERRORMSG] 20 octets
     .error = 0 "Success"
   [ORIGINAL MESSAGE] 16 octets
     .nlmsg_len = 16
     .nlmsg_type = 17 <0x11>
     .nlmsg_flags = 5 <REQUEST,ACK>
     .nlmsg_seq = 947833964
     .nlmsg_pid = 2734
---------------------------  END NETLINK MESSAGE   
---------------------------


Does someone know the possible reason?

Many thanks in advance.

p.s. iwconfig could work for this.

zzl

^ permalink raw reply

* [PATCH 06/11] rt2x00: do not use PCI resources before pci_enable_device()
From: Kulikov Vasiliy @ 2010-08-03 15:43 UTC (permalink / raw)
  To: kernel-janitors
  Cc: Ivo van Doorn, Gertjan van Wingerde, John W. Linville,
	Helmut Schaa, Alban Browaeys, linux-wireless, users, netdev,
	linux-kernel

IRQ and resource[] may not have correct values until
after PCI hotplug setup occurs at pci_enable_device() time.

The semantic match that finds this problem is as follows:

// <smpl>
@@
identifier x;
identifier request ~= "pci_request.*|pci_resource.*";
@@

(
* x->irq
|
* x->resource
|
* request(x, ...)
)
 ...
*pci_enable_device(x)
// </smpl>

Signed-off-by: Kulikov Vasiliy <segooon@gmail.com>
---
 drivers/net/wireless/rt2x00/rt2x00pci.c |   21 ++++++++++-----------
 1 files changed, 10 insertions(+), 11 deletions(-)

diff --git a/drivers/net/wireless/rt2x00/rt2x00pci.c b/drivers/net/wireless/rt2x00/rt2x00pci.c
index 19b262e..63c2cc4 100644
--- a/drivers/net/wireless/rt2x00/rt2x00pci.c
+++ b/drivers/net/wireless/rt2x00/rt2x00pci.c
@@ -240,16 +240,16 @@ int rt2x00pci_probe(struct pci_dev *pci_dev, const struct pci_device_id *id)
 	struct rt2x00_dev *rt2x00dev;
 	int retval;
 
-	retval = pci_request_regions(pci_dev, pci_name(pci_dev));
+	retval = pci_enable_device(pci_dev);
 	if (retval) {
-		ERROR_PROBE("PCI request regions failed.\n");
+		ERROR_PROBE("Enable device failed.\n");
 		return retval;
 	}
 
-	retval = pci_enable_device(pci_dev);
+	retval = pci_request_regions(pci_dev, pci_name(pci_dev));
 	if (retval) {
-		ERROR_PROBE("Enable device failed.\n");
-		goto exit_release_regions;
+		ERROR_PROBE("PCI request regions failed.\n");
+		goto exit_disable_device;
 	}
 
 	pci_set_master(pci_dev);
@@ -260,14 +260,14 @@ int rt2x00pci_probe(struct pci_dev *pci_dev, const struct pci_device_id *id)
 	if (dma_set_mask(&pci_dev->dev, DMA_BIT_MASK(32))) {
 		ERROR_PROBE("PCI DMA not supported.\n");
 		retval = -EIO;
-		goto exit_disable_device;
+		goto exit_release_regions;
 	}
 
 	hw = ieee80211_alloc_hw(sizeof(struct rt2x00_dev), ops->hw);
 	if (!hw) {
 		ERROR_PROBE("Failed to allocate hardware.\n");
 		retval = -ENOMEM;
-		goto exit_disable_device;
+		goto exit_release_regions;
 	}
 
 	pci_set_drvdata(pci_dev, hw);
@@ -300,13 +300,12 @@ exit_free_reg:
 exit_free_device:
 	ieee80211_free_hw(hw);
 
-exit_disable_device:
-	if (retval != -EBUSY)
-		pci_disable_device(pci_dev);
-
 exit_release_regions:
 	pci_release_regions(pci_dev);
 
+exit_disable_device:
+	pci_disable_device(pci_dev);
+
 	pci_set_drvdata(pci_dev, NULL);
 
 	return retval;
-- 
1.7.0.4


^ permalink raw reply related

* Re: virtual access point setup
From: Ben Greear @ 2010-08-03 15:10 UTC (permalink / raw)
  To: Ryszard; +Cc: Florian Fainelli, Patrick McHardy, linux-wireless
In-Reply-To: <AANLkTim5ApsX4VwqR1+Fw1E-+iey8G5HMKgAXbXh+6zu@mail.gmail.com>

On 08/02/2010 10:46 PM, Ryszard wrote:
> hey ben,  any idea on which config would be best for an AMD geode proc?
> i'm thinking either the c3 or p4 compat configs ..

You could start with either, and then change the CPU type as needed.

You only need the -compat version if you are running on older user-space
OS's..so you might try w/out compat first.

Thanks,
Ben

-- 
Ben Greear <greearb@candelatech.com>
Candela Technologies Inc  http://www.candelatech.com

^ permalink raw reply

* wireless merging -- Re: reminder: bug fixes only
From: John W. Linville @ 2010-08-03 14:50 UTC (permalink / raw)
  To: linux-wireless
In-Reply-To: <20100802.224837.135539305.davem@davemloft.net>

On Mon, Aug 02, 2010 at 10:48:37PM -0700, David Miller wrote:
> 
> 2.6.35 is out, we're about to enter the merge window, so
> if it isn't already in my tree I don't want to see it unless
> it's a bug fix.

In case you missed it, Dave has made the "no more new stuff" call.
Anything that wasn't included in the pull request I sent on Thursday
will not be included in 2.6.36.  The exception, of course, is bug
(particularly regression) fixes.  If something you have already posted
fits that category, feel free to send me a hint to that effect.
Anything new intended for 2.6.36 should indicate that in the patch
posting.

Generally Stephen requests that nothing be available in the -next
trees during the merge window that isn't being sent to Linus.
The wireless-next-2.6 tree feeds wireless-testing, so you should not
expect to see any post-2.6.36 patches in either of those trees until
the merge window closes in slightly less than two weeks from now.
Fixes will be available as normal.

Thanks for your patience!

John
-- 
John W. Linville		Someday the world will need a hero, and you
linville@tuxdriver.com			might be all we have.  Be ready.

^ permalink raw reply

* Re: [PATCH v2 03/20] mmc: support embedded data field in mmc_host
From: Vitaly Wool @ 2010-08-03 14:17 UTC (permalink / raw)
  To: Ohad Ben-Cohen
  Cc: linux-wireless, linux-mmc, linux-omap, Kalle Valo, Pandita Vikram,
	linux, Nicolas Pitre, Tony Lindgren, Roger Quadros, San Mehat,
	Chikkature Rajashekar Madhusudhan, Luciano Coelho, akpm,
	linux-arm-kernel
In-Reply-To: <AANLkTi=vhWV1RNyemtfppfjvLYAbzd3aRjFOVgLLpG3Z@mail.gmail.com>

Hi Ohad,

On Mon, Aug 2, 2010 at 11:35 PM, Ohad Ben-Cohen <ohad@wizery.com> wrote:

> I'm honestly trying to understand your concerns, but I'm afraid that
> just saying "it's a hack" is not too informative. Can you please
> explain what do you think is technically wrong with the proposed
> solution ? is it not general enough for other use cases ? will it
> break something ?

let's summarize the solution you're proposing.

You're trying to add embedded_data which will be scattered all over
the place. The patches you introduce do the following:
- add the pointer to the mmc core header;
- add the primitive to set it from the controller driver;
- add the pointer to the board-specific header;
- add the structure to the board-specific C file and propagate its
pointer to the controller driver;
- add setting the pointer in the core structure into the controller driver.

So if I'd like to set the *same* structure for the *same* WL1271
driver, provided that I'm working with the other platform, I'll need
to do the following:
- add the pointer to the board-specific header;
- add the structure to the board-specific C file and propagate its
pointer to the controller driver;
- add setting the pointer in the core structure into the controller driver.

This is far from being intuitive. This means we need to hack,
generally speaking, all the MMC controller drivers to get it working
on all platforms. This is error prone.

And I'm not even speaking about the fact that MMC controller driver
should not deal with such things at all.

Thanks,
   Vitaly

^ permalink raw reply

* Re: iwlwifi connection problems
From: Alex Romosan @ 2010-08-03 12:43 UTC (permalink / raw)
  To: Johannes Berg; +Cc: Guy, Wey-Yi, linux-wireless@vger.kernel.org
In-Reply-To: <1280817596.3874.0.camel@jlt3.sipsolutions.net>

Johannes Berg <johannes@sipsolutions.net> writes:

> Yes, thank you, but it's very strange. But it's probably ok, let's
> remove the call then, it wasn't there before. Want to post a patch
> yourself?

btw, the old code had this comment

 /* We avoid iwl_commit_rxon here to commit the new filter flags
  * since mac80211 will call ieee80211_hw_config immediately.
  * (mc_list is not supported at this time). Otherwise, we need to
  * queue a background iwl_commit_rxon work.
  */

--alex--

-- 
| I believe the moment is at hand when, by a paranoiac and active |
|  advance of the mind, it will be possible (simultaneously with  |
|  automatism and other passive states) to systematize confusion  |
|  and thus to help to discredit completely the world of reality. |

^ permalink raw reply

* Re: iwlwifi connection problems
From: Alex Romosan @ 2010-08-03 12:32 UTC (permalink / raw)
  To: Johannes Berg; +Cc: Guy, Wey-Yi, linux-wireless@vger.kernel.org
In-Reply-To: <1280817596.3874.0.camel@jlt3.sipsolutions.net>

Johannes Berg <johannes@sipsolutions.net> writes:

> On Mon, 2010-08-02 at 20:53 -0700, Alex Romosan wrote:
>> Johannes Berg <johannes@sipsolutions.net> writes:
>> 
>> > On Mon, 2010-08-02 at 08:42 -0700, Alex Romosan wrote:
>> >
>> >> so i think i finally managed to track this down. doing a git bisect i
>> >> get:
>> >> 
>> >> 3474ad635db371b0d8d0ee40086f15d223d5b6a4 is the first bad commit
>> >> commit 3474ad635db371b0d8d0ee40086f15d223d5b6a4
>> >> Author: Johannes Berg <johannes.berg@intel.com>
>> >> Date:   Thu Apr 29 04:43:05 2010 -0700
>> >> 
>> >>     iwlwifi: apply filter flags directly
>> >
>> >> ...
>> >
>> > Thanks. I'll take a closer look tomorrow, am about to leave for today.
>> 
>> so i looked a little bit more at what happened. the only difference
>> between the non working and the working version is a call to
>> iwlcore_commit_rxon(priv) on line 1327 of iwl-core.c (the version in
>> 2.6.35). if i comment that line out then i can connect to the access
>> point without problems. hope this helps.
>
> Yes, thank you, but it's very strange. But it's probably ok, let's
> remove the call then, it wasn't there before. Want to post a patch
> yourself?

that's ok, i don't really know what's going on, i only noticed the
difference between the two versions. you post the patch.

--alex--

-- 
| I believe the moment is at hand when, by a paranoiac and active |
|  advance of the mind, it will be possible (simultaneously with  |
|  automatism and other passive states) to systematize confusion  |
|  and thus to help to discredit completely the world of reality. |

^ permalink raw reply

* mesh + ap mode at the same hardware
From: Andreas Weidlinger @ 2010-08-03 11:57 UTC (permalink / raw)
  To: linux-wireless

Hi,

I'm able to use open802.11s mesh networking or accesspoint-mode(with 
hostapd) on my D-Link DWL-G122 USB wireless network card.
Is there any way to use both modes at the same time on this network card?
I know, my Linksys WRT54GL can do accesspoint-mode and client-mode at 
the same time.
Adhoc-networking would be an alternative if hostapd wouldn't work.

Thanks,
Andreas Weidlinger, BSc

^ permalink raw reply

* Re: [PATCH v2] wireless: ipw2100: check result of kzalloc()
From: Christoph Fritz @ 2010-08-03 10:54 UTC (permalink / raw)
  To: Dan Carpenter
  Cc: John W. Linville, kernel-janitors, David S. Miller,
	Reinette Chatre, linux-wireless
In-Reply-To: <1280831322.3034.7.camel@lovely.krouter>

If kzalloc() fails return with -ENOMEM from ipw2100_net_init() which is
called by register_netdev.

CC: Dan Carpenter <error27@gmail.com>
Signed-off-by: Christoph Fritz <chf.fritz@googlemail.com>
---
 drivers/net/wireless/ipw2x00/ipw2100.c |    4 ++++
 1 files changed, 4 insertions(+), 0 deletions(-)

diff --git a/drivers/net/wireless/ipw2x00/ipw2100.c b/drivers/net/wireless/ipw2x00/ipw2100.c
index 0bd4dfa..cbec02a 100644
--- a/drivers/net/wireless/ipw2x00/ipw2100.c
+++ b/drivers/net/wireless/ipw2x00/ipw2100.c
@@ -1924,6 +1924,10 @@ static int ipw2100_net_init(struct net_device *dev)
 		bg_band->channels =
 			kzalloc(geo->bg_channels *
 				sizeof(struct ieee80211_channel), GFP_KERNEL);
+		if (!bg_band->channels) {
+			ipw2100_down(priv);
+			return -ENOMEM;
+		}
 		/* translate geo->bg to bg_band.channels */
 		for (i = 0; i < geo->bg_channels; i++) {
 			bg_band->channels[i].band = IEEE80211_BAND_2GHZ;
-- 
1.7.1




^ permalink raw reply related

* Re: [PATCH] wireless: ipw2100: check result of kzalloc()
From: Christoph Fritz @ 2010-08-03 10:28 UTC (permalink / raw)
  To: Dan Carpenter
  Cc: John W. Linville, kernel-janitors, David S. Miller,
	Reinette Chatre, linux-wireless
In-Reply-To: <20100803081701.GP26313@bicker>

On Tue, 2010-08-03 at 10:17 +0200, Dan Carpenter wrote:
> On Tue, Aug 03, 2010 at 03:10:22AM +0200, Christoph Fritz wrote:
> > If kzalloc() fails return with -ENOMEM from ipw2100_net_init() which is
> > called by register_netdev.
> > 
> > Signed-off-by: Christoph Fritz <chf.fritz@googlemail.com>
> > ---
> >  drivers/net/wireless/ipw2x00/ipw2100.c |    2 ++
> >  1 files changed, 2 insertions(+), 0 deletions(-)
> > 
> > diff --git a/drivers/net/wireless/ipw2x00/ipw2100.c b/drivers/net/wireless/ipw2x00/ipw2100.c
> > index 0bd4dfa..908c176 100644
> > --- a/drivers/net/wireless/ipw2x00/ipw2100.c
> > +++ b/drivers/net/wireless/ipw2x00/ipw2100.c
> > @@ -1924,6 +1924,8 @@ static int ipw2100_net_init(struct net_device *dev)
> >  		bg_band->channels =
> >  			kzalloc(geo->bg_channels *
> >  				sizeof(struct ieee80211_channel), GFP_KERNEL);
> > +		if (!bg_band->channels)
> 
> There should be an "ipw2100_down(priv);" on the error path here.

thanks for pointing this out, I'll add this.

> 
> > +			return -ENOMEM;
> >  		/* translate geo->bg to bg_band.channels */
> 



^ permalink raw reply

* Re: [PATCH] wireless: ipw2100: check result of kzalloc()
From: Dan Carpenter @ 2010-08-03  8:17 UTC (permalink / raw)
  To: Christoph Fritz
  Cc: John W. Linville, kernel-janitors, Zhu Yi, David S. Miller,
	Reinette Chatre, linux-wireless
In-Reply-To: <1280797822.11158.55.camel@lovely.krouter>

On Tue, Aug 03, 2010 at 03:10:22AM +0200, Christoph Fritz wrote:
> If kzalloc() fails return with -ENOMEM from ipw2100_net_init() which is
> called by register_netdev.
> 
> Signed-off-by: Christoph Fritz <chf.fritz@googlemail.com>
> ---
>  drivers/net/wireless/ipw2x00/ipw2100.c |    2 ++
>  1 files changed, 2 insertions(+), 0 deletions(-)
> 
> diff --git a/drivers/net/wireless/ipw2x00/ipw2100.c b/drivers/net/wireless/ipw2x00/ipw2100.c
> index 0bd4dfa..908c176 100644
> --- a/drivers/net/wireless/ipw2x00/ipw2100.c
> +++ b/drivers/net/wireless/ipw2x00/ipw2100.c
> @@ -1924,6 +1924,8 @@ static int ipw2100_net_init(struct net_device *dev)
>  		bg_band->channels =
>  			kzalloc(geo->bg_channels *
>  				sizeof(struct ieee80211_channel), GFP_KERNEL);
> +		if (!bg_band->channels)

There should be an "ipw2100_down(priv);" on the error path here.

> +			return -ENOMEM;
>  		/* translate geo->bg to bg_band.channels */

regards,
dan carpenter



^ permalink raw reply


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