Messages in this thread Patch in this message | | | Subject | [PATCH] kthread_worker: Initialize dynamically allocated spinlock properly for lockdep | From | Andy Walls <> | Date | Sun, 19 Dec 2010 07:49:35 -0500 |
| |
init_kthread_worker(), via KTHREAD_WORKER_INIT(), used an initializer for static spin_lock objects, SPIN_LOCK_UNLOCKED, on a dynamically allocated kthread_worker object's internal spinlock_t. This causes lockdep to gripe:
INFO: trying to register non-static key. the code is fine but needs lockdep annotation. turning off the locking correctness validator.
To keep lockdep happy, use spin_lock_init() for dynamically allocated kthread_worker objects' internal spinlock_t.
Reported-by: Nicolas <nicolas.mailhot@laposte.net> Signed-off-by: Andy Walls <awalls@md.metrocast.net>
Cc: Tejun Heo <tj@kernel.org> Cc: Jarod Wilson <jarod@redhat.com> Cc: Ingo Molnar <mingo@redhat.com> Cc: Mauro Carvalho Chehab <mchehab@redhat.com> Cc: Hans Verkuil <hverkuil@xs4all.nl>
diff --git a/include/linux/kthread.h b/include/linux/kthread.h index 685ea65..e65d0b1 100644 --- a/include/linux/kthread.h +++ b/include/linux/kthread.h @@ -83,7 +83,13 @@ struct kthread_work { static inline void init_kthread_worker(struct kthread_worker *worker) { - *worker = (struct kthread_worker)KTHREAD_WORKER_INIT(*worker); + /* + * Lockdep complains if a dynamically allocated worker's spinlock_t + * is initialzed using SPIN_LOCK_UNLOCKED. + */ + spin_lock_init(&worker->lock); + INIT_LIST_HEAD(&worker->work_list); + worker->task = NULL; } static inline void init_kthread_work(struct kthread_work *work,
| |