[Devel] Re: [PATCH 08/10] Introduce functions to restart a process
Andrey Mirkin
major at openvz.org
Thu Oct 23 02:54:45 PDT 2008
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
More information about the Devel
mailing list