2
0
mirror of https://github.com/checkpoint-restore/criu synced 2025-08-30 05:48:05 +00:00

3753 Commits

Author SHA1 Message Date
Andrey Vagin
565eb01346 sigframe: don't include restorer.h
Signed-off-by: Andrey Vagin <avagin@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2013-11-06 12:37:38 +04:00
Andrey Vagin
7c8e987e5d paraiste: don't include vdso.h in parasite-syscall.c
Signed-off-by: Andrey Vagin <avagin@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2013-11-06 12:37:24 +04:00
Andrey Vagin
7dfea8a767 parasite: stack must be initialized by highest address
Stack grows down on x86 and ARM

Signed-off-by: Andrey Vagin <avagin@openvz.org>
Acked-by: Cyrill Gorcunov <gorcunov@openvz.org>
Acked-by: Alexander Kartashov <alekskartashov@parallels.com>:
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2013-11-06 12:33:47 +04:00
Pavel Emelyanov
ba0527d42b restore: Remove actually unused variable from sigreturn_restore
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2013-11-04 00:16:34 +04:00
Pavel Emelyanov
32b4a26c6b restore: Comment why we need copy data on task restore args
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2013-11-04 00:16:14 +04:00
Pavel Emelyanov
ebd76f4bec restore: Move sigpending out of sigreturn_restore
The sigreturn_restore is the place when we prepare the restorer
layout and jump to it. Reading and decoding images should be done
earlier. The new rst-malloc engine allows for that.

Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2013-11-04 00:15:39 +04:00
Pavel Emelyanov
91f797f66f restore: Move posix-timers out of sigreturn_restore
The sigreturn_restore is the place when we prepare the restorer
layout and jump to it. Reading and decoding images should be done
earlier. The new rst-malloc engine allows for that.

Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2013-11-04 00:15:15 +04:00
Pavel Emelyanov
ed88f2df66 restore: Move rlimits out of sigreturn_restore
The sigreturn_restore is the place when we prepare the restorer
layout and jump to it. Reading and decoding images should be done
earlier. The new rst-malloc engine allows for that.

Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2013-11-04 00:14:42 +04:00
Pavel Emelyanov
4f675313cc rst-malloc: Switch to private allocations once forked
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2013-11-03 17:40:15 +04:00
Pavel Emelyanov
ca0b51bc00 rst: Close logdir earlier
Just a code sanitation.

Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2013-11-03 17:37:10 +04:00
Pavel Emelyanov
3e235f715e restore: Get self maps after allocating necessary memory
We're filling some rst-mem data _after_ we get the self maps
list. This is a bug, since the restorer vma get forcedly mapped
into a place we get out of self-vmas-list.

Move the self-vmas-list getting after we allocate the memory
we need.

Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2013-11-03 17:23:31 +04:00
Ruslan Kuprieiev
95a961b739 log: don't kill task, if unable to write pidfile
write_pidfile() was taken out from cr-restore.c, where it was supposed to kill
child if unable to create pidfile. Now we're also using it at service/page-server where kill is redundant. So lets take out kill() from write_pidfile() back to cr-restore.

Signed-off-by: Ruslan Kuprieiev <kupruser@gmail.com>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2013-11-03 12:51:13 +04:00
Pavel Emelyanov
45f39e0415 rst: Make shmem restore to use rst-malloc
This actually fixes a bug -- memory for shmem info was
not allocated dynamically, thus we were limited in the
amount of shmems to be restored.

Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2013-11-02 01:06:31 +04:00
Pavel Emelyanov
7ed35d8a87 rst: Switch private rst-mem allocator on generic rst-malloc
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2013-11-02 01:05:13 +04:00
Pavel Emelyanov
297360ef7d rst: Switch shmalloc allocator to use rst-malloc
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2013-11-02 01:04:07 +04:00
Pavel Emelyanov
c9aaf9f3c4 rst: Introduce an engine to allocate memory on restore
On restore we need differetn types of memory allocation.
Here's an engine that tries to generalize them all. The
main difference is in how the buffer with objects is being
grown up.

There are 3 types of memory allocations:

1. shared memory -- objects, that will be used by all criu
   children, but will not reach the restorer
2. shared remapable -- the same, but restorer would need
   access to them, i.e. -- buffer with objects will get
   remapped into restorer
3. private -- the same, but allocatedby each task for itself

Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2013-11-02 01:01:48 +04:00
Igor Sukhih
647207714a util: Update kdev_to_odev to respect BITS_PER_LONG
Depending on BITS_PER_LONG userspace representation of dev_t
may vary, so we need to choose proper encoding.

Signed-off-by: Igor Sukhih <igor@parallels.com>
Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2013-11-01 17:40:54 +04:00
Ruslan Kuprieiev
59c43e481e v3 service: SIGCHLD handler
Hi!

Now we're ignoring SIGCHLD from forked children.
This patch provides SIGCHLD handler, that will wait for child and write some
information about it's exit status to logfile.

