2008-05-29 07:37:27

by Holger Schurig

[permalink] [raw]
Subject: question about ...: wrong count at exit"

After pulling the newest sparse, I got some new sparse warnings
which puzzle me. Here's one of them:

drivers/net/wireless/libertas/main.c:477:9: warning: context imbalance in 'lbs_eth_stop': wrong count at exit
drivers/net/wireless/libertas/main.c:477:9: context 'lock': wanted 0, got 1

However, the function looks quite innocent, and I cannot see
any imbalance there. Did I oversee something or is that a
problem of sparse?

static int lbs_eth_stop(struct net_device *dev)
{
struct lbs_private *priv = (struct lbs_private *) dev->priv;

lbs_deb_enter(LBS_DEB_NET);

spin_lock_irq(&priv->driver_lock);
priv->infra_open = 0;
netif_stop_queue(dev);
spin_unlock_irq(&priv->driver_lock);

schedule_work(&priv->mcast_work);

lbs_deb_leave(LBS_DEB_NET);
return 0;
}


2008-05-29 07:50:30

by Johannes Berg

[permalink] [raw]
Subject: Re: question about ...: wrong count at exit"

On Thu, 2008-05-29 at 09:37 +0200, Holger Schurig wrote:
> After pulling the newest sparse, I got some new sparse warnings
> which puzzle me. Here's one of them:
>
> drivers/net/wireless/libertas/main.c:477:9: warning: context imbalance in 'lbs_eth_stop': wrong count at exit
> drivers/net/wireless/libertas/main.c:477:9: context 'lock': wanted 0, got 1
>
> However, the function looks quite innocent, and I cannot see
> any imbalance there. Did I oversee something or is that a
> problem of sparse?

> spin_lock_irq(&priv->driver_lock);
> priv->infra_open = 0;
> netif_stop_queue(dev);
> spin_unlock_irq(&priv->driver_lock);

I think it's a sparse problem caused by my patch, I sent further patches
to fix it but they were never applied (and had a slight remaining
problem too). If you look at the pre-processed function it should become
obvious.

johannes


Attachments:
signature.asc (828.00 B)
This is a digitally signed message part

2008-05-29 08:38:26

by Johannes Berg

[permalink] [raw]
Subject: Re: question about ...: wrong count at exit"


> one that I'll send a patch for in a minute,

actually, that one is caused by another local patch

johannes


Attachments:
signature.asc (828.00 B)
This is a digitally signed message part

2008-05-29 08:06:05

by Holger Schurig

[permalink] [raw]
Subject: Re: question about ...: wrong count at exit"

Okay, reverted back to sparse 0.4.1



2008-05-29 08:07:20

by Tomas Winkler

[permalink] [raw]
Subject: Re: question about ...: wrong count at exit"

On Thu, May 29, 2008 at 10:49 AM, Johannes Berg
<[email protected]> wrote:
> On Thu, 2008-05-29 at 09:37 +0200, Holger Schurig wrote:
>> After pulling the newest sparse, I got some new sparse warnings
>> which puzzle me. Here's one of them:
>>
>> drivers/net/wireless/libertas/main.c:477:9: warning: context imbalance in 'lbs_eth_stop': wrong count at exit
>> drivers/net/wireless/libertas/main.c:477:9: context 'lock': wanted 0, got 1
>>
>> However, the function looks quite innocent, and I cannot see
>> any imbalance there. Did I oversee something or is that a
>> problem of sparse?
>
>> spin_lock_irq(&priv->driver_lock);
>> priv->infra_open = 0;
>> netif_stop_queue(dev);
>> spin_unlock_irq(&priv->driver_lock);
>
> I think it's a sparse problem caused by my patch, I sent further patches
> to fix it but they were never applied (and had a slight remaining
> problem too). If you look at the pre-processed function it should become
> obvious.
>

I got plenty of this in the mac80211 reported with newest sparse, but
they looks false caused by 'goto statements'

Tomas

2008-05-29 08:34:14

by Johannes Berg

[permalink] [raw]
Subject: Re: question about ...: wrong count at exit"


> >> However, the function looks quite innocent, and I cannot see
> >> any imbalance there. Did I oversee something or is that a
> >> problem of sparse?
> >
> >> spin_lock_irq(&priv->driver_lock);
> >> priv->infra_open = 0;
> >> netif_stop_queue(dev);
> >> spin_unlock_irq(&priv->driver_lock);
> >
> > I think it's a sparse problem caused by my patch, I sent further patches
> > to fix it but they were never applied (and had a slight remaining
> > problem too). If you look at the pre-processed function it should become
> > obvious.
> >
>
> I got plenty of this in the mac80211 reported with newest sparse, but
> they looks false caused by 'goto statements'

Probably similar issues. I have patches that haven't been applied and
with those, mac80211 is clean except for a new warning from netdevice.h,
one that I'll send a patch for in a minute, and the rc-pid algo one.

johannes


Attachments:
signature.asc (828.00 B)
This is a digitally signed message part

2008-05-29 08:09:09

by Johannes Berg

[permalink] [raw]
Subject: Re: question about ...: wrong count at exit"

On Thu, 2008-05-29 at 10:05 +0200, Holger Schurig wrote:
> Okay, reverted back to sparse 0.4.1

Mind you, the problem with that is that it will not flag

spin_lock(&a);
rcu_read_unlock();

as a bug. Which was the whole reason I hacked on sparse.

johannes


Attachments:
signature.asc (828.00 B)
This is a digitally signed message part