lkml.org 
[lkml]   [2009]   [Jun]   [17]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
SubjectRe: bug in tty ldisc and friends
From
Date
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.



\
 
 \ /
  Last update: 2009-06-17 10:45    [W:0.257 / U:0.072 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site