netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 3.9] libertas: fix crash for SD8688
@ 2013-02-26 20:58 Bing Zhao
  2013-02-27 10:46 ` Dan Williams
  0 siblings, 1 reply; 3+ messages in thread
From: Bing Zhao @ 2013-02-26 20:58 UTC (permalink / raw)
  To: Lubomir Rintel, Dan Williams, Harro Haan
  Cc: libertas-dev, netdev, linux-wireless, John W. Linville,
	linux-kernel, Daniel Drake, Bing Zhao

For SD8688, FUNC_INIT command is queued before fw_ready flag is
set. This causes the following crash as lbs_thread blocks any
command if fw_ready is not set.

[  209.338953] [<c0502248>] (__schedule+0x610/0x764) from [<bf20ae24>] (__lbs_cmd+0xb8/0x130 [libertas])
[  209.348340] [<bf20ae24>] (__lbs_cmd+0xb8/0x130 [libertas]) from [<bf222474>] (if_sdio_finish_power_on+0xec/0x1b0 [libertas_sdio])
[  209.360136] [<bf222474>] (if_sdio_finish_power_on+0xec/0x1b0 [libertas_sdio]) from [<bf2226c4>] (if_sdio_power_on+0x18c/0x20c [libertas_sdio])
[  209.373052] [<bf2226c4>] (if_sdio_power_on+0x18c/0x20c [libertas_sdio]) from [<bf222944>] (if_sdio_probe+0x200/0x31c [libertas_sdio])
[  209.385316] [<bf222944>] (if_sdio_probe+0x200/0x31c [libertas_sdio]) from [<bf01d820>] (sdio_bus_probe+0x94/0xfc [mmc_core])
[  209.396748] [<bf01d820>] (sdio_bus_probe+0x94/0xfc [mmc_core]) from [<c02e729c>] (driver_probe_device+0x12c/0x348)
[  209.407214] [<c02e729c>] (driver_probe_device+0x12c/0x348) from [<c02e7530>] (__driver_attach+0x78/0x9c)
[  209.416798] [<c02e7530>] (__driver_attach+0x78/0x9c) from [<c02e5658>] (bus_for_each_dev+0x50/0x88)
[  209.425946] [<c02e5658>] (bus_for_each_dev+0x50/0x88) from [<c02e6810>] (bus_add_driver+0x108/0x268)
[  209.435180] [<c02e6810>] (bus_add_driver+0x108/0x268) from [<c02e782c>] (driver_register+0xa4/0x134)
[  209.444426] [<c02e782c>] (driver_register+0xa4/0x134) from [<bf22601c>] (if_sdio_init_module+0x1c/0x3c [libertas_sdio])
[  209.455339] [<bf22601c>] (if_sdio_init_module+0x1c/0x3c [libertas_sdio]) from [<c00085b8>] (do_one_initcall+0x98/0x174)
[  209.466236] [<c00085b8>] (do_one_initcall+0x98/0x174) from [<c0076504>] (load_module+0x1c5c/0x1f80)
[  209.475390] [<c0076504>] (load_module+0x1c5c/0x1f80) from [<c007692c>] (sys_init_module+0x104/0x128)
[  209.484632] [<c007692c>] (sys_init_module+0x104/0x128) from [<c0008c40>] (ret_fast_syscall+0x0/0x38)

Fix it by setting fw_ready flag prior to queuing FUNC_INIT command.

Cc: <stable@vger.kernel.org> # 3.5+
Reported-by: Lubomir Rintel <lkundrak@v3.sk>
Tested-by: Lubomir Rintel <lkundrak@v3.sk>
Signed-off-by: Bing Zhao <bzhao@marvell.com>
---
 drivers/net/wireless/libertas/if_sdio.c |    6 +++++-
 1 files changed, 5 insertions(+), 1 deletions(-)

diff --git a/drivers/net/wireless/libertas/if_sdio.c b/drivers/net/wireless/libertas/if_sdio.c
index 739309e..4557833 100644
--- a/drivers/net/wireless/libertas/if_sdio.c
+++ b/drivers/net/wireless/libertas/if_sdio.c
@@ -825,6 +825,11 @@ static void if_sdio_finish_power_on(struct if_sdio_card *card)
 
 	sdio_release_host(func);
 
+	/* Set fw_ready before queuing any commands so that
+	 * lbs_thread won't block from sending them to firmware.
+	 */
+	priv->fw_ready = 1;
+
 	/*
 	 * FUNC_INIT is required for SD8688 WLAN/BT multiple functions
 	 */
@@ -839,7 +844,6 @@ static void if_sdio_finish_power_on(struct if_sdio_card *card)
 			netdev_alert(priv->dev, "CMD_FUNC_INIT cmd failed\n");
 	}
 
-	priv->fw_ready = 1;
 	wake_up(&card->pwron_waitq);
 
 	if (!card->started) {
-- 
1.7.0.2

^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH 3.9] libertas: fix crash for SD8688
  2013-02-26 20:58 [PATCH 3.9] libertas: fix crash for SD8688 Bing Zhao
@ 2013-02-27 10:46 ` Dan Williams
  2013-02-27 10:58   ` Sedat Dilek
  0 siblings, 1 reply; 3+ messages in thread
From: Dan Williams @ 2013-02-27 10:46 UTC (permalink / raw)
  To: Bing Zhao
  Cc: Lubomir Rintel, Harro Haan, Daniel Drake, libertas-dev, netdev,
	linux-wireless, John W. Linville, linux-kernel

On Tue, 2013-02-26 at 12:58 -0800, Bing Zhao wrote:
> For SD8688, FUNC_INIT command is queued before fw_ready flag is
> set. This causes the following crash as lbs_thread blocks any
> command if fw_ready is not set.

While we're at this; does somebody want to take over Libertas
maintainership?  I don't have time for it anymore (and truth be told,
haven't for a long time).  So I'm happy if Daniel or Bing or anyone else
who are already doing all this take it over.  I've got a few Libertas
devices (usb8388, sd8686, sd8687, cf8385) that I'm happy to send to
anyone who wants them.

I'll ack a patch to MAINTAINERS to switch to somebody else.

Dan

> [  209.338953] [<c0502248>] (__schedule+0x610/0x764) from [<bf20ae24>] (__lbs_cmd+0xb8/0x130 [libertas])
> [  209.348340] [<bf20ae24>] (__lbs_cmd+0xb8/0x130 [libertas]) from [<bf222474>] (if_sdio_finish_power_on+0xec/0x1b0 [libertas_sdio])
> [  209.360136] [<bf222474>] (if_sdio_finish_power_on+0xec/0x1b0 [libertas_sdio]) from [<bf2226c4>] (if_sdio_power_on+0x18c/0x20c [libertas_sdio])
> [  209.373052] [<bf2226c4>] (if_sdio_power_on+0x18c/0x20c [libertas_sdio]) from [<bf222944>] (if_sdio_probe+0x200/0x31c [libertas_sdio])
> [  209.385316] [<bf222944>] (if_sdio_probe+0x200/0x31c [libertas_sdio]) from [<bf01d820>] (sdio_bus_probe+0x94/0xfc [mmc_core])
> [  209.396748] [<bf01d820>] (sdio_bus_probe+0x94/0xfc [mmc_core]) from [<c02e729c>] (driver_probe_device+0x12c/0x348)
> [  209.407214] [<c02e729c>] (driver_probe_device+0x12c/0x348) from [<c02e7530>] (__driver_attach+0x78/0x9c)
> [  209.416798] [<c02e7530>] (__driver_attach+0x78/0x9c) from [<c02e5658>] (bus_for_each_dev+0x50/0x88)
> [  209.425946] [<c02e5658>] (bus_for_each_dev+0x50/0x88) from [<c02e6810>] (bus_add_driver+0x108/0x268)
> [  209.435180] [<c02e6810>] (bus_add_driver+0x108/0x268) from [<c02e782c>] (driver_register+0xa4/0x134)
> [  209.444426] [<c02e782c>] (driver_register+0xa4/0x134) from [<bf22601c>] (if_sdio_init_module+0x1c/0x3c [libertas_sdio])
> [  209.455339] [<bf22601c>] (if_sdio_init_module+0x1c/0x3c [libertas_sdio]) from [<c00085b8>] (do_one_initcall+0x98/0x174)
> [  209.466236] [<c00085b8>] (do_one_initcall+0x98/0x174) from [<c0076504>] (load_module+0x1c5c/0x1f80)
> [  209.475390] [<c0076504>] (load_module+0x1c5c/0x1f80) from [<c007692c>] (sys_init_module+0x104/0x128)
> [  209.484632] [<c007692c>] (sys_init_module+0x104/0x128) from [<c0008c40>] (ret_fast_syscall+0x0/0x38)
> 
> Fix it by setting fw_ready flag prior to queuing FUNC_INIT command.
> 
> Cc: <stable@vger.kernel.org> # 3.5+
> Reported-by: Lubomir Rintel <lkundrak@v3.sk>
> Tested-by: Lubomir Rintel <lkundrak@v3.sk>
> Signed-off-by: Bing Zhao <bzhao@marvell.com>
> ---
>  drivers/net/wireless/libertas/if_sdio.c |    6 +++++-
>  1 files changed, 5 insertions(+), 1 deletions(-)
> 
> diff --git a/drivers/net/wireless/libertas/if_sdio.c b/drivers/net/wireless/libertas/if_sdio.c
> index 739309e..4557833 100644
> --- a/drivers/net/wireless/libertas/if_sdio.c
> +++ b/drivers/net/wireless/libertas/if_sdio.c
> @@ -825,6 +825,11 @@ static void if_sdio_finish_power_on(struct if_sdio_card *card)
>  
>  	sdio_release_host(func);
>  
> +	/* Set fw_ready before queuing any commands so that
> +	 * lbs_thread won't block from sending them to firmware.
> +	 */
> +	priv->fw_ready = 1;
> +
>  	/*
>  	 * FUNC_INIT is required for SD8688 WLAN/BT multiple functions
>  	 */
> @@ -839,7 +844,6 @@ static void if_sdio_finish_power_on(struct if_sdio_card *card)
>  			netdev_alert(priv->dev, "CMD_FUNC_INIT cmd failed\n");
>  	}
>  
> -	priv->fw_ready = 1;
>  	wake_up(&card->pwron_waitq);
>  
>  	if (!card->started) {

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH 3.9] libertas: fix crash for SD8688
  2013-02-27 10:46 ` Dan Williams
