Re: Regression: WARNINGS and lockdep spews in 2.6.38-rc3+(bisected).

From: Yong Zhang
Date: Thu Feb 03 2011 - 05:17:52 EST


On Thu, Feb 03, 2011 at 10:30:40AM +0100, Peter Zijlstra wrote:
> On Thu, 2011-02-03 at 17:12 +0800, Yong Zhang wrote:
> > #ifdef CONFIG_LOCKDEP
> > + unsigned long flags;
> > +
> > local_bh_disable();
> > lock_map_acquire(&timer->lockdep_map);
> > lock_map_release(&timer->lockdep_map);
> > - local_bh_enable();
> > + /* raw_local_irq_[save|restore] is to protect _local_bh_enable() */
> > + raw_local_irq_save(flags);
> > + _local_bh_enable();
> > + raw_local_irq_restore(flags);
> > #endif
>
> _why_ are you doing the raw_local_irq stuff? That's just weird, and that
> comment isn't helping.

Just to avoid trigger WARN_ON_ONCE(!irqs_disabled()) in __local_bh_enable(),

>
> Also, calling _local_bh_enable() will leave pending softirqs, not
> particularly nice

Ah, indeed. That's bad.

Now I'm not sure how to work around this issue, because local_bh_enable()
and _local_bh_enable() are not suitable here.

Maybe we can introduce another type of local_bh_enable() in which
waking up ksoftirqd is forced if needed.

Thanks,
Yong
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/