Signed-off-by: Ruslan Kuprieiev <kupruser@gmail.com>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2013-11-01 14:32:03 +04:00
Cyrill Gorcunov
c60c91f3d7 docs: Add 'service' command description
Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2013-11-01 14:29:12 +04:00
Alexander Kartashov
0720fe3de7 Documnetation: added the HOWTO on cross-compilation
Signed-off-by: Alexander Kartashov <alekskartashov@parallels.com>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2013-11-01 14:27:40 +04:00
Alexander Kartashov
55dda405d4 arm: kill fpu_state_t
It has been a mistake to introduce this struct since the FPU state
is stored deep inside an ARM sigframe. A remnant of the struct
is left to make the code compatible with the universal declaration
of the routine sigreturn_prep_fpu_frame().

Signed-off-by: Alexander Kartashov <alekskartashov@parallels.com>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2013-11-01 14:27:34 +04:00
Alexander Kartashov
a5752177f4 arm: initialize the ARM VFP header in the routine restore_fpu()
The ARM VFP header is a part of the VFP frame that makes
it unreasonable to have frame initialization split into
two routines. This patch moerges the ARM version of
the routine sigreturn_prep_fpu_frame() into restore_fpu()
and reduces the former into a stub.

Signed-off-by: Alexander Kartashov <alekskartashov@parallels.com>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2013-11-01 14:27:28 +04:00
Alexander Kartashov
5a63215bc8 arm: restore the VFP sigframe field fpscr properly
The routine restore_fpu() contains two bugs:

1) it reads more bytes from the array ThreadInfoArm::fpstate::vfp_regs
   than it actually containes;

2) the value of the field ThreadInfoArm::fpstate::fpscr is dropped
   on the floor.

Signed-off-by: Alexander Kartashov <alekskartashov@parallels.com>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2013-11-01 14:27:22 +04:00
Alexander Kartashov
e89af96d62 arm: fixed AArch64 syscall numbers
It turned out that AArch64 uses the UAPI syscall numbering scheme
that is incompatible with x86. Unfortunately this kills the idea
of the unified syscall table and syscall generator.

Note that the following syscalls:

* open,
* mkdir,
* rmdir,
* unlink,

are declared obsolete in the UAPI. Moreover the syscall arch_prctl
doesn't exist in the UAPI.

Signed-off-by: Alexander Kartashov <alekskartashov@parallels.com>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2013-11-01 14:27:16 +04:00
Alexander Kartashov
9af8d94901 cr: identify LDARCH and ARCH by default
Signed-off-by: Alexander Kartashov <alekskartashov@parallels.com>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2013-11-01 14:27:07 +04:00
Alexander Kartashov
be2f08eda0 sigframe: introduced the macros to access the FPU state
An fpu_state_t instance shouldn't be stored in an ARM sigframe
that makes it necessary to generalize the way the FPU state is
accessed in the routine construct_sigframe()

Signed-off-by: Alexander Kartashov <alekskartashov@parallels.com>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2013-11-01 14:26:58 +04:00
Alexander Kartashov
03a9c6b0b7 parasite-syscall: use the ptrace requests PTRACE_(GET|SET)REGSET to retrieve and set CPU registers
This patch introduces the routines ptrace_get_gpregs() and ptrace_set_gpregs()
that wrap the ptrace interface to get and set CPU registers respectively.
The motivation is to make the CRIU code be compatible with architectures that
don't support the PTRACE_GETREGS and PTRACE_SETREGS ptrace calls ---
the requests PTRACE_GETREGSET and PTRACE_SETREGSET are implemented instead.

Signed-off-by: Alexander Kartashov <alekskartashov@parallels.com>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2013-11-01 14:26:27 +04:00
Pavel Emelyanov
c2a366d44d ptrace: Introduce get/set regs helpers
Required for simpler next patching.

Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2013-11-01 14:23:32 +04:00
Cyrill Gorcunov
c1c9b8f6dc docs: Document -R|--leave-running option
Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2013-11-01 13:36:12 +04:00
Cyrill Gorcunov
fcfa58026c dump: Don't forget to cleanup link remap if needed
In case if checkpoint is failed or -R option passed
we need to remove link remap files created during
dump procedure.

Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2013-11-01 13:36:07 +04:00
Cyrill Gorcunov
7fe6220883 dump: Unlock network if -R option passed
It's been found that if -R (leave task running after checkpoint)
option passed we don't unlock network, nether we clean service
files (such as link remaps).

After a long discussion we choose the following path: if -R option
is passed, it means a user is quite confident in what he is doing
and consistency of the resources (file system) is achieved by
a user himself with help of post-dump script. Also a user knows
that the network will be unlocked and accept such case.

So here we check of -R being passed in command line and once
checkpoint complete we unlock the network.