@ 2013-02-27 10:58   ` Sedat Dilek
  0 siblings, 0 replies; 3+ messages in thread
From: Sedat Dilek @ 2013-02-27 10:58 UTC (permalink / raw)
  To: Dan Williams
  Cc: Bing Zhao, Lubomir Rintel, Harro Haan, Daniel Drake, libertas-dev,
	netdev, linux-wireless, John W. Linville, linux-kernel

On Wed, Feb 27, 2013 at 11:46 AM, Dan Williams <dcbw@redhat.com> wrote:
> On Tue, 2013-02-26 at 12:58 -0800, Bing Zhao wrote:
>> For SD8688, FUNC_INIT command is queued before fw_ready flag is
>> set. This causes the following crash as lbs_thread blocks any
>> command if fw_ready is not set.
>
> While we're at this; does somebody want to take over Libertas
> maintainership?  I don't have time for it anymore (and truth be told,
> haven't for a long time).  So I'm happy if Daniel or Bing or anyone else
> who are already doing all this take it over.  I've got a few Libertas
> devices (usb8388, sd8686, sd8687, cf8385) that I'm happy to send to
> anyone who wants them.
>
> I'll ack a patch to MAINTAINERS to switch to somebody else.
>

It would be great to send out a separate mail for this concern?

- Sedat -

> Dan
>
>> [  209.338953] [<c0502248>] (__schedule+0x610/0x764) from [<bf20ae24>] (__lbs_cmd+0xb8/0x130 [libertas])
>> [  209.348340] [<bf20ae24>] (__lbs_cmd+0xb8/0x130 [libertas]) from [<bf222474>] (if_sdio_finish_power_on+0xec/0x1b0 [libertas_sdio])
>> [  209.360136] [<bf222474>] (if_sdio_finish_power_on+0xec/0x1b0 [libertas_sdio]) from [<bf2226c4>] (if_sdio_power_on+0x18c/0x20c [libertas_sdio])
>> [  209.373052] [<bf2226c4>] (if_sdio_power_on+0x18c/0x20c [libertas_sdio]) from [<bf222944>] (if_sdio_probe+0x200/0x31c [libertas_sdio])
>> [  209.385316] [<bf222944>] (if_sdio_probe+0x200/0x31c [libertas_sdio]) from [<bf01d820>] (sdio_bus_probe+0x94/0xfc [mmc_core])
>> [  209.396748] [<bf01d820>] (sdio_bus_probe+0x94/0xfc [mmc_core]) from [<c02e729c>] (driver_probe_device+0x12c/0x348)
>> [  209.407214] [<c02e729c>] (driver_probe_device+0x12c/0x348) from [<c02e7530>] (__driver_attach+0x78/0x9c)
>> [  209.416798] [<c02e7530>] (__driver_attach+0x78/0x9c) from [<c02e5658>] (bus_for_each_dev+0x50/0x88)
>> [  209.425946] [<c02e5658>] (bus_for_each_dev+0x50/0x88) from [<c02e6810>] (bus_add_driver+0x108/0x268)
>> [  209.435180] [<c02e6810>] (bus_add_driver+0x108/0x268) from [<c02e782c>] (driver_register+0xa4/0x134)
>> [  209.444426] [<c02e782c>] (driver_register+0xa4/0x134) from [<bf22601c>] (if_sdio_init_module+0x1c/0x3c [libertas_sdio])
>> [  209.455339] [<bf22601c>] (if_sdio_init_module+0x1c/0x3c [libertas_sdio]) from [<c00085b8>] (do_one_initcall+0x98/0x174)
>> [  209.466236] [<c00085b8>] (do_one_initcall+0x98/0x174) from [<c0076504>] (load_module+0x1c5c/0x1f80)
>> [  209.475390] [<c0076504>] (load_module+0x1c5c/0x1f80) from [<c007692c>] (sys_init_module+0x104/0x128)
>> [  209.484632] [<c007692c>] (sys_init_module+0x104/0x128) from [<c0008c40>] (ret_fast_syscall+0x0/0x38)
>>
>> Fix it by setting fw_ready flag prior to queuing FUNC_INIT command.
>>
>> Cc: <stable@vger.kernel.org> # 3.5+
>> Reported-by: Lubomir Rintel <lkundrak@v3.sk>
>> Tested-by: Lubomir Rintel <lkundrak@v3.sk>
>> Signed-off-by: Bing Zhao <bzhao@marvell.com>
>> ---
>>  drivers/net/wireless/libertas/if_sdio.c |    6 +++++-
>>  1 files changed, 5 insertions(+), 1 deletions(-)
>>
>> diff --git a/drivers/net/wireless/libertas/if_sdio.c b/drivers/net/wireless/libertas/if_sdio.c
>> index 739309e..4557833 100644
>> --- a/drivers/net/wireless/libertas/if_sdio.c
>> +++ b/drivers/net/wireless/libertas/if_sdio.c
>> @@ -825,6 +825,11 @@ static void if_sdio_finish_power_on(struct if_sdio_card *card)
>>
>>       sdio_release_host(func);
>>
>> +     /* Set fw_ready before queuing any commands so that
>> +      * lbs_thread won't block from sending them to firmware.
>> +      */
>> +     priv->fw_ready = 1;
>> +
>>       /*
>>        * FUNC_INIT is required for SD8688 WLAN/BT multiple functions
>>        */
>> @@ -839,7 +844,6 @@ static void if_sdio_finish_power_on(struct if_sdio_card *card)
>>                       netdev_alert(priv->dev, "CMD_FUNC_INIT cmd failed\n");
>>       }
>>
>> -     priv->fw_ready = 1;
>>       wake_up(&card->pwron_waitq);
>>
>>       if (!card->started) {
>
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2013-02-27 10:58 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-02-26 20:58 [PATCH 3.9] libertas: fix crash for SD8688 Bing Zhao
2013-02-27 10:46 ` Dan Williams
2013-02-27 10:58   ` Sedat Dilek

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).