Commit graph

8297 commits

Author SHA1 Message Date
Pavel Emelyanov
12e3adc68c criu: Version 3.1
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
2017-05-22 11:40:37 +03:00
Pavel Emelyanov
27be93b7db Revert "kdat: Relax uffd checks (v2)"
This reverts commit a840995689, that
got into master by mistake.

Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
2017-05-22 11:23:11 +03:00
Cyrill Gorcunov
f734928c8a tty: Make sure no /dev/tty inheritance exist
Currently we support restoring opened /dev/tty reference
if only control terminal belongs to the same process,
ie no inheritance is allowed.

Thus we should refuse to dump in such scenario
otherwise restore will fail.

Reported-by: Stanislav Kinsburskiy <skinsbursky@virtuozzo.com>
Signed-off-by: Cyrill Gorcunov <gorcunov@virtuozzo.com>
Signed-off-by: Andrei Vagin <avagin@virtuozzo.com>
2017-05-19 09:33:19 +03:00
Andrei Vagin
0237eb27c8 restore: don't collect mounts if mntns isn't restored
Currently it is only used to get a file descriptor to the mount
namespace root, but if we have only one mntns, we can open "/".

Cc: Pavel Emelyanov <xemul@virtuozzo.com>
Signed-off-by: Andrei Vagin <avagin@virtuozzo.com>
2017-05-19 09:33:11 +03:00
Andrei Vagin
695295ae98 fsnotify: don't save mnt_id if a mount namepsace isn't dumped
Processes can be restored in another mntns, so mnt_id will be
useless in this case. If mntns isn't dumped, we have to dump a path
to a mount point.

Cc: Cyrill Gorcunov <gorcunov@openvz.org>
Signed-off-by: Andrei Vagin <avagin@virtuozzo.com>
Reviewed-by: Cyrill Gorcunov <gorcunov@openvz.org>
Signed-off-by: Andrei Vagin <avagin@virtuozzo.com>
2017-05-19 09:33:02 +03:00
Dmitry Safonov
6f8f85ffd4 ia32/kdat: Check for 32-bit mmap() bug
There were kernel bug with 32-bit mmap() returning 64-bit pointer.
The fix is in Torvalds master, will be released in v4.12 kernel.
Checkpointing after v4.9 kernel works good, but restoring will
result in application which will mmap() 64-bit addresses resulting
in segfault/memory corruptions/etc.
As our policy is fail on dump if we can't restore on the same target,
error checkpointing for v4.9.

Signed-off-by: Dmitry Safonov <dsafonov@virtuozzo.com>
Signed-off-by: Andrei Vagin <avagin@virtuozzo.com>
2017-05-19 09:31:40 +03:00
Andrei Vagin
6eee76d403 restore: simplify sigchld handler
The idea is simple. Everyone has to wait its children,
a restore is interrupted if we found abandoned zombie.

Signed-off-by: Andrei Vagin <avagin@virtuozzo.com>
2017-05-19 09:31:29 +03:00
Pavel Emelyanov
9058baae7e pagemap: Enqueue iovec to arbitrary list
We currently can batch pagemap entries into page-read list, but will
need to queue them into per-pstree_entry one.

Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
Signed-off-by: Andrei Vagin <avagin@virtuozzo.com>
2017-05-19 09:25:41 +03:00
Pavel Emelyanov
b43f7aa615 page_read: Make it possible to get pages.img ID from page_read
The pages.img will need to get opened one more time w/o the pagemap.img.

Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
Signed-off-by: Andrei Vagin <avagin@virtuozzo.com>
2017-05-19 09:21:18 +03:00
Pavel Emelyanov
aebbdbf1ef compel: Add preadv syscall
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
Signed-off-by: Andrei Vagin <avagin@virtuozzo.com>
2017-05-19 09:21:16 +03:00
Pavel Emelyanov
0c4eaafd4a vma: Add vma_next() helper
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
Signed-off-by: Andrei Vagin <avagin@virtuozzo.com>
2017-05-19 09:20:13 +03:00
Kir Kolyshkin
ef6c3f6ce6 compel/test/fdspy: fix linking
1. Commit 8b99809 ("compel: make plugins .a archives") changed the
   suffix of compel plugins, so this test no longer compiles.

