mirror of
https://github.com/torvalds/linux.git
synced 2026-07-22 21:47:20 +02:00
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 | ||