Messages in this thread Patch in this message | | | Subject | Re: [LOCKDEP BUG][2.6.36-rc1] xt_info_wrlock? | From | Peter Zijlstra <> | Date | Mon, 16 Aug 2010 22:04:56 +0200 |
| |
On Mon, 2010-08-16 at 12:44 -0700, David Miller wrote: > He's only accessing the per-cpu counter locks of other cpus. > > The per-cpu lock is only locally accessed by a cpu in software > interrupt context. > > That is why his transformation is legal. > > Lockdep simply hasn't been informed of this invariant and has > to assume the worst.
Something like the below will keep lockdep coverage, still going back to RCU sounds like the best option.
--- include/linux/netfilter/x_tables.h | 9 +++++++++ 1 files changed, 9 insertions(+), 0 deletions(-)
diff --git a/include/linux/netfilter/x_tables.h b/include/linux/netfilter/x_tables.h index 24e5d01..a195feb 100644 --- a/include/linux/netfilter/x_tables.h +++ b/include/linux/netfilter/x_tables.h @@ -511,12 +511,21 @@ static inline void xt_info_rdunlock_bh(void) */ static inline void xt_info_wrlock(unsigned int cpu) { +#ifdef CONFIG_PROVE_LOCKING + /* + * XXX foo + */ + local_bh_disable(); +#endif spin_lock(&per_cpu(xt_info_locks, cpu).lock); } static inline void xt_info_wrunlock(unsigned int cpu) { spin_unlock(&per_cpu(xt_info_locks, cpu).lock); +#ifdef CONFIG_PROVE_LOCKING + local_bh_enable(); +#endif } /*
| |