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

7582 Commits

Author SHA1 Message Date
Kir Kolyshkin
3f9a0aae67 criu(8): describe --weak-sysctls
This is an addition to commit 6273a5c ("Add ability to restore with
missing sysctls on the target node").

travis-ci: success for Document --weak-syscalls
Cc: Pavel Tikhomirov <ptikhomirov@virtuozzo.com>
Signed-off-by: Kir Kolyshkin <kir@openvz.org>
Acked-by: Pavel Tikhomirov <ptikhomirov@virtuozzo.com>
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
2016-12-05 23:35:15 +03:00
Kir Kolyshkin
501aa85b57 criu --help: shorten --weak-symbols descr
Option --help should provide a brief information, like a list of
commands and options and their meaning, ideally no more than 1 line per
option. There is no need to describe nuances and details here, since
we have documentation (wiki and  man pages) for that.

travis-ci: success for Document --weak-syscalls
Cc: Pavel Tikhomirov <ptikhomirov@virtuozzo.com>
Signed-off-by: Kir Kolyshkin <kir@openvz.org>
Acked-by: Pavel Tikhomirov <ptikhomirov@virtuozzo.com>
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
2016-12-05 23:35:14 +03:00
Pavel Tikhomirov
d1be199765 Add --weak_sysctl CLI option to RPC and lib
Signed-off-by: Pavel Tikhomirov <ptikhomirov@virtuozzo.com>
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
2016-12-05 23:34:54 +03:00
Pavel Tikhomirov
22140b97c9 Add ability to restore with missing sysctls on the target node
Do it through new --weak-sysctls option to "criu restore".

When we migrate from source with newer kernel with some modern sysctl
to destination with older kernel without it or just with a kernel
configured without it (e.g. no CONFIG_IPV6_ROUTER_PREF), we face a
problem that not all of dumped sysctls can be successfuly restored
on the destination. So to address these problem introduce weak sysctls
migration, where we restore only available sysctls and skip others.

https://github.com/xemul/criu/issues/248

While on it, fix workaround for stable_secret eio skip.

travis-ci: success for Add ability to restore with missing sysctls on the target node
Signed-off-by: Pavel Tikhomirov <ptikhomirov@virtuozzo.com>
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
2016-12-05 23:34:52 +03:00
Kir Kolyshkin
26ccb06a74 travis: enable arm/arm64/ppc builds with clang
With the recent patches, criu is finally compileable with
clang for all architectures. To keep it that way, we need
Travis to test that on a regular basis.

The downside is, Travis build time is increased about 2x.

travis-ci: success for travis: enable arm/arm64/ppc builds with clang
Signed-off-by: Kir Kolyshkin <kir@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
2016-12-05 11:49:19 +03:00
Adrian Reber
94dfd0ca91 zdtm: print a summary of failed tests if using --keep-going
When using the option --keep-going to get a quick overview of the test
results there is now a summary which tests have failed like:

 ############# 7 TEST(S) FAILED (TOTAL 268/SKIPPED 83) ##############
  * zdtm/static/sched_policy00(unknown)
  * zdtm/static/pthread00(unknown)
  * zdtm/static/pthread01(unknown)
  * zdtm/static/maps01(unknown)
  * zdtm/static/maps00(unknown)
  * zdtm/transition/maps008(unknown)
  * zdtm/transition/shmem(unknown)
 ############################### FAIL ###############################

Signed-off-by: Adrian Reber <areber@redhat.com>
Acked-by: Andrei Vagin <avagin@virtuozzo.com>
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
2016-12-05 11:49:19 +03:00
Vitaly Ostrosablin
c64010fe2d test: fix same socket names in socket-{dgram_data, snd_addr}
Those two tests use same socket name and if both of them are run
simultaneously, they would fight for socket and one will get EADDRINUSE.
This patch gives socket_dgram_data an unique name, so that everyone will
be happy.

travis-ci: success for test: fix same socket names in socket-{dgram_data, snd_addr}
Acked-by: Cyrill Gorcunov <gorcunov@openvz.org>

Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
2016-12-05 11:49:19 +03:00
Raghavendra Prabhu
af74019d66 Ensure the install process is PEP-394 compliant.
The installation needs to use python2, but it uses python in the
Makefile which fails later with syntax error
(since it is written for python2).

As per PEP-394 - https://www.python.org/dev/peps/pep-0394/ -,
'all distributions should ensure that python refers to the same target
as python2 .', hence this change.

Therefore, python2 is used by default in lib/Makefile, though
this can be overriden with PYTHON_BIN.

Tested with:

a) PYTHON_BIN=python2 make install
b) make install

