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;
}
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
> one that I'll send a patch for in a minute,
actually, that one is caused by another local patch
johannes
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
> >> 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
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