Messages in this thread | | | Date | Sat, 15 Dec 2012 02:25:17 +0400 | From | Cyrill Gorcunov <> | Subject | Re: [CRIU] [PATCH] Add VDSO time function support for x86 32-bit kernel |
| |
On Fri, Dec 14, 2012 at 02:00:17PM -0800, H. Peter Anvin wrote: > On 12/14/2012 01:27 PM, Andy Lutomirski wrote: > > > > I don't know all that much about the linux vm. Can we create a > > special vdso address_space or struct inode or something so that a > > single vma can contain pages with different flags? > > > > No, that is still different vmas, but it probably isn't a big deal. > > The advantage of having an inode/namespace is that it lets you use > mmap() as opposed to mremap() with it, which might be useful, I don't know. > > One option for the checkpoint people might actually be to not use the > vdso for a process that needs to be checkpointed and restarted on a > different machine or different kernel version. Instead they can install > a pseudo-vdso which just calls normal system calls, and is simply a > static piece of code that makes normal system calls ... since the > internals of the kernel are hidden from userspace it is "clean" that way. > > With any actual vdso you risk something like: >
Is there a chance to make it something like that (assuming the dumpee is ptraced)
> -> vdso entry
mark task as vdso-entered
> -> signal received, transfer to signal handler > -> signal handler exit
before task leave vdso the task mark vdso-entered get cleaned and if ptraced, the ptracing task is notified
> ... and now you return to the address in the old vdso, but the internals > of the vdso may have changed.
this would allow us to defer checkpoint until task finish vdso code. Peter, if I understand you correctly you propose we provide some own proxy-vdso which would redirect calls to real ones, right? But the main problem is that is exactly the idea to be able to c/r existing programs without recompiling and such (or I miss something here?).
Cyrill
| |