c) export PYTHON_BIN=python2
   make test

Signed-off-by: Raghavendra Prabhu <me at rdprabhu dot com>
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
2016-12-05 11:49:19 +03:00
Kirill Tkhai
3a18b4c984 unix: Do not dump unused external sockets
Do not dump external sockets, that are not peers
for some processes sockets. We do not use them on
restore ==> we do not need to dump them.

Signed-off-by: Kirill Tkhai <ktkhai@virtuozzo.com>

 criu/sk-unix.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
2016-12-05 11:49:19 +03:00
Venkateswara Rao Mandela
a2225308c9 test/others/rpc: fix build error
Build in tests/others/rpc folder was failing due to the use of LDFLAGS
variable instead of LDLIBS variable to link libprotobuf-c. The makefile
uses implicit build rules.

$(CC) $(LDFLAGS) n.o $(LOADLIBES) $(LDLIBS)

Using LDFLAGS places -llibprotobuf-c before the object files, preventing
the library from being searched for required functions.  This commit
changes the variable to LDLIBS instead to fix the issue.

travis-ci: success for test/others/rpc: fix build error
Signed-off-by: Venkateswara Rao Mandela <venkat.mandela@ti.com>
Reviewed-by: Cyrill Gorcunov <gorcunov@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
2016-12-05 11:49:18 +03:00
Pavel Emelyanov
e8d05923e7 zdtm: Add simple test with descriptor in unix socket
https://travis-ci.org/criupatchwork/criu/builds/177945936
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
2016-12-05 11:49:18 +03:00
Pavel Emelyanov
aa80421109 skqueue: Check for SCM-s in queue and abort the dump
We can MSG_PEEK those and can dump the files easily. The
problem is in restore -- we need to first pass through all
the fdinfo openings before sending the descriptors out, but
by that time some sending sockets may have already closed :(

So for now just detect SCM-s in queue and abort the dump,
otherwise we'd just have them lost and the state spoiled.

https://travis-ci.org/criupatchwork/criu/builds/177945936
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
2016-12-05 11:49:18 +03:00
Dmitry Safonov
87cf0cb56e test: combine remap_dead_pid{,_root} tests
1. Dropped check for (fd < 0) - there is check after open() in the
test, just two lines upper or so.
2. Combined two test to share common code: they differ only by proc
path to open in a dead process.

travis-ci: success for pstree: rename lookup_create_{item <=> pid} (rev2)
Cc: Tycho Andersen <tycho.andersen@canonical.com>
Acked-by: Tycho Andersen <tycho.andersen@canonical.com>
Signed-off-by: Dmitry Safonov <dsafonov@virtuozzo.com>
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
2016-11-22 16:44:27 +03:00
Pavel Emelyanov
8f2b2c7f0b page-read: Implement asynchronous mode of reading pages (v2)
Currently each page read request results in pread() call. But
we can do better -- if there's no urgent need in data (which is
likely the case for non-cow pagemaps) we can save where the
date should go to and then read it in in one preadv syscall.

For lazy pages we get an ability to do async read_pages call
that would send the request to server and return w/o data in
the buffer.

The explicit sync() method is added since .close is void and
nobody checks its return code.

v2: Lost limits.h in pagemap.c for IOV_MAX (compilation).
v3: split added code into smaller chunks

https://travis-ci.org/criupatchwork/criu/builds/175451746
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
Signed-off-by: Mike Rapoport <rppt@linux.vnet.ibm.com>
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
2016-11-22 16:44:25 +03:00
Pavel Emelyanov
f514b606bb page-read: Add async arg to ->read_pages callback
Flag PR_ASYNC means, that the caller is OK if the routine
returns w/o data read into the buffer provided.

