lkml.org 
[lkml]   [2012]   [Apr]   [30]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    From
    SubjectRe: [PATCH v5 1/3] task_work_add: generic process-context callbacks
    Date
    Oleg Nesterov <oleg@redhat.com> wrote:

    > Provide a simple mechanism that allows running code in the
    > (nonatomic) context of the arbitrary task.
    >
    > The caller does task_work_add(task, task_work) and this task
    > executes task_work->func() either from do_notify_resume() or
    > from do_exit(). The callback can rely on PF_EXITING to detect
    > the latter case.
    >
    > "struct task_work" can be embedded in another struct, still it
    > has "void *data" to handle the most common/simple case.
    >
    > This allows us to kill the ->replacement_session_keyring hack,
    > and potentially this can have more users.
    >
    > Performance-wise, this adds 2 "unlikely(!hlist_empty())" checks
    > into tracehook_notify_resume() and do_exit(). But at the same
    > time we can remove the "replacement_session_keyring != NULL"
    > checks from arch/*/signal.c and exit_creds().
    >
    > Note: task_work_add/task_work_run abuses ->pi_lock. This is
    > only because this lock is already used by lookup_pi_state() to
    > synchronize with do_exit() setting PF_EXITING. Fortunately the
    > scope of this lock in task_work.c is really tiny, and the code
    > is unlikely anyway.
    >
    > v2:
    > - implement task_work_cancel(func), it removes the first
    > task_work with the same callback.
    > v3:
    > - task_work_add() gets the new arg, "bool notify" to
    > conditionalize set_notify_resume(), this makes it useable
    > for kthreads and task_work_add(notify => false) can
    > work without TIF_NOTIFY_RESUME.
    >
    > - don't add the dummy "ifndef TIF_NOTIFY_RESUME" inlines,
    > just add the simple check in task_work_add().
    > v4:
    > - s/task_work_queue/task_work_add/
    > v5:
    > - task_work_run() uses current explicitely
    >
    > Todo:
    > - move clear_thread_flag(TIF_NOTIFY_RESUME) from arch/
    > to tracehook_notify_resume()
    >
    > - rename tracehook_notify_resume() and move it into
    > linux/task_work.h
    >
    > - m68k and xtensa don't have TIF_NOTIFY_RESUME and thus
    > task_work_add(notify => true) fails with -ENOTSUPP.
    >
    > However, ->replacement_session_keyring equally needs
    > this flag, task_work_add() is not worse.
    >
    > Signed-off-by: Oleg Nesterov <oleg@redhat.com>

    Acked-by: David Howells <dhowells@redhat.com>


    \
     
     \ /
      Last update: 2012-04-30 11:21    [W:0.036 / U:4.632 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site