2008-05-23 08:08:14

by Holger Schurig

[permalink] [raw]
Subject: [PATCH] libertas: don't spin_unlock_irq() twice

priv->driver_lock has already been unlocked some lines above. This patch
fixes the sparse warning:

drivers/net/wireless/libertas/main.c:792:6: warning: context problem in 'lbs_thread': '_spin_unlock_irq' expected different context
drivers/net/wireless/libertas/main.c:792:6: context 'lock': wanted >= 1, got 0

Signed-of-by: Holger Schurig <[email protected]>

Index: wireless-testing/drivers/net/wireless/libertas/main.c
===================================================================
--- wireless-testing.orig/drivers/net/wireless/libertas/main.c 2008-05-23 08:43:05.000000000 +0200
+++ wireless-testing/drivers/net/wireless/libertas/main.c 2008-05-23 08:43:22.000000000 +0200
@@ -788,11 +788,8 @@ static int lbs_thread(void *data)
le16_to_cpu(cmdnode->cmdbuf->command));
lbs_complete_command(priv, cmdnode, -ETIMEDOUT);
priv->nr_retries = 0;
- if (priv->reset_card) {
- spin_unlock_irq(&priv->driver_lock);
+ if (priv->reset_card)
priv->reset_card(priv);
- spin_lock_irq(&priv->driver_lock);
- }
} else {
priv->cur_cmd = NULL;
priv->dnld_sent = DNLD_RES_RECEIVED;


2008-05-23 13:40:11

by Dan Williams

[permalink] [raw]
Subject: Re: [PATCH] libertas: don't spin_unlock_irq() twice

On Fri, 2008-05-23 at 10:07 +0200, Holger Schurig wrote:
> priv->driver_lock has already been unlocked some lines above. This patch
> fixes the sparse warning:
>
> drivers/net/wireless/libertas/main.c:792:6: warning: context problem in 'lbs_thread': '_spin_unlock_irq' expected different context
> drivers/net/wireless/libertas/main.c:792:6: context 'lock': wanted >= 1, got 0
>
> Signed-of-by: Holger Schurig <[email protected]>

Acked-by: Dan Williams <[email protected]>

> Index: wireless-testing/drivers/net/wireless/libertas/main.c
> ===================================================================
> --- wireless-testing.orig/drivers/net/wireless/libertas/main.c 2008-05-23 08:43:05.000000000 +0200
> +++ wireless-testing/drivers/net/wireless/libertas/main.c 2008-05-23 08:43:22.000000000 +0200
> @@ -788,11 +788,8 @@ static int lbs_thread(void *data)
> le16_to_cpu(cmdnode->cmdbuf->command));
> lbs_complete_command(priv, cmdnode, -ETIMEDOUT);
> priv->nr_retries = 0;
> - if (priv->reset_card) {
> - spin_unlock_irq(&priv->driver_lock);
> + if (priv->reset_card)
> priv->reset_card(priv);
> - spin_lock_irq(&priv->driver_lock);
> - }
> } else {
> priv->cur_cmd = NULL;
> priv->dnld_sent = DNLD_RES_RECEIVED;