https://travis-ci.org/criupatchwork/criu/builds/175451746
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
Signed-off-by: Mike Rapoport <rppt@linux.vnet.ibm.com>
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
2016-11-22 16:42:39 +03:00
Pavel Emelyanov
b47d9a284c page-read: Do not lseek file to get its current position
It's already written into page_read->pi_off, so just use one.

https://travis-ci.org/criupatchwork/criu/builds/175451746
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
Acked-by: Mike Rapoport <rppt@linux.vnet.ibm.com>
2016-11-22 16:41:50 +03:00
Mike Rapoport
5f09d884f8 page-xfer: spelling: s/heppen/happen
travis-ci: success for page-xfer: spelling: s/heppen/happen
Signed-off-by: Mike Rapoport <rppt@linux.vnet.ibm.com>
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
2016-11-22 16:41:50 +03:00
Mike Rapoport
e7089bc3fa criu: pagemap: drop put_pagemap
With in-memory pagemap put_pagemap is not required because it does not
frees any resources. Minor modifications to get_pagemap and init_pagemaps
allow proper bookkeeping without put_pagemap.

Signed-off-by: Mike Rapoport <rppt@linux.vnet.ibm.com>
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
2016-11-22 16:41:49 +03:00
Cyrill Gorcunov
b89ee40bc4 headers: Switch to common linkage.h
travis-ci: success for headers: Switch to common linkage.h
Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
2016-11-21 23:15:19 +03:00
Cyrill Gorcunov
3929e1d9a8 criu: Move ptrace_peeksiginfo_args into separate header
The rest is to be moved into compel, while this particular
strucure is only needed by criu.

Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
2016-11-21 23:11:49 +03:00
Cyrill Gorcunov
e2e6d3ae5f headers: Split */types.h headers
The 2nd big splitting patch -- move most of the code that is
infect-related and doesn't know about criu internals (like
protobuf) out of types.h headers.

This is also big and fat patch, but it just moves the code
around. Applies on top of sigframe extracting patch.

Travis: https://travis-ci.org/xemul/criu/builds/171439595
Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
Signed-off-and-ported-on-dev-by: Pavel Emelyanov <xemul@virtuozzo.com>
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
2016-11-21 13:33:23 +03:00
Cyrill Gorcunov
443f248941 sigframe: Move sigframe-related code into sigframe.*
There's a lot of code making sigframes for PIE spread all over the
asm/restorer.h and arch/crtools.c. This patch collects it all into
asm/sigframe.h and arch/sigframe.c for better modularity and for
the sake of compel.

The patch is huge, but it just moves the code around (making u32/u64
types conversions to uint32/64_t-s where appropriate).

travis-ci: success for sigframe: Move sigframe-related code into sigframe.*
Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
Signed-off-and-ported-on-dev-by: Pavel Emelyanov <xemul@virtuozzo.com>
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
2016-11-21 12:36:38 +03:00
Andrei Vagin
9117dd66ad zdtm: fix flake8 warnings
flake8 --config=scripts/flake8.cfg test/zdtm.py
test/zdtm.py:66:1: E305 expected 2 blank lines after class or function definition, found 1
test/zdtm.py:127:1: E305 expected 2 blank lines after class or function definition, found 1
test/zdtm.py:971:1: E305 expected 2 blank lines after class or function definition, found 1
test/zdtm.py:1618:1: E305 expected 2 blank lines after class or function definition, found 1
Makefile:377: recipe for target 'lint' failed

travis-ci: success for zdtm: fix flake8 warnings
Signed-off-by: Andrei Vagin <avagin@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
2016-11-17 11:33:09 +03:00
Pavel Emelyanov
cde33dcb06 empty-ns: Don't C/R iptables too (v2)
When C/R-ing a net namespace with --empty-ns net option we should also
skip netfilter rules too (as per https://github.com/docker/docker/issues/27597).

However, there's one thing to be handled -- local TCP blocking rules are
expected to be there on restore by restore_iptables() which is no longer
the case, so put them back manually.

Test included, checked on zdtm/static/socket-tcpbuf-local :)

v2: Full scripts for empty netns setup.

https://github.com/xemul/criu/issues/246
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
2016-11-17 11:05:37 +03:00
Pavel Emelyanov
7251cb3aa9 criu: Version 2.8
So, this time we've mostly have a lot of code rework for
compel. A big portion of it is still in criu-dev, but
some has been merged into master.