Cleaning up of link remaps is addressed in another patch.

Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2013-11-01 13:35:48 +04:00
Andrey Vagin
1a0ee90d2b tcp: disable repair mode for sockets on rollback (v2)
Currently if a network namespace is dumped and something fails, sockets
remain in repair mode. It's because cpt_unlock_tcp_connections is
executed only if network namespace is not dumped.

cpt_unlock_tcp_connections disables repair mode for sockets and drops
netfilters. netfilters are not used in case of network namespaces.

v2: don't execute network-unlock scripts, if network namespace are not
    dumped.

Signed-off-by: Andrey Vagin <avagin@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2013-10-31 20:12:55 +04:00
Cyrill Gorcunov
ce5522ae36 restorer: Add missing closing brace in print
Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2013-10-31 20:01:11 +04:00
Ruslan Kuprieiev
95e93d6c9a service: reinit opts in cr_service_work()
These are inherited from parent on fork(), thus need to put them in
clean state.

Signed-off-by: Ruslan Kuprieiev <kupruser@gmail.com>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2013-10-31 20:00:31 +04:00
Ruslan Kuprieiev
fdbedf5a88 crtools: add init_opts()
Signed-off-by: Ruslan Kuprieiev <kupruser@gmail.com>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2013-10-31 20:00:04 +04:00
Pavel Emelyanov
b28f03aaee parasite: Add helper for restoring thread context
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2013-10-30 19:46:13 +04:00
Pavel Emelyanov
a1809b205e parasite: Generalize running parasite context
The only place left, that runs parasite by hands -- unmap().
Now we can use parasite_run() for that.

Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2013-10-30 18:26:46 +04:00
Pavel Emelyanov
f0453c8e6f parasite: Introduce get_thread_ctx helper
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2013-10-30 17:48:08 +04:00
Pavel Emelyanov
77576c63ab parasite: Use thread_ctx in parasite_run/_trap calls
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2013-10-30 16:59:38 +04:00
Pavel Emelyanov
10fb18d15d parasite: Use thread_ctx in thread dumping
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2013-10-30 16:54:37 +04:00
Pavel Emelyanov
c8fe0e5ea7 parasite: Introduce thread_ctx structure
This one keeps registers and sigmask for running thread. Will
be used for simpler parasite management.

Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2013-10-30 16:49:22 +04:00
Cyrill Gorcunov
0707df7745 restore: Don't unmap vdso proxy on final cleanup
In case if we need to use vdso proxy the memory area
which holds restorer also has a place for vdso proxy
code itself, so on final pass we should not unmap it,
otherwise any call to vdso function will cause sigsegv.

IOW, the memory before final "cleanup" pass of restorer
might look as

    +-----------+---------+     +-------------+------+
    | bootstrap | rt-vdso | ... | application | vdso |
    +-----------+---------+     +-------------+------+
                       ^                         |
                       `-------------------------+

and we have redirected "vdso" code to jump to "rt-vdso".
After final pass the memory must look as

                +---------+     +-------------+------+
                | rt-vdso | ... | application | vdso |
                +---------+     +-------------+------+
                       ^                         |
                       `-------------------------+

I noticed this problem during container migration
testing, the container itself was suspended on 2.6.32
OpenVZ kernel with apache running inside, and any attempt
to connect to apache caused apache to crash.

Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2013-10-30 16:30:57 +04:00
Pavel Emelyanov
e55acdd986 parasite: Cleanup call to parasite_run when launching daemon
The ctl->sig_blocked in this place is the same as sigframe's one,
as ctl's one was copied into sigframe's few steps before.

Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2013-10-29 23:00:30 +04:00
Pavel Emelyanov
389b814632 restore: Make optional images check right after open
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2013-10-29 23:00:24 +04:00
Pavel Emelyanov
bb5476cb63 restore: Put tgt vmas in rst-mem, not special purpose memory
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2013-10-29 23:00:06 +04:00
Pavel Emelyanov
d7db85e9dc restore: Iterate tgt vmas by number, not by terminating point
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2013-10-29 22:59:55 +04:00
Pavel Emelyanov
55a04580d5 restorer: Compact rst stack evaluation code
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2013-10-29 22:59:48 +04:00
Pavel Emelyanov
00dc26602a restorer: Remove unused heap
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2013-10-29 22:59:41 +04:00
Andrey Vagin
b33fa025b5 parasite: wait for any child process
If parasite exited unexpectedly, CRIU gets SIGCHLD and handles it.
In sigchld handler we need to wait any child process.
Currently criu waits neighbours in its group, but a dumped
processes is in another group usually. Here is a typo.

Signed-off-by: Andrey Vagin <avagin@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
2013-10-28 14:56:42 +04:00
Pavel Emelyanov
272c94e35b criu: Version 0.8 release
As planned, this was bugfix-mainly release. However, some new
features were added. Looking forward the v1.0 release :)

Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
v0.8
2013-10-18 20:45:08 +04:00