0f7e663dea
tt-mode closes switch_pipes in exit_thread_tt and kills processes in switch_to_tt, if the exit_state is EXIT_DEAD or EXIT_ZOMBIE. In very rare cases the exiting process can be scheduled out after having set exit_state and closed switch_pipes (from release_task it calls proc_pid_flush, which might sleep). If this process is to be restarted, UML failes in switch_to_tt with: write of switch_pipe failed, err = 9 We fix this by closing switch_pipes not in exit_thread_tt, but later in release_thread_tt. Additionally, we set switch_pipe[0] = 0 after closing. switch_to_tt must not kill "from" process depending on its exit_state, but must kill it after release_thread was processed only, so it examines switch_pipe[0] for its decision. Signed-off-by: Bodo Stroesser <bstroesser@fujitsu-siemens.com> Signed-off-by: Jeff Dike <jdike@addtoit.com> Cc: Paolo 'Blaisorblade' Giarrusso <blaisorblade@yahoo.it> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org> |
||
---|---|---|
.. | ||
include | ||
ptproxy | ||
exec_kern.c | ||
exec_user.c | ||
gdb_kern.c | ||
gdb.c | ||
ksyms.c | ||
Makefile | ||
mem_user.c | ||
mem.c | ||
process_kern.c | ||
syscall_kern.c | ||
syscall_user.c | ||
time.c | ||
tlb.c | ||
tracer.c | ||
trap_user.c | ||
uaccess_user.c | ||
uaccess.c | ||
unmap.c |