Other than this and a bunch of bugfixes -- .config file,
support for Tun-Tap devices and deprecation of several
CLI and RPC options by the --external one.

Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
v2.8
2016-11-14 11:12:41 +03:00
Kirill Tkhai
8883c8cb3a net: Make criu do not fail on recent iproute2
Since iprule commit 67a990b81126 command "ip rule del" is not working anymore:

    iproute: disallow ip rule del without parameters

    Disallow run `ip rule del` without any parameter to avoid delete any first
    rule from table.

    Signed-off-by: Andrey Jr. Melnikov <temnota.am@gmail.com>

So, criu restore fails with:

    Error (criu/net.c:1277): IP tool failed on rule delete

Fix that by explicit passing of rule's table.

v2: Use "ip rule flush" to main's and default's table rules at once.

travis-ci: success for net: Make criu do not fail on recent iproute2 (rev2)
Signed-off-by: Kirill Tkhai <ktkhai@virtuozzo.com>
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
2016-11-12 11:10:43 +03:00
Mike Rapoport
f8e47d48a1 criu: pagemap: split read_pagemap_page into smaller chunks
Introduce helper functions for reading pages from parent snapshot and for
reading pages from local pages*img

travis-ci: success for criu: pagemap: minor improvements
Signed-off-by: Mike Rapoport <rppt@linux.vnet.ibm.com>
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
2016-11-12 11:10:42 +03:00
Mike Rapoport
ab2247ce2d criu: pagemap: use pid instead if id where appropriate
Some pagemap methods mix up using PIDs and pagemap internal ids. Using the
'pid' name in places that actually refer to PIDs makes the code clearer.

travis-ci: success for criu: pagemap: minor improvements
Signed-off-by: Mike Rapoport <rppt@linux.vnet.ibm.com>
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
2016-11-12 11:06:21 +03:00
Ruslan Kuprieiev
c4f4e6c926 lib: add external support
It is already present in rpc, so lets add it to libcriu too.

