[CRIU] [PATCH 5/5] vdso: x86 -- Add handling of vvar zones
Cyrill Gorcunov
gorcunov at openvz.org
Mon Jun 16 15:14:17 PDT 2014
New kernel 3.16 will have old vDSO zone splitted into the two vmas:
one for vdso code itself and second that named vvar for data been
referenced from vdso code.
Because I can't do 'dump' and 'restore' parts of the code separately
(otherwise test would fail) the commit is pretty big one and hard to
read so here is detailed explanation what's going on.
1) When start dumping we detect vvar zone by reading /proc/pid/smap
and looking up for "[vvar]" token. Note the vvar zone is mapped
by a kernel with PF/IO flags so we should not fail here.
Also it's assumed that at least for now kernel won't be changed
much and [vvar] zone always follows the [vdso] zone, otherwise
criu will print error.
2) In previous commits we disabled dumping vvar area contents so
the restorer code never try to read vvar data but still we need
to map vvar zone thus vma entry remains in image.
3) As with previous vdso format we might have 2 cases
a) Dump and restore is happening on same kernel
b) Dump and restore are done on different kernels
To detect which case we have we parse vdso data from image
and find symbols offsets then compare their values with runtime
symbols provided us by a kernel. If they match and (!!!) the
size of vvar zone is the same -- we simply remap both zones
from runtime kernel into the positions dumpee had at checkpoint
time. This is that named "inplace" remap (a).
If this happens the vdso_proxify() routine drops VMA_AREA_REGULAR
from vvar area provided by a caller code and restorer won't try
to handle this vma. It looks somehow strange and probably should
be reworked but for now I left it as is to minimize the patch.
In case of (b) we need to generate a proxy. We do that in same
way as we were before just include vvar zone into proxy and save
vvar proxy address inside vdso mark injected into vdso area. Thus
on subsequent checkpoint we can detect proxy vvar zone and rip
it off the list of vmas to handle.
Signed-off-by: Cyrill Gorcunov <gorcunov at openvz.org>
---
arch/x86/include/asm/vdso.h | 9 ++-
arch/x86/vdso-pie.c | 71 ++++++++++++++++-----
arch/x86/vdso.c | 146 ++++++++++++++++++++++++++++++++++++--------
cr-restore.c | 4 +-
include/vdso.h | 3 +-
pie/restorer.c | 28 ++++++++-
proc_parse.c | 21 ++++++-
7 files changed, 233 insertions(+), 49 deletions(-)
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0005-vdso-x86-Add-handling-of-vvar-zones.patch
Type: text/x-patch
Size: 16868 bytes
Desc: not available
URL: <http://lists.openvz.org/pipermail/criu/attachments/20140617/d5d6fe7d/attachment-0001.bin>
More information about the CRIU
mailing list