Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c41247e1 authored by Paul E. McKenney's avatar Paul E. McKenney
Browse files

signal: Explain local_irq_save() call



The explicit local_irq_save() in __lock_task_sighand() is needed to avoid
a potential deadlock condition, as noted in a841796f (signal:
align __lock_task_sighand() irq disabling and RCU).  However, someone
reading the code might be forgiven for concluding that this separate
local_irq_save() was completely unnecessary.  This commit therefore adds
a comment referencing the shiny new block comment on rcu_read_unlock().

Reported-by: default avatarOleg Nesterov <oleg@redhat.com>
Signed-off-by: default avatarPaul E. McKenney <paulmck@linux.vnet.ibm.com>
Acked-by: default avatarOleg Nesterov <oleg@redhat.com>
Reviewed-by: default avatarLai Jiangshan <laijs@cn.fujitsu.com>
parent ab74fdfd
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -1263,6 +1263,10 @@ struct sighand_struct *__lock_task_sighand(struct task_struct *tsk,
	struct sighand_struct *sighand;

	for (;;) {
		/*
		 * Disable interrupts early to avoid deadlocks.
		 * See rcu_read_unlock() comment header for details.
		 */
		local_irq_save(*flags);
		rcu_read_lock();
		sighand = rcu_dereference(tsk->sighand);