Signed-off-by: Ruslan Kuprieiev <rkuprieiev@cloudlinux.com>
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
2016-11-12 11:06:21 +03:00
Kir Kolyshkin
fc4e022b9a criu/*: annual pr_perror() usage sanitization
When using pr_perror(), we should not end the message with \n,
as it is added automatically.

Unfortunately, I still can't figure a way to check this at compile
time, so here's the annual patch.

travis-ci: success for Assorted nitpicks
Signed-off-by: Kir Kolyshkin <kir@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
2016-11-12 11:06:21 +03:00
Kir Kolyshkin
106e2d2978 criu/tty.c: use pr_err() not pr_perror()
In certain places, such as after a syscall, we use pr_perror()
to automatically add strerror(errno) to the error message.

In places we're not sure if errno was set by a function we called,
we should use pr_err() instead.

travis-ci: success for Assorted nitpicks
Signed-off-by: Kir Kolyshkin <kir@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
2016-11-12 11:06:21 +03:00
Kir Kolyshkin
01b81f174e criu: use xmalloc()
1. Make sure to use xmalloc() where an error message makes sense
2. Make sure to not ignore if NULL is returned

travis-ci: success for Assorted nitpicks
Signed-off-by: Kir Kolyshkin <kir@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
2016-11-12 11:06:19 +03:00
Kir Kolyshkin
d98c19ef0e Use xstrdup whether possible
Using xstrdup lets us have an error message printed if malloc() fails.

travis-ci: success for Assorted nitpicks
Signed-off-by: Kir Kolyshkin <kir@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
2016-11-12 11:06:01 +03:00
Kir Kolyshkin
9f06405082 mount.c: use xstrdup()
We already have a wrapper that spits out an error, use it.

travis-ci: success for Assorted nitpicks
Signed-off-by: Kir Kolyshkin <kir@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
2016-11-12 11:06:01 +03:00
Kir Kolyshkin
56f91edfb4 open_proc: don't print error twice
open_proc* and fopen_proc* are all macros, and they print errors in case
something is wrong (and as they are macros they print correct file:line
info, too). So, there is no need to print another error message
right after calling those.

This fixes double error messages like these:

(00.047295) Error (criu/proc_parse.c:990): Can't open 18472/status on procfs: No such file or directory
(00.047298) Error (criu/proc_parse.c:992): Can't open proc status: No such file or directory

travis-ci: success for Assorted nitpicks
Signed-off-by: Kir Kolyshkin <kir@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
2016-11-12 11:06:00 +03:00
Kir Kolyshkin
7b07ac5f72 logging: make sure to not change errno
Our log functions save errno and restore it. Restoring should be
at the very end of the __print_on_level() function, but
commit 6ae4a97 ("rpc: Report back first error message on failure")
messed with it.

Move errno restore at the end of the function.

travis-ci: success for Assorted nitpicks
Signed-off-by: Kir Kolyshkin <kir@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
2016-11-12 11:06:00 +03:00
Kir Kolyshkin
4864d59eb5 criu/mount.c: fix printing errno
An errno from setns might be lost after close()s, so change the order.

travis-ci: success for Assorted nitpicks
Signed-off-by: Kir Kolyshkin <kir@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
2016-11-12 11:06:00 +03:00
Pavel Emelyanov
6326b5c7c2 travis: Run some zdtm-s in RPC mode
travis-ci: success for tests: Add RPC testing to CI (rev2)
Acked-by: Andrey Vagin <avagin@virtuozzo.com>
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
2016-11-12 11:06:00 +03:00
Pavel Emelyanov
19ae737cb9 zdtm: Handle --external option in RPC
Travis sets up the GCOV variable to collect coverage and
provides an external mount for this. Thus handling this
option in RPC mode is essential.

travis-ci: success for tests: Add RPC testing to CI (rev2)
Acked-by: Andrey Vagin <avagin@virtuozzo.com>
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
2016-11-12 11:06:00 +03:00
Pavel Emelyanov
65b7d746e3 zdtm: Handle dump/restore error in RPC mode
travis-ci: success for tests: Add RPC testing to CI (rev2)
Acked-by: Andrey Vagin <avagin@virtuozzo.com>
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
2016-11-12 11:06:00 +03:00
Pavel Emelyanov
2e6375416b zdtm: Fix --ext-mount-map to --external
Now the --ext-mount-map is deprecated option, so fix it to
become the --external one.

travis-ci: success for tests: Add RPC testing to CI (rev2)
Acked-by: Andrey Vagin <avagin@virtuozzo.com>
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
2016-11-12 11:06:00 +03:00
Tycho Andersen
d5fc5dbb41 zdtm.py: run --clean hook on test failure
It seems to me most of the clean hooks (used by cgroup*, macvlan* cr_veth*
and mnt_tracefs* were all designed to be run to clean up after the test, no
matter whether it failed or succeeded. Let's always run them, so Andrei
doesn't hate me :D

travis-ci: success for zdtm.py: run --clean hook on test failure
Signed-off-by: Tycho Andersen <tycho.andersen@canonical.com>
CC: Andrei Vagin <avagin@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
2016-11-12 11:06:00 +03:00
Andrei Vagin
abc8fba67f zdtm: cleanup fifo_loop.test-0*
06:46:44.191:    24: ERR: fifo_loop.c:52: can't make fifo "fifo_loop.test-00" (errno = 17 (File exists))

Reported-by: Mr Jenkins
travis-ci: success for zdtm: cleanup fifo_loop.test-0*
Signed-off-by: Andrei Vagin <avagin@virtuozzo.com>
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
2016-11-12 11:06:00 +03:00
Kir Kolyshkin
2d99499a1c scripts/build aarch64-clang target: fix clang ver
Apparently, there's no clang-3.8 for Ubuntu Trusty arm64. The latest
available version is 3.6, let's try to use it.

https://travis-ci.org/kolyshkin/criu/builds/173168198
Signed-off-by: Kir Kolyshkin <kir@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
2016-11-12 11:06:00 +03:00
Kir Kolyshkin
02340d167e Dockerfile.tmpl: merge apt-get lines
As recommended by [1], "Always combine RUN apt-get update with apt-get
install in the same RUN statement". Also, ditch "apt-get clean", as it
seems to be useless.

[1] https://docs.docker.com/engine/userguide/eng-image/dockerfile_best-practices/

https://travis-ci.org/kolyshkin/criu/builds/173168198
Cc: Andrei Vagin <avagin@virtuozzo.com>
Signed-off-by: Kir Kolyshkin <kir@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
2016-11-12 11:05:59 +03:00
Kirill Tkhai
97a4d49376 arm, aarm64: Add atomic_dec_return()
travis-ci: success for series starting with [1/2] ppc: Add atomic_dec_return()
Signed-off-by: Kirill Tkhai <ktkhai@virtuozzo.com>
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
2016-11-12 11:05:59 +03:00
Kirill Tkhai
994d9d4ea6 ppc: Add atomic_dec_return()
Borrowed from Linux kernel.

travis-ci: success for series starting with [1/2] ppc: Add atomic_dec_return()
Signed-off-by: Kirill Tkhai <ktkhai@virtuozzo.com>
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
2016-11-12 11:05:59 +03:00
Kir Kolyshkin
6c7eb2ee99 fix asm syntax to be clang-compatible
I'm unsure where all these %%s before register names comes from,
but they confuse clang, like this:

> criu/arch/arm/parasite-head.S:6:6: error: unexpected token in operand
>  sub %r2, %pc, #8 @ get the address of this instruction
>     ^

This patch looks scary, but all it does is removing %s before
register names, fixing a few "many spaces instead of a tab" issues
along the way.

travis-ci: success for Fixes to compile on arm with clang
Cc: Christopher Covington <cov@codeaurora.org>
Dmitry Safonov <dsafonov@virtuozzo.com>
Signed-off-by: Kir Kolyshkin <kir@openvz.org>
Reviewed-by: Christopher Covington <cov@codeaurora.org>
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
2016-11-12 11:05:57 +03:00
Kir Kolyshkin
d6d034a9d2 Use rlim_t where appropriate
I got the following then trying to compile CRIU on ARM with clang:

> criu/cr-restore.c:2476:22: error: implicit conversion from 'unsigned
> long long' to 'unsigned long' changes value from 18446744073709551615 to
> 4294967295 [-Werror,-Wconstant-conversion]
>         return ival == -1 ? RLIM_INFINITY : ival;
>         ~~~~~~              ^~~~~~~~~~~~~
> /usr/include/arm-linux-gnueabihf/bits/resource.h:117:24: note: expanded
> from macro 'RLIM_INFINITY'
> # define RLIM_INFINITY 0xffffffffffffffffuLL
>                        ^~~~~~~~~~~~~~~~~~~~~
> 1 error generated.

Fix by using provided rlim_t type in this and similar places.

travis-ci: success for Fixes to compile on arm with clang
Signed-off-by: Kir Kolyshkin <kir@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
2016-11-12 11:04:38 +03:00
Kir Kolyshkin
70e3b465e8 arm: rm -Wa from CFLAGS
Somehow clang doesn't always like -Wa flags, for example when making
dependencies (see commit 9303ed3 ("Makefiles: move -Wa,--noexecstack
out of CFLAGS"), which causes build break, scary error messages, and
even hair loss.

There are many ways to solve this. This patch employs the one
that is simple and clean.

The -Wa,-mimplicit-it=always flag was added by commit 79c4b74
("arm: fix compilation on ARMv7"). The reason is, ARM needs an IT
instruction before certain conditionals. Those IT instructions are
almost always automatically generated by assembler itself, but in some
cases a special assembler flag (like the one above) is needed.

As there is only one place in the code that need IT, it's easy to patch
it (add explicit IT) and remove the flag. Note that "IT" generates
no machine code per se, so there should not be any functional change
(although I haven't checked it).

For more info on IT, see http://tinyurl.com/z3ldsdr

Hope for a review from our ARM experts.

travis-ci: success for Fixes to compile on arm with clang
Cc: Christopher Covington <cov@codeaurora.org>
Cc: Dmitry Safonov <dsafonov@virtuozzo.com>
Cc: Cyrill Gorcunov <gorcunov@openvz.org>
Signed-off-by: Kir Kolyshkin <kir@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
2016-11-12 11:04:38 +03:00