2. "compel plugins" can print auxiliary plugins now, let's use it.

Signed-off-by: Kir Kolyshkin <kir@openvz.org>
Signed-off-by: Andrei Vagin <avagin@virtuozzo.com>
2017-05-19 09:17:20 +03:00
Kir Kolyshkin
4a57dfec9e compel plugins: add optional plugins
As we have more than 1 working plugin right now, let's implement
the TODO item for "compel plugins" command.

Signed-off-by: Kir Kolyshkin <kir@openvz.org>
Signed-off-by: Andrei Vagin <avagin@virtuozzo.com>
2017-05-19 09:17:20 +03:00
Andrei Vagin
98204deb34 test: don't use nsenter in tests
Ubuntu 14.04 (Travis) doesn't have it.

Reviewed-by: Kirill Tkhai <ktkhai@virtuozzo.com>
Looks-good-to: Pavel Emelyanov <xemul@virtuozzo.com>
Signed-off-by: Andrei Vagin <avagin@virtuozzo.com>
2017-05-19 09:17:20 +03:00
Andrei Vagin
71dcc6e918 travis: check the --empty-ns option
Reviewed-by: Kirill Tkhai <ktkhai@virtuozzo.com>
Looks-good-to: Pavel Emelyanov <xemul@virtuozzo.com>
Signed-off-by: Andrei Vagin <avagin@virtuozzo.com>
2017-05-19 09:17:20 +03:00
Kir Kolyshkin
4669d6330e crit: fix 'make install'
Apparently, setup.py from distutils interprets --root= option without
an argument as "--root=." and we end up with what is described
in https://github.com/xemul/criu/issues/309.

Fix is to prepend DESTDIR value (if any) to --prefix argument.

v2: fix uninstall as well
v3: same code, resent via gmail

Reported-by: Juraj Oršulić <juraj.orsulic@fer.hr>
Signed-off-by: Kir Kolyshkin <kir@openvz.org>
Signed-off-by: Andrei Vagin <avagin@virtuozzo.com>
2017-05-19 09:17:19 +03:00
Dmitry Safonov
03eccbf1c8 soccr: clean a bit includes list
soccr.h:
After previous patch <linux/types.h> is not needed anymore,
<netinet/tcp.h> is needed as we test for it in feature tests,
i.e., struct tcp_repair_window is declared there.
Also drop forward-declaration of (struct libsoccr_sk) - it's
declared again below.

soccr.c:
Sort headers by name so errors like twice-including errno.h
will not happen again. Also remove assert.h.

Signed-off-by: Dmitry Safonov <dsafonov@virtuozzo.com>
Signed-off-by: Andrei Vagin <avagin@virtuozzo.com>
2017-05-19 09:17:19 +03:00
Dmitry Safonov
2a37b50765 soccr.h: use uint32_t instead of __u32
As uint32_t already has occupied the header, use it for all 32-bit
unsigns. That will allow to drop additional include <linux/types.h>.

Signed-off-by: Dmitry Safonov <dsafonov@virtuozzo.com>
Signed-off-by: Andrei Vagin <avagin@virtuozzo.com>
2017-05-19 09:17:19 +03:00
Pavel Emelyanov
af6e70b2b9 crit: RSS explorer
When running 'cirt x dir rss' one will see the way pagemap chunks
are scatered across the VMs of processes. Sample output from the
env00 zdtm test is

