[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <1337105014.12610.81.camel@sbsiddha-desk.sc.intel.com>
Date: Tue, 15 May 2012 11:03:33 -0700
From: Suresh Siddha <suresh.b.siddha@...el.com>
To: Oleg Nesterov <oleg@...hat.com>, torvalds@...ux-foundation.org
Cc: hpa@...or.com, mingo@...e.hu, linux-kernel@...r.kernel.org,
suresh@...stanetworks.com
Subject: Re: [PATCH v2 2/4] coredump: ensure the fpu state is flushed for
proper multi-threaded core dump
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
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists