• Petr Mladek's avatar
    kthread: initial support for delayed kthread work · 22597dc3
    Petr Mladek authored
    We are going to use kthread_worker more widely and delayed works
    will be pretty useful.
    
    The implementation is inspired by workqueues.  It uses a timer to queue
    the work after the requested delay.  If the delay is zero, the work is
    queued immediately.
    
    In compare with workqueues, each work is associated with a single worker
    (kthread).  Therefore the implementation could be much easier.  In
    particular, we use the worker->lock to synchronize all the operations with
    the work.  We do not need any atomic operation with a flags variable.
    
    In fact, we do not need any state variable at all.  Instead, we add a list
    of delayed works into the worker.  Then the pending work is listed either
    in the list of queued or delayed works.  And the existing check of pending
    works is the same even for the delayed ones.
    
    A work must not be assigned to another worker unless reinitialized.
    Therefore the timer handler might expect that dwork->work->worker is valid
    and it could simply take the lock.  We just add some sanity checks to help
    with debugging a potential misuse.
    
    Link: http://lkml.kernel.org/r/1470754545-17632-9-git-send-email-pmladek@suse.comSigned-off-by: default avatarPetr Mladek <pmladek@suse.com>
    Acked-by: default avatarTejun Heo <tj@kernel.org>
    Cc: Oleg Nesterov <oleg@redhat.com>
    Cc: Ingo Molnar <mingo@redhat.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Steven Rostedt <rostedt@goodmis.org>
    Cc: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
    Cc: Josh Triplett <josh@joshtriplett.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: Jiri Kosina <jkosina@suse.cz>
    Cc: Borislav Petkov <bp@suse.de>
    Cc: Michal Hocko <mhocko@suse.cz>
    Cc: Vlastimil Babka <vbabka@suse.cz>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    22597dc3
kthread.c 26.2 KB