lkml.org 
[lkml]   [2012]   [May]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    SubjectRe: [PATCH v2 2/4] coredump: ensure the fpu state is flushed for proper multi-threaded core dump
    From
    Date
    On Sun, 2012-05-13 at 18:11 +0200, Oleg Nesterov wrote:
    > On 05/11, Suresh Siddha wrote:
    > >
    > > On Fri, 2012-05-11 at 18:51 +0200, Oleg Nesterov wrote:
    > > > On 05/10, Suresh Siddha wrote:
    > > > >
    > > > > --- a/fs/exec.c
    > > > > +++ b/fs/exec.c
    > > > > @@ -1930,8 +1930,21 @@ static int coredump_wait(int exit_code, struct core_state *core_state)
    > > > > core_waiters = zap_threads(tsk, mm, core_state, exit_code);
    > > > > up_write(&mm->mmap_sem);
    > > > >
    > > > > - if (core_waiters > 0)
    > > > > + if (core_waiters > 0) {
    > > > > + struct core_thread *ptr;
    > > > > +
    > > > > wait_for_completion(&core_state->startup);
    > > > > + /*
    > > > > + * Wait for all the threads to become inactive, so that
    > > > > + * all the thread context (extended register state, like
    > > > > + * fpu etc) gets copied to the memory.
    > > > > + */
    > > > > + ptr = core_state->dumper.next;
    > > > > + while (ptr != NULL) {
    > > > > + wait_task_inactive(ptr->task, 0);
    > > > > + ptr = ptr->next;
    > > > > + }
    > > > > + }

    Linus, are you ok with this?

    > > and in most cases, wait_task_inactive() will
    > > return success immediately.
    >
    > I agree. Still, we add the O(n) loop which needs task_rq_lock() at least.

    yeah I am not too happy with it. But we have only two choices and I
    presented both of them.

    1. What I do in this patch. Wait for all the threads to become inactive
    so that core dumping thread can proceed with the dump operation.

    2. call the equivalent of prepare_to_copy() in exit_mm() when the
    mm->core_state is set, so that each thread's latest state is flushed to
    the memory before we notify the main thread to start the core dump. You
    and I think even Linus didn't like it.

    May be there is a third one, which I don't want to pursue. using
    finish_task_switch() to notify the main-core dumping thread that all the
    other threads are now inactive. But adding the core-dump related check
    in the hot task switch path is probably not a good idea :(

    Given that the process exit with a signal leading to coredump is not a
    common thing, we can probably live with option-1.

    > I believe the patch is correct.
    >

    Oleg, Can I treat this as your Ack for this patch?

    thanks,
    suresh



    \
     
     \ /
      Last update: 2012-05-15 21:01    [W:0.030 / U:64.240 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site