Commit b2091eb7 authored by Andrey Vagin's avatar Andrey Vagin Committed by Pavel Emelyanov

parasite: clean up parasite_dump_thread_seized

It is never called for thread leaders, because they are dumped by
dump_task_core_all
Signed-off-by: 's avatarAndrey Vagin <avagin@openvz.org>
Signed-off-by: 's avatarPavel Emelyanov <xemul@parallels.com>
parent 5336bc13
...@@ -486,50 +486,47 @@ int parasite_dump_thread_seized(struct parasite_ctl *ctl, int id, ...@@ -486,50 +486,47 @@ int parasite_dump_thread_seized(struct parasite_ctl *ctl, int id,
struct pid *tid, CoreEntry *core) struct pid *tid, CoreEntry *core)
{ {
struct parasite_dump_thread *args; struct parasite_dump_thread *args;
pid_t pid = tid->real;
user_regs_struct_t regs_orig;
int ret; int ret;
args = parasite_args(ctl, struct parasite_dump_thread); BUG_ON(id == 0); /* Leader is dumped in dump_task_core_all */
if (id == 0) args = parasite_args(ctl, struct parasite_dump_thread);
ret = parasite_execute_daemon(PARASITE_CMD_DUMP_THREAD, ctl);
else {
pid_t pid = tid->real;
user_regs_struct_t regs_orig;
ret = ptrace(PTRACE_GETREGS, pid, NULL, &regs_orig); ret = ptrace(PTRACE_GETREGS, pid, NULL, &regs_orig);
if (ret) { if (ret) {
pr_perror("Can't obtain registers (pid: %d)", pid); pr_perror("Can't obtain registers (pid: %d)", pid);
return -1; return -1;
} }
ret = parasite_execute_trap_by_pid(PARASITE_CMD_INIT_THREAD, ctl, ret = parasite_execute_trap_by_pid(PARASITE_CMD_INIT_THREAD, ctl,
pid, &regs_orig, pid, &regs_orig,
ctl->r_thread_stack, false); ctl->r_thread_stack, false);
if (ret) { if (ret) {
pr_err("Can't init thread in parasite %d\n", pid); pr_err("Can't init thread in parasite %d\n", pid);
return -1; return -1;
} }
ret = get_task_regs(pid, regs_orig, core); ret = get_task_regs(pid, regs_orig, core);
if (ret) if (ret)
pr_err("Can't obtain regs for thread %d\n", pid); pr_err("Can't obtain regs for thread %d\n", pid);
if (parasite_execute_trap_by_pid(PARASITE_CMD_FINI_THREAD, ctl, if (parasite_execute_trap_by_pid(PARASITE_CMD_FINI_THREAD, ctl,
pid, &regs_orig, pid, &regs_orig,
ctl->r_thread_stack, true)) { ctl->r_thread_stack, true)) {
pr_err("Can't init thread in parasite %d\n", pid); pr_err("Can't init thread in parasite %d\n", pid);
return -1; return -1;
} }
if (ret) if (ret)
return -1; return -1;
memcpy(&core->thread_core->blk_sigset, memcpy(&core->thread_core->blk_sigset,
&args->blocked, sizeof(k_rtsigset_t)); &args->blocked, sizeof(k_rtsigset_t));
core->thread_core->has_blk_sigset = true; core->thread_core->has_blk_sigset = true;
BUG_ON(!core->thread_core->sas); BUG_ON(!core->thread_core->sas);
copy_sas(core->thread_core->sas, &args->sas); copy_sas(core->thread_core->sas, &args->sas);
}
CORE_THREAD_ARCH_INFO(core)->clear_tid_addr = encode_pointer(args->tid_addr); CORE_THREAD_ARCH_INFO(core)->clear_tid_addr = encode_pointer(args->tid_addr);
tid->virt = args->tid; tid->virt = args->tid;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment