lkml.org 
[lkml]   [2022]   [Jan]   [18]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    SubjectRe: [PATCH V6 01/10] Use copy_process in vhost layer
    From
    On 1/18/22 12:51 PM, Mike Christie wrote:
    > On 1/17/22 11:31 AM, Eric W. Biederman wrote:
    >> Mike Christie <michael.christie@oracle.com> writes:
    >>
    >>> On 12/22/21 12:24 PM, Eric W. Biederman wrote:
    >>>> All I am certain of is that you need to set
    >>>> "args->exit_signal = -1;". This prevents having to play games with
    >>>> do_notify_parent.
    >>>
    >>> Hi Eric,
    >>>
    >>> I have all your review comments handled except this one. It's looking like it's
    >>> more difficult than just setting the exit_signal=-1, so I wanted to check that
    >>> I understood you.
    >>
    >> [snip problems with exit_signal = -1]
    >>
    >>>
    >>> What do you think?
    >>
    >> I was wrong. I appear to have confused the thread and the non-thread
    >> cases.
    >>
    >> Perhaps I meant "args->exit_signal = 0". That looks like
    >> do_notify_parent won't send it, and thread_group_leader continues to do
    >> the right thing.
    >
    > That doesn't work too. exit_notify will call do_notify_parent but
    > our parent, qemu, does not ignore SIGCHILD so we will not drop
    > down in into this chunk:
    >
    > psig = tsk->parent->sighand;
    > spin_lock_irqsave(&psig->siglock, flags);
    > if (!tsk->ptrace && sig == SIGCHLD &&
    > (psig->action[SIGCHLD-1].sa.sa_handler == SIG_IGN ||
    > (psig->action[SIGCHLD-1].sa.sa_flags & SA_NOCLDWAIT))) {
    >
    > do_notify_parent will return false and so autoreap in exit_notify will
    > be false.
    >
    >
    >
    >>
    >> Baring any additional confusion on my part that cleanly solves the
    >> problem of how not to send a signal from a child process cleanly.
    >>


    Oh yeah, maybe we are thinking about different things.

    The issue I am hitting is that the parent, qemu, does not know about
    these task_structs. And, userspace can add/delete these vhost devices
    dynamically. So qemu could continue to run, but the vhost device could
    be deleted. In this case I want to free up the task_struct resources
    since we are no longer using it.

    With kthreads do_notify_parent returns true and exit_notify calls
    release_task, so it's handled for me. I had stuck in the USER/VHOST
    check in the patch you didn't like to get that behavior.

    If you prefer not adding the VHOST/USER task check in exit_notify then
    instead of auto reaping, would another possible alternative be to add a
    modified kernel_wait like function in the vhost layer to reap the task?

    \
     
     \ /
      Last update: 2022-01-18 20:01    [W:4.718 / U:0.072 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site