Skip to content
  • Oleg Nesterov's avatar
    genirq: reimplement exit_irq_thread() hook via task_work_add() · 4d1d61a6
    Oleg Nesterov authored
    
    
    exit_irq_thread() and task->irq_thread are needed to handle the unexpected
    (and unlikely) exit of irq-thread.
    
    We can use task_work instead and make this all private to
    kernel/irq/manage.c, cleanup plus micro-optimization.
    
    1. rename exit_irq_thread() to irq_thread_dtor(), make it
       static, and move it up before irq_thread().
    
    2. change irq_thread() to do task_work_add(irq_thread_dtor)
       at the start and task_work_cancel() before return.
    
       tracehook_notify_resume() can never play with kthreads,
       only do_exit()->exit_task_work() can call the callback
       and this is what we want.
    
    3. remove task_struct->irq_thread and the special hook
       in do_exit().
    
    Signed-off-by: default avatarOleg Nesterov <oleg@redhat.com>
    Reviewed-by: default avatarThomas Gleixner <tglx@linutronix.de>
    Cc: David Howells <dhowells@redhat.com>
    Cc: Richard Kuo <rkuo@codeaurora.org>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Alexander Gordeev <agordeev@redhat.com>
    Cc: Chris Zankel <chris@zankel.net>
    Cc: David Smith <dsmith@redhat.com>
    Cc: "Frank Ch. Eigler" <fche@redhat.com>
    Cc: Geert Uytterhoeven <geert@linux-m68k.org>
    Cc: Larry Woodman <lwoodman@redhat.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Tejun Heo <tj@kernel.org>
    Cc: Ingo Molnar <mingo@elte.hu>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
    4d1d61a6