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    [from the cache]
©2003-2011 Jasper Spaans