22
	400000 / 1              00400000 / 5        /root/criu/test/zdtm/static/env00

	604000 / 2              00604000 / 1        /root/criu/test/zdtm/static/env00
	                        00605000 / 1        /root/criu/test/zdtm/static/env00

	853000 / 1              00853000 / 33

	7faba2d4b000 / 6        7faba2d4b000 / 4        /usr/lib64/libc-2.22.so
	                        7faba2d4f000 / 2        /usr/lib64/libc-2.22.so

	7faba2d51000 / 2        7faba2d51000 / 4

	7faba2d54000 / 1        ~

	7faba2f64000 / 3        7faba2f64000 / 3

	7faba2f74000 / 1        7faba2f74000 / 1

	7faba2f75000 / 2        7faba2f75000 / 1        /usr/lib64/ld-2.22.so
	                        7faba2f76000 / 1        /usr/lib64/ld-2.22.so

	7faba2f77000 / 1        7faba2f77000 / 1

	7fffb4de3000 / 3        7fffb4de2000 / 70

	7fffb4e24000 / 2        ~

	7fffb4e27000 / 1        ~

	7fffb4f6a000 / 2        7fffb4f6a000 / 2

Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
Signed-off-by: Andrei Vagin <avagin@virtuozzo.com>
2017-05-19 09:14:45 +03:00
Dmitry Safonov
9e3e46565d ia32/futex: restore compat_robust_list
The same as for Checkpointing - we need to call 32-bit syscall
for compatible tasks here to correctly restore compat_robust_list,
not robust_list.

Note: I check here restorer's *task* arg for compatible mode, not
restorer *thread* arg. As changing application's mode during runtime
is very rare thing itself, application that runs different bitness
threads is most likely not present at all.
If we ever meet such application, this could be improved.

Signed-off-by: Dmitry Safonov <dsafonov@virtuozzo.com>
Signed-off-by: Andrei Vagin <avagin@virtuozzo.com>
2017-05-19 09:14:45 +03:00
Dmitry Safonov
9a282cbb77 ia32/futex: add dumping compat_robust_list
The kernel keeps two different pointers for 32-bit and 64-bit futex
lists: robust_list and compat_robust_list in task_struct.
So, dump compat_robust_list for ia32 tasks.

Note: this means that one can set *both* compat_robust_list and
robust_list pointers by using as we're here 32-bit and 64-bit syscalls.
That's one of mixed-bitness application questions.
For simplification (and omitting more syscalls), we dump here only
one of the pointers.

Signed-off-by: Dmitry Safonov <dsafonov@virtuozzo.com>
Signed-off-by: Andrei Vagin <avagin@virtuozzo.com>
2017-05-19 09:14:45 +03:00
Dmitry Safonov
d011a9fb42 restorer: remove always true `has_futex' arg
Check for presence of robust futex list is in the reality
(futex_rla_len != 0).

That does code on dumping, in get_task_futex_robust_list():
> ret = syscall(SYS_get_robust_list, pid, &head, &len);
> if (ret < 0 && errno == ENOSYS) {
[..]
> 	len = 0;
[..]
> }
[..]
> info->futex_rla_len	= (u32)len;

And in images: futex_rla_len == 0 means that futex is not present.

So, we don't need additional restorer's parameter `has_futex'
which is always true, remove it.

Signed-off-by: Dmitry Safonov <dsafonov@virtuozzo.com>
Signed-off-by: Andrei Vagin <avagin@virtuozzo.com>
2017-05-19 09:14:07 +03:00
Dmitry Safonov
ea6357e651 criu/ia32: don't redefine __NR32_rt_sigaction
Cleanup: use nr, provided by compel.

Signed-off-by: Dmitry Safonov <dsafonov@virtuozzo.com>
Signed-off-by: Andrei Vagin <avagin@virtuozzo.com>
2017-05-19 09:13:44 +03:00
Pavel Emelyanov
fc33d333af criu: Move mod preload into kdat
Modules pre-load is also slow, but guarding this code with
the presence of criu.kdat cache file seems reasonable.

Or course, one may unload the needed modules by hands, but
such smart user may as well remove the /run/criu.kdat file :)

Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
Signed-off-by: Andrei Vagin <avagin@virtuozzo.com>
2017-05-10 04:50:32 +03:00
Pavel Emelyanov
07a00662ad kdat: Cache kdat object into /run/criu.kdat (v4)
Doing kerndat checks on every criu start is way too slow. We
need some way to speed this checks up on a particular box.

As suggested by Andre, Dima and Mike let's try to keep the
collected kdat bits into some tmpfs file. Keeping it on
tmpfs would invaludate this cache on every machine reboot.

