Re: [Devel] Re: [PATCH 08/10] Introduce functions to restart a process

From: Andrey Mirkin
Date: Thu Oct 23 2008 - 05:55:39 EST


On Wednesday 22 October 2008 16:47 Cedric Le Goater wrote:
> >>> +ENTRY(i386_ret_from_resume)
> >>> + CFI_STARTPROC
> >>> + pushl %eax
> >>> + CFI_ADJUST_CFA_OFFSET 4
> >>> + call schedule_tail
> >>> + GET_THREAD_INFO(%ebp)
> >>> + popl %eax
> >>> + CFI_ADJUST_CFA_OFFSET -4
> >>> + movl (%esp), %eax
> >>> + testl %eax, %eax
> >>> + jz 1f
> >>> + pushl %esp
> >>> + call *%eax
> >>> + addl $4, %esp
> >>> +1:
> >>> + addl $256, %esp
> >>> + jmp ret_from_fork_tail
> >>> + CFI_ENDPROC
> >>> +END(i386_ret_from_resume)
> >>
> >> Could you explain why you need to do this
> >>
> >> call *%eax
> >>
> >> is it related to the freezer code ?
> >
> > It is not related to the freezer code actually.
> > That is needed to restart syscalls. Right now I don't have a code in my
> > patchset which restarts a syscall, but later I plan to add it.
> > In OpenVZ checkpointing we restart syscalls if process was caught in
> > syscall during checkpointing.
>
> ok. I get it now. why 256 bytes of extra stack ? I'm sure it's not random.
We are putting special structure on stack, which is used at the very end of
the whole restart procedure to restore complex states (ptrace is one of such
cases). Right now I don't need to use this structure as we have a deal with
simple cases, but reservation of 256 bytes on stack is needed for future.

Andrey
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/