Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/signal
Linus Torvalds [Fri, 1 Jun 2012 01:47:30 +0000 (18:47 -0700)]
Pull second pile of signal handling patches from Al Viro:
 "This one is just task_work_add() series + remaining prereqs for it.

  There probably will be another pull request from that tree this
  cycle - at least for helpers, to get them out of the way for per-arch
  fixes remaining in the tree."

Fix trivial conflict in kernel/irq/manage.c: the merge of Andrew's pile
had brought in commit 97fd75b7b8e0 ("kernel/irq/manage.c: use the
pr_foo() infrastructure to prefix printks") which changed one of the
pr_err() calls that this merge moves around.

* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/signal:
  keys: kill task_struct->replacement_session_keyring
  keys: kill the dummy key_replace_session_keyring()
  keys: change keyctl_session_to_parent() to use task_work_add()
  genirq: reimplement exit_irq_thread() hook via task_work_add()
  task_work_add: generic process-context callbacks
  avr32: missed _TIF_NOTIFY_RESUME on one of do_notify_resume callers
  parisc: need to check NOTIFY_RESUME when exiting from syscall
  move key_repace_session_keyring() into tracehook_notify_resume()
  TIF_NOTIFY_RESUME is defined on all targets now

1  2 
arch/arm/kernel/signal.c
arch/parisc/kernel/entry.S
arch/tile/kernel/process.c
arch/x86/kernel/signal.c
include/linux/sched.h
kernel/Makefile
kernel/exit.c
kernel/fork.c
kernel/irq/manage.c
security/keys/keyctl.c

Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
diff --cc kernel/Makefile
Simple merge
diff --cc kernel/exit.c
Simple merge
diff --cc kernel/fork.c
Simple merge
@@@ -775,6 -774,33 +776,33 @@@ static void wake_threads_waitq(struct i
                wake_up(&desc->wait_for_threads);
  }
  
+ static void irq_thread_dtor(struct task_work *unused)
+ {
+       struct task_struct *tsk = current;
+       struct irq_desc *desc;
+       struct irqaction *action;
+       if (WARN_ON_ONCE(!(current->flags & PF_EXITING)))
+               return;
+       action = kthread_data(tsk);
 -      pr_err("genirq: exiting task \"%s\" (%d) is an active IRQ thread (irq %d)\n",
++      pr_err("exiting task \"%s\" (%d) is an active IRQ thread (irq %d)\n",
+              tsk->comm ? tsk->comm : "", tsk->pid, action->irq);
+       desc = irq_to_desc(action->irq);
+       /*
+        * If IRQTF_RUNTHREAD is set, we need to decrement
+        * desc->threads_active and wake possible waiters.
+        */
+       if (test_and_clear_bit(IRQTF_RUNTHREAD, &action->thread_flags))
+               wake_threads_waitq(desc);
+       /* Prevent a stale desc->threads_oneshot */
+       irq_finalize_oneshot(desc, action);
+ }
  /*
   * Interrupt handler thread
   */
Simple merge