There have been many suggestions how to generate this file,
my proposal is to create it once the kdat object is filled
by criu, w/o any explicit command. Optionally we can add
'criu kdat --save|--drop' actions to manage this file.

v2:
* don't ignore return code of write() (some glibcs complain)
* unlink tmp file in case rename failed

v3:
* add one more magic into kerndat_s which is the 'date +%s'
* ignore any errors opening or saving cache. Only size/magic
  mismatch matters (and result in dropping the cache)
* cache file path is Makefile-configurable (RUNDIR)
* don't save cache if kerndat auto-detection failed

v4:
* Use ?= for RUNDIR definition.

Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
Signed-off-by: Andrei Vagin <avagin@virtuozzo.com>
2017-05-10 04:34:43 +03:00
Pavel Emelyanov
e4d14b65d7 kdat: Merge dump and restore kerndats
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
Signed-off-by: Andrei Vagin <avagin@virtuozzo.com>
2017-05-10 04:34:08 +03:00
Pavel Emelyanov
a840995689 kdat: Relax uffd checks (v2)
v2: When uffd is present, the reported features may still be 0,
    so we need one more bool for uffd syscall itself.

Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
Signed-off-by: Andrei Vagin <avagin@virtuozzo.com>
2017-05-10 04:32:48 +03:00
Pavel Emelyanov
ff65b3b9ed kdat: Relax loginuid checks
Introduce 3-state mode and check them always.

Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
Signed-off-by: Andrei Vagin <avagin@virtuozzo.com>
2017-05-10 04:26:56 +03:00
Kirill Tkhai
08ca20e29e compel: Add more arguments to compel_wait_task()
Some get_status() methods may allocate data, because
not all of the fields in /proc/[pid]/status file
have the fixed size. For example, NSpid, which
size may vary.

Introduce new method free_status() in counterweight
for such type get_status() methods. it will be called
in case of we go to try_again and need to free allocated
data.

Also, introduce data parameter for a use in the future.

Signed-off-by: Kirill Tkhai <ktkhai@virtuozzo.com>
Signed-off-by: Andrei Vagin <avagin@virtuozzo.com>
2017-05-10 04:26:56 +03:00
Kirill Tkhai
0469a46a55 seize: Fix size error in creds_dumpable()
The goal of this function is to compare everything except caps,
but caps size is took to compare. It's wrong, there must be
used offsetof(struct proc_status_creds, cap_inh) instead.

Also, sigpnd may be different too.

v3: Move excluding sigpnd from comparation in this patch (was in another patch).
    Reorder fields in seize_task_status().

Signed-off-by: Kirill Tkhai <ktkhai@virtuozzo.com>
Signed-off-by: Andrei Vagin <avagin@virtuozzo.com>
2017-05-10 04:26:56 +03:00
Kir Kolyshkin
6329e660a4 test/zdtm/static: split ofd_file_locks.h to .c/.h
Having a "header library" is nice if it's small and clean, but
 - we compile its code a few times;
 - there is no distinction between internal and external functions.

Let's separate functions out of header and into a .c file.

Signed-off-by: Kir Kolyshkin <kir@openvz.org>
Signed-off-by: Andrei Vagin <avagin@virtuozzo.com>
2017-05-10 04:26:56 +03:00
Kir Kolyshkin
1e1a85f1b8 test/zdtm: rm get_smaps_bits proto from zdtmtst.h
The function is not included into the library, so having its prototype
there was a shortcut. Move it to a separate include file.

Signed-off-by: Kir Kolyshkin <kir@openvz.org>
Signed-off-by: Andrei Vagin <avagin@virtuozzo.com>
2017-05-10 04:26:56 +03:00
Kir Kolyshkin
14a0111546 test/zdtm: clean get_smaps_bits.d
This is an auxiliary source file. The corresponding object file was
cleaned, but .d was not. Add it to SRC/OBJ/DEP so the appropriate files
will be cleaned automatically.

