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,
struct pid *tid, CoreEntry *core)
{
struct parasite_dump_thread *args;
pid_t pid = tid->real;
user_regs_struct_t regs_orig;
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)
ret = parasite_execute_daemon(PARASITE_CMD_DUMP_THREAD, ctl);
else {
pid_t pid = tid->real;
user_regs_struct_t regs_orig;
args = parasite_args(ctl, struct parasite_dump_thread);
ret = ptrace(PTRACE_GETREGS, pid, NULL, &regs_orig);
if (ret) {
pr_perror("Can't obtain registers (pid: %d)", pid);
return -1;
}
ret = ptrace(PTRACE_GETREGS, pid, NULL, &regs_orig);
if (ret) {
pr_perror("Can't obtain registers (pid: %d)", pid);
return -1;
}
ret = parasite_execute_trap_by_pid(PARASITE_CMD_INIT_THREAD, ctl,
pid, &regs_orig,
ctl->r_thread_stack, false);
if (ret) {
pr_err("Can't init thread in parasite %d\n", pid);
return -1;
}
ret = parasite_execute_trap_by_pid(PARASITE_CMD_INIT_THREAD, ctl,
pid, &regs_orig,
ctl->r_thread_stack, false);
if (ret) {
pr_err("Can't init thread in parasite %d\n", pid);
return -1;
}
ret = get_task_regs(pid, regs_orig, core);
if (ret)
pr_err("Can't obtain regs for thread %d\n", pid);
ret = get_task_regs(pid, regs_orig, core);
if (ret)
pr_err("Can't obtain regs for thread %d\n", pid);
if (parasite_execute_trap_by_pid(PARASITE_CMD_FINI_THREAD, ctl,
pid, &regs_orig,
ctl->r_thread_stack, true)) {
pr_err("Can't init thread in parasite %d\n", pid);
return -1;
}
if (ret)
return -1;
if (parasite_execute_trap_by_pid(PARASITE_CMD_FINI_THREAD, ctl,
pid, &regs_orig,
ctl->r_thread_stack, true)) {
pr_err("Can't init thread in parasite %d\n", pid);
return -1;
}
if (ret)
return -1;
memcpy(&core->thread_core->blk_sigset,
&args->blocked, sizeof(k_rtsigset_t));
core->thread_core->has_blk_sigset = true;
memcpy(&core->thread_core->blk_sigset,
&args->blocked, sizeof(k_rtsigset_t));
core->thread_core->has_blk_sigset = true;
BUG_ON(!core->thread_core->sas);
copy_sas(core->thread_core->sas, &args->sas);
}
BUG_ON(!core->thread_core->sas);
copy_sas(core->thread_core->sas, &args->sas);
CORE_THREAD_ARCH_INFO(core)->clear_tid_addr = encode_pointer(args->tid_addr);
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