Re: bug in tty ldisc and friends

From: Peter Zijlstra
Date: Wed Jun 17 2009 - 04:41:37 EST


On Tue, 2009-06-16 at 12:36 +0200, Ingo Molnar wrote:

> +++ b/lib/dma-debug.c
> @@ -62,6 +62,8 @@ struct dma_debug_entry {
> #endif
> };
>
> +static struct lock_class_key hash_bucket_class;
> +
> struct hash_bucket {
> struct list_head list;
> spinlock_t lock;
> @@ -716,7 +718,8 @@ void dma_debug_init(u32 num_entries)
>
> for (i = 0; i < HASH_SIZE; ++i) {
> INIT_LIST_HEAD(&dma_entry_hash[i].list);
> - dma_entry_hash[i].lock = SPIN_LOCK_UNLOCKED;
> + spin_lock_init(&dma_entry_hash[i].lock);
> + lockdep_set_lock_class(&dma_entry_hash[i].lock, &hash_bucket_class);
> }
>
> if (dma_debug_fs_init() != 0) {

I don't see what you need that lockdep_set_class() for, the
spin_lock_init() would already set a class specific to the callsite. And
since all these buckets are initialized from the same place (ie, this
loop), they'd all share the same class.

Its just that the old style SPIN_LOCK_UNLOCKED doesn't set a class and
then reverts to the static address of the lock object itself that these
locks used to have different classes.

So in short, yes the above patch should fix it, but it could be done
shorter..

and..

we really should do another round of SPIN_LOCK_UNLOCKED cleanups and
finally remove that thing.

--
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/