Signed-off-by: Kir Kolyshkin <kir@openvz.org>
Signed-off-by: Andrei Vagin <avagin@virtuozzo.com>
2017-05-10 04:26:56 +03:00
Kir Kolyshkin
dd4925b500 test/zdtm/Makefiles: disable built-in rules
MAKEFLAGS += -r only works for sub-make, and it is not applicable to
the current instance. Since previous commit make is not re-running
itself (after re-reading deps files), so MAKEFLAGS no longer works.
Use one more way to disable built-in rules that stand in our way.

Signed-off-by: Kir Kolyshkin <kir@openvz.org>
Signed-off-by: Andrei Vagin <avagin@virtuozzo.com>
2017-05-10 04:26:56 +03:00
Kir Kolyshkin
44a2a65193 test/zdtm/Makefile.inc: don't regen all deps
As it was pointed out by our esteemed maintainer (let his light shine),
after my recent changes to test/zdtm Makefiles all dependencies are
regenerated even if we only need to build a single test (for example,
cd test/zdtm/static && make env00).

This was caused by "-include $(DEP)" statement. Make sees that these files
are need to be included, but are missing, and since it knows how to generate
them it goes on to do so.

The solution is to use $(wildcard) function which returns the list of
_existing_ files, and so include will only receive the files that exist.

Reported-by: Andrei Vagin <avagin@virtuozzo.com>
Signed-off-by: Kir Kolyshkin <kir@openvz.org>
Signed-off-by: Andrei Vagin <avagin@virtuozzo.com>
2017-05-10 04:26:55 +03:00
Kir Kolyshkin
6331633725 inotify_system_nodel.c: make it a static symlink
inotify_system_nodel.c is supposed to be a symlink to inotify_system.c,
but somehow the file was committed. This, together with the statement
in Makefile to recreate the file, lead to replacing the file with a
symlink during make.

Remove the file, add the symlink, and remove the Makefile rule.

PS yes, I have checked the files are identical.

Signed-off-by: Kir Kolyshkin <kir@openvz.org>
Signed-off-by: Andrei Vagin <avagin@virtuozzo.com>
2017-05-10 04:26:55 +03:00
Pavel Emelyanov
4a83e29788 restore: Bypass sync points of NS-related stages when not needed
When we don't restore any namespaces criu forces tasks to wake
it up two times simply to no-op and wake up tasks back. This
can be optimized by simply omitting the not needed wakeups.

Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
Signed-off-by: Andrei Vagin <avagin@virtuozzo.com>
2017-05-10 04:26:55 +03:00
Pavel Emelyanov
3bd08b7701 restore: Relax the FORKING stage
Here's why:

This stage is needed to make sure all tasks have appeared
and did some actions (that are called before restore_finish_stage()).
With this description there's no need in involving criu process
in it, this stage is purely inter-tasks sync point.

Taking into account we do already make root task wait for others
to complete forking (it calls restore_wait_ther_tasks()) we may
rework this stage not to involve criu process in it.

Here's how:

So the criu task starts the forking stage, then goes waiting for
"inprogress tasks". The latter wait is purely about nr_in_progress
counter, thus there's no strict requirement that the stage remains
the same by the time criu is woken up.

Siad that, the root task waits for other tasks to finish forking,
does fini_restore_mntns() (already in the code), then switches
the stage to the next (the RESTORE one). Other tasks do normal
staging barrier. Criu task is not woken up as nr_in_progress
always remains >= 1.

The result is -2 context switches -- from root task to criu and
back -- which gives us good boost when restoring single task app.

Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
Signed-off-by: Andrei Vagin <avagin@virtuozzo.com>
2017-05-10 04:26:55 +03:00
Pavel Emelyanov
3ebe6c8338 restore: Write comments about stages
Describe what the tasks do during restore and what the
expectations at the sync points are.

Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
Signed-off-by: Andrei Vagin <avagin@virtuozzo.com>
2017-05-10 04:26:55 +03:00
Pavel Emelyanov
eb43ea2389 restore: Kill CR_STATE_RESTORE_SHARED
Looks like this separate stage is not needed. The scripts
involved in ns restore are synchronized with existing stages
like this:

criu:                    root task:
ROOT_TASK stage
                         <appear>
