The patch titled signals: annotate lock_task_sighand() has been added to the -mm tree. Its filename is signals-annotate-lock_task_sighand.patch Before you just go and hit "reply", please: a) Consider who else should be cc'ed b) Prefer to cc a suitable mailing list as well c) Ideally: find the original patch on the mailing list and do a reply-to-all to that, adding suitable additional cc's *** Remember to use Documentation/SubmitChecklist when testing your code *** See http://userweb.kernel.org/~akpm/stuff/added-to-mm.txt to find out what to do about this The current -mm tree may be found at http://userweb.kernel.org/~akpm/mmotm/ ------------------------------------------------------ Subject: signals: annotate lock_task_sighand() From: Namhyung Kim <namhyung@xxxxxxxxx> lock_task_sighand() grabs sighand->siglock in case of returning non-NULL but unlock_task_sighand() releases it unconditionally. This leads sparse to complain about the lock context imbalance. Rename and wrap lock_task_sighand() using __cond_lock() macro to make sparse happy. Suggested-by: Eric Dumazet <eric.dumazet@xxxxxxxxx> Signed-off-by: Namhyung Kim <namhyung@xxxxxxxxx> Cc: Ingo Molnar <mingo@xxxxxxx> Cc: Oleg Nesterov <oleg@xxxxxxxxxx> Cc: Roland McGrath <roland@xxxxxxxxxx> Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> --- include/linux/sched.h | 9 ++++++++- kernel/signal.c | 3 ++- 2 files changed, 10 insertions(+), 2 deletions(-) diff -puN include/linux/sched.h~signals-annotate-lock_task_sighand include/linux/sched.h --- a/include/linux/sched.h~signals-annotate-lock_task_sighand +++ a/include/linux/sched.h @@ -2223,9 +2223,16 @@ static inline void task_unlock(struct ta spin_unlock(&p->alloc_lock); } -extern struct sighand_struct *lock_task_sighand(struct task_struct *tsk, +extern struct sighand_struct *__lock_task_sighand(struct task_struct *tsk, unsigned long *flags); +#define lock_task_sighand(tsk, flags) \ +({ struct sighand_struct *__ss; \ + __cond_lock(&(tsk)->sighand->siglock, \ + (__ss = __lock_task_sighand(tsk, flags))); \ + __ss; \ +}) \ + static inline void unlock_task_sighand(struct task_struct *tsk, unsigned long *flags) { diff -puN kernel/signal.c~signals-annotate-lock_task_sighand kernel/signal.c --- a/kernel/signal.c~signals-annotate-lock_task_sighand +++ a/kernel/signal.c @@ -1105,7 +1105,8 @@ int zap_other_threads(struct task_struct return count; } -struct sighand_struct *lock_task_sighand(struct task_struct *tsk, unsigned long *flags) +struct sighand_struct *__lock_task_sighand(struct task_struct *tsk, + unsigned long *flags) { struct sighand_struct *sighand; _ Patches currently in -mm which might be from namhyung@xxxxxxxxx are linux-next.patch init-mark-__user-address-space-on-string-literals.patch kernel-userc-add-lock-release-annotation-on-free_user.patch printk-fixup-declaration-of-kmsg_reasons.patch printk-add-lock-context-annotation.patch printk-change-type-of-boot_delay-to-int.patch printk-declare-printk_ratelimit_state-in-ratelimith.patch printk-declare-printk_ratelimit_state-in-ratelimith-fix.patch signals-annotate-lock_task_sighand.patch exit-add-lock-context-annotation-on-find_new_reaper.patch -- To unsubscribe from this list: send the line "unsubscribe mm-commits" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html