diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2012-05-23 13:59:07 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2012-05-23 13:59:07 -0400 |
commit | ec0d7f18ab7b5097d7c0c8f3d909ca1031b9d5cd (patch) | |
tree | 7d62c924592145f819ecaa5d60460a05a10dfdbd /fs | |
parent | 269af9a1a08d368b46d72e74126564d04c354f7e (diff) | |
parent | 1dcc8d7ba235a316a056f993e88f0d18b92c60d9 (diff) |
Merge branch 'x86-fpu-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull fpu state cleanups from Ingo Molnar:
"This tree streamlines further aspects of FPU handling by eliminating
the prepare_to_copy() complication and moving that logic to
arch_dup_task_struct().
It also fixes the FPU dumps in threaded core dumps, removes and old
(and now invalid) assumption plus micro-optimizes the exit path by
avoiding an FPU save for dead tasks."
Fixed up trivial add-add conflict in arch/sh/kernel/process.c that came
in because we now do the FPU handling in arch_dup_task_struct() rather
than the legacy (and now gone) prepare_to_copy().
* 'x86-fpu-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
x86, fpu: drop the fpu state during thread exit
x86, xsave: remove thread_has_fpu() bug check in __sanitize_i387_state()
coredump: ensure the fpu state is flushed for proper multi-threaded core dump
fork: move the real prepare_to_copy() users to arch_dup_task_struct()
Diffstat (limited to 'fs')
-rw-r--r-- | fs/exec.c | 15 |
1 files changed, 14 insertions, 1 deletions
@@ -1938,8 +1938,21 @@ static int coredump_wait(int exit_code, struct core_state *core_state) | |||
1938 | core_waiters = zap_threads(tsk, mm, core_state, exit_code); | 1938 | core_waiters = zap_threads(tsk, mm, core_state, exit_code); |
1939 | up_write(&mm->mmap_sem); | 1939 | up_write(&mm->mmap_sem); |
1940 | 1940 | ||
1941 | if (core_waiters > 0) | 1941 | if (core_waiters > 0) { |
1942 | struct core_thread *ptr; | ||
1943 | |||
1942 | wait_for_completion(&core_state->startup); | 1944 | wait_for_completion(&core_state->startup); |
1945 | /* | ||
1946 | * Wait for all the threads to become inactive, so that | ||
1947 | * all the thread context (extended register state, like | ||
1948 | * fpu etc) gets copied to the memory. | ||
1949 | */ | ||
1950 | ptr = core_state->dumper.next; | ||
1951 | while (ptr != NULL) { | ||
1952 | wait_task_inactive(ptr->task, 0); | ||
1953 | ptr = ptr->next; | ||
1954 | } | ||
1955 | } | ||
1943 | 1956 | ||
1944 | return core_waiters; | 1957 | return core_waiters; |
1945 | } | 1958 | } |