"setup-ns" script
PREPARE_NAMESPACES
                         prepare_namespace()
"post-setup-ns" script
FORKING
                         restore_task_mnt_ns()
                         <everything else>

which seems to be OK.

Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
Signed-off-by: Andrei Vagin <avagin@virtuozzo.com>
2017-05-10 04:26:55 +03:00
Pavel Emelyanov
16214d99ee restore: Rename CR_STATE_POST_RESTORE_NS -> _PREPARE_NAMESPACES
This is wat root task does -- calls prepare_namespace().

Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
Signed-off-by: Andrei Vagin <avagin@virtuozzo.com>
2017-05-10 04:26:55 +03:00
Pavel Emelyanov
5b870266a3 restore: Rename CR_STATE_RESTORE_NS -> _ROOT_TASK
The stage name is what tasks do, not what criu waits for.
When the first stage is started we want the root task to
come up, rather than namespaces to get restored.

Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
Signed-off-by: Andrei Vagin <avagin@virtuozzo.com>
2017-05-10 04:26:54 +03:00
Pavel Emelyanov
6d9ec5ec86 restore: Move staging switch/wait code to the top of the file
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
Signed-off-by: Andrei Vagin <avagin@virtuozzo.com>
2017-05-10 04:26:54 +03:00
Pavel Emelyanov
e571ef6294 restore: Fix indentation of one if
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
Signed-off-by: Andrei Vagin <avagin@virtuozzo.com>
2017-05-10 04:26:54 +03:00
Pavel Emelyanov
fad59b7b24 restore: Normalize first and last staging switches
Don't set futexes by hands, use the restore_switch_stage
helpers explicitly (for code readability).

Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
Signed-off-by: Andrei Vagin <avagin@virtuozzo.com>
2017-05-10 04:26:54 +03:00
Pavel Emelyanov
6b44cd8ea9 restore: Remove bogus futex kick
The restore_switch_stage() already waits tasks at the
end, so there's no need in one more waiting.

Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
Signed-off-by: Andrei Vagin <avagin@virtuozzo.com>
2017-05-10 04:26:54 +03:00
Andrei Vagin
7393a4b7f9 restore: add a function to wait when other tasks finish a stage
It is used now to close descriptors of mount namespaces
and will be used for network namespaces too.

Acked-by: Pavel Emelyanov <xemul@virtuozzo.com>
Signed-off-by: Andrei Vagin <avagin@virtuozzo.com>
2017-05-10 04:26:54 +03:00
Andrei Vagin
a7281b11fd test: restore ns_last_pid before executing restore in a second time
It is required for cases when we inject a fault in criu restore.
In this case we execute "criu restore" and check that it fails,
then we execute "criu restore" without a fault and check that it passes.

If the first "criu restore" restores only a part of processes,
the second criu can get PID of one of restored processes.

https://github.com/xemul/criu/issues/282
Signed-off-by: Andrei Vagin <avagin@virtuozzo.com>
2017-05-10 04:20:37 +03:00
Dmitry Safonov
8544895a52 ia32/restorer: move 32-bit pie unmap to x86
We need compat realization for restorer unmap as after rt_sigreturn()
the task is stopped it 32-bit code and ptrace API doesn't allow
setting x86_64 full registers set to ia32 task.

Generic restorer has now x86-specific __export_unmap_compat()
function, which isn't right.

Clean restorer from x86-related realization.

Signed-off-by: Dmitry Safonov <dsafonov@virtuozzo.com>
Signed-off-by: Andrei Vagin <avagin@virtuozzo.com>
2017-05-10 04:20:37 +03:00
Dmitry Safonov
dd3f23e28d cr-restore: prepare removing arch_export_unmap_compat for !CONFIG_COMPAT
We don't need __export_unmap_compat() for !CONFIG_COMPAT in restorer
blob. This preparation will allow to move compatible unmap that's
written in x86 asm from generic restorer blob to arch/x86.

Signed-off-by: Dmitry Safonov <dsafonov@virtuozzo.com>
Signed-off-by: Andrei Vagin <avagin@virtuozzo.com>
2017-05-10 04:20:37 +03:00