<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://criu.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Dsafonov</id>
	<title>CRIU - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://criu.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Dsafonov"/>
	<link rel="alternate" type="text/html" href="https://criu.org/Special:Contributions/Dsafonov"/>
	<updated>2026-05-13T17:00:16Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.35.6</generator>
	<entry>
		<id>https://criu.org/index.php?title=32bit_tasks_C/R&amp;diff=5412</id>
		<title>32bit tasks C/R</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=32bit_tasks_C/R&amp;diff=5412"/>
		<updated>2023-05-23T19:36:45Z</updated>

		<summary type="html">&lt;p&gt;Dsafonov: Done upstream: Continue removing TIF_IA32 from uprobes &amp;amp; Oprofile&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Compatible applications ==&lt;br /&gt;
&lt;br /&gt;
On x86_64 there are two types of compatible applications:&lt;br /&gt;
* ia32 - compiled to run on i686 target, can be executed on x86_64 with &amp;lt;code&amp;gt;IA32_EMULATION&amp;lt;/code&amp;gt; config option set.&lt;br /&gt;
* x32 - specially compiled binaries to run on x86_64 machine with &amp;lt;code&amp;gt;CONFIG_X86_X32&amp;lt;/code&amp;gt; config option set.&lt;br /&gt;
&lt;br /&gt;
Both of them uses 4 byte pointers thus can address no more than 4Gb of virtual memory.&amp;lt;br /&amp;gt;&lt;br /&gt;
But x32 uses full 64-bit register set (and thus can't be launched on i686 host natively).&amp;lt;br /&amp;gt;&lt;br /&gt;
Both of them requires additional environment on x86_64 as Glibc, libraries, and compiler support.&amp;lt;br /&amp;gt;&lt;br /&gt;
x32 is rarely distributed (at this moment only [https://wiki.debian.org/X32Port Debian x32 port can be easily found]).&amp;lt;br /&amp;gt;&lt;br /&gt;
So, CRIU will support ia32 C/R at this moment, x32 support may be quite easily added on top of ia32 as needed patches have already added in kernel with ia32 C/R support.&amp;lt;br /&amp;gt;&lt;br /&gt;
The following text uses ''compatible'' and ''32-bit'' in the meaning of ia32 applications unless otherwise specified.&lt;br /&gt;
&lt;br /&gt;
== Difference between native and compat applications ==&lt;br /&gt;
&lt;br /&gt;
From the CPU's point of view, 32-bit compatibility mode applications differ to 64-bit application by current CS (code segment selector): if corresponding value of L-bit from flags of entry in descriptors table is set the CPU will be in 64-bit mode when this segment descriptor is being used. There are some other differences between 32 and 64-bit selectors, one can read about them [https://www.malwaretech.com/2014/02/the-0x33-segment-selector-heavens-gate.html in the article &amp;quot;The 0x33 Segment Selector (Heavens Gate)&amp;quot;]. Code selectors for both bits are defined in kernel headers as &amp;lt;code&amp;gt;__USER32_CS&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;__USER_CS&amp;lt;/code&amp;gt; and corresponds to descriptors in GDT (Global Descriptors Table). One can change 64-bit mode to compatibility mode by swapping CS value (e.g., with longjump).&lt;br /&gt;
&lt;br /&gt;
From the Linux kernel's point of view, applications differ by values set during exec of application such as &amp;lt;code&amp;gt;mmap_base&amp;lt;/code&amp;gt; or thread info flags &amp;lt;code&amp;gt;TIF_ADDR32&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;TIF_IA32&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;TIF_X32&amp;lt;/code&amp;gt;.&lt;br /&gt;
Both native and compat applications can do 32 or 64-bit syscalls.&lt;br /&gt;
&lt;br /&gt;
== Mixed-bitness applications ==&lt;br /&gt;
&lt;br /&gt;
That's entirely possible with current kernel ABI to create mixed-bitness applications, which may be ''very'' entangled.&lt;br /&gt;
For example, one could set ''both'' 32-bit and 64-bit robust futex list pointers.&lt;br /&gt;
Or one can create multi-threaded application where some threads are executing 32-bit code, some 64-bit code.&lt;br /&gt;
&lt;br /&gt;
If we ever meet application of such mixed-bitness kind, the support may be added to CRIU quite easily, but it should be done under some compile-time config as it'll add more syscalls to usual C/R where they aren't needed.&lt;br /&gt;
&lt;br /&gt;
At this moment there is no plans to add such support and it's quite unlikely that we'll find such application in real world (non-syntetic test).&lt;br /&gt;
&lt;br /&gt;
== Approaches to C/R compatible applications ==&lt;br /&gt;
&lt;br /&gt;
C/R of compatible applications can be done differently, this section describes cons/pros of each, to address decision why C/R of 32-bit tasks done ''that'' way and not some other.&lt;br /&gt;
&lt;br /&gt;
=== Restore with exec() of 32-bit dummy binary vs from 64-bit CRIU ===&lt;br /&gt;
&lt;br /&gt;
Restore of 32-bit application can be done with some daemon that runs in 32-bit mode and communicates with CRIU binary (or 32-bit CRIU subprocess).&lt;br /&gt;
&lt;br /&gt;
'''Pros''':&lt;br /&gt;
* no kernel patches expected (not quite true: vDSO mremap() still needed support)&lt;br /&gt;
&lt;br /&gt;
'''Cons''':&lt;br /&gt;
* CRIU code base does not have special restore daemon to communicate with - code needs to be reworked&lt;br /&gt;
* 64-bit app can have 32-bit child, which could be a parent to 64-bit and so on - need to re-exec native 64-bit CRIU from 32-bit dummy (or 32-bit CRIU)&lt;br /&gt;
* need to send to the daemon properties of restoring processes, open fds to images, share memory with parsed ps_tree and so on... The number of IPC calls will slow down restore&lt;br /&gt;
* restoring becomes more complicated, and if looking forward to restoring user/pid sub-namespaces, it will be too entangled&lt;br /&gt;
* no optimized inheritance for task's properties those erase with exec()&lt;br /&gt;
* will need also another daemon for x32&lt;br /&gt;
&lt;br /&gt;
=== Restore with a flag to sigreturn() or arch_prctl() ===&lt;br /&gt;
&lt;br /&gt;
The initial attempt to do 32-bit C/R, was rejected by lkml community by many reasons. It should have swapped thread info flags (such as &amp;lt;code&amp;gt;TIF_ADDR32&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;TIF_IA32&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;TIF_X32&amp;lt;/code&amp;gt;), unmap native 64-bit vDSO blob from process's address space and map compatible 32-bit vDSO - all according to some bit in sigframe in &amp;lt;code&amp;gt;rt_sigreturn()&amp;lt;/code&amp;gt; call or some dedicated for it &amp;lt;code&amp;gt;arch_prctl()&amp;lt;/code&amp;gt; call.&lt;br /&gt;
&lt;br /&gt;
'''Pros''':&lt;br /&gt;
* Simple from the point of CRIU: just do sigreturn with a new bit set or call arch_prctl() and do sigreturn&lt;br /&gt;
&lt;br /&gt;
'''Cons''':&lt;br /&gt;
* If 32-bit vDSO image on restored host differ from dumped (in image), need to catch task after sigreturn and make jump trampolines separately - in case of arch_prctl() simpler ([https://lkml.org/lkml/2016/6/1/425 that's why arch_prctl was in initial RFC])&lt;br /&gt;
* Too many points of failure for one syscall, too complicated&lt;br /&gt;
* Just adding a way to swap those thread info flags from userspace would result in a new races/bugs (as e.g., TASK_SIZE macro depends on TIF_ADDR32, the mmap code may do unexpected things)&lt;br /&gt;
&lt;br /&gt;
After discussion in lkml, conclusion was: separate changing personality (like thread info flags) from API to map vDSO blobs, remove TIF_IA32 flag that differs 32 from 64-bit tasks and look on syscall's nature: compat syscall, x32 syscall or native syscall.&lt;br /&gt;
&lt;br /&gt;
=== Seizing with two 32-bit and 64-bit parasites ===&lt;br /&gt;
&lt;br /&gt;
'''Pros''':&lt;br /&gt;
* no 32-bit calls in 64-bit parasite and vice-versa&lt;br /&gt;
* no need in exit in parasite: ptrace code doesn't allow to set 32-bit regset to 64-bit task and the reverse, running parasite the same nature as task bereaves us from those limits&lt;br /&gt;
&lt;br /&gt;
'''Cons''':&lt;br /&gt;
* need to have two/three (for x32 also) blobs for seizing&lt;br /&gt;
* macros in makefiles to build two parasites&lt;br /&gt;
* serialization of parasite's answers: arguments to parasite differ in size - serialize them, which added not nice-looking and less readable C macros&lt;br /&gt;
&lt;br /&gt;
=== Current approach ===&lt;br /&gt;
&lt;br /&gt;
FIXME&lt;br /&gt;
&lt;br /&gt;
== Needs to be done (TODO) ==&lt;br /&gt;
&lt;br /&gt;
=== Kernel patch for vsyscall page ===&lt;br /&gt;
&lt;br /&gt;
That's emulated page, not a vma - affects only in /proc/&amp;lt;pid&amp;gt;/maps for restored process. Depends on !TIF_IA32 &amp;amp;&amp;amp; !TIF_X32 - Andy got patches for disabling the emulation on per-pid basics, for now I ran tests with &amp;lt;code&amp;gt;vsyscall=none&amp;lt;/code&amp;gt; boot parameter because zdtm.py checks maps before/after C/R.&lt;br /&gt;
&lt;br /&gt;
=== Error dump on x32-bit app dumping ===&lt;br /&gt;
&lt;br /&gt;
At this moment we'll support only compat ia32 applications, attempt to dump x32 compat binary should result in error.&lt;br /&gt;
&lt;br /&gt;
=== Continue removing TIF_IA32 from uprobes &amp;amp; Oprofile ===&lt;br /&gt;
&lt;br /&gt;
This flag should be gone as it's suggested by Andy &amp;amp; Oleg.&lt;br /&gt;
There is quite lot of work to make kernel work without it, but small gain:&lt;br /&gt;
the restored ia32 process will be traced by uprobes/oprofile and stuff like that.&lt;br /&gt;
&lt;br /&gt;
'''Updated''': Done by [https://lore.kernel.org/all/20201004032536.1229030-1-krisman@collabora.com/T/#u patches] - that merged to v5.11&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
* [https://github.com/checkpoint-restore/criu/issues/43 github issue]&lt;br /&gt;
&lt;br /&gt;
[[Category: Under the hood‏‎]]&lt;/div&gt;</summary>
		<author><name>Dsafonov</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=Parasite&amp;diff=5091</id>
		<title>Parasite</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=Parasite&amp;diff=5091"/>
		<updated>2020-08-31T15:46:26Z</updated>

		<summary type="html">&lt;p&gt;Dsafonov: Shorter alias for criu.org/Parasite&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT:[[Parasite_code]]&lt;/div&gt;</summary>
		<author><name>Dsafonov</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=Time_namespace&amp;diff=5065</id>
		<title>Time namespace</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=Time_namespace&amp;diff=5065"/>
		<updated>2020-04-29T14:53:17Z</updated>

		<summary type="html">&lt;p&gt;Dsafonov: remove TODO, add LWN link&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The time namespace support has been merged in the 5.6 kernel. The current implementation allows setting per-namespace offsets to the system monotonic and boot-time clocks.&lt;br /&gt;
&lt;br /&gt;
[https://github.com/checkpoint-restore/criu/pull/1002 The time namespace support] in CRIU has been merged in the [[Download/criu/3.14 | 3.14 release]]. &lt;br /&gt;
&lt;br /&gt;
[https://lwn.net/Articles/766089/ LWN article about time namespaces]&lt;br /&gt;
&lt;br /&gt;
=Links=&lt;br /&gt;
* [https://lwn.net/Articles/817650/ 04/2020 &amp;lt;nowiki&amp;gt;[PATCH v3 0/6] arm64: add the time namespace support&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [https://lore.kernel.org/lkml/158016896588.31887.14143226032971732742.tglx@nanos.tec.linutronix.de/ 01/2020&amp;lt;nowiki&amp;gt; [GIT pull] timers/core for 5.6-rc1&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [https://lkml.kernel.org/r/20191112012724.250792-1-dima@arista.com 11/2019 PATCHv8 00/34 kernel: Introduce Time Namespace]&lt;br /&gt;
* [https://lkml.kernel.org/r/20190206001107.16488-1-dima@arista.com 02/2019 PATCH 00/32 kernel: Introduce Time Namespace]&lt;br /&gt;
* [https://lists.linuxfoundation.org/pipermail/ksummit-discuss/2018-November/006210.html 11/2018 &amp;lt;nowiki&amp;gt;[Ksummit-discuss] [TECH-TOPIC] Multiple time domains&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [https://lwn.net/Articles/766089/ 09/2018 LWN: Time namespaces]&lt;br /&gt;
* [https://lkml.org/lkml/2018/9/19/950 09/2018 RFC 00/20 ns: Introduce Time Namespace]&lt;br /&gt;
* [https://lists.openvz.org/pipermail/criu/2018-June/041486.html 06/2018 The progress of Time namespace]&lt;br /&gt;
* [https://blog.jessfraz.com/post/two-objects-not-namespaced-linux-kernel/ 04/2017 Two Objects not Namespaced by the Linux Kernel]&lt;br /&gt;
* [https://github.com/littlepretty/VirtualTimeKernel 00/2017 VirtualTimeKernel]&lt;br /&gt;
* [http://publish.illinois.edu/science-of-security-lablet/files/2014/05/DSSnet-A-Smart-Grid-Modeling-Platform-Combining-Electrical-Power-Distributtion-System-Simulation-and-Software-Defined-Networking-Emulation.pdf 00/2016 Article about usage of time namespace in VirtualTimeKernel]&lt;br /&gt;
* [https://pt.slideshare.net/kolyshkin/whats-missing-from-upstream-kernel-containers 08/2015 What's missing from upstream kernel containers?]&lt;br /&gt;
* [https://ckpt.wiki.kernel.org/index.php/LPC2009 09/2009 LPC2009]&lt;br /&gt;
* [https://www.landley.net/kdocs/ols/2006/ols2006v1-pages-101-112.pdf 00/2006 Multiple Instances of the Global Linux Namespaces]&lt;br /&gt;
* [https://lwn.net/Articles/180375/ 04/2006 LWN: Virtual time]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: Empty articles]]&lt;br /&gt;
[[Category: Plans]]&lt;/div&gt;</summary>
		<author><name>Dsafonov</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=Logging&amp;diff=5006</id>
		<title>Logging</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=Logging&amp;diff=5006"/>
		<updated>2020-02-05T12:05:05Z</updated>

		<summary type="html">&lt;p&gt;Dsafonov: Add some drops about early logging&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Overview ==&lt;br /&gt;
&lt;br /&gt;
When run CRIU can generate a lot of messages. By default CRIU only prints only critical messages on the screen, but using only these messages can make debugging impossible. On the other hand, increasing the verbosity can easily flood the output.&lt;br /&gt;
&lt;br /&gt;
== Verbosity ==&lt;br /&gt;
&lt;br /&gt;
There are 4 types of messages CRIU can print&lt;br /&gt;
&lt;br /&gt;
; Errors&lt;br /&gt;
: These show that something goes really wrong. If an error message appears on the screen CRIU doesn't complete the operation and exits with an error. At the same time, if CRIU's exit code is not 0, there should be an error message. Typically there are several of them, but only the first one denotes the real obstacle CRIU has hit, all subsequent ones can be due to this first.&lt;br /&gt;
&lt;br /&gt;
; Warnings&lt;br /&gt;
: These are printed if something goes not the way CRIU expects, but still there's a way to handle the situation. Sometimes warnings show that the kernel functionality might not be enough to perform the requested operation, but whether or not it will be really required will be found out later.&lt;br /&gt;
&lt;br /&gt;
; Info-s&lt;br /&gt;
: These are just messages with which CRIU shows what it's doing and why.&lt;br /&gt;
&lt;br /&gt;
; Debug&lt;br /&gt;
: Debug messages show some technical details about CRIU workflow.&lt;br /&gt;
&lt;br /&gt;
=== Log message ===&lt;br /&gt;
&lt;br /&gt;
Messages have specific format.&lt;br /&gt;
&lt;br /&gt;
; Timestamps&lt;br /&gt;
: Some lines start with numbers in brackets (like this &amp;lt;code&amp;gt;(12.345678)&amp;lt;/code&amp;gt;) which denote the time in msec-s passed since CRIU start&lt;br /&gt;
&lt;br /&gt;
; PIE&lt;br /&gt;
: [[Code blobs]] have troubles generating sane logs and precede lines with the &amp;lt;code&amp;gt;pie:&amp;lt;/code&amp;gt; prefix&lt;br /&gt;
&lt;br /&gt;
; PID-s&lt;br /&gt;
: Log lines generated by non-CRIU processes (during restore) show their pids right after timestamp and/or PIE prefix in the &amp;lt;code&amp;gt;PID:&amp;lt;/code&amp;gt; format.&lt;br /&gt;
&lt;br /&gt;
Below are examples of all these types of messages&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
(00.000116) Version: 2.6 (gitid v2.6-205-ga66ed95)         # CRIU message&lt;br /&gt;
(00.004837)     39: Restoring 39 to 39 sid                 # Message from process 39&lt;br /&gt;
pie: 39: Switched to the restorer 39                       # Message from PIE-context of process 39&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Controlling the verbosity ===&lt;br /&gt;
&lt;br /&gt;
The messages to be printed by CRIU are controlled by &amp;lt;code&amp;gt;-v&amp;lt;/code&amp;gt; option. There are two ways of using it.&lt;br /&gt;
&lt;br /&gt;
The first is to specify as many -v's as high level you want. One -v means there will be only errors printed, 4 -v's (&amp;lt;code&amp;gt;-vvvv&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;-v -v -v -v&amp;lt;/code&amp;gt;) will make CRIU print everything.&lt;br /&gt;
&lt;br /&gt;
The second option is to specify the log level with the number, e.g. &amp;lt;code&amp;gt;-v3&amp;lt;/code&amp;gt; will make CRIU print errors, warnings and info-s, but not debugs (which are of log level 4).&lt;br /&gt;
&lt;br /&gt;
Telling &amp;lt;code&amp;gt;-v0&amp;lt;/code&amp;gt; will shut CRIU up, but that's really not recommended.&lt;br /&gt;
&lt;br /&gt;
=== Early logging ===&lt;br /&gt;
&lt;br /&gt;
During CRIU initialization some things can fail, i.e., [[Kerndat|reading the kerndat file]]. Those failures may happen before the logging is set up (log file descriptors open etc.). The failures might even happen while setting up the logging. For all those nuisances, there is a static buffer that stores everything until logging has successfully initialized. The buffer has compile-time size of &amp;lt;code&amp;gt;EARLY_LOG_BUF_LEN&amp;lt;/code&amp;gt; and serves only on early CRIU initialization. Afterwards, it always flushes: if the logging was set up successfully, to the corresponding logs; to &amp;lt;code&amp;gt;stderr&amp;lt;/code&amp;gt; in case CRIU caught early fault and is about to exit.&lt;br /&gt;
&lt;br /&gt;
== Log files ==&lt;br /&gt;
&lt;br /&gt;
If requesting high log level you can get tons of logs on the screen. It's usually unwanted and hard to save (for further analyzes), so it's possible to ask CRIU write the logs into a log file. This is done by {{Opt|--log-file}} option. The log file will be created '''and truncated''' in the [[directories|working directory]], all messages will appear in it.&lt;br /&gt;
&lt;br /&gt;
=== Per-pid logs ===&lt;br /&gt;
&lt;br /&gt;
During restore, log entries are emitted for each process being restored. To make logs analysis easier, one can make CRIU generate separate per-process log files by using {{Opt|--log-pid}} option.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[Better logging]]&lt;br /&gt;
* [[Directories]]&lt;br /&gt;
* [[Debugging]]&lt;br /&gt;
&lt;br /&gt;
[[Category: HOWTO]]&lt;br /&gt;
[[Category: Using]]&lt;/div&gt;</summary>
		<author><name>Dsafonov</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=Articles&amp;diff=4990</id>
		<title>Articles</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=Articles&amp;diff=4990"/>
		<updated>2019-11-14T23:37:47Z</updated>

		<summary type="html">&lt;p&gt;Dsafonov: paper &amp;quot;Replayable Execution Optimized for Page Sharing for a Managed Runtime Environment&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;This is a collection of external articles regarding the CRIU project, sorted by date.&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
   NOTE this page is included into [[Main Page]] (look for External articles)&lt;br /&gt;
        so please make sure that Main Page looks good after your edits!&lt;br /&gt;
&lt;br /&gt;
   PLEASE keep the lists sorted by date, newest ones on top.&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
* 2019-10-03, [https://dl.acm.org/citation.cfm?id=3357542 Fast In-Memory CRIU for Docker Containers]&lt;br /&gt;
* 2019-09-11, [https://arxiv.org/pdf/1909.04945.pdf Performance Estimation of Container-BasedCloud-to-Fog Offloading]&lt;br /&gt;
* 2019-07-16, [https://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&amp;amp;arnumber=8754197 FastContainer: A Homeostatic System Architecture High-speed Adapting Execution Environment Changes]&lt;br /&gt;
* 2019-07-11, [https://ieeexplore.ieee.org/abstract/document/8814504 Exploring Potential for Non-Disruptive Vertical Auto Scaling and Resource Estimation in Kubernetes]&lt;br /&gt;
* 2019-07, University of Twente: [https://essay.utwente.nl/78342/1/coenen_MA_EEMCS.pdf Increasing Availability of the AEPU by Improving the Update Process]&lt;br /&gt;
* 2019-05-25, [https://dl.acm.org/citation.cfm?id=3303978 Replayable Execution Optimized for Page Sharing for a Managed Runtime Environment]&lt;br /&gt;
* 2019-04-29, Binghamton University: [http://www.cs.binghamton.edu/~huilu/pubs/mWarp.pdf mWarp: Accelerating Intra-Host Live Container Migration via Memory Warping]&lt;br /&gt;
* 2019-04-10, [https://lisas.de/~adrian/posts/2019-Apr-10-criu-and-selinux.html CRIU and SELinux]&lt;br /&gt;
* 2019-03-28, [https://dl.acm.org/citation.cfm?id=3303978 Replayable Execution Optimized for Page Sharing for a Managed Runtime Environment]&lt;br /&gt;
* 2019-03-27, [https://www.mdpi.com/1424-8220/19/7/1488/pdf Container Migration in the Fog: A Performance Evaluation]&lt;br /&gt;
* 2019-03-25, [https://dl.acm.org/citation.cfm?id=3313947 Checkpointing and Migration of IoT Edge Functions]&lt;br /&gt;
* 2019-03-24, Future University Hakodate: [https://doi.asiabsdcon.org/10.25263/asiabsdcon2019/p07a Yet Another Container Migration on FreeBSD]&lt;br /&gt;
* 2019-03-09, [https://link.springer.com/article/10.1007/s10586-019-02920-6 Provenance-based fault tolerance technique recommendation for cloud-based scientific workflows: a practical approach]&lt;br /&gt;
&amp;lt;!------------------------------------------------&lt;br /&gt;
   This is to cut the rest of it for Main Page,&lt;br /&gt;
   adding the More... link instead.&lt;br /&gt;
   Make sure to move this whole block up from time to time.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&amp;lt;includeonly&amp;gt;: '''[[Articles|More external articles...]]'''&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
     the below stuff is now shown on the Main Page&lt;br /&gt;
--------------------------------------------------&amp;gt;&lt;br /&gt;
* 2019-02-26, Georgia Institute of Technology / Peking University: [https://www.ndss-symposium.org/wp-content/uploads/2019/02/ndss2019_05A-3_Duan_paper.pdf Automating Patching of Vulnerable Open-Source Software Versions in Application Binaries]&lt;br /&gt;
* 2019-01-30, University West: [https://www.researchgate.net/publication/330798282_Evaluating_Distributed_MPI_Checkpoint_and_Restore_using_Docker_Containers_and_CRIU Evaluating Distributed MPI Checkpoint and Restore using Docker Containers and CRIU]&lt;br /&gt;
* 2018-12, University of Lille: [https://tel.archives-ouvertes.fr/tel-02011337/document Flexible Framework for Elasticity in Cloud Computing]&lt;br /&gt;
* 2018-12, Arizona State University: [https://search.proquest.com/openview/ef9070310256fe9ec9a663ebde537b36/1 Concurrent Checkpointing for Embedded Real-Time Systems]&lt;br /&gt;
* 2018-11-08, [https://lisas.de/~adrian/posts/2018-Nov-08-criu-configuration-files.html CRIU configuration files]&lt;br /&gt;
* 2018-11-06, [https://www.redhat.com/en/blog/using-criu-upgrade-vpn-servers-kernel-without-dropping-connections Using CRIU to upgrade a VPN server's kernel without dropping connections]&lt;br /&gt;
* 2018-10-13, [https://dl.acm.org/citation.cfm?id=3290626 Linux Process Tree Reconstruction Using The Attributed Grammar-Based Tree Transformation Model]&lt;br /&gt;
* 2018-10-10, [https://podman.io/blogs/2018/10/10/checkpoint-restore.html Adding checkpoint/restore support to Podman]&lt;br /&gt;
* 2018-09-15, [https://ieeexplore.ieee.org/stamp/stamp.jsp?arnumber=8539562 Stateful Container Migration employing Checkpoint-based Restoration for Orchestrated Container Clusters]&lt;br /&gt;
* 2018-09-07, [https://ieeexplore.ieee.org/stamp/stamp.jsp?arnumber=8502659 Container Live Migration for Latency Critical Industrial Applications on Edge Computing]&lt;br /&gt;
* 2018-08-15, University of Maryland: [https://drum.lib.umd.edu/bitstream/handle/1903/20499/CS-TR-5056.pdf Fast and Service-preserving Recovery from Malware Infections Using CRIU]&lt;br /&gt;
* 2018-07-07, Moscow Institute of Physics and Technology: [https://pdfs.semanticscholar.org/9ac4/f8ab4fd0492bfdc503831f60a5ce3d1d50a5.pdf?_ga=2.17262585.1140385641.1554239661-2109847679.1554239661 Using CRIU with HPC Containers: Field Experience]&lt;br /&gt;
* 2018-06-28, University of Aberdeen: [https://link.springer.com/chapter/10.1007/978-3-030-02465-9_13 Efficient Live Migration of Linux Containers]&lt;br /&gt;
* 2018-03-24, [https://www.smitechow.com/2018/03/compile-criu-on-centos-6.html Compile CRIU on CentOS 6]&lt;br /&gt;
* 2017-12-06, [https://lisas.de/~adrian/posts/2017-Dec-06-optimizing-live-container-migration-in-lxd.html Optimizing live container migration in LXD]&lt;br /&gt;
* 2017-10-12, Red Hat Blog: [http://rhelblog.redhat.com/2017/10/12/container-migration-around-the-world/ Container Migration Around The World]&lt;br /&gt;
* 2017-07-19, Red Hat Blog: [https://www.redhat.com/en/blog/how-can-process-snapshotrestore-help-save-your-day How can process snapshot/restore help save your day?]&lt;br /&gt;
* 2017-06-29, University West, Sweden: [http://www.diva-portal.org/smash/record.jsf?pid=diva2%3A1144045&amp;amp;dswid=4414 Distributed Checkpointing with Docker Containers in High Performance Computing]&lt;br /&gt;
* 2017-06-06, [https://ieeexplore.ieee.org/stamp/stamp.jsp?arnumber=7980161 Voyager: Complete Container State Migration]&lt;br /&gt;
* 2017-06-06, Selectel Blog: [https://blog.selectel.com/managing-containers-runc/ Managing Containers in runC]&lt;br /&gt;
* 2016-12-16, University of Lisbon: [http://www.gsd.inesc-id.pt/~pjpf/ALMA-middleware-2016.pdf ALMA – GC-assisted JVM Live Migration for Java Server Applications]&lt;br /&gt;
* 2016-07-20, Red Hat KnowledgeBase: [https://access.redhat.com/articles/2455211 CRIU - Checkpoint/Restore in user space]&lt;br /&gt;
* 2016-07-20, LWN.net: [https://lwn.net/SubscriberLink/694593/4d6291b3f727791a/ Quality in open source: testing CRIU]&lt;br /&gt;
* 2016-06-22, Usenix: [https://www.usenix.org/conference/atc16/technical-sessions/presentation/kashyap Instant OS Updates via Userspace Checkpoint-and-Restart]&lt;br /&gt;
* 2016-05-04: [http://lisas.de/~adrian/?p=1183 Lazy Process Migration]&lt;br /&gt;
* 2015-12-31, [http://kimh.github.io/blog/jp/criu/experiment-to-suspend-and-resume-docker-container-with-criu-jp/ Use the CRIU Docker container of stop / resume to the challenge]&lt;br /&gt;
* 2015-12-31, [http://blog.codeship.com/how-containers-will-change-the-game-server-hosting-industry/ How Containers Will Change the Game Server Hosting Industry]&lt;br /&gt;
* 2015-09-21, [http://blog.circleci.com/checkpoint-and-restore-docker-container-with-criu/ Checkpoint and restore Docker container with CRIU]&lt;br /&gt;
* 2015-09-21, [https://blog.docker.com/2015/09/dolly-demo-linuxcon-runc/ Dolly Demo at LinuxCon: Rapid cloning of existing services with runC]&lt;br /&gt;
* 2015-09-10, [http://blog.tonicdev.com/2015/09/10/time-traveling-in-node.js-notebooks.html Time Traveling in Node.js Notebooks]&lt;br /&gt;
* 2015-01-01, [http://www.cisco.com/c/dam/en/us/solutions/collateral/data-center-virtualization/openstack-at-cisco/linux-containers-white-paper-cisco-red-hat.pdfLinux Containers: Why They’re in Your Future and What Has to Happen First]&lt;br /&gt;
* 2015-07-01, [https://kubernetes.io/blog/2015/07/how-did-quake-demo-from-dockercon-work/ How did the Quake demo from DockerCon Work?]&lt;br /&gt;
* 2015-05-06, [https://insights.ubuntu.com/2015/05/06/live-migration-in-lxd/ Live Migration in LXD] Ubuntu Insignts&lt;br /&gt;
* 2015-04-22, TuxDiary [http://tuxdiary.com/2015/04/22/dump-debug-resume-process-criu/ Dump, debug, resume process with criu]&lt;br /&gt;
* 2014-12-12, Symposium on Information and Communication Systems (SInCom 2014) [https://lisas.de/~adrian/proceedingsSInCom2014.pdf Checkpoint/Restore in User-Space with Open MPI]&lt;br /&gt;
* 2014-09-31, [http://www.reuters.com/article/wa-parallels-idUSnBw035202a+100+BSW20141103 Parallels Surpasses One Million Deployed Virtual Containers]&lt;br /&gt;
* 2014-08-01, ADMIN magazine: [http://www.admin-magazine.com/Archive/2014/22/Save-and-Restore-Linux-Processes-with-CRIU Save and Restore Linux Processes with CRIU]&lt;br /&gt;
* 2014-02-15, OCCAM Reproduce: [http://heirman.net/papers/reproduce2014.pdf Efficient, Accurate and Reproducible Simulation of Multi-Threaded Workloads] ([http://www.occamportal.org/slides/reproduce/reproduce14_slides_05.pdf slides])&lt;br /&gt;
* 2013-11-25, Phoronix: [http://www.phoronix.com/scan.php?page=news_item&amp;amp;px=MTUyNjE Checkpoint-Restore Hits v1.0: Freeze Your Linux Apps]&lt;br /&gt;
* 2013-11-25, LWN: [http://lwn.net/Articles/574918/ A note about 1.0]&lt;br /&gt;
* 2013-10-29, LWN: [http://lwn.net/Articles/572125/ Kernel summit report]&lt;br /&gt;
* 2013-02-01, A blog [http://www.anchor.com.au/blog/2013/02/overview-of-checkpoint-and-restore-live-migrating-processes-on-a-linux-system/ post] upon LCA-2013 talk.&lt;br /&gt;
* 2013-01-09, LWN: [http://lwn.net/Articles/531939/ Checkpoint/restore and signals]&lt;br /&gt;
* 2012-11-20, LWN: [http://lwn.net/Articles/525675/ LCE: Checkpoint/restore in user space: are we there yet?]&lt;br /&gt;
* 2012-07-24, OpenVZ blog: [http://openvz.livejournal.com/42414.html CRtools 0.1 released!]&lt;br /&gt;
* 2012-05-01, LWN: [http://lwn.net/Articles/495304/ TCP connection repair]&lt;br /&gt;
* 2012-02-26, The International Symposium on Grids and Clouds (ISGC) [https://lisas.de/~adrian/ISGC-2012_031.pdf Pos (isgc 2012) 031 live process migration for load balancing and/or fault tolerance]&lt;br /&gt;
* 2012-01-31, LWN: [http://lwn.net/Articles/478111/ Preparing for user-space checkpoint/restore]&lt;br /&gt;
* 2011-07-19, LWN: [http://lwn.net/Articles/452184/ Checkpoint/restart (mostly) in user space]&lt;br /&gt;
&lt;br /&gt;
=== In Russian ===&lt;br /&gt;
* 13.05.2016, Habrahabr: [https://habrahabr.ru/post/283504/ Особенности тестирования технологии C/R в Linux]&lt;br /&gt;
* 09.03.2016, Opennet: [http://www.opennet.ru/opennews/art.shtml?num=44015 Выпуск CRIU 2.0, системы для сохранения и восстановления состояния процессов в Linux]&lt;br /&gt;
* 18.12.2015, Opennet: [http://www.opennet.ru/opennews/art.shtml?num=43539 CRIU, путь от вызывающей непонимание разработки до интеграции в Red Hat Enterprise Linux] &lt;br /&gt;
* 09.12.2015, Opennet: [http://www.opennet.ru/opennews/art.shtml?num=43489 Выпуск CRIU 1.8, системы для сохранения и восстановления состояния процессов в Linux] &lt;br /&gt;
* 09.09.2015, Opennet: [http://www.opennet.ru/opennews/art.shtml?num=42939 Выпуск CRIU 1.7, системы для сохранения и восстановления состояния процессов в Linux]&lt;br /&gt;
* 25.08.2015, Opennet: [http://www.opennet.ru/opennews/art.shtml?num=42850 Проект OpenVZ анонсировал новый компонент для миграции Linux контейнеров - P.Haul]&lt;br /&gt;
* 27.05.2015, Opennet: [http://www.opennet.ru/opennews/art.shtml?num=42315 Статус интеграции проектов CRIU и Docker]&lt;br /&gt;
* 25.11.2013, Opennet: [http://www.opennet.ru/opennews/art.shtml?num=38519 Анонс выхода 1.0]&lt;br /&gt;
* 28.04.2015, Типичный программист: [http://tproger.ru/interview/pavel-emelyanov/ Разработка ядра Linux — это общение в клубе по интересам]&lt;br /&gt;
* 22.04.2013, Habrahabr: [http://habrahabr.ru/post/177499/ В преддверии очередного релиза CRIU]&lt;br /&gt;
* 04.03.2013, IT-computer: [http://www.it-computer.com/osvaivaem-sistemu-zamorozki-processov-criu Осваиваем систему заморозки процессов CRIU]&lt;br /&gt;
* 28.09.2012, Opennet: [http://www.opennet.ru/opennews/art.shtml?num=34958 CRIU 0.2 release] &lt;br /&gt;
* 05.11.2013, Xakep: [https://xakep.ru/2013/11/05/criu-manual/ Осваиваем систему заморозки процессов CRIU]&lt;br /&gt;
* 15.08.2013, Habrahabr: [http://habrahabr.ru/company/parallels/blog/190066/ «Разработка ядра Linux — это общение в клубе по интересам»]&lt;br /&gt;
* 01.10.2012, YaC 2012: [http://events.yandex.ru/events/yac/2012/talks/352/ больше, чем живая миграция для Linux контейнеров]&lt;br /&gt;
* 24.07.2012, Habrahabr: [http://habrahabr.ru/post/148413/ CRIU — новый амбициозный проект для сохранения и восстановления состояния процессов]&lt;br /&gt;
* 24.07.2012, Ru-OpenVZ blog: [http://ru-openvz.livejournal.com/5753.html Вышел первый релиз CRtools, версия 0.1]&lt;br /&gt;
* 24.07.2012, Opennet: [http://www.opennet.ru/opennews/art.shtml?num=34408 Первый релиз CRtools, утилиты для заморозки и восстановления состояния процессов в Linux]&lt;br /&gt;
* 24.07.2012, LOR: [http://www.linux.org.ru/news/kernel/8021514 Вышел первый релиз CRtools, версия 0.1]&lt;br /&gt;
* Копипаста о v0.1 &amp;quot;CRIU / CRtools 0.1 — создание контрольных точек Linux-приложений и восстановление с них&amp;quot;: [http://rosinvest.com/novosti/949423 Rosinvest], [http://www.nixp.ru/news/11854.html NIXP] [http://pcnews.ru/top/news/day/criu-crtools-linux-openvz-checkpoint-restore-in-userspace-cpt-system-90-10-lxc-org-398305.html PCNews]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Dsafonov</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=Articles&amp;diff=4989</id>
		<title>Articles</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=Articles&amp;diff=4989"/>
		<updated>2019-11-14T23:30:54Z</updated>

		<summary type="html">&lt;p&gt;Dsafonov: Add &amp;quot;Performance Estimation of Container-BasedCloud-to-Fog Offloading&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;This is a collection of external articles regarding the CRIU project, sorted by date.&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
   NOTE this page is included into [[Main Page]] (look for External articles)&lt;br /&gt;
        so please make sure that Main Page looks good after your edits!&lt;br /&gt;
&lt;br /&gt;
   PLEASE keep the lists sorted by date, newest ones on top.&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
* 2019-10-03, [https://dl.acm.org/citation.cfm?id=3357542 Fast In-Memory CRIU for Docker Containers]&lt;br /&gt;
* 2019-09-11, [https://arxiv.org/pdf/1909.04945.pdf Performance Estimation of Container-BasedCloud-to-Fog Offloading]&lt;br /&gt;
* 2019-07-16, [https://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&amp;amp;arnumber=8754197 FastContainer: A Homeostatic System Architecture High-speed Adapting Execution Environment Changes]&lt;br /&gt;
* 2019-07-11, [https://ieeexplore.ieee.org/abstract/document/8814504 Exploring Potential for Non-Disruptive Vertical Auto Scaling and Resource Estimation in Kubernetes]&lt;br /&gt;
* 2019-07, University of Twente: [https://essay.utwente.nl/78342/1/coenen_MA_EEMCS.pdf Increasing Availability of the AEPU by Improving the Update Process]&lt;br /&gt;
* 2019-04-29, Binghamton University: [http://www.cs.binghamton.edu/~huilu/pubs/mWarp.pdf mWarp: Accelerating Intra-Host Live Container Migration via Memory Warping]&lt;br /&gt;
* 2019-04-10, [https://lisas.de/~adrian/posts/2019-Apr-10-criu-and-selinux.html CRIU and SELinux]&lt;br /&gt;
* 2019-03-28, [https://dl.acm.org/citation.cfm?id=3303978 Replayable Execution Optimized for Page Sharing for a Managed Runtime Environment]&lt;br /&gt;
* 2019-03-27, [https://www.mdpi.com/1424-8220/19/7/1488/pdf Container Migration in the Fog: A Performance Evaluation]&lt;br /&gt;
* 2019-03-25, [https://dl.acm.org/citation.cfm?id=3313947 Checkpointing and Migration of IoT Edge Functions]&lt;br /&gt;
* 2019-03-24, Future University Hakodate: [https://doi.asiabsdcon.org/10.25263/asiabsdcon2019/p07a Yet Another Container Migration on FreeBSD]&lt;br /&gt;
* 2019-03-09, [https://link.springer.com/article/10.1007/s10586-019-02920-6 Provenance-based fault tolerance technique recommendation for cloud-based scientific workflows: a practical approach]&lt;br /&gt;
&amp;lt;!------------------------------------------------&lt;br /&gt;
   This is to cut the rest of it for Main Page,&lt;br /&gt;
   adding the More... link instead.&lt;br /&gt;
   Make sure to move this whole block up from time to time.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&amp;lt;includeonly&amp;gt;: '''[[Articles|More external articles...]]'''&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
     the below stuff is now shown on the Main Page&lt;br /&gt;
--------------------------------------------------&amp;gt;&lt;br /&gt;
* 2019-02-26, Georgia Institute of Technology / Peking University: [https://www.ndss-symposium.org/wp-content/uploads/2019/02/ndss2019_05A-3_Duan_paper.pdf Automating Patching of Vulnerable Open-Source Software Versions in Application Binaries]&lt;br /&gt;
* 2019-01-30, University West: [https://www.researchgate.net/publication/330798282_Evaluating_Distributed_MPI_Checkpoint_and_Restore_using_Docker_Containers_and_CRIU Evaluating Distributed MPI Checkpoint and Restore using Docker Containers and CRIU]&lt;br /&gt;
* 2018-12, University of Lille: [https://tel.archives-ouvertes.fr/tel-02011337/document Flexible Framework for Elasticity in Cloud Computing]&lt;br /&gt;
* 2018-12, Arizona State University: [https://search.proquest.com/openview/ef9070310256fe9ec9a663ebde537b36/1 Concurrent Checkpointing for Embedded Real-Time Systems]&lt;br /&gt;
* 2018-11-08, [https://lisas.de/~adrian/posts/2018-Nov-08-criu-configuration-files.html CRIU configuration files]&lt;br /&gt;
* 2018-11-06, [https://www.redhat.com/en/blog/using-criu-upgrade-vpn-servers-kernel-without-dropping-connections Using CRIU to upgrade a VPN server's kernel without dropping connections]&lt;br /&gt;
* 2018-10-13, [https://dl.acm.org/citation.cfm?id=3290626 Linux Process Tree Reconstruction Using The Attributed Grammar-Based Tree Transformation Model]&lt;br /&gt;
* 2018-10-10, [https://podman.io/blogs/2018/10/10/checkpoint-restore.html Adding checkpoint/restore support to Podman]&lt;br /&gt;
* 2018-09-15, [https://ieeexplore.ieee.org/stamp/stamp.jsp?arnumber=8539562 Stateful Container Migration employing Checkpoint-based Restoration for Orchestrated Container Clusters]&lt;br /&gt;
* 2018-09-07, [https://ieeexplore.ieee.org/stamp/stamp.jsp?arnumber=8502659 Container Live Migration for Latency Critical Industrial Applications on Edge Computing]&lt;br /&gt;
* 2018-08-15, University of Maryland: [https://drum.lib.umd.edu/bitstream/handle/1903/20499/CS-TR-5056.pdf Fast and Service-preserving Recovery from Malware Infections Using CRIU]&lt;br /&gt;
* 2018-07-07, Moscow Institute of Physics and Technology: [https://pdfs.semanticscholar.org/9ac4/f8ab4fd0492bfdc503831f60a5ce3d1d50a5.pdf?_ga=2.17262585.1140385641.1554239661-2109847679.1554239661 Using CRIU with HPC Containers: Field Experience]&lt;br /&gt;
* 2018-06-28, University of Aberdeen: [https://link.springer.com/chapter/10.1007/978-3-030-02465-9_13 Efficient Live Migration of Linux Containers]&lt;br /&gt;
* 2018-03-24, [https://www.smitechow.com/2018/03/compile-criu-on-centos-6.html Compile CRIU on CentOS 6]&lt;br /&gt;
* 2017-12-06, [https://lisas.de/~adrian/posts/2017-Dec-06-optimizing-live-container-migration-in-lxd.html Optimizing live container migration in LXD]&lt;br /&gt;
* 2017-10-12, Red Hat Blog: [http://rhelblog.redhat.com/2017/10/12/container-migration-around-the-world/ Container Migration Around The World]&lt;br /&gt;
* 2017-07-19, Red Hat Blog: [https://www.redhat.com/en/blog/how-can-process-snapshotrestore-help-save-your-day How can process snapshot/restore help save your day?]&lt;br /&gt;
* 2017-06-29, University West, Sweden: [http://www.diva-portal.org/smash/record.jsf?pid=diva2%3A1144045&amp;amp;dswid=4414 Distributed Checkpointing with Docker Containers in High Performance Computing]&lt;br /&gt;
* 2017-06-06, [https://ieeexplore.ieee.org/stamp/stamp.jsp?arnumber=7980161 Voyager: Complete Container State Migration]&lt;br /&gt;
* 2017-06-06, Selectel Blog: [https://blog.selectel.com/managing-containers-runc/ Managing Containers in runC]&lt;br /&gt;
* 2016-12-16, University of Lisbon: [http://www.gsd.inesc-id.pt/~pjpf/ALMA-middleware-2016.pdf ALMA – GC-assisted JVM Live Migration for Java Server Applications]&lt;br /&gt;
* 2016-07-20, Red Hat KnowledgeBase: [https://access.redhat.com/articles/2455211 CRIU - Checkpoint/Restore in user space]&lt;br /&gt;
* 2016-07-20, LWN.net: [https://lwn.net/SubscriberLink/694593/4d6291b3f727791a/ Quality in open source: testing CRIU]&lt;br /&gt;
* 2016-06-22, Usenix: [https://www.usenix.org/conference/atc16/technical-sessions/presentation/kashyap Instant OS Updates via Userspace Checkpoint-and-Restart]&lt;br /&gt;
* 2016-05-04: [http://lisas.de/~adrian/?p=1183 Lazy Process Migration]&lt;br /&gt;
* 2015-12-31, [http://kimh.github.io/blog/jp/criu/experiment-to-suspend-and-resume-docker-container-with-criu-jp/ Use the CRIU Docker container of stop / resume to the challenge]&lt;br /&gt;
* 2015-12-31, [http://blog.codeship.com/how-containers-will-change-the-game-server-hosting-industry/ How Containers Will Change the Game Server Hosting Industry]&lt;br /&gt;
* 2015-09-21, [http://blog.circleci.com/checkpoint-and-restore-docker-container-with-criu/ Checkpoint and restore Docker container with CRIU]&lt;br /&gt;
* 2015-09-21, [https://blog.docker.com/2015/09/dolly-demo-linuxcon-runc/ Dolly Demo at LinuxCon: Rapid cloning of existing services with runC]&lt;br /&gt;
* 2015-09-10, [http://blog.tonicdev.com/2015/09/10/time-traveling-in-node.js-notebooks.html Time Traveling in Node.js Notebooks]&lt;br /&gt;
* 2015-01-01, [http://www.cisco.com/c/dam/en/us/solutions/collateral/data-center-virtualization/openstack-at-cisco/linux-containers-white-paper-cisco-red-hat.pdfLinux Containers: Why They’re in Your Future and What Has to Happen First]&lt;br /&gt;
* 2015-07-01, [https://kubernetes.io/blog/2015/07/how-did-quake-demo-from-dockercon-work/ How did the Quake demo from DockerCon Work?]&lt;br /&gt;
* 2015-05-06, [https://insights.ubuntu.com/2015/05/06/live-migration-in-lxd/ Live Migration in LXD] Ubuntu Insignts&lt;br /&gt;
* 2015-04-22, TuxDiary [http://tuxdiary.com/2015/04/22/dump-debug-resume-process-criu/ Dump, debug, resume process with criu]&lt;br /&gt;
* 2014-12-12, Symposium on Information and Communication Systems (SInCom 2014) [https://lisas.de/~adrian/proceedingsSInCom2014.pdf Checkpoint/Restore in User-Space with Open MPI]&lt;br /&gt;
* 2014-09-31, [http://www.reuters.com/article/wa-parallels-idUSnBw035202a+100+BSW20141103 Parallels Surpasses One Million Deployed Virtual Containers]&lt;br /&gt;
* 2014-08-01, ADMIN magazine: [http://www.admin-magazine.com/Archive/2014/22/Save-and-Restore-Linux-Processes-with-CRIU Save and Restore Linux Processes with CRIU]&lt;br /&gt;
* 2014-02-15, OCCAM Reproduce: [http://heirman.net/papers/reproduce2014.pdf Efficient, Accurate and Reproducible Simulation of Multi-Threaded Workloads] ([http://www.occamportal.org/slides/reproduce/reproduce14_slides_05.pdf slides])&lt;br /&gt;
* 2013-11-25, Phoronix: [http://www.phoronix.com/scan.php?page=news_item&amp;amp;px=MTUyNjE Checkpoint-Restore Hits v1.0: Freeze Your Linux Apps]&lt;br /&gt;
* 2013-11-25, LWN: [http://lwn.net/Articles/574918/ A note about 1.0]&lt;br /&gt;
* 2013-10-29, LWN: [http://lwn.net/Articles/572125/ Kernel summit report]&lt;br /&gt;
* 2013-02-01, A blog [http://www.anchor.com.au/blog/2013/02/overview-of-checkpoint-and-restore-live-migrating-processes-on-a-linux-system/ post] upon LCA-2013 talk.&lt;br /&gt;
* 2013-01-09, LWN: [http://lwn.net/Articles/531939/ Checkpoint/restore and signals]&lt;br /&gt;
* 2012-11-20, LWN: [http://lwn.net/Articles/525675/ LCE: Checkpoint/restore in user space: are we there yet?]&lt;br /&gt;
* 2012-07-24, OpenVZ blog: [http://openvz.livejournal.com/42414.html CRtools 0.1 released!]&lt;br /&gt;
* 2012-05-01, LWN: [http://lwn.net/Articles/495304/ TCP connection repair]&lt;br /&gt;
* 2012-02-26, The International Symposium on Grids and Clouds (ISGC) [https://lisas.de/~adrian/ISGC-2012_031.pdf Pos (isgc 2012) 031 live process migration for load balancing and/or fault tolerance]&lt;br /&gt;
* 2012-01-31, LWN: [http://lwn.net/Articles/478111/ Preparing for user-space checkpoint/restore]&lt;br /&gt;
* 2011-07-19, LWN: [http://lwn.net/Articles/452184/ Checkpoint/restart (mostly) in user space]&lt;br /&gt;
&lt;br /&gt;
=== In Russian ===&lt;br /&gt;
* 13.05.2016, Habrahabr: [https://habrahabr.ru/post/283504/ Особенности тестирования технологии C/R в Linux]&lt;br /&gt;
* 09.03.2016, Opennet: [http://www.opennet.ru/opennews/art.shtml?num=44015 Выпуск CRIU 2.0, системы для сохранения и восстановления состояния процессов в Linux]&lt;br /&gt;
* 18.12.2015, Opennet: [http://www.opennet.ru/opennews/art.shtml?num=43539 CRIU, путь от вызывающей непонимание разработки до интеграции в Red Hat Enterprise Linux] &lt;br /&gt;
* 09.12.2015, Opennet: [http://www.opennet.ru/opennews/art.shtml?num=43489 Выпуск CRIU 1.8, системы для сохранения и восстановления состояния процессов в Linux] &lt;br /&gt;
* 09.09.2015, Opennet: [http://www.opennet.ru/opennews/art.shtml?num=42939 Выпуск CRIU 1.7, системы для сохранения и восстановления состояния процессов в Linux]&lt;br /&gt;
* 25.08.2015, Opennet: [http://www.opennet.ru/opennews/art.shtml?num=42850 Проект OpenVZ анонсировал новый компонент для миграции Linux контейнеров - P.Haul]&lt;br /&gt;
* 27.05.2015, Opennet: [http://www.opennet.ru/opennews/art.shtml?num=42315 Статус интеграции проектов CRIU и Docker]&lt;br /&gt;
* 25.11.2013, Opennet: [http://www.opennet.ru/opennews/art.shtml?num=38519 Анонс выхода 1.0]&lt;br /&gt;
* 28.04.2015, Типичный программист: [http://tproger.ru/interview/pavel-emelyanov/ Разработка ядра Linux — это общение в клубе по интересам]&lt;br /&gt;
* 22.04.2013, Habrahabr: [http://habrahabr.ru/post/177499/ В преддверии очередного релиза CRIU]&lt;br /&gt;
* 04.03.2013, IT-computer: [http://www.it-computer.com/osvaivaem-sistemu-zamorozki-processov-criu Осваиваем систему заморозки процессов CRIU]&lt;br /&gt;
* 28.09.2012, Opennet: [http://www.opennet.ru/opennews/art.shtml?num=34958 CRIU 0.2 release] &lt;br /&gt;
* 05.11.2013, Xakep: [https://xakep.ru/2013/11/05/criu-manual/ Осваиваем систему заморозки процессов CRIU]&lt;br /&gt;
* 15.08.2013, Habrahabr: [http://habrahabr.ru/company/parallels/blog/190066/ «Разработка ядра Linux — это общение в клубе по интересам»]&lt;br /&gt;
* 01.10.2012, YaC 2012: [http://events.yandex.ru/events/yac/2012/talks/352/ больше, чем живая миграция для Linux контейнеров]&lt;br /&gt;
* 24.07.2012, Habrahabr: [http://habrahabr.ru/post/148413/ CRIU — новый амбициозный проект для сохранения и восстановления состояния процессов]&lt;br /&gt;
* 24.07.2012, Ru-OpenVZ blog: [http://ru-openvz.livejournal.com/5753.html Вышел первый релиз CRtools, версия 0.1]&lt;br /&gt;
* 24.07.2012, Opennet: [http://www.opennet.ru/opennews/art.shtml?num=34408 Первый релиз CRtools, утилиты для заморозки и восстановления состояния процессов в Linux]&lt;br /&gt;
* 24.07.2012, LOR: [http://www.linux.org.ru/news/kernel/8021514 Вышел первый релиз CRtools, версия 0.1]&lt;br /&gt;
* Копипаста о v0.1 &amp;quot;CRIU / CRtools 0.1 — создание контрольных точек Linux-приложений и восстановление с них&amp;quot;: [http://rosinvest.com/novosti/949423 Rosinvest], [http://www.nixp.ru/news/11854.html NIXP] [http://pcnews.ru/top/news/day/criu-crtools-linux-openvz-checkpoint-restore-in-userspace-cpt-system-90-10-lxc-org-398305.html PCNews]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Dsafonov</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=Time_namespace&amp;diff=4988</id>
		<title>Time namespace</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=Time_namespace&amp;diff=4988"/>
		<updated>2019-11-12T01:34:50Z</updated>

		<summary type="html">&lt;p&gt;Dsafonov: /* Links */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Two things (for now) we want to solve with this:&lt;br /&gt;
# Shift timer's offsets&lt;br /&gt;
# Make start-time remain &amp;quot;unchanged&amp;quot; after C/R&lt;br /&gt;
# Continuous flow of monotonic time (CLOCK_MONOTONIC).&lt;br /&gt;
&lt;br /&gt;
What about other kinds of counters like perf events and trace events?&lt;br /&gt;
&lt;br /&gt;
=TODO=&lt;br /&gt;
==Required in RFC==&lt;br /&gt;
&lt;br /&gt;
* selftests to test all we've added&lt;br /&gt;
* TIME_NS iffdefery everywhere &lt;br /&gt;
&lt;br /&gt;
==Maybe later==&lt;br /&gt;
* CLONE_NEWTIME reuses the last free flag from sys_clone() - any way to still keep extensibility for the syscall?&lt;br /&gt;
* arm64/arm32/s390/power64 - add archs vvar support (nit: big/little-endianess for timespec::nsec)&lt;br /&gt;
* REALTIME-related:&lt;br /&gt;
** REALTIME offsets&lt;br /&gt;
** vvar offsets will need synchronization (like gtod_read_begin()/gtod_read_retry())&lt;br /&gt;
** vfs modification/creation time should work&lt;br /&gt;
** starttime in /proc/pid/stat&lt;br /&gt;
** btime in /proc/stat&lt;br /&gt;
** utime()/utimes()/futimesat() (with times == NULL)&lt;br /&gt;
** utimensat()/futimens() - with UTIME_NOW&lt;br /&gt;
** mq_timedsend()/mq_timedreceive()&lt;br /&gt;
** semtimedop()&lt;br /&gt;
** timerfd&lt;br /&gt;
** timer_create()&lt;br /&gt;
** COARSE times&lt;br /&gt;
** clock_nanosleep()&lt;br /&gt;
* Adjtime (too complicated for PoC)&lt;br /&gt;
* Cpu time for thread/pid/pgid (times())&lt;br /&gt;
* /proc/stat ticks? (top uses them e.g.)&lt;br /&gt;
* pid creation time (probably different unrelated API)&lt;br /&gt;
* clock_tai - if we care about isolation from host's time&lt;br /&gt;
&lt;br /&gt;
=Git=&lt;br /&gt;
* [https://github.com/0x7f454c46/linux/tree/wip/time-ns https://github.com/0x7f454c46/linux/tree/wip/time-ns]&lt;br /&gt;
&lt;br /&gt;
=Links=&lt;br /&gt;
* [https://lkml.kernel.org/r/20191112012724.250792-1-dima@arista.com 11/2019 PATCHv8 00/34 kernel: Introduce Time Namespace]&lt;br /&gt;
* [https://lkml.kernel.org/r/20190206001107.16488-1-dima@arista.com 02/2019 PATCH 00/32 kernel: Introduce Time Namespace]&lt;br /&gt;
* [https://lists.linuxfoundation.org/pipermail/ksummit-discuss/2018-November/006210.html 11/2018 &amp;lt;nowiki&amp;gt;[Ksummit-discuss] [TECH-TOPIC] Multiple time domains&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [https://lwn.net/Articles/766089/ 09/2018 LWN: Time namespaces]&lt;br /&gt;
* [https://lkml.org/lkml/2018/9/19/950 09/2018 RFC 00/20 ns: Introduce Time Namespace]&lt;br /&gt;
* [https://lists.openvz.org/pipermail/criu/2018-June/041486.html 06/2018 The progress of Time namespace]&lt;br /&gt;
* [https://blog.jessfraz.com/post/two-objects-not-namespaced-linux-kernel/ 04/2017 Two Objects not Namespaced by the Linux Kernel]&lt;br /&gt;
* [https://github.com/littlepretty/VirtualTimeKernel 00/2017 VirtualTimeKernel]&lt;br /&gt;
* [http://publish.illinois.edu/science-of-security-lablet/files/2014/05/DSSnet-A-Smart-Grid-Modeling-Platform-Combining-Electrical-Power-Distributtion-System-Simulation-and-Software-Defined-Networking-Emulation.pdf 00/2016 Article about usage of time namespace in VirtualTimeKernel]&lt;br /&gt;
* [https://pt.slideshare.net/kolyshkin/whats-missing-from-upstream-kernel-containers 08/2015 What's missing from upstream kernel containers?]&lt;br /&gt;
* [https://ckpt.wiki.kernel.org/index.php/LPC2009 09/2009 LPC2009]&lt;br /&gt;
* [https://www.landley.net/kdocs/ols/2006/ols2006v1-pages-101-112.pdf 00/2006 Multiple Instances of the Global Linux Namespaces]&lt;br /&gt;
* [https://lwn.net/Articles/180375/ 04/2006 LWN: Virtual time]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: Empty articles]]&lt;br /&gt;
[[Category: Plans]]&lt;/div&gt;</summary>
		<author><name>Dsafonov</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=Time_namespace&amp;diff=4987</id>
		<title>Time namespace</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=Time_namespace&amp;diff=4987"/>
		<updated>2019-11-12T01:34:19Z</updated>

		<summary type="html">&lt;p&gt;Dsafonov: LKML link to v8 for timens&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Two things (for now) we want to solve with this:&lt;br /&gt;
# Shift timer's offsets&lt;br /&gt;
# Make start-time remain &amp;quot;unchanged&amp;quot; after C/R&lt;br /&gt;
# Continuous flow of monotonic time (CLOCK_MONOTONIC).&lt;br /&gt;
&lt;br /&gt;
What about other kinds of counters like perf events and trace events?&lt;br /&gt;
&lt;br /&gt;
=TODO=&lt;br /&gt;
==Required in RFC==&lt;br /&gt;
&lt;br /&gt;
* selftests to test all we've added&lt;br /&gt;
* TIME_NS iffdefery everywhere &lt;br /&gt;
&lt;br /&gt;
==Maybe later==&lt;br /&gt;
* CLONE_NEWTIME reuses the last free flag from sys_clone() - any way to still keep extensibility for the syscall?&lt;br /&gt;
* arm64/arm32/s390/power64 - add archs vvar support (nit: big/little-endianess for timespec::nsec)&lt;br /&gt;
* REALTIME-related:&lt;br /&gt;
** REALTIME offsets&lt;br /&gt;
** vvar offsets will need synchronization (like gtod_read_begin()/gtod_read_retry())&lt;br /&gt;
** vfs modification/creation time should work&lt;br /&gt;
** starttime in /proc/pid/stat&lt;br /&gt;
** btime in /proc/stat&lt;br /&gt;
** utime()/utimes()/futimesat() (with times == NULL)&lt;br /&gt;
** utimensat()/futimens() - with UTIME_NOW&lt;br /&gt;
** mq_timedsend()/mq_timedreceive()&lt;br /&gt;
** semtimedop()&lt;br /&gt;
** timerfd&lt;br /&gt;
** timer_create()&lt;br /&gt;
** COARSE times&lt;br /&gt;
** clock_nanosleep()&lt;br /&gt;
* Adjtime (too complicated for PoC)&lt;br /&gt;
* Cpu time for thread/pid/pgid (times())&lt;br /&gt;
* /proc/stat ticks? (top uses them e.g.)&lt;br /&gt;
* pid creation time (probably different unrelated API)&lt;br /&gt;
* clock_tai - if we care about isolation from host's time&lt;br /&gt;
&lt;br /&gt;
=Git=&lt;br /&gt;
* [https://github.com/0x7f454c46/linux/tree/wip/time-ns https://github.com/0x7f454c46/linux/tree/wip/time-ns]&lt;br /&gt;
&lt;br /&gt;
=Links=&lt;br /&gt;
* [lkml.kernel.org/r/20191112012724.250792-1-dima@arista.com 11/2019 PATCHv8 00/34 kernel: Introduce Time Namespace]&lt;br /&gt;
* [https://lkml.kernel.org/r/20190206001107.16488-1-dima@arista.com 02/2019 PATCH 00/32 kernel: Introduce Time Namespace]&lt;br /&gt;
* [https://lists.linuxfoundation.org/pipermail/ksummit-discuss/2018-November/006210.html 11/2018 &amp;lt;nowiki&amp;gt;[Ksummit-discuss] [TECH-TOPIC] Multiple time domains&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [https://lwn.net/Articles/766089/ 09/2018 LWN: Time namespaces]&lt;br /&gt;
* [https://lkml.org/lkml/2018/9/19/950 09/2018 RFC 00/20 ns: Introduce Time Namespace]&lt;br /&gt;
* [https://lists.openvz.org/pipermail/criu/2018-June/041486.html 06/2018 The progress of Time namespace]&lt;br /&gt;
* [https://blog.jessfraz.com/post/two-objects-not-namespaced-linux-kernel/ 04/2017 Two Objects not Namespaced by the Linux Kernel]&lt;br /&gt;
* [https://github.com/littlepretty/VirtualTimeKernel 00/2017 VirtualTimeKernel]&lt;br /&gt;
* [http://publish.illinois.edu/science-of-security-lablet/files/2014/05/DSSnet-A-Smart-Grid-Modeling-Platform-Combining-Electrical-Power-Distributtion-System-Simulation-and-Software-Defined-Networking-Emulation.pdf 00/2016 Article about usage of time namespace in VirtualTimeKernel]&lt;br /&gt;
* [https://pt.slideshare.net/kolyshkin/whats-missing-from-upstream-kernel-containers 08/2015 What's missing from upstream kernel containers?]&lt;br /&gt;
* [https://ckpt.wiki.kernel.org/index.php/LPC2009 09/2009 LPC2009]&lt;br /&gt;
* [https://www.landley.net/kdocs/ols/2006/ols2006v1-pages-101-112.pdf 00/2006 Multiple Instances of the Global Linux Namespaces]&lt;br /&gt;
* [https://lwn.net/Articles/180375/ 04/2006 LWN: Virtual time]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: Empty articles]]&lt;br /&gt;
[[Category: Plans]]&lt;/div&gt;</summary>
		<author><name>Dsafonov</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=Vdso&amp;diff=4933</id>
		<title>Vdso</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=Vdso&amp;diff=4933"/>
		<updated>2019-07-31T19:21:01Z</updated>

		<summary type="html">&lt;p&gt;Dsafonov: a bit specify what's structure of vdso&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Overview ===&lt;br /&gt;
&lt;br /&gt;
'''vDSO''' stands for [http://man7.org/linux/man-pages/man7/vdso.7.html ''virtual dynamic shared object''] and basically is a shared library exported by kernel into every userspace program. It usually exports a few frequently used functions (such as gettimeofday, getcpu and etc) and userspace applications don't call them directly but make use of '''libc''' instead.&lt;br /&gt;
&lt;br /&gt;
=== A problem ===&lt;br /&gt;
&lt;br /&gt;
While the kernel guarantees backwards compatibility (i.e. helper functions won't suddenly disappear), the internal structure of the '''vDSO''' itself may vary. Userspace programs won't notice such changes but it brings a huge problem to CRIU. The '''vDSO''' structure is highly coupled with the kernel internals. If an application is being migrated to a new kernel release (with a brand new '''vDSO''') the old '''vDSO''' (which is stored in the application's memory) is no longer usable.&lt;br /&gt;
&lt;br /&gt;
=== Calls proxification ===&lt;br /&gt;
&lt;br /&gt;
To solve this problem CRIU does that named call proxification, where all functions from the original '''vDSO''' code are redirected to a new one provided by the kernel where application is restored. This done in a several steps on restore:&lt;br /&gt;
&lt;br /&gt;
# Scan runtime environment for current '''vDSO''' and parse its structure (size, sections, symbols, etc)&lt;br /&gt;
# On restore of dumped '''vDSO''' memory area we patch function entry points so that they are redirected to current '''vDSO''' (for x86 architecture is simply a &amp;lt;code&amp;gt;jmp&amp;lt;/code&amp;gt; instruction)&lt;br /&gt;
&lt;br /&gt;
After that an restored application can continue using original '''vDSO''' helpers without problems.&lt;br /&gt;
&lt;br /&gt;
In case if an application is dumped and restored on same kernel CRIU detects that '''vDSO''' structure has not be changed and doesn't use calls proxification.&lt;br /&gt;
&lt;br /&gt;
=== Unsolved proxification problems ===&lt;br /&gt;
&lt;br /&gt;
# If an application in very unlikely case is Checkpointed over first bytes of vdso entry ''and'' vdso is different on the destination migration node, those might be the bytes that are being patched during proxification. If it's on vdso just after those entry-bytes, the stale data from vvar is taken (might be just fine afterall).&lt;br /&gt;
&lt;br /&gt;
[[Category: Under the hood]]&lt;/div&gt;</summary>
		<author><name>Dsafonov</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=What_can_change_after_C/R&amp;diff=4932</id>
		<title>What can change after C/R</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=What_can_change_after_C/R&amp;diff=4932"/>
		<updated>2019-07-31T19:14:24Z</updated>

		<summary type="html">&lt;p&gt;Dsafonov: what can change: add a link to vdso page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is very important (I believe). It describes what can change in a tasks' environment after a C/R cycle. If a software you're using depends on either item from the list below, it may break after C/R. The list is incomplete, but we do our best to make it contain relevant data.&lt;br /&gt;
&lt;br /&gt;
; Per-task statistics&lt;br /&gt;
: Various counters, that can be obtained via &amp;lt;code&amp;gt;/proc/$pid/status&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;getrusage()&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Namespaces' IDs&lt;br /&gt;
: Numbers you see in the &amp;lt;code&amp;gt;/proc/$pid/ns/*&amp;lt;/code&amp;gt; links' targets&lt;br /&gt;
&lt;br /&gt;
; Process start time&lt;br /&gt;
: It's in the 22nd field of the &amp;lt;code&amp;gt;/proc/$pid/stat&amp;lt;/code&amp;gt; file&lt;br /&gt;
&lt;br /&gt;
; Mount points IDs&lt;br /&gt;
: The numbers from first 2 columns of &amp;lt;code&amp;gt;/proc/$pid/mountinfo&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Sockets IDs&lt;br /&gt;
: If you stat() a file descriptor with a socket the st_ino value can be used as unique socket ID. This value does changes after C/R as these IDs are global and we have no API to restore one.&lt;br /&gt;
&lt;br /&gt;
; VDSO&lt;br /&gt;
: The VDSO is a shared library linked into app by kernel. If the C/R cycle implies changing the kernel in between (e.g. [[live migration]] or seamless kernel upgrade), the [[Vdso|VDSO contents ''may'' change]]. However, its linkage with the application is preserved.&lt;br /&gt;
&lt;br /&gt;
[[Category:Using]]&lt;/div&gt;</summary>
		<author><name>Dsafonov</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=Time_namespace&amp;diff=4826</id>
		<title>Time namespace</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=Time_namespace&amp;diff=4826"/>
		<updated>2019-02-06T01:42:53Z</updated>

		<summary type="html">&lt;p&gt;Dsafonov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Two things (for now) we want to solve with this:&lt;br /&gt;
# Shift timer's offsets&lt;br /&gt;
# Make start-time remain &amp;quot;unchanged&amp;quot; after C/R&lt;br /&gt;
# Continuous flow of monotonic time (CLOCK_MONOTONIC).&lt;br /&gt;
&lt;br /&gt;
What about other kinds of counters like perf events and trace events?&lt;br /&gt;
&lt;br /&gt;
=TODO=&lt;br /&gt;
==Required in RFC==&lt;br /&gt;
&lt;br /&gt;
* selftests to test all we've added&lt;br /&gt;
* TIME_NS iffdefery everywhere &lt;br /&gt;
&lt;br /&gt;
==Maybe later==&lt;br /&gt;
* CLONE_NEWTIME reuses the last free flag from sys_clone() - any way to still keep extensibility for the syscall?&lt;br /&gt;
* arm64/arm32/s390/power64 - add archs vvar support (nit: big/little-endianess for timespec::nsec)&lt;br /&gt;
* REALTIME-related:&lt;br /&gt;
** REALTIME offsets&lt;br /&gt;
** vvar offsets will need synchronization (like gtod_read_begin()/gtod_read_retry())&lt;br /&gt;
** vfs modification/creation time should work&lt;br /&gt;
** starttime in /proc/pid/stat&lt;br /&gt;
** btime in /proc/stat&lt;br /&gt;
** utime()/utimes()/futimesat() (with times == NULL)&lt;br /&gt;
** utimensat()/futimens() - with UTIME_NOW&lt;br /&gt;
** mq_timedsend()/mq_timedreceive()&lt;br /&gt;
** semtimedop()&lt;br /&gt;
** timerfd&lt;br /&gt;
** timer_create()&lt;br /&gt;
** COARSE times&lt;br /&gt;
** clock_nanosleep()&lt;br /&gt;
* Adjtime (too complicated for PoC)&lt;br /&gt;
* Cpu time for thread/pid/pgid (times())&lt;br /&gt;
* /proc/stat ticks? (top uses them e.g.)&lt;br /&gt;
* pid creation time (probably different unrelated API)&lt;br /&gt;
* clock_tai - if we care about isolation from host's time&lt;br /&gt;
&lt;br /&gt;
=Git=&lt;br /&gt;
* [https://github.com/0x7f454c46/linux/tree/wip/time-ns https://github.com/0x7f454c46/linux/tree/wip/time-ns]&lt;br /&gt;
&lt;br /&gt;
=Links=&lt;br /&gt;
* [https://lkml.kernel.org/r/20190206001107.16488-1-dima@arista.com 02/2019 PATCH 00/32 kernel: Introduce Time Namespace]&lt;br /&gt;
* [https://lists.linuxfoundation.org/pipermail/ksummit-discuss/2018-November/006210.html 11/2018 &amp;lt;nowiki&amp;gt;[Ksummit-discuss] [TECH-TOPIC] Multiple time domains&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [https://lwn.net/Articles/766089/ 09/2018 LWN: Time namespaces]&lt;br /&gt;
* [https://lkml.org/lkml/2018/9/19/950 09/2018 RFC 00/20 ns: Introduce Time Namespace]&lt;br /&gt;
* [https://lists.openvz.org/pipermail/criu/2018-June/041486.html 06/2018 The progress of Time namespace]&lt;br /&gt;
* [https://blog.jessfraz.com/post/two-objects-not-namespaced-linux-kernel/ 04/2017 Two Objects not Namespaced by the Linux Kernel]&lt;br /&gt;
* [https://github.com/littlepretty/VirtualTimeKernel 00/2017 VirtualTimeKernel]&lt;br /&gt;
* [http://publish.illinois.edu/science-of-security-lablet/files/2014/05/DSSnet-A-Smart-Grid-Modeling-Platform-Combining-Electrical-Power-Distributtion-System-Simulation-and-Software-Defined-Networking-Emulation.pdf 00/2016 Article about usage of time namespace in VirtualTimeKernel]&lt;br /&gt;
* [https://pt.slideshare.net/kolyshkin/whats-missing-from-upstream-kernel-containers 08/2015 What's missing from upstream kernel containers?]&lt;br /&gt;
* [https://ckpt.wiki.kernel.org/index.php/LPC2009 09/2009 LPC2009]&lt;br /&gt;
* [https://www.landley.net/kdocs/ols/2006/ols2006v1-pages-101-112.pdf 00/2006 Multiple Instances of the Global Linux Namespaces]&lt;br /&gt;
* [https://lwn.net/Articles/180375/ 04/2006 LWN: Virtual time]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: Empty articles]]&lt;br /&gt;
[[Category: Plans]]&lt;/div&gt;</summary>
		<author><name>Dsafonov</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=Time_namespace&amp;diff=4825</id>
		<title>Time namespace</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=Time_namespace&amp;diff=4825"/>
		<updated>2019-02-06T01:42:05Z</updated>

		<summary type="html">&lt;p&gt;Dsafonov: Add timens patch v1 to links&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Two things (for now) we want to solve with this:&lt;br /&gt;
# Shift timer's offsets&lt;br /&gt;
# Make start-time remain &amp;quot;unchanged&amp;quot; after C/R&lt;br /&gt;
# Continuous flow of monotonic time (CLOCK_MONOTONIC).&lt;br /&gt;
&lt;br /&gt;
What about other kinds of counters like perf events and trace events?&lt;br /&gt;
&lt;br /&gt;
=TODO=&lt;br /&gt;
==Required in RFC==&lt;br /&gt;
&lt;br /&gt;
* selftests to test all we've added&lt;br /&gt;
* TIME_NS iffdefery everywhere &lt;br /&gt;
&lt;br /&gt;
==Maybe later==&lt;br /&gt;
* CLONE_NEWTIME reuses the last free flag from sys_clone() - any way to still keep extensibility for the syscall?&lt;br /&gt;
* arm64/arm32/s390/power64 - add archs vvar support (nit: big/little-endianess for timespec::nsec)&lt;br /&gt;
* REALTIME-related:&lt;br /&gt;
** REALTIME offsets&lt;br /&gt;
** vvar offsets will need synchronization (like gtod_read_begin()/gtod_read_retry())&lt;br /&gt;
** vfs modification/creation time should work&lt;br /&gt;
** starttime in /proc/pid/stat&lt;br /&gt;
** btime in /proc/stat&lt;br /&gt;
** utime()/utimes()/futimesat() (with times == NULL)&lt;br /&gt;
** utimensat()/futimens() - with UTIME_NOW&lt;br /&gt;
** mq_timedsend()/mq_timedreceive()&lt;br /&gt;
** semtimedop()&lt;br /&gt;
** timerfd&lt;br /&gt;
** timer_create()&lt;br /&gt;
** COARSE times&lt;br /&gt;
** clock_nanosleep()&lt;br /&gt;
* Adjtime (too complicated for PoC)&lt;br /&gt;
* Cpu time for thread/pid/pgid (times())&lt;br /&gt;
* /proc/stat ticks? (top uses them e.g.)&lt;br /&gt;
* pid creation time (probably different unrelated API)&lt;br /&gt;
* clock_tai - if we care about isolation from host's time&lt;br /&gt;
&lt;br /&gt;
=Git=&lt;br /&gt;
* [https://github.com/0x7f454c46/linux/tree/wip/time-ns https://github.com/0x7f454c46/linux/tree/wip/time-ns]&lt;br /&gt;
&lt;br /&gt;
=Links=&lt;br /&gt;
* [https://lkml.kernel.org/r/20190206001107.16488-1-dima@arista.com PATCH 00/32 kernel: Introduce Time Namespace]&lt;br /&gt;
* [https://lists.linuxfoundation.org/pipermail/ksummit-discuss/2018-November/006210.html 11/2018 &amp;lt;nowiki&amp;gt;[Ksummit-discuss] [TECH-TOPIC] Multiple time domains&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* [https://lwn.net/Articles/766089/ 09/2018 LWN: Time namespaces]&lt;br /&gt;
* [https://lkml.org/lkml/2018/9/19/950 09/2018 RFC 00/20 ns: Introduce Time Namespace]&lt;br /&gt;
* [https://lists.openvz.org/pipermail/criu/2018-June/041486.html 06/2018 The progress of Time namespace]&lt;br /&gt;
* [https://blog.jessfraz.com/post/two-objects-not-namespaced-linux-kernel/ 04/2017 Two Objects not Namespaced by the Linux Kernel]&lt;br /&gt;
* [https://github.com/littlepretty/VirtualTimeKernel 00/2017 VirtualTimeKernel]&lt;br /&gt;
* [http://publish.illinois.edu/science-of-security-lablet/files/2014/05/DSSnet-A-Smart-Grid-Modeling-Platform-Combining-Electrical-Power-Distributtion-System-Simulation-and-Software-Defined-Networking-Emulation.pdf 00/2016 Article about usage of time namespace in VirtualTimeKernel]&lt;br /&gt;
* [https://pt.slideshare.net/kolyshkin/whats-missing-from-upstream-kernel-containers 08/2015 What's missing from upstream kernel containers?]&lt;br /&gt;
* [https://ckpt.wiki.kernel.org/index.php/LPC2009 09/2009 LPC2009]&lt;br /&gt;
* [https://www.landley.net/kdocs/ols/2006/ols2006v1-pages-101-112.pdf 00/2006 Multiple Instances of the Global Linux Namespaces]&lt;br /&gt;
* [https://lwn.net/Articles/180375/ 04/2006 LWN: Virtual time]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: Empty articles]]&lt;br /&gt;
[[Category: Plans]]&lt;/div&gt;</summary>
		<author><name>Dsafonov</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=Usage_scenarios&amp;diff=4663</id>
		<title>Usage scenarios</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=Usage_scenarios&amp;diff=4663"/>
		<updated>2018-09-11T22:49:23Z</updated>

		<summary type="html">&lt;p&gt;Dsafonov: Another crazy idea (dima)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a set of ideas how criu can be used.&lt;br /&gt;
&lt;br /&gt;
== Container live migration ==&lt;br /&gt;
&lt;br /&gt;
This is the use case from what the whole checkpoint/restore project appeared. Container is checkpointed, then the image is copied on another box, then restored. From the remote observer point of view the container is just frozen for a while.&lt;br /&gt;
&lt;br /&gt;
''For more info, see [[:Category:live migration]].''&lt;br /&gt;
&lt;br /&gt;
== Slow-boot services speed up ==&lt;br /&gt;
&lt;br /&gt;
If some service starts up too long (it can perform complex state initialization for example) we can checkpoint it after it finishes starting up and on the 2nd and subsequent starts restore it from the image.&lt;br /&gt;
&lt;br /&gt;
We have a rough preliminary measurement, showing that VNC server + eclipse start time reduces from ~29 seconds to ~1.5.&lt;br /&gt;
&lt;br /&gt;
''Main article: [[slow-boot services speed up]].''&lt;br /&gt;
&lt;br /&gt;
== Seamless kernel upgrade ==&lt;br /&gt;
&lt;br /&gt;
When replacing a kernel on a box we can do it without stopping critical activity. Checkpoint it, then replace the kernel (e.g. using kexec) then restore services back. In a perfect world the applications memory shouldn't be put to disk image, but should rather be kept in RAM.&lt;br /&gt;
&lt;br /&gt;
''Main article: [[Seamless kernel upgrade]]''.&lt;br /&gt;
&lt;br /&gt;
== Networking load balancing ==&lt;br /&gt;
&lt;br /&gt;
Not the whole project, but the [[TCP connection|TCP repair]] can be used to offload an app-level request handling on another box.&lt;br /&gt;
&lt;br /&gt;
== HPC issues ==&lt;br /&gt;
&lt;br /&gt;
High Performance Computing people may require it for two things:&lt;br /&gt;
&lt;br /&gt;
# Load balancing a computational task over a cluster. It can be done in two directions -- push parts of a task on another box to utilize idle parts of a cluster or pull parts of a task to a local box to make better use of local caches.&lt;br /&gt;
# Periodic state save to avoid recomputation in case of a cluster crash. Take server snapshot every few minutes and put on other machine. When doing failover resurrect the other side quickly.&lt;br /&gt;
&lt;br /&gt;
== Desktop environment suspend/resume ==&lt;br /&gt;
&lt;br /&gt;
Suspending a screen session and restoring it on another box might be interesting.&lt;br /&gt;
Suspending some X app (browser?) and restoring it later is also worth thinking about but requires knowledge of X-protocol.&lt;br /&gt;
&lt;br /&gt;
''Main article: [[X applications]].''&lt;br /&gt;
&lt;br /&gt;
== Processes duplication ==&lt;br /&gt;
&lt;br /&gt;
Somewhat like a remote fork() ;)&lt;br /&gt;
&lt;br /&gt;
== &amp;quot;Save&amp;quot; ability in apps (games), that don't have such ==&lt;br /&gt;
&lt;br /&gt;
Some arcades require you to complete next level to &amp;quot;fixup&amp;quot; the progress. With criu it can be done at any point.&lt;br /&gt;
&lt;br /&gt;
== Snapshots of apps ==&lt;br /&gt;
&lt;br /&gt;
With CRIU one can save a series of app's states (all but first incremental) and revert later to any of them. The &amp;quot;apply-images&amp;quot; item from TODO list should help to revert the state faster, especially if the memory changes tracker state is with us.&lt;br /&gt;
&lt;br /&gt;
One of examples when this snapshot might be useful is debugging. One might need to bring an application into a &amp;quot;desired&amp;quot; state fast, and having dump at that state would speed things up.&lt;br /&gt;
&lt;br /&gt;
''Main article: [[Incremental dumps]].''&lt;br /&gt;
&lt;br /&gt;
== Move &amp;quot;forgotten&amp;quot; applications into &amp;quot;screen&amp;quot; ==&lt;br /&gt;
&lt;br /&gt;
Sometimes it's useful to launch a process in &amp;quot;screen&amp;quot;. If you forgot to switch into screen, but launched a task, criu can help to &amp;quot;migrate&amp;quot; the app into it.&lt;br /&gt;
&lt;br /&gt;
== Applications behavior analysis on another machine ==&lt;br /&gt;
&lt;br /&gt;
It's possible to take periodic snapshots of running applications and transfer them on another machine for debugging or behavior and performance analysis.&lt;br /&gt;
&lt;br /&gt;
== Debugging of hung application ==&lt;br /&gt;
&lt;br /&gt;
If there's some service, that got hung, but need to be restarted quickly, it's possible to take a dump of one, restart and debug why it hanged later, using its restored copy.&lt;br /&gt;
&lt;br /&gt;
== Fault-tolerant systems ==&lt;br /&gt;
&lt;br /&gt;
With CRIU it's possible to periodically duplicate process on another box. Requires [[applying images]] facility.&lt;br /&gt;
&lt;br /&gt;
== Update dryrun ==&lt;br /&gt;
&lt;br /&gt;
Before updating a kernel/system libs one may duplicate a system service(s) into VM with updates and check they continue to run OK. If this test passes, then the real system update can be done.&lt;br /&gt;
&lt;br /&gt;
== Zero downtime crash restore ==&lt;br /&gt;
&lt;br /&gt;
Checkpoint critical service from /proc/vmcore in crash kernel and migrate on another machine.&lt;br /&gt;
&lt;br /&gt;
[[Category:Using]]&lt;br /&gt;
[[Category:Editor help needed]]&lt;/div&gt;</summary>
		<author><name>Dsafonov</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=Time_namespace&amp;diff=4656</id>
		<title>Time namespace</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=Time_namespace&amp;diff=4656"/>
		<updated>2018-08-16T23:26:26Z</updated>

		<summary type="html">&lt;p&gt;Dsafonov: Remove stupid ideas&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Two things (for now) we want to solve with this:&lt;br /&gt;
# Shift timer's offsets&lt;br /&gt;
# Make start-time remain &amp;quot;unchanged&amp;quot; after C/R&lt;br /&gt;
# Continuous flow of monotonic time (CLOCK_MONOTONIC).&lt;br /&gt;
&lt;br /&gt;
What about other kinds of counters like perf events and trace events?&lt;br /&gt;
&lt;br /&gt;
=TODO=&lt;br /&gt;
==Required in RFC==&lt;br /&gt;
&lt;br /&gt;
* selftests to test all we've added&lt;br /&gt;
* TIME_NS iffdefery everywhere &lt;br /&gt;
&lt;br /&gt;
==Maybe later==&lt;br /&gt;
* CLONE_NEWTIME reuses the last free flag from sys_clone() - any way to still keep extensibility for the syscall?&lt;br /&gt;
* arm64/arm32/s390/power64 - add archs vvar support (nit: big/little-endianess for timespec::nsec)&lt;br /&gt;
* REALTIME-related:&lt;br /&gt;
** REALTIME offsets&lt;br /&gt;
** vvar offsets will need synchronization (like gtod_read_begin()/gtod_read_retry())&lt;br /&gt;
** vfs modification/creation time should work&lt;br /&gt;
** starttime in /proc/pid/stat&lt;br /&gt;
** btime in /proc/stat&lt;br /&gt;
** utime()/utimes()/futimesat() (with times == NULL)&lt;br /&gt;
** utimensat()/futimens() - with UTIME_NOW&lt;br /&gt;
** mq_timedsend()/mq_timedreceive()&lt;br /&gt;
** semtimedop()&lt;br /&gt;
** timerfd&lt;br /&gt;
** timer_create()&lt;br /&gt;
** COARSE times&lt;br /&gt;
** clock_nanosleep()&lt;br /&gt;
* Adjtime (too complicated for PoC)&lt;br /&gt;
* Cpu time for thread/pid/pgid (times())&lt;br /&gt;
* /proc/stat ticks? (top uses them e.g.)&lt;br /&gt;
* pid creation time (probably different unrelated API)&lt;br /&gt;
* clock_tai - if we care about isolation from host's time&lt;br /&gt;
&lt;br /&gt;
=Git=&lt;br /&gt;
* [https://github.com/0x7f454c46/linux/tree/wip/time-ns https://github.com/0x7f454c46/linux/tree/wip/time-ns]&lt;br /&gt;
&lt;br /&gt;
=Links=&lt;br /&gt;
&lt;br /&gt;
* [https://lists.openvz.org/pipermail/criu/2018-June/041486.html The progress of Time namespace]&lt;br /&gt;
* [https://blog.jessfraz.com/post/two-objects-not-namespaced-linux-kernel/ Two Objects not Namespaced by the Linux Kernel]&lt;br /&gt;
* [https://lwn.net/Articles/180375/ Virtual time]&lt;br /&gt;
* [https://pt.slideshare.net/kolyshkin/whats-missing-from-upstream-kernel-containers What's missing from upstream kernel containers?]&lt;br /&gt;
* [https://ckpt.wiki.kernel.org/index.php/LPC2009 LPC2009]&lt;br /&gt;
* [https://www.landley.net/kdocs/ols/2006/ols2006v1-pages-101-112.pdf Multiple Instances of the Global Linux Namespaces]&lt;br /&gt;
* [https://github.com/littlepretty/VirtualTimeKernel VirtualTimeKernel]&lt;br /&gt;
* [http://publish.illinois.edu/science-of-security-lablet/files/2014/05/DSSnet-A-Smart-Grid-Modeling-Platform-Combining-Electrical-Power-Distributtion-System-Simulation-and-Software-Defined-Networking-Emulation.pdf Article about usage of time namespace in VirtualTimeKernel]&lt;br /&gt;
&lt;br /&gt;
[[Category: Empty articles]]&lt;br /&gt;
[[Category: Plans]]&lt;/div&gt;</summary>
		<author><name>Dsafonov</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=Time_namespace&amp;diff=4655</id>
		<title>Time namespace</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=Time_namespace&amp;diff=4655"/>
		<updated>2018-08-16T22:01:19Z</updated>

		<summary type="html">&lt;p&gt;Dsafonov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Two things (for now) we want to solve with this:&lt;br /&gt;
# Shift timer's offsets&lt;br /&gt;
# Make start-time remain &amp;quot;unchanged&amp;quot; after C/R&lt;br /&gt;
# Continuous flow of monotonic time (CLOCK_MONOTONIC).&lt;br /&gt;
&lt;br /&gt;
What about other kinds of counters like perf events and trace events?&lt;br /&gt;
&lt;br /&gt;
=TODO=&lt;br /&gt;
==Required in RFC==&lt;br /&gt;
&lt;br /&gt;
* selftests to test all we've added&lt;br /&gt;
* TIME_NS iffdefery everywhere &lt;br /&gt;
&lt;br /&gt;
==Maybe later==&lt;br /&gt;
* HPET? (+vvar)&lt;br /&gt;
* RDTSC?&lt;br /&gt;
* RDTSCP?&lt;br /&gt;
* CLONE_NEWTIME reuses the last free flag from sys_clone() - any way to still keep extensibility for the syscall?&lt;br /&gt;
* arm64/arm32/s390/power64 - add archs vvar support (nit: big/little-endianess for timespec::nsec)&lt;br /&gt;
* REALTIME-related:&lt;br /&gt;
** REALTIME offsets&lt;br /&gt;
** vvar offsets will need synchronization (like gtod_read_begin()/gtod_read_retry())&lt;br /&gt;
** vfs modification/creation time should work&lt;br /&gt;
** starttime in /proc/pid/stat&lt;br /&gt;
** btime in /proc/stat&lt;br /&gt;
** utime()/utimes()/futimesat() (with times == NULL)&lt;br /&gt;
** utimensat()/futimens() - with UTIME_NOW&lt;br /&gt;
** mq_timedsend()/mq_timedreceive()&lt;br /&gt;
** semtimedop()&lt;br /&gt;
** timerfd&lt;br /&gt;
** timer_create()&lt;br /&gt;
** COARSE times&lt;br /&gt;
** clock_nanosleep()&lt;br /&gt;
* Adjtime (too complicated for PoC)&lt;br /&gt;
* Cpu time for thread/pid/pgid (times())&lt;br /&gt;
* /proc/stat ticks? (top uses them e.g.)&lt;br /&gt;
* pid creation time (probably different unrelated API)&lt;br /&gt;
* clock_tai - if we care about isolation from host's time&lt;br /&gt;
&lt;br /&gt;
=Git=&lt;br /&gt;
* [https://github.com/0x7f454c46/linux/tree/wip/time-ns https://github.com/0x7f454c46/linux/tree/wip/time-ns]&lt;br /&gt;
&lt;br /&gt;
=Links=&lt;br /&gt;
&lt;br /&gt;
* [https://lists.openvz.org/pipermail/criu/2018-June/041486.html The progress of Time namespace]&lt;br /&gt;
* [https://blog.jessfraz.com/post/two-objects-not-namespaced-linux-kernel/ Two Objects not Namespaced by the Linux Kernel]&lt;br /&gt;
* [https://lwn.net/Articles/180375/ Virtual time]&lt;br /&gt;
* [https://pt.slideshare.net/kolyshkin/whats-missing-from-upstream-kernel-containers What's missing from upstream kernel containers?]&lt;br /&gt;
* [https://ckpt.wiki.kernel.org/index.php/LPC2009 LPC2009]&lt;br /&gt;
* [https://www.landley.net/kdocs/ols/2006/ols2006v1-pages-101-112.pdf Multiple Instances of the Global Linux Namespaces]&lt;br /&gt;
* [https://github.com/littlepretty/VirtualTimeKernel VirtualTimeKernel]&lt;br /&gt;
* [http://publish.illinois.edu/science-of-security-lablet/files/2014/05/DSSnet-A-Smart-Grid-Modeling-Platform-Combining-Electrical-Power-Distributtion-System-Simulation-and-Software-Defined-Networking-Emulation.pdf Article about usage of time namespace in VirtualTimeKernel]&lt;br /&gt;
&lt;br /&gt;
[[Category: Empty articles]]&lt;br /&gt;
[[Category: Plans]]&lt;/div&gt;</summary>
		<author><name>Dsafonov</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=Time_namespace&amp;diff=4654</id>
		<title>Time namespace</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=Time_namespace&amp;diff=4654"/>
		<updated>2018-08-16T03:08:22Z</updated>

		<summary type="html">&lt;p&gt;Dsafonov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Two things (for now) we want to solve with this:&lt;br /&gt;
# Shift timer's offsets&lt;br /&gt;
# Make start-time remain &amp;quot;unchanged&amp;quot; after C/R&lt;br /&gt;
# Continuous flow of monotonic time (CLOCK_MONOTONIC).&lt;br /&gt;
&lt;br /&gt;
What about other kinds of counters like perf events and trace events?&lt;br /&gt;
&lt;br /&gt;
=TODO=&lt;br /&gt;
==Required in RFC==&lt;br /&gt;
&lt;br /&gt;
* selftests to test all we've added&lt;br /&gt;
* TIME_NS iffdefery everywhere &lt;br /&gt;
&lt;br /&gt;
==Maybe later==&lt;br /&gt;
* CLONE_NEWTIME reuses the last free flag from sys_clone() - any way to still keep extensibility for the syscall?&lt;br /&gt;
* arm64/arm32/s390/power64 - add archs vvar support (nit: big/little-endianess for timespec::nsec)&lt;br /&gt;
* REALTIME-related:&lt;br /&gt;
** REALTIME offsets&lt;br /&gt;
** vvar offsets will need synchronization (like gtod_read_begin()/gtod_read_retry())&lt;br /&gt;
** vfs modification/creation time should work&lt;br /&gt;
** starttime in /proc/pid/stat&lt;br /&gt;
** btime in /proc/stat&lt;br /&gt;
** utime()/utimes()/futimesat() (with times == NULL)&lt;br /&gt;
** utimensat()/futimens() - with UTIME_NOW&lt;br /&gt;
** mq_timedsend()/mq_timedreceive()&lt;br /&gt;
** semtimedop()&lt;br /&gt;
** timerfd&lt;br /&gt;
** timer_create()&lt;br /&gt;
** COARSE times&lt;br /&gt;
** clock_nanosleep()&lt;br /&gt;
* Adjtime (too complicated for PoC)&lt;br /&gt;
* Cpu time for thread/pid/pgid (times())&lt;br /&gt;
* /proc/stat ticks? (top uses them e.g.)&lt;br /&gt;
* pid creation time (probably different unrelated API)&lt;br /&gt;
* clock_tai - if we care about isolation from host's time&lt;br /&gt;
&lt;br /&gt;
=Git=&lt;br /&gt;
* [https://github.com/0x7f454c46/linux/tree/wip/time-ns https://github.com/0x7f454c46/linux/tree/wip/time-ns]&lt;br /&gt;
&lt;br /&gt;
=Links=&lt;br /&gt;
&lt;br /&gt;
* [https://lists.openvz.org/pipermail/criu/2018-June/041486.html The progress of Time namespace]&lt;br /&gt;
* [https://blog.jessfraz.com/post/two-objects-not-namespaced-linux-kernel/ Two Objects not Namespaced by the Linux Kernel]&lt;br /&gt;
* [https://lwn.net/Articles/180375/ Virtual time]&lt;br /&gt;
* [https://pt.slideshare.net/kolyshkin/whats-missing-from-upstream-kernel-containers What's missing from upstream kernel containers?]&lt;br /&gt;
* [https://ckpt.wiki.kernel.org/index.php/LPC2009 LPC2009]&lt;br /&gt;
* [https://www.landley.net/kdocs/ols/2006/ols2006v1-pages-101-112.pdf Multiple Instances of the Global Linux Namespaces]&lt;br /&gt;
* [https://github.com/littlepretty/VirtualTimeKernel VirtualTimeKernel]&lt;br /&gt;
* [http://publish.illinois.edu/science-of-security-lablet/files/2014/05/DSSnet-A-Smart-Grid-Modeling-Platform-Combining-Electrical-Power-Distributtion-System-Simulation-and-Software-Defined-Networking-Emulation.pdf Article about usage of time namespace in VirtualTimeKernel]&lt;br /&gt;
&lt;br /&gt;
[[Category: Empty articles]]&lt;br /&gt;
[[Category: Plans]]&lt;/div&gt;</summary>
		<author><name>Dsafonov</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=Time_namespace&amp;diff=4653</id>
		<title>Time namespace</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=Time_namespace&amp;diff=4653"/>
		<updated>2018-08-16T00:42:46Z</updated>

		<summary type="html">&lt;p&gt;Dsafonov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Two things (for now) we want to solve with this:&lt;br /&gt;
# Shift timer's offsets&lt;br /&gt;
# Make start-time remain &amp;quot;unchanged&amp;quot; after C/R&lt;br /&gt;
# Continuous flow of monotonic time (CLOCK_MONOTONIC).&lt;br /&gt;
&lt;br /&gt;
What about other kinds of counters like perf events and trace events?&lt;br /&gt;
&lt;br /&gt;
=TODO=&lt;br /&gt;
==Required in RFC==&lt;br /&gt;
* starttime in /proc/pid/stat&lt;br /&gt;
* selftests to test all we've added&lt;br /&gt;
* TIME_NS iffdefery everywhere &lt;br /&gt;
&lt;br /&gt;
==Maybe later==&lt;br /&gt;
* CLONE_NEWTIME reuses the last free flag from sys_clone() - any way to still keep extensibility for the syscall?&lt;br /&gt;
* arm64/arm32/s390/power64 - add archs vvar support (nit: big/little-endianess for timespec::nsec)&lt;br /&gt;
* REALTIME-related:&lt;br /&gt;
** REALTIME offsets&lt;br /&gt;
** vvar offsets will need synchronization (like gtod_read_begin()/gtod_read_retry())&lt;br /&gt;
** vfs modification/creation time should work&lt;br /&gt;
** utime()/utimes()/futimesat() (with times == NULL)&lt;br /&gt;
** utimensat()/futimens() - with UTIME_NOW&lt;br /&gt;
** mq_timedsend()/mq_timedreceive()&lt;br /&gt;
** semtimedop()&lt;br /&gt;
** timerfd&lt;br /&gt;
** timer_create()&lt;br /&gt;
** COARSE times&lt;br /&gt;
** clock_nanosleep()&lt;br /&gt;
* Adjtime (too complicated for PoC)&lt;br /&gt;
* Cpu time for thread/pid/pgid (times())&lt;br /&gt;
* /proc/stat ticks? (top uses them e.g.)&lt;br /&gt;
* pid creation time (probably different unrelated API)&lt;br /&gt;
* clock_tai - if we care about isolation from host's time&lt;br /&gt;
&lt;br /&gt;
=Git=&lt;br /&gt;
* [https://github.com/0x7f454c46/linux/tree/wip/time-ns https://github.com/0x7f454c46/linux/tree/wip/time-ns]&lt;br /&gt;
&lt;br /&gt;
=Links=&lt;br /&gt;
&lt;br /&gt;
* [https://lists.openvz.org/pipermail/criu/2018-June/041486.html The progress of Time namespace]&lt;br /&gt;
* [https://blog.jessfraz.com/post/two-objects-not-namespaced-linux-kernel/ Two Objects not Namespaced by the Linux Kernel]&lt;br /&gt;
* [https://lwn.net/Articles/180375/ Virtual time]&lt;br /&gt;
* [https://pt.slideshare.net/kolyshkin/whats-missing-from-upstream-kernel-containers What's missing from upstream kernel containers?]&lt;br /&gt;
* [https://ckpt.wiki.kernel.org/index.php/LPC2009 LPC2009]&lt;br /&gt;
* [https://www.landley.net/kdocs/ols/2006/ols2006v1-pages-101-112.pdf Multiple Instances of the Global Linux Namespaces]&lt;br /&gt;
* [https://github.com/littlepretty/VirtualTimeKernel VirtualTimeKernel]&lt;br /&gt;
* [http://publish.illinois.edu/science-of-security-lablet/files/2014/05/DSSnet-A-Smart-Grid-Modeling-Platform-Combining-Electrical-Power-Distributtion-System-Simulation-and-Software-Defined-Networking-Emulation.pdf Article about usage of time namespace in VirtualTimeKernel]&lt;br /&gt;
&lt;br /&gt;
[[Category: Empty articles]]&lt;br /&gt;
[[Category: Plans]]&lt;/div&gt;</summary>
		<author><name>Dsafonov</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=Time_namespace&amp;diff=4652</id>
		<title>Time namespace</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=Time_namespace&amp;diff=4652"/>
		<updated>2018-08-16T00:05:23Z</updated>

		<summary type="html">&lt;p&gt;Dsafonov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Two things (for now) we want to solve with this:&lt;br /&gt;
# Shift timer's offsets&lt;br /&gt;
# Make start-time remain &amp;quot;unchanged&amp;quot; after C/R&lt;br /&gt;
# Continuous flow of monotonic time (CLOCK_MONOTONIC).&lt;br /&gt;
&lt;br /&gt;
What about other kinds of counters like perf events and trace events?&lt;br /&gt;
&lt;br /&gt;
=TODO=&lt;br /&gt;
==Required in RFC==&lt;br /&gt;
* starttime in /proc/pid/stat&lt;br /&gt;
* selftests to test all we've added&lt;br /&gt;
* TIME_NS iffdefery everywhere &lt;br /&gt;
&lt;br /&gt;
==Maybe later==&lt;br /&gt;
* CLONE_NEWTIME reuses the last free flag from sys_clone() - any way to still keep extensibility for the syscall?&lt;br /&gt;
* arm64/arm32/s390/power64 - add archs vvar support (nit: big/little-endianess for timespec::nsec)&lt;br /&gt;
* REALTIME-related:&lt;br /&gt;
** REALTIME offsets&lt;br /&gt;
** vvar offsets will need synchronization (like gtod_read_begin()/gtod_read_retry())&lt;br /&gt;
** vfs modification/creation time should work&lt;br /&gt;
** utime()/utimes()/futimesat() (with times == NULL)&lt;br /&gt;
** utimensat()/futimens() - with UTIME_NOW&lt;br /&gt;
** mq_timedsend()/mq_timedreceive()&lt;br /&gt;
** semtimedop()&lt;br /&gt;
** timerfd&lt;br /&gt;
** timer_create()&lt;br /&gt;
** COARSE times&lt;br /&gt;
** clock_nanosleep()&lt;br /&gt;
* Adjtime (too complicated for PoC)&lt;br /&gt;
* Cpu time for thread/pid/pgid (times())&lt;br /&gt;
* /proc/stat ticks? (top uses them e.g.)&lt;br /&gt;
* pid creation time (probably different unrelated API)&lt;br /&gt;
* clock_tai - if we care about isolation from host's time&lt;br /&gt;
&lt;br /&gt;
=Git=&lt;br /&gt;
* [https://github.com/0x7f454c46/linux/tree/wip/time-ns https://github.com/0x7f454c46/linux/tree/wip/time-ns]&lt;br /&gt;
&lt;br /&gt;
=Links=&lt;br /&gt;
&lt;br /&gt;
* [https://lists.openvz.org/pipermail/criu/2018-June/041486.html The progress of Time namespace]&lt;br /&gt;
* [https://blog.jessfraz.com/post/two-objects-not-namespaced-linux-kernel/ Two Objects not Namespaced by the Linux Kernel]&lt;br /&gt;
* [https://lwn.net/Articles/180375/ Virtual time]&lt;br /&gt;
* [https://pt.slideshare.net/kolyshkin/whats-missing-from-upstream-kernel-containers What's missing from upstream kernel containers?]&lt;br /&gt;
* [https://ckpt.wiki.kernel.org/index.php/LPC2009 LPC2009]&lt;br /&gt;
* [https://www.landley.net/kdocs/ols/2006/ols2006v1-pages-101-112.pdf Multiple Instances of the Global Linux Namespaces]&lt;br /&gt;
* [https://github.com/littlepretty/VirtualTimeKernel VirtualTimeKernel]&lt;br /&gt;
&lt;br /&gt;
[[Category: Empty articles]]&lt;br /&gt;
[[Category: Plans]]&lt;/div&gt;</summary>
		<author><name>Dsafonov</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=Time_namespace&amp;diff=4651</id>
		<title>Time namespace</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=Time_namespace&amp;diff=4651"/>
		<updated>2018-08-14T19:21:51Z</updated>

		<summary type="html">&lt;p&gt;Dsafonov: /* Maybe later */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Two things (for now) we want to solve with this:&lt;br /&gt;
# Shift timer's offsets&lt;br /&gt;
# Make start-time remain &amp;quot;unchanged&amp;quot; after C/R&lt;br /&gt;
# Continuous flow of monotonic time (CLOCK_MONOTONIC).&lt;br /&gt;
&lt;br /&gt;
What about other kinds of counters like perf events and trace events?&lt;br /&gt;
&lt;br /&gt;
=TODO=&lt;br /&gt;
==Required in RFC==&lt;br /&gt;
* btime in /proc/stat (used by pstools)&lt;br /&gt;
* starttime in /proc/pid/stat&lt;br /&gt;
* selftests to test all we've added&lt;br /&gt;
* TIME_NS iffdefery everywhere &lt;br /&gt;
&lt;br /&gt;
==Maybe later==&lt;br /&gt;
* CLONE_NEWTIME reuses the last free flag from sys_clone() - any way to still keep extensibility for the syscall?&lt;br /&gt;
* arm64/arm32/s390/power64 - add archs vvar support (nit: big/little-endianess for timespec::nsec)&lt;br /&gt;
* REALTIME-related:&lt;br /&gt;
** REALTIME offsets&lt;br /&gt;
** vvar offsets will need synchronization (like gtod_read_begin()/gtod_read_retry())&lt;br /&gt;
** vfs modification/creation time should work&lt;br /&gt;
** utime()/utimes()/futimesat() (with times == NULL)&lt;br /&gt;
** utimensat()/futimens() - with UTIME_NOW&lt;br /&gt;
** mq_timedsend()/mq_timedreceive()&lt;br /&gt;
** semtimedop()&lt;br /&gt;
** timerfd&lt;br /&gt;
** timer_create()&lt;br /&gt;
** COARSE times&lt;br /&gt;
** clock_nanosleep()&lt;br /&gt;
* Adjtime (too complicated for PoC)&lt;br /&gt;
* Cpu time for thread/pid/pgid (times())&lt;br /&gt;
* /proc/stat ticks? (top uses them e.g.)&lt;br /&gt;
* pid creation time (probably different unrelated API)&lt;br /&gt;
* clock_tai - if we care about isolation from host's time&lt;br /&gt;
&lt;br /&gt;
=Git=&lt;br /&gt;
* [https://github.com/0x7f454c46/linux/tree/wip/time-ns https://github.com/0x7f454c46/linux/tree/wip/time-ns]&lt;br /&gt;
&lt;br /&gt;
=Links=&lt;br /&gt;
&lt;br /&gt;
* [https://lists.openvz.org/pipermail/criu/2018-June/041486.html The progress of Time namespace]&lt;br /&gt;
* [https://blog.jessfraz.com/post/two-objects-not-namespaced-linux-kernel/ Two Objects not Namespaced by the Linux Kernel]&lt;br /&gt;
* [https://lwn.net/Articles/180375/ Virtual time]&lt;br /&gt;
* [https://pt.slideshare.net/kolyshkin/whats-missing-from-upstream-kernel-containers What's missing from upstream kernel containers?]&lt;br /&gt;
* [https://ckpt.wiki.kernel.org/index.php/LPC2009 LPC2009]&lt;br /&gt;
* [https://www.landley.net/kdocs/ols/2006/ols2006v1-pages-101-112.pdf Multiple Instances of the Global Linux Namespaces]&lt;br /&gt;
* [https://github.com/littlepretty/VirtualTimeKernel VirtualTimeKernel]&lt;br /&gt;
&lt;br /&gt;
[[Category: Empty articles]]&lt;br /&gt;
[[Category: Plans]]&lt;/div&gt;</summary>
		<author><name>Dsafonov</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=Time_namespace&amp;diff=4648</id>
		<title>Time namespace</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=Time_namespace&amp;diff=4648"/>
		<updated>2018-08-14T00:55:40Z</updated>

		<summary type="html">&lt;p&gt;Dsafonov: /* Maybe later */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Two things (for now) we want to solve with this:&lt;br /&gt;
# Shift timer's offsets&lt;br /&gt;
# Make start-time remain &amp;quot;unchanged&amp;quot; after C/R&lt;br /&gt;
# Continuous flow of monotonic time (CLOCK_MONOTONIC).&lt;br /&gt;
&lt;br /&gt;
What about other kinds of counters like perf events and trace events?&lt;br /&gt;
&lt;br /&gt;
=TODO=&lt;br /&gt;
==Required in RFC==&lt;br /&gt;
* btime in /proc/stat (used by pstools)&lt;br /&gt;
* starttime in /proc/pid/stat&lt;br /&gt;
* selftests to test all we've added&lt;br /&gt;
* TIME_NS iffdefery everywhere &lt;br /&gt;
&lt;br /&gt;
==Maybe later==&lt;br /&gt;
* arm64/arm32/s390/power64 - add archs vvar support (nit: big/little-endianess for timespec::nsec)&lt;br /&gt;
* REALTIME-related:&lt;br /&gt;
** REALTIME offsets&lt;br /&gt;
** vvar offsets will need synchronization (like gtod_read_begin()/gtod_read_retry())&lt;br /&gt;
** vfs modification/creation time should work&lt;br /&gt;
** utime()/utimes()/futimesat() (with times == NULL)&lt;br /&gt;
** utimensat()/futimens() - with UTIME_NOW&lt;br /&gt;
** mq_timedsend()/mq_timedreceive()&lt;br /&gt;
** semtimedop()&lt;br /&gt;
** timerfd&lt;br /&gt;
** timer_create()&lt;br /&gt;
** COARSE times&lt;br /&gt;
** clock_nanosleep()&lt;br /&gt;
* Adjtime (too complicated for PoC)&lt;br /&gt;
* Cpu time for thread/pid/pgid (times())&lt;br /&gt;
* /proc/stat ticks? (top uses them e.g.)&lt;br /&gt;
* pid creation time (probably different unrelated API)&lt;br /&gt;
* clock_tai - if we care about isolation from host's time&lt;br /&gt;
&lt;br /&gt;
=Git=&lt;br /&gt;
* [https://github.com/0x7f454c46/linux/tree/wip/time-ns https://github.com/0x7f454c46/linux/tree/wip/time-ns]&lt;br /&gt;
&lt;br /&gt;
=Links=&lt;br /&gt;
&lt;br /&gt;
* [https://lists.openvz.org/pipermail/criu/2018-June/041486.html The progress of Time namespace]&lt;br /&gt;
* [https://blog.jessfraz.com/post/two-objects-not-namespaced-linux-kernel/ Two Objects not Namespaced by the Linux Kernel]&lt;br /&gt;
* [https://lwn.net/Articles/180375/ Virtual time]&lt;br /&gt;
* [https://pt.slideshare.net/kolyshkin/whats-missing-from-upstream-kernel-containers What's missing from upstream kernel containers?]&lt;br /&gt;
&lt;br /&gt;
[[Category: Empty articles]]&lt;br /&gt;
[[Category: Plans]]&lt;/div&gt;</summary>
		<author><name>Dsafonov</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=Time_namespace&amp;diff=4647</id>
		<title>Time namespace</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=Time_namespace&amp;diff=4647"/>
		<updated>2018-08-14T00:22:09Z</updated>

		<summary type="html">&lt;p&gt;Dsafonov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Two things (for now) we want to solve with this:&lt;br /&gt;
# Shift timer's offsets&lt;br /&gt;
# Make start-time remain &amp;quot;unchanged&amp;quot; after C/R&lt;br /&gt;
# Continuous flow of monotonic time (CLOCK_MONOTONIC).&lt;br /&gt;
&lt;br /&gt;
What about other kinds of counters like perf events and trace events?&lt;br /&gt;
&lt;br /&gt;
=TODO=&lt;br /&gt;
==Required in RFC==&lt;br /&gt;
* btime in /proc/stat (used by pstools)&lt;br /&gt;
* starttime in /proc/pid/stat&lt;br /&gt;
* selftests to test all we've added&lt;br /&gt;
* TIME_NS iffdefery everywhere &lt;br /&gt;
&lt;br /&gt;
==Maybe later==&lt;br /&gt;
* arm64/arm32/s390/power64 - add archs vvar support (nit: big/little-endianess for timespec::nsec)&lt;br /&gt;
* REALTIME-related:&lt;br /&gt;
** REALTIME offsets&lt;br /&gt;
** vfs modification/creation time should work&lt;br /&gt;
** utime()/utimes()/futimesat() (with times == NULL)&lt;br /&gt;
** utimensat()/futimens() - with UTIME_NOW&lt;br /&gt;
** mq_timedsend()/mq_timedreceive()&lt;br /&gt;
** semtimedop()&lt;br /&gt;
** timerfd&lt;br /&gt;
** timer_create()&lt;br /&gt;
** COARSE times&lt;br /&gt;
** clock_nanosleep()&lt;br /&gt;
* Adjtime (too complicated for PoC)&lt;br /&gt;
* Cpu time for thread/pid/pgid (times())&lt;br /&gt;
* /proc/stat ticks? (top uses them e.g.)&lt;br /&gt;
* pid creation time (probably different unrelated API)&lt;br /&gt;
* clock_tai - if we care about isolation from host's time&lt;br /&gt;
&lt;br /&gt;
=Git=&lt;br /&gt;
* [https://github.com/0x7f454c46/linux/tree/wip/time-ns https://github.com/0x7f454c46/linux/tree/wip/time-ns]&lt;br /&gt;
&lt;br /&gt;
=Links=&lt;br /&gt;
&lt;br /&gt;
* [https://lists.openvz.org/pipermail/criu/2018-June/041486.html The progress of Time namespace]&lt;br /&gt;
* [https://blog.jessfraz.com/post/two-objects-not-namespaced-linux-kernel/ Two Objects not Namespaced by the Linux Kernel]&lt;br /&gt;
* [https://lwn.net/Articles/180375/ Virtual time]&lt;br /&gt;
* [https://pt.slideshare.net/kolyshkin/whats-missing-from-upstream-kernel-containers What's missing from upstream kernel containers?]&lt;br /&gt;
&lt;br /&gt;
[[Category: Empty articles]]&lt;br /&gt;
[[Category: Plans]]&lt;/div&gt;</summary>
		<author><name>Dsafonov</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=Time_namespace&amp;diff=4646</id>
		<title>Time namespace</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=Time_namespace&amp;diff=4646"/>
		<updated>2018-08-13T22:12:40Z</updated>

		<summary type="html">&lt;p&gt;Dsafonov: /* Maybe later */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Two things (for now) we want to solve with this:&lt;br /&gt;
# Shift timer's offsets&lt;br /&gt;
# Make start-time remain &amp;quot;unchanged&amp;quot; after C/R&lt;br /&gt;
# Continuous flow of monotonic time (CLOCK_MONOTONIC).&lt;br /&gt;
&lt;br /&gt;
What about other kinds of counters like perf events and trace events?&lt;br /&gt;
&lt;br /&gt;
=TODO=&lt;br /&gt;
==Required in RFC==&lt;br /&gt;
* timerfd&lt;br /&gt;
* timer_create()&lt;br /&gt;
* COARSE times&lt;br /&gt;
* RAW time&lt;br /&gt;
* clock_nanosleep()&lt;br /&gt;
* btime in /proc/stat (used by pstools)&lt;br /&gt;
* starttime in /proc/pid/stat&lt;br /&gt;
* selftests to test all we've added&lt;br /&gt;
* TIME_NS iffdefery everywhere &lt;br /&gt;
&lt;br /&gt;
==Maybe later==&lt;br /&gt;
* arm64/arm32/s390/power64 - add archs vvar support (nit: big/little-endianess for timespec::nsec)&lt;br /&gt;
* REALTIME-related:&lt;br /&gt;
** REALTIME offsets&lt;br /&gt;
** vfs modification/creation time should work&lt;br /&gt;
** utime()/utimes()/futimesat() (with times == NULL)&lt;br /&gt;
** utimensat()/futimens() - with UTIME_NOW&lt;br /&gt;
** mq_timedsend()/mq_timedreceive()&lt;br /&gt;
** semtimedop()&lt;br /&gt;
* Adjtime (too complicated for PoC)&lt;br /&gt;
* Cpu time for thread/pid/pgid (times())&lt;br /&gt;
* /proc/stat ticks? (top uses them e.g.)&lt;br /&gt;
* pid creation time (probably different unrelated API)&lt;br /&gt;
* clock_tai - if we care about isolation from host's time&lt;br /&gt;
&lt;br /&gt;
=Git=&lt;br /&gt;
* [https://github.com/0x7f454c46/linux/tree/wip/time-ns https://github.com/0x7f454c46/linux/tree/wip/time-ns]&lt;br /&gt;
&lt;br /&gt;
=Links=&lt;br /&gt;
&lt;br /&gt;
* [https://lists.openvz.org/pipermail/criu/2018-June/041486.html The progress of Time namespace]&lt;br /&gt;
* [https://blog.jessfraz.com/post/two-objects-not-namespaced-linux-kernel/ Two Objects not Namespaced by the Linux Kernel]&lt;br /&gt;
* [https://lwn.net/Articles/180375/ Virtual time]&lt;br /&gt;
* [https://pt.slideshare.net/kolyshkin/whats-missing-from-upstream-kernel-containers What's missing from upstream kernel containers?]&lt;br /&gt;
&lt;br /&gt;
[[Category: Empty articles]]&lt;br /&gt;
[[Category: Plans]]&lt;/div&gt;</summary>
		<author><name>Dsafonov</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=Time_namespace&amp;diff=4645</id>
		<title>Time namespace</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=Time_namespace&amp;diff=4645"/>
		<updated>2018-08-13T20:45:15Z</updated>

		<summary type="html">&lt;p&gt;Dsafonov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Two things (for now) we want to solve with this:&lt;br /&gt;
# Shift timer's offsets&lt;br /&gt;
# Make start-time remain &amp;quot;unchanged&amp;quot; after C/R&lt;br /&gt;
# Continuous flow of monotonic time (CLOCK_MONOTONIC).&lt;br /&gt;
&lt;br /&gt;
What about other kinds of counters like perf events and trace events?&lt;br /&gt;
&lt;br /&gt;
=TODO=&lt;br /&gt;
==Required in RFC==&lt;br /&gt;
* timerfd&lt;br /&gt;
* timer_create()&lt;br /&gt;
* COARSE times&lt;br /&gt;
* RAW time&lt;br /&gt;
* clock_nanosleep()&lt;br /&gt;
* btime in /proc/stat (used by pstools)&lt;br /&gt;
* starttime in /proc/pid/stat&lt;br /&gt;
* selftests to test all we've added&lt;br /&gt;
* TIME_NS iffdefery everywhere &lt;br /&gt;
&lt;br /&gt;
==Maybe later==&lt;br /&gt;
* arm64/arm32/s390/power64 - add archs vvar support&lt;br /&gt;
* REALTIME-related:&lt;br /&gt;
** REALTIME offsets&lt;br /&gt;
** vfs modification/creation time should work&lt;br /&gt;
** utime()/utimes()/futimesat() (with times == NULL)&lt;br /&gt;
** utimensat()/futimens() - with UTIME_NOW&lt;br /&gt;
** mq_timedsend()/mq_timedreceive()&lt;br /&gt;
** semtimedop()&lt;br /&gt;
* Adjtime (too complicated for PoC)&lt;br /&gt;
* Cpu time for thread/pid/pgid (times())&lt;br /&gt;
* /proc/stat ticks? (top uses them e.g.)&lt;br /&gt;
* pid creation time (probably different unrelated API)&lt;br /&gt;
* clock_tai - if we care about isolation from host's time&lt;br /&gt;
&lt;br /&gt;
=Git=&lt;br /&gt;
* [https://github.com/0x7f454c46/linux/tree/wip/time-ns https://github.com/0x7f454c46/linux/tree/wip/time-ns]&lt;br /&gt;
&lt;br /&gt;
=Links=&lt;br /&gt;
&lt;br /&gt;
* [https://lists.openvz.org/pipermail/criu/2018-June/041486.html The progress of Time namespace]&lt;br /&gt;
* [https://blog.jessfraz.com/post/two-objects-not-namespaced-linux-kernel/ Two Objects not Namespaced by the Linux Kernel]&lt;br /&gt;
* [https://lwn.net/Articles/180375/ Virtual time]&lt;br /&gt;
* [https://pt.slideshare.net/kolyshkin/whats-missing-from-upstream-kernel-containers What's missing from upstream kernel containers?]&lt;br /&gt;
&lt;br /&gt;
[[Category: Empty articles]]&lt;br /&gt;
[[Category: Plans]]&lt;/div&gt;</summary>
		<author><name>Dsafonov</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=Time_namespace&amp;diff=4644</id>
		<title>Time namespace</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=Time_namespace&amp;diff=4644"/>
		<updated>2018-08-13T18:17:33Z</updated>

		<summary type="html">&lt;p&gt;Dsafonov: /* Required in RFC */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Two things (for now) we want to solve with this:&lt;br /&gt;
# Shift timer's offsets&lt;br /&gt;
# Make start-time remain &amp;quot;unchanged&amp;quot; after C/R&lt;br /&gt;
# Continuous flow of monotonic time (CLOCK_MONOTONIC).&lt;br /&gt;
&lt;br /&gt;
What about other kinds of counters like perf events and trace events?&lt;br /&gt;
&lt;br /&gt;
=TODO=&lt;br /&gt;
==Required in RFC==&lt;br /&gt;
* timerfd&lt;br /&gt;
* timer_create()&lt;br /&gt;
* COARSE times&lt;br /&gt;
* RAW time&lt;br /&gt;
* clock_nanosleep()&lt;br /&gt;
* btime in /proc/stat (used by pstools)&lt;br /&gt;
* starttime in /proc/pid/stat&lt;br /&gt;
* selftests to test all we've added&lt;br /&gt;
&lt;br /&gt;
==Maybe later==&lt;br /&gt;
* arm64/arm32/s390/power64 - add archs vvar support&lt;br /&gt;
* REALTIME-related:&lt;br /&gt;
** REALTIME offsets&lt;br /&gt;
** vfs modification/creation time should work&lt;br /&gt;
** utime()/utimes()/futimesat() (with times == NULL)&lt;br /&gt;
** utimensat()/futimens() - with UTIME_NOW&lt;br /&gt;
** mq_timedsend()/mq_timedreceive()&lt;br /&gt;
** semtimedop()&lt;br /&gt;
* Adjtime (too complicated for PoC)&lt;br /&gt;
* Cpu time for thread/pid/pgid (times())&lt;br /&gt;
* /proc/stat ticks? (top uses them e.g.)&lt;br /&gt;
* pid creation time (probably different unrelated API)&lt;br /&gt;
* clock_tai - if we care about isolation from host's time&lt;br /&gt;
&lt;br /&gt;
=Git=&lt;br /&gt;
* [https://github.com/0x7f454c46/linux/tree/wip/time-ns https://github.com/0x7f454c46/linux/tree/wip/time-ns]&lt;br /&gt;
&lt;br /&gt;
=Links=&lt;br /&gt;
&lt;br /&gt;
* [https://lists.openvz.org/pipermail/criu/2018-June/041486.html The progress of Time namespace]&lt;br /&gt;
* [https://blog.jessfraz.com/post/two-objects-not-namespaced-linux-kernel/ Two Objects not Namespaced by the Linux Kernel]&lt;br /&gt;
* [https://lwn.net/Articles/180375/ Virtual time]&lt;br /&gt;
* [https://pt.slideshare.net/kolyshkin/whats-missing-from-upstream-kernel-containers What's missing from upstream kernel containers?]&lt;br /&gt;
&lt;br /&gt;
[[Category: Empty articles]]&lt;br /&gt;
[[Category: Plans]]&lt;/div&gt;</summary>
		<author><name>Dsafonov</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=Time_namespace&amp;diff=4643</id>
		<title>Time namespace</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=Time_namespace&amp;diff=4643"/>
		<updated>2018-08-13T18:16:50Z</updated>

		<summary type="html">&lt;p&gt;Dsafonov: move REALTIME-related from RFC&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Two things (for now) we want to solve with this:&lt;br /&gt;
# Shift timer's offsets&lt;br /&gt;
# Make start-time remain &amp;quot;unchanged&amp;quot; after C/R&lt;br /&gt;
# Continuous flow of monotonic time (CLOCK_MONOTONIC).&lt;br /&gt;
&lt;br /&gt;
What about other kinds of counters like perf events and trace events?&lt;br /&gt;
&lt;br /&gt;
=TODO=&lt;br /&gt;
==Required in RFC==&lt;br /&gt;
* timerfd&lt;br /&gt;
* timer_create()&lt;br /&gt;
* COARSE times&lt;br /&gt;
* RAW time&lt;br /&gt;
* clock_nanosleep()&lt;br /&gt;
* btime in /proc/stat (used by pstools)&lt;br /&gt;
* starttime in /proc/pid/stat&lt;br /&gt;
&lt;br /&gt;
==Maybe later==&lt;br /&gt;
* arm64/arm32/s390/power64 - add archs vvar support&lt;br /&gt;
* REALTIME-related:&lt;br /&gt;
** REALTIME offsets&lt;br /&gt;
** vfs modification/creation time should work&lt;br /&gt;
** utime()/utimes()/futimesat() (with times == NULL)&lt;br /&gt;
** utimensat()/futimens() - with UTIME_NOW&lt;br /&gt;
** mq_timedsend()/mq_timedreceive()&lt;br /&gt;
** semtimedop()&lt;br /&gt;
* Adjtime (too complicated for PoC)&lt;br /&gt;
* Cpu time for thread/pid/pgid (times())&lt;br /&gt;
* /proc/stat ticks? (top uses them e.g.)&lt;br /&gt;
* pid creation time (probably different unrelated API)&lt;br /&gt;
* clock_tai - if we care about isolation from host's time&lt;br /&gt;
&lt;br /&gt;
=Git=&lt;br /&gt;
* [https://github.com/0x7f454c46/linux/tree/wip/time-ns https://github.com/0x7f454c46/linux/tree/wip/time-ns]&lt;br /&gt;
&lt;br /&gt;
=Links=&lt;br /&gt;
&lt;br /&gt;
* [https://lists.openvz.org/pipermail/criu/2018-June/041486.html The progress of Time namespace]&lt;br /&gt;
* [https://blog.jessfraz.com/post/two-objects-not-namespaced-linux-kernel/ Two Objects not Namespaced by the Linux Kernel]&lt;br /&gt;
* [https://lwn.net/Articles/180375/ Virtual time]&lt;br /&gt;
* [https://pt.slideshare.net/kolyshkin/whats-missing-from-upstream-kernel-containers What's missing from upstream kernel containers?]&lt;br /&gt;
&lt;br /&gt;
[[Category: Empty articles]]&lt;br /&gt;
[[Category: Plans]]&lt;/div&gt;</summary>
		<author><name>Dsafonov</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=Time_namespace&amp;diff=4640</id>
		<title>Time namespace</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=Time_namespace&amp;diff=4640"/>
		<updated>2018-08-13T01:01:35Z</updated>

		<summary type="html">&lt;p&gt;Dsafonov: /* Maybe later */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Two things (for now) we want to solve with this:&lt;br /&gt;
# Shift timer's offsets&lt;br /&gt;
# Make start-time remain &amp;quot;unchanged&amp;quot; after C/R&lt;br /&gt;
# Continuous flow of monotonic time (CLOCK_MONOTONIC).&lt;br /&gt;
&lt;br /&gt;
What about other kinds of counters like perf events and trace events?&lt;br /&gt;
&lt;br /&gt;
=TODO=&lt;br /&gt;
==Required in RFC==&lt;br /&gt;
* timerfd&lt;br /&gt;
* timer_create()&lt;br /&gt;
* REALTIME offsets&lt;br /&gt;
* COARSE times&lt;br /&gt;
* RAW time&lt;br /&gt;
* vfs modification/creation time should work&lt;br /&gt;
* utime()/utimes()/futimesat() (with times == NULL)&lt;br /&gt;
* utimensat()/futimens() - with UTIME_NOW&lt;br /&gt;
* clock_nanosleep()&lt;br /&gt;
* mq_timedsend()/mq_timedreceive()&lt;br /&gt;
* semtimedop()&lt;br /&gt;
&lt;br /&gt;
==Maybe later==&lt;br /&gt;
* arm64/arm32/s390/power64 - add archs vvar support&lt;br /&gt;
* Adjtime (too complicated for PoC)&lt;br /&gt;
* Cpu time for thread/pid/pgid (times())&lt;br /&gt;
* /proc/stat ticks? (top uses them e.g.)&lt;br /&gt;
* pid creation time (probably different unrelated API)&lt;br /&gt;
* clock_tai - if we care about isolation from host's time&lt;br /&gt;
&lt;br /&gt;
=Git=&lt;br /&gt;
* [https://github.com/0x7f454c46/linux/tree/wip/time-ns https://github.com/0x7f454c46/linux/tree/wip/time-ns]&lt;br /&gt;
&lt;br /&gt;
=Links=&lt;br /&gt;
&lt;br /&gt;
* [https://lists.openvz.org/pipermail/criu/2018-June/041486.html The progress of Time namespace]&lt;br /&gt;
* [https://blog.jessfraz.com/post/two-objects-not-namespaced-linux-kernel/ Two Objects not Namespaced by the Linux Kernel]&lt;br /&gt;
* [https://lwn.net/Articles/180375/ Virtual time]&lt;br /&gt;
* [https://pt.slideshare.net/kolyshkin/whats-missing-from-upstream-kernel-containers What's missing from upstream kernel containers?]&lt;br /&gt;
&lt;br /&gt;
[[Category: Empty articles]]&lt;br /&gt;
[[Category: Plans]]&lt;/div&gt;</summary>
		<author><name>Dsafonov</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=Time_namespace&amp;diff=4639</id>
		<title>Time namespace</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=Time_namespace&amp;diff=4639"/>
		<updated>2018-08-13T00:55:06Z</updated>

		<summary type="html">&lt;p&gt;Dsafonov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Two things (for now) we want to solve with this:&lt;br /&gt;
# Shift timer's offsets&lt;br /&gt;
# Make start-time remain &amp;quot;unchanged&amp;quot; after C/R&lt;br /&gt;
# Continuous flow of monotonic time (CLOCK_MONOTONIC).&lt;br /&gt;
&lt;br /&gt;
What about other kinds of counters like perf events and trace events?&lt;br /&gt;
&lt;br /&gt;
=TODO=&lt;br /&gt;
==Required in RFC==&lt;br /&gt;
* timerfd&lt;br /&gt;
* timer_create()&lt;br /&gt;
* REALTIME offsets&lt;br /&gt;
* COARSE times&lt;br /&gt;
* RAW time&lt;br /&gt;
* vfs modification/creation time should work&lt;br /&gt;
* utime()/utimes()/futimesat() (with times == NULL)&lt;br /&gt;
* utimensat()/futimens() - with UTIME_NOW&lt;br /&gt;
* clock_nanosleep()&lt;br /&gt;
* mq_timedsend()/mq_timedreceive()&lt;br /&gt;
* semtimedop()&lt;br /&gt;
&lt;br /&gt;
==Maybe later==&lt;br /&gt;
* arm64/arm32/s390/power64 - add archs vvar support&lt;br /&gt;
* Adjtime (too complicated for PoC)&lt;br /&gt;
* Cpu time for thread/pid/pgid (times())&lt;br /&gt;
* /proc/stat ticks? (top uses them e.g.)&lt;br /&gt;
* pid creation time (probably different unrelated API)&lt;br /&gt;
&lt;br /&gt;
=Git=&lt;br /&gt;
* [https://github.com/0x7f454c46/linux/tree/wip/time-ns https://github.com/0x7f454c46/linux/tree/wip/time-ns]&lt;br /&gt;
&lt;br /&gt;
=Links=&lt;br /&gt;
&lt;br /&gt;
* [https://lists.openvz.org/pipermail/criu/2018-June/041486.html The progress of Time namespace]&lt;br /&gt;
* [https://blog.jessfraz.com/post/two-objects-not-namespaced-linux-kernel/ Two Objects not Namespaced by the Linux Kernel]&lt;br /&gt;
* [https://lwn.net/Articles/180375/ Virtual time]&lt;br /&gt;
* [https://pt.slideshare.net/kolyshkin/whats-missing-from-upstream-kernel-containers What's missing from upstream kernel containers?]&lt;br /&gt;
&lt;br /&gt;
[[Category: Empty articles]]&lt;br /&gt;
[[Category: Plans]]&lt;/div&gt;</summary>
		<author><name>Dsafonov</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=Time_namespace&amp;diff=4638</id>
		<title>Time namespace</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=Time_namespace&amp;diff=4638"/>
		<updated>2018-08-13T00:48:51Z</updated>

		<summary type="html">&lt;p&gt;Dsafonov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Two things (for now) we want to solve with this:&lt;br /&gt;
# Shift timer's offsets&lt;br /&gt;
# Make start-time remain &amp;quot;unchanged&amp;quot; after C/R&lt;br /&gt;
# Continuous flow of monotonic time (CLOCK_MONOTONIC).&lt;br /&gt;
&lt;br /&gt;
What about other kinds of counters like perf events and trace events?&lt;br /&gt;
&lt;br /&gt;
=TODO=&lt;br /&gt;
==Required in RFC==&lt;br /&gt;
* timerfd&lt;br /&gt;
* timer_create()&lt;br /&gt;
* REALTIME offsets&lt;br /&gt;
* COARSE times&lt;br /&gt;
* RAW time&lt;br /&gt;
* vfs modification/creation time should work&lt;br /&gt;
* utime()/utimes()/futimesat() (with times == NULL)&lt;br /&gt;
* utimensat()/futimens() - with UTIME_NOW&lt;br /&gt;
* clock_nanosleep()&lt;br /&gt;
* mq_timedsend()/mq_timedreceive()&lt;br /&gt;
* semtimedop()&lt;br /&gt;
&lt;br /&gt;
==Maybe later==&lt;br /&gt;
* Adjtime (too complicated for PoC)&lt;br /&gt;
* Cpu time for thread/pid/pgid (times())&lt;br /&gt;
* /proc/stat ticks? (top uses them e.g.)&lt;br /&gt;
* pid creation time (probably different unrelated API)&lt;br /&gt;
&lt;br /&gt;
=Git=&lt;br /&gt;
* [https://github.com/0x7f454c46/linux/tree/wip/time-ns https://github.com/0x7f454c46/linux/tree/wip/time-ns]&lt;br /&gt;
&lt;br /&gt;
=Links=&lt;br /&gt;
&lt;br /&gt;
* [https://lists.openvz.org/pipermail/criu/2018-June/041486.html The progress of Time namespace]&lt;br /&gt;
* [https://blog.jessfraz.com/post/two-objects-not-namespaced-linux-kernel/ Two Objects not Namespaced by the Linux Kernel]&lt;br /&gt;
* [https://lwn.net/Articles/180375/ Virtual time]&lt;br /&gt;
* [https://pt.slideshare.net/kolyshkin/whats-missing-from-upstream-kernel-containers What's missing from upstream kernel containers?]&lt;br /&gt;
&lt;br /&gt;
[[Category: Empty articles]]&lt;br /&gt;
[[Category: Plans]]&lt;/div&gt;</summary>
		<author><name>Dsafonov</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=Installation&amp;diff=4603</id>
		<title>Installation</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=Installation&amp;diff=4603"/>
		<updated>2018-06-13T23:43:52Z</updated>

		<summary type="html">&lt;p&gt;Dsafonov: add more python deps for zdtm.py&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;code&amp;gt;criu&amp;lt;/code&amp;gt; is an utility to checkpoint/restore a process tree. This page describes how to get CRIU binary on your box.&lt;br /&gt;
&lt;br /&gt;
== Installing from packages ==&lt;br /&gt;
&lt;br /&gt;
Many distributions provide ready-to-use [[packages]]. If no, or the CRIU version you want is not yet there, you will need to get CRIU sources and compile it.&lt;br /&gt;
&lt;br /&gt;
== Obtaining CRIU sources ==&lt;br /&gt;
&lt;br /&gt;
You can download the source code as a [https://download.openvz.org/criu/ release tarball] or sync the [https://github.com/xemul/criu git repository]. If you plan to modify CRIU sources (e.g. to [[How to submit patches|contribute the code back]]) the latter way is highly recommended. The latest and greatest sources are: {{Latest release}}&lt;br /&gt;
&lt;br /&gt;
== Installing build dependencies ==&lt;br /&gt;
&lt;br /&gt;
=== Compiler and C Library ===&lt;br /&gt;
&lt;br /&gt;
CRIU is mostly written in C and the build system is based on Makefiles. Thus just install standard &amp;lt;code&amp;gt;gcc&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt; packages (on Debian use &amp;lt;code&amp;gt;[https://packages.debian.org/build-essential build-essential]&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
For building with [[32bit tasks C/R]] support you will need &amp;lt;code&amp;gt;libc6-dev-i386, gcc-multilib&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;gcc&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[ARM crosscompile|Cross-compilation for ARM]] is also possible.&lt;br /&gt;
&lt;br /&gt;
=== Protocol Buffers ===&lt;br /&gt;
&lt;br /&gt;
CRIU uses the [https://developers.google.com/protocol-buffers/ Google Protocol Buffers] to read and write [[images]]. The &amp;lt;code&amp;gt;protoc&amp;lt;/code&amp;gt; tool is used at build time and CRIU is linked with the &amp;lt;code&amp;gt;libprotobuf-c.so&amp;lt;/code&amp;gt;. Also [[CRIT]] uses python  bindings and the &amp;lt;code&amp;gt;descriptor.proto&amp;lt;/code&amp;gt; file which typically provided by a distribution's protobuf development package.&lt;br /&gt;
&lt;br /&gt;
; RPM packages&lt;br /&gt;
: &amp;lt;code&amp;gt;protobuf protobuf-c protobuf-c-devel protobuf-compiler protobuf-devel protobuf-python&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Deb packages&lt;br /&gt;
: &amp;lt;code&amp;gt;libprotobuf-dev libprotobuf-c0-dev protobuf-c-compiler protobuf-compiler python-protobuf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Optionally, you may [[build protobuf]] from sources.&lt;br /&gt;
&lt;br /&gt;
=== Other stuff ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;pkg-config&amp;lt;/code&amp;gt; to check on build library dependencies.&lt;br /&gt;
* &amp;lt;code&amp;gt;python-ipaddr&amp;lt;/code&amp;gt; is used by CRIT to pretty-print ip.&lt;br /&gt;
* &amp;lt;code&amp;gt;libbsd&amp;lt;/code&amp;gt;. If available, CRIU will be compiled with &amp;lt;code&amp;gt;setproctitle()&amp;lt;/code&amp;gt; support. It will allow to make process titles of service workers to be more verbose.&lt;br /&gt;
* &amp;lt;code&amp;gt;iproute2&amp;lt;/code&amp;gt; version 3.5.0 or higher is needed for dumping network namespaces. The latest one can be cloned from [http://git.kernel.org/?p=linux/kernel/git/shemminger/iproute2.git;a=summary iproute2]. It should be compiled and a path to ip set as the [[environment variables|&amp;lt;code&amp;gt;CR_IP_TOOL&amp;lt;/code&amp;gt; variable]]&lt;br /&gt;
* &amp;lt;code&amp;gt;libcap-devel&amp;lt;/code&amp;gt; (RPM) / &amp;lt;code&amp;gt;libcap-dev&amp;lt;/code&amp;gt; (DEB)&lt;br /&gt;
* &amp;lt;code&amp;gt;libnet-devel libnl3-devel&amp;lt;/code&amp;gt; (RPM) / &amp;lt;code&amp;gt;libnet1-dev&amp;lt;/code&amp;gt; (DEB) / &amp;lt;code&amp;gt;libnl-3-dev libnet-dev&amp;lt;/code&amp;gt; (Ubuntu)&lt;br /&gt;
* &amp;lt;code&amp;gt;python2-future&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;python3-future&amp;lt;/code&amp;gt; is now needed for zdtm.py tests launcher&lt;br /&gt;
* &amp;lt;code&amp;gt;python-ipaddress&amp;lt;/code&amp;gt; is also required by zdtm.py&lt;br /&gt;
&lt;br /&gt;
For APT use the &amp;lt;code&amp;gt;--no-install-recommends&amp;lt;/code&amp;gt; parameter is to avoid asciidoc pulling in a lot of dependencies.&lt;br /&gt;
Also read about [[ZDTM test suite]] if you will run CRIU tests, those sources need other deps.&lt;br /&gt;
&lt;br /&gt;
== Building the tool ==&lt;br /&gt;
&lt;br /&gt;
Simply run &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt; in the CRIU source directory. This is the standard way, but there are some options available.&lt;br /&gt;
&lt;br /&gt;
# There's a ''docker-build'' target in Makefile which builds CRIU in Ubuntu Docker container. Just run &amp;lt;code&amp;gt;make docker-build&amp;lt;/code&amp;gt; and that's it.&lt;br /&gt;
# CRIU has functionality that is either optional or behaves differently depending on the kernel CRIU is running on. By default build process includes maximum of it, but this behavior [[configuring|can be changed]].&lt;br /&gt;
# You may [[Manual build deps|specify build dependencies by hands]]&lt;br /&gt;
&lt;br /&gt;
== Installing ==&lt;br /&gt;
&lt;br /&gt;
CRIU works perfectly even when run from the sources directory (with the &amp;lt;code&amp;gt;./criu/criu&amp;lt;/code&amp;gt; command), but if you want to have in standard paths run &amp;lt;code&amp;gt;make install&amp;lt;/code&amp;gt;. You may need to install &amp;lt;code&amp;gt;asciidoc&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;xmlto&amp;lt;/code&amp;gt; packages to make install-man work.&lt;br /&gt;
&lt;br /&gt;
== Checking That It Works ==&lt;br /&gt;
&lt;br /&gt;
Linux kernel v3.11 or newer is required, with some specific config options turned on. Various advanced CRIU features might require even newer kernel.  So the first thing to do is to [[Checking the kernel|check the kernel]] by running &amp;lt;code&amp;gt;criu check&amp;lt;/code&amp;gt;. At the end it should say &amp;quot;Looks OK&amp;quot;, if it doesn't the messages on the screen explain what functionality is missing. If your distribution does not provide needed kernel, you might want to [[Linux kernel|compile one yourself]].&lt;br /&gt;
&lt;br /&gt;
You can then try running the [[ZDTM Test Suite]] which sits in the &amp;lt;code&amp;gt;tests/zdtm/&amp;lt;/code&amp;gt; directory.&lt;br /&gt;
&lt;br /&gt;
== Further reading ==&lt;br /&gt;
&lt;br /&gt;
* [[Usage]]&lt;br /&gt;
* [[Advanced usage]]&lt;br /&gt;
* [[:Category:HOWTO]]&lt;br /&gt;
&lt;br /&gt;
[[Category:HOWTO]]&lt;br /&gt;
[[Category:Editor help needed]]&lt;/div&gt;</summary>
		<author><name>Dsafonov</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=Installation&amp;diff=4602</id>
		<title>Installation</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=Installation&amp;diff=4602"/>
		<updated>2018-06-13T23:41:57Z</updated>

		<summary type="html">&lt;p&gt;Dsafonov: /* Other stuff */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;code&amp;gt;criu&amp;lt;/code&amp;gt; is an utility to checkpoint/restore a process tree. This page describes how to get CRIU binary on your box.&lt;br /&gt;
&lt;br /&gt;
== Installing from packages ==&lt;br /&gt;
&lt;br /&gt;
Many distributions provide ready-to-use [[packages]]. If no, or the CRIU version you want is not yet there, you will need to get CRIU sources and compile it.&lt;br /&gt;
&lt;br /&gt;
== Obtaining CRIU sources ==&lt;br /&gt;
&lt;br /&gt;
You can download the source code as a [https://download.openvz.org/criu/ release tarball] or sync the [https://github.com/xemul/criu git repository]. If you plan to modify CRIU sources (e.g. to [[How to submit patches|contribute the code back]]) the latter way is highly recommended. The latest and greatest sources are: {{Latest release}}&lt;br /&gt;
&lt;br /&gt;
== Installing build dependencies ==&lt;br /&gt;
&lt;br /&gt;
=== Compiler and C Library ===&lt;br /&gt;
&lt;br /&gt;
CRIU is mostly written in C and the build system is based on Makefiles. Thus just install standard &amp;lt;code&amp;gt;gcc&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt; packages (on Debian use &amp;lt;code&amp;gt;[https://packages.debian.org/build-essential build-essential]&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
For building with [[32bit tasks C/R]] support you will need &amp;lt;code&amp;gt;libc6-dev-i386, gcc-multilib&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;gcc&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[ARM crosscompile|Cross-compilation for ARM]] is also possible.&lt;br /&gt;
&lt;br /&gt;
=== Protocol Buffers ===&lt;br /&gt;
&lt;br /&gt;
CRIU uses the [https://developers.google.com/protocol-buffers/ Google Protocol Buffers] to read and write [[images]]. The &amp;lt;code&amp;gt;protoc&amp;lt;/code&amp;gt; tool is used at build time and CRIU is linked with the &amp;lt;code&amp;gt;libprotobuf-c.so&amp;lt;/code&amp;gt;. Also [[CRIT]] uses python  bindings and the &amp;lt;code&amp;gt;descriptor.proto&amp;lt;/code&amp;gt; file which typically provided by a distribution's protobuf development package.&lt;br /&gt;
&lt;br /&gt;
; RPM packages&lt;br /&gt;
: &amp;lt;code&amp;gt;protobuf protobuf-c protobuf-c-devel protobuf-compiler protobuf-devel protobuf-python&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Deb packages&lt;br /&gt;
: &amp;lt;code&amp;gt;libprotobuf-dev libprotobuf-c0-dev protobuf-c-compiler protobuf-compiler python-protobuf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Optionally, you may [[build protobuf]] from sources.&lt;br /&gt;
&lt;br /&gt;
=== Other stuff ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;pkg-config&amp;lt;/code&amp;gt; to check on build library dependencies.&lt;br /&gt;
* &amp;lt;code&amp;gt;python-ipaddr&amp;lt;/code&amp;gt; is used by CRIT to pretty-print ip.&lt;br /&gt;
* &amp;lt;code&amp;gt;libbsd&amp;lt;/code&amp;gt;. If available, CRIU will be compiled with &amp;lt;code&amp;gt;setproctitle()&amp;lt;/code&amp;gt; support. It will allow to make process titles of service workers to be more verbose.&lt;br /&gt;
* &amp;lt;code&amp;gt;iproute2&amp;lt;/code&amp;gt; version 3.5.0 or higher is needed for dumping network namespaces. The latest one can be cloned from [http://git.kernel.org/?p=linux/kernel/git/shemminger/iproute2.git;a=summary iproute2]. It should be compiled and a path to ip set as the [[environment variables|&amp;lt;code&amp;gt;CR_IP_TOOL&amp;lt;/code&amp;gt; variable]]&lt;br /&gt;
* &amp;lt;code&amp;gt;libcap-devel&amp;lt;/code&amp;gt; (RPM) / &amp;lt;code&amp;gt;libcap-dev&amp;lt;/code&amp;gt; (DEB)&lt;br /&gt;
* &amp;lt;code&amp;gt;libnet-devel libnl3-devel&amp;lt;/code&amp;gt; (RPM) / &amp;lt;code&amp;gt;libnet1-dev&amp;lt;/code&amp;gt; (DEB) / &amp;lt;code&amp;gt;libnl-3-dev libnet-dev&amp;lt;/code&amp;gt; (Ubuntu)&lt;br /&gt;
* &amp;lt;code&amp;gt;python2-future&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;python3-future&amp;lt;/code&amp;gt; is now needed for zdtm.py tests launcher&lt;br /&gt;
&lt;br /&gt;
For APT use the &amp;lt;code&amp;gt;--no-install-recommends&amp;lt;/code&amp;gt; parameter is to avoid asciidoc pulling in a lot of dependencies.&lt;br /&gt;
Also read about [[ZDTM test suite]] if you will run CRIU tests, those sources need other deps.&lt;br /&gt;
&lt;br /&gt;
== Building the tool ==&lt;br /&gt;
&lt;br /&gt;
Simply run &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt; in the CRIU source directory. This is the standard way, but there are some options available.&lt;br /&gt;
&lt;br /&gt;
# There's a ''docker-build'' target in Makefile which builds CRIU in Ubuntu Docker container. Just run &amp;lt;code&amp;gt;make docker-build&amp;lt;/code&amp;gt; and that's it.&lt;br /&gt;
# CRIU has functionality that is either optional or behaves differently depending on the kernel CRIU is running on. By default build process includes maximum of it, but this behavior [[configuring|can be changed]].&lt;br /&gt;
# You may [[Manual build deps|specify build dependencies by hands]]&lt;br /&gt;
&lt;br /&gt;
== Installing ==&lt;br /&gt;
&lt;br /&gt;
CRIU works perfectly even when run from the sources directory (with the &amp;lt;code&amp;gt;./criu/criu&amp;lt;/code&amp;gt; command), but if you want to have in standard paths run &amp;lt;code&amp;gt;make install&amp;lt;/code&amp;gt;. You may need to install &amp;lt;code&amp;gt;asciidoc&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;xmlto&amp;lt;/code&amp;gt; packages to make install-man work.&lt;br /&gt;
&lt;br /&gt;
== Checking That It Works ==&lt;br /&gt;
&lt;br /&gt;
Linux kernel v3.11 or newer is required, with some specific config options turned on. Various advanced CRIU features might require even newer kernel.  So the first thing to do is to [[Checking the kernel|check the kernel]] by running &amp;lt;code&amp;gt;criu check&amp;lt;/code&amp;gt;. At the end it should say &amp;quot;Looks OK&amp;quot;, if it doesn't the messages on the screen explain what functionality is missing. If your distribution does not provide needed kernel, you might want to [[Linux kernel|compile one yourself]].&lt;br /&gt;
&lt;br /&gt;
You can then try running the [[ZDTM Test Suite]] which sits in the &amp;lt;code&amp;gt;tests/zdtm/&amp;lt;/code&amp;gt; directory.&lt;br /&gt;
&lt;br /&gt;
== Further reading ==&lt;br /&gt;
&lt;br /&gt;
* [[Usage]]&lt;br /&gt;
* [[Advanced usage]]&lt;br /&gt;
* [[:Category:HOWTO]]&lt;br /&gt;
&lt;br /&gt;
[[Category:HOWTO]]&lt;br /&gt;
[[Category:Editor help needed]]&lt;/div&gt;</summary>
		<author><name>Dsafonov</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=Todo&amp;diff=4566</id>
		<title>Todo</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=Todo&amp;diff=4566"/>
		<updated>2018-04-04T14:36:14Z</updated>

		<summary type="html">&lt;p&gt;Dsafonov: vdso remapping fixed for arm64/arm32/ppc64/ia32 running on x86_64, s390 doesn't need this - looks like, each supported architecture is covered; for any new architecture there is an easy way now in kernel to add .mremap() to special_mapping_ops&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{note|This list is being transformed into the [https://github.com/checkpoint-restore/criu/issues github issues]}}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! component&lt;br /&gt;
! task&lt;br /&gt;
! complexity&lt;br /&gt;
! potential/willing assignee&lt;br /&gt;
! comments&lt;br /&gt;
|-&lt;br /&gt;
| tests || automate process of measurement code coverage || easy || - || It is required to automate process of getting code coverage. We have code coverage results [http://criu.org/cov/ measured in 2012]. Would be nice to get up to date results on periodic basis and without manual actions.&lt;br /&gt;
|-&lt;br /&gt;
| crtools || Inherit resources, not restore || medium || - || Sigactions are restored for every task before it fork()-s. Then children check for the sa_action from their image matches to one it got from parent. Need to do the same for rlimits, maybe other resources too.&lt;br /&gt;
|-&lt;br /&gt;
| crtools || Implement [[restorer v2]] || hard (v2) || - ||&lt;br /&gt;
|-&lt;br /&gt;
| crtools || New images format || medium (v2) || - || See [[what's bad with V1 images]] &lt;br /&gt;
|-&lt;br /&gt;
| kernel/crtools || Tune the start-time of tasks || medium || - || When we restore tasks their start-time goes forward (since we create the new task effectively). Need to address this somehow, most likely with the [[time namespace]].&lt;br /&gt;
|-&lt;br /&gt;
| crtools || Support chroot-ed mount namespace || medium || - || If the root task lives in another mount namespace ''and'' has its root moved (with chroot()) CRIU dump fails with errors about inability to resolve files' paths. This is because CRIU treats the mount namespace's root as the init task's root which should be &amp;quot;/&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
| crtools || Non-stop memory (first?) pre-dump || medium || - || When reading only the memory we can avoid freezing tasks and draining memory with parasite. There's a system call named &amp;quot;read_process_vm&amp;quot; which can help us accessing the other task's memory. The disadvantage of this approach is the need for additional memory. We may control this behaviour by reading memory in chunks and not allocating to much of additional buffers.&lt;br /&gt;
|-&lt;br /&gt;
| kernel/crtools || Speed up fetching info about tasks || medium || Andrey Vagin || Using proc to get info about tasks is nice but too slow. We have measured that having socket-based engine that would fetch info about tasks from the kernel speeds things up significantly. So Andrey is working on the [[Task-diag]] patchset that would implement that.&lt;br /&gt;
|-&lt;br /&gt;
| kernel || Make pipes swappable || hard || - || When [[Memory dumping and restoring|pre-dumping]] memory we pull all the task's memory into pipe with vmsplice and then send it via network splicing the pages into socket. During this period all the memory is effectively pinned as pages in pipe are not swappable.&lt;br /&gt;
|-&lt;br /&gt;
| kernel/crtools || Adjust per-task/-container timers offsets || medium || - || Absolute timers differ on different nodes. When live migrating a task/container this difference may (and will) screw the timers up.&lt;br /&gt;
|-&lt;br /&gt;
| crtools || [[time namespace|Shift timers' timeouts]] according to the actual C-to-R delay || medium || - || If we pause tasks between C and R we, probably, need to adjust timers respectively. &amp;quot;Medium&amp;quot; complexity is because it's unclear ''what'' to do, not ''how''.&lt;br /&gt;
|-&lt;br /&gt;
| kernel/crtools || Put call to mmap into VDSO || easy || Cyrill || To put the [[parasite code]] into target process we modify its code to call the &amp;lt;code&amp;gt;mmap()&amp;lt;/code&amp;gt; system call (and the unmodify it back) and put the parasite into new area. Oleg Nesterov suggests not to patch victim, but to always have one on VDSO.&lt;br /&gt;
|-&lt;br /&gt;
| crtools || [[Integration]] with other projects || hard || - || CRIU is not working great by itself. There's alway some specific about what user wants to dump. Integrating CRIU with other projects will make CRIU work at its best.&lt;br /&gt;
|-&lt;br /&gt;
| crtools || Restore tasks into fresh new pid namespace || easy || Kuprieiev Ruslan || When we dumped processes, it can be hard to restore it back, if they didn't live in a pid namespace, due to PIDs conflict. It would be nice to have the ability to ask CRIU to create the pid namespace for those guys and restore them there. A thing to worry about is this new namespace's init task.&lt;br /&gt;
|-&lt;br /&gt;
| crtools || Rollback tree state || medium || - || When we checkpointed process tree with -R option (let them run after checkpoint) we might want to return the tasks into checkpointed state on the same machine. Currently this can only be done by killing the processes and restoring them from scratch. If we could ask CRIU to restore the images ''into'' the ready processes that could speed things up, especially if carefully caring about [[memory changes tracking]].&lt;br /&gt;
|-&lt;br /&gt;
| crtools || Restore arbitrary mountpoints tree || hard || - || Linux kernel can construct tricky knows with [[mount points]]. We don't support arbitrary configuration of such things, only those that are in active use by software. Need to fix them up.&lt;br /&gt;
|-&lt;br /&gt;
| crtools || Lazy restore using [[userfaultfd]] || medium || xemul || It might make sense to restore tasks w/o putting all the memory into respective places. Instead, the VMAs in question can be marked as &amp;quot;lazy&amp;quot; and pages will get filled into them in the background and, upon demand, in the out-of-order manner. The functionality is related to lazy migration and seamless kernel update tasks.&lt;br /&gt;
|-&lt;br /&gt;
| crtools || [[Lazy migration]] using [[userfaultfd]] || medium || xemul || Lazy migration is when we move all the tasks on another node, but leave theirs memory on the source one. Not to allow tasks read garbage from empty address space we protect all of it as inaccessible. When tasks start reading/writing the mem they got page-fault-ed. With the userfaultfd technology it can be possible to intercept the #PF, pull the page from source node and map it into expected address.&lt;br /&gt;
|-&lt;br /&gt;
| crtools || Speed up [[logging]] || medium || Cyrill || Synchronous formatting and writes into log files slow things down. On the other hand turning logs off make it impossible to troubleshoot.&lt;br /&gt;
|-&lt;br /&gt;
| crtools || Sanitize [[logging]] messages || hard || - || Currently log messages are printed w/o any logic, it's hard to analize what has happened when CRIU fails. Need to improve that by, e.g. categorizing images and [[When C/R fails|explaining them]] in more details.&lt;br /&gt;
|-&lt;br /&gt;
| crtools || Page transfer filters || medium || - || The page-xfer engine just splices the pages from stealing pipes into socket. Packing or encrypting the data would be nice. Maybe it's purely for [[P.Haul]]?&lt;br /&gt;
|-&lt;br /&gt;
| crtools || TCP socket migration with changed IP || medium || - ||  It might make sense to migrate a tcp connection on a box with changed IP address _if_ both boxes are NAT-ed to the destination. We will then have to go to NAT box and fix the conntracks in that case and use CRIT images modifucation facilities.&lt;br /&gt;
|-&lt;br /&gt;
| crtools || [[Applying images]] || hard (v2) || xemul@ w/ students || Think about ability to take images and apply them to a living task(s). Like it was described in the &amp;quot;rollback&amp;quot; feature above. Another exampl -- repopulate fdtable according to data from image. Yet another use-case -- when doing partial migration (see below) we'll need to modify one part to switch from pipes to sockets. What else? With constant replication of tree state we can do incremental dumps on source node and apply those increments on pre-created replicas on the destination node.&lt;br /&gt;
|-&lt;br /&gt;
| crtools || Partial migration || hard || - || If tasks subtree has connections to the rest of the tree (e.g. with pipes of unix sockets) we try to detect this and refuse the dump. It should be possible to take part of the tree, migrating it somewhere and recreating the mentioned links with some other appropriate IPC channel. E.g. pipes with sockets, shared memory with distributed shared memory and so on.&lt;br /&gt;
|-&lt;br /&gt;
| crtools || Shared objects (mm/fs) support || medium || - || Things created with CLONE_FOO flags are not supported now (exception -- full threads). Now we have the kcmp syscall and can do it. The shared fdtable (CLONE_FILES) is supported, the next candidate is mm sharing, as we do know, that MySQL does so sometimes.&lt;br /&gt;
|-&lt;br /&gt;
| crtools || Smart paths resolution || hard || - || Files can be overmounted. In this case CRIU will refuse the dump saying that file is [[invisible files|not alive]] but inaccessible by its name. Need a way to resolve paths to such. There are two ways: 1. Move mounts, that overlap the desired path temporarily, then open the file, then move the mountpoint back. 2. When creating a new mount pre-open an fd keeping the mountpoint. Later, do accurate path resolve and call openat() on proper mountpoint fd.&lt;br /&gt;
|-&lt;br /&gt;
| kernel/crtools || [[TCP repair TODO|TCP repair fixes]] || hard || - || We can dump and restore live [[TCP connection]]. There are some issues with it, that should be fixed.&lt;br /&gt;
|-&lt;br /&gt;
| kernel || [[Seamless kernel upgrade]] || hard || xemul || Briefly — dump tasks (into memory), change the kernel w/ kexec, then restore tasks back. From the tasks and remote client perspective tasks has just stopped and then resumed on the newer kernel. Can be a good complement to the classic live-patching technology.&lt;br /&gt;
|-&lt;br /&gt;
| crtools || Restore arbitrary process tree || hard ||  - || Need to restore any process tree, which could be created with help PR_SET_CHILD_SUBREAPER and CLONE_PARENT. Processes can share other resources [http://man7.org/linux/man-pages/man2/clone2.2.html clone(2)]. Look at [https://github.com/checkpoint-restore/criu/blob/master/test/zdtm/static/session02.c session02]. The task of resolving the given images into operations we might need to perform seem to be NP (not proven though).&lt;br /&gt;
|-&lt;br /&gt;
| crtools || C/R [[X applications]] || hard || Ruslan Kuprieiev || Dump/restore of graphical applications (see about [[integration]]). In case of X app part of its state is stored into the X-server. Need the way to fetch this state during dump and put this state back into the server on restore. Requires fixing the X-server software too.&lt;br /&gt;
|-&lt;br /&gt;
| crtools || More detailed RPC fail codes || easy || - || Currently only 3 typical errors are reported(see [https://github.com/checkpoint-restore/criu/blob/master/criu/include/cr-errno.h#L8 include/cr-errno.h]). Need to extend this set as currently it's hard to understand what has happened w/o analysing CRIU log files.&lt;br /&gt;
|-&lt;br /&gt;
| crtools || Make CRIU work on AArch32 with CONFIG_KUSER_HELPERS=n || medium || cov || CRIU currently fails on AArch32 kernels built with CONFIG_KUSER_HELPERS=n.&lt;br /&gt;
|-&lt;br /&gt;
| tests || Run many/all tests in &amp;quot;container&amp;quot; || medium || - || Currently we run zdtm tests one-by-one. It would be nice to run the all in one pseudo-container and C/R them as one big subtree.&lt;br /&gt;
|-&lt;br /&gt;
| tests || [[Fuzz testing|Trinity-like (fuzz) testing]] || hard || - || The existing suite is 99% functionality testing. Need more sophisticated testing -- take a process that has done a random set of actions, C/R one, check that all is OK. The latter is the most complicated thing.&lt;br /&gt;
|-&lt;br /&gt;
| crtools || Set checkpoint tokens without recompiling || medium || - || Sometimes you need to call checkpoint in some particular point of the code. The way to do it now is to recompile app with criu_dump() call where needed. But it is quite a bummer to recompile, repackage and redistribute an app you want to c/r. It would be great if one could set a token in app source and then let criu find that point in running task and take a snapshot. The best way to do it might be in libcriu.&lt;br /&gt;
|-&lt;br /&gt;
| crtools || Large ghost files support || medium || - || If we have a large ghost (opened unlinked) file, it's inefficient to copy it to another node via CRIU dump. Need to migrate them independently, iteratively, using memory tracking.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Category:Plans]]&lt;/div&gt;</summary>
		<author><name>Dsafonov</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=32bit_tasks_C/R&amp;diff=4496</id>
		<title>32bit tasks C/R</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=32bit_tasks_C/R&amp;diff=4496"/>
		<updated>2017-12-05T13:43:31Z</updated>

		<summary type="html">&lt;p&gt;Dsafonov: /* Needs to be done (TODO) */ autofs is fixed by Stas, AFAIK&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Compatible applications ==&lt;br /&gt;
&lt;br /&gt;
On x86_64 there are two types of compatible applications:&lt;br /&gt;
* ia32 - compiled to run on i686 target, can be executed on x86_64 with &amp;lt;code&amp;gt;IA32_EMULATION&amp;lt;/code&amp;gt; config option set.&lt;br /&gt;
* x32 - specially compiled binaries to run on x86_64 machine with &amp;lt;code&amp;gt;CONFIG_X86_X32&amp;lt;/code&amp;gt; config option set.&lt;br /&gt;
&lt;br /&gt;
Both of them uses 4 byte pointers thus can address no more than 4Gb of virtual memory.&amp;lt;br /&amp;gt;&lt;br /&gt;
But x32 uses full 64-bit register set (and thus can't be launched on i686 host natively).&amp;lt;br /&amp;gt;&lt;br /&gt;
Both of them requires additional environment on x86_64 as Glibc, libraries, and compiler support.&amp;lt;br /&amp;gt;&lt;br /&gt;
x32 is rarely distributed (at this moment only [https://wiki.debian.org/X32Port Debian x32 port can be easily found]).&amp;lt;br /&amp;gt;&lt;br /&gt;
So, CRIU will support ia32 C/R at this moment, x32 support may be quite easily added on top of ia32 as needed patches have already added in kernel with ia32 C/R support.&amp;lt;br /&amp;gt;&lt;br /&gt;
The following text uses ''compatible'' and ''32-bit'' in the meaning of ia32 applications unless otherwise specified.&lt;br /&gt;
&lt;br /&gt;
== Difference between native and compat applications ==&lt;br /&gt;
&lt;br /&gt;
From the CPU's point of view, 32-bit compatibility mode applications differ to 64-bit application by current CS (code segment selector): if corresponding value of L-bit from flags of entry in descriptors table is set the CPU will be in 64-bit mode when this segment descriptor is being used. There are some other differences between 32 and 64-bit selectors, one can read about them [https://www.malwaretech.com/2014/02/the-0x33-segment-selector-heavens-gate.html in the article &amp;quot;The 0x33 Segment Selector (Heavens Gate)&amp;quot;]. Code selectors for both bits are defined in kernel headers as &amp;lt;code&amp;gt;__USER32_CS&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;__USER_CS&amp;lt;/code&amp;gt; and corresponds to descriptors in GDT (Global Descriptors Table). One can change 64-bit mode to compatibility mode by swapping CS value (e.g., with longjump).&lt;br /&gt;
&lt;br /&gt;
From the Linux kernel's point of view, applications differ by values set during exec of application such as &amp;lt;code&amp;gt;mmap_base&amp;lt;/code&amp;gt; or thread info flags &amp;lt;code&amp;gt;TIF_ADDR32&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;TIF_IA32&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;TIF_X32&amp;lt;/code&amp;gt;.&lt;br /&gt;
Both native and compat applications can do 32 or 64-bit syscalls.&lt;br /&gt;
&lt;br /&gt;
== Mixed-bitness applications ==&lt;br /&gt;
&lt;br /&gt;
That's entirely possible with current kernel ABI to create mixed-bitness applications, which may be ''very'' entangled.&lt;br /&gt;
For example, one could set ''both'' 32-bit and 64-bit robust futex list pointers.&lt;br /&gt;
Or one can create multi-threaded application where some threads are executing 32-bit code, some 64-bit code.&lt;br /&gt;
&lt;br /&gt;
If we ever meet application of such mixed-bitness kind, the support may be added to CRIU quite easily, but it should be done under some compile-time config as it'll add more syscalls to usual C/R where they aren't needed.&lt;br /&gt;
&lt;br /&gt;
At this moment there is no plans to add such support and it's quite unlikely that we'll find such application in real world (non-syntetic test).&lt;br /&gt;
&lt;br /&gt;
== Approaches to C/R compatible applications ==&lt;br /&gt;
&lt;br /&gt;
C/R of compatible applications can be done differently, this section describes cons/pros of each, to address decision why C/R of 32-bit tasks done ''that'' way and not some other.&lt;br /&gt;
&lt;br /&gt;
=== Restore with exec() of 32-bit dummy binary vs from 64-bit CRIU ===&lt;br /&gt;
&lt;br /&gt;
Restore of 32-bit application can be done with some daemon that runs in 32-bit mode and communicates with CRIU binary (or 32-bit CRIU subprocess).&lt;br /&gt;
&lt;br /&gt;
'''Pros''':&lt;br /&gt;
* no kernel patches expected (not quite true: vDSO mremap() still needed support)&lt;br /&gt;
&lt;br /&gt;
'''Cons''':&lt;br /&gt;
* CRIU code base does not have special restore daemon to communicate with - code needs to be reworked&lt;br /&gt;
* 64-bit app can have 32-bit child, which could be a parent to 64-bit and so on - need to re-exec native 64-bit CRIU from 32-bit dummy (or 32-bit CRIU)&lt;br /&gt;
* need to send to the daemon properties of restoring processes, open fds to images, share memory with parsed ps_tree and so on... The number of IPC calls will slow down restore&lt;br /&gt;
* restoring becomes more complicated, and if looking forward to restoring user/pid sub-namespaces, it will be too entangled&lt;br /&gt;
* no optimized inheritance for task's properties those erase with exec()&lt;br /&gt;
* will need also another daemon for x32&lt;br /&gt;
&lt;br /&gt;
=== Restore with a flag to sigreturn() or arch_prctl() ===&lt;br /&gt;
&lt;br /&gt;
The initial attempt to do 32-bit C/R, was rejected by lkml community by many reasons. It should have swapped thread info flags (such as &amp;lt;code&amp;gt;TIF_ADDR32&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;TIF_IA32&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;TIF_X32&amp;lt;/code&amp;gt;), unmap native 64-bit vDSO blob from process's address space and map compatible 32-bit vDSO - all according to some bit in sigframe in &amp;lt;code&amp;gt;rt_sigreturn()&amp;lt;/code&amp;gt; call or some dedicated for it &amp;lt;code&amp;gt;arch_prctl()&amp;lt;/code&amp;gt; call.&lt;br /&gt;
&lt;br /&gt;
'''Pros''':&lt;br /&gt;
* Simple from the point of CRIU: just do sigreturn with a new bit set or call arch_prctl() and do sigreturn&lt;br /&gt;
&lt;br /&gt;
'''Cons''':&lt;br /&gt;
* If 32-bit vDSO image on restored host differ from dumped (in image), need to catch task after sigreturn and make jump trampolines separately - in case of arch_prctl() simpler ([https://lkml.org/lkml/2016/6/1/425 that's why arch_prctl was in initial RFC])&lt;br /&gt;
* Too many points of failure for one syscall, too complicated&lt;br /&gt;
* Just adding a way to swap those thread info flags from userspace would result in a new races/bugs (as e.g., TASK_SIZE macro depends on TIF_ADDR32, the mmap code may do unexpected things)&lt;br /&gt;
&lt;br /&gt;
After discussion in lkml, conclusion was: separate changing personality (like thread info flags) from API to map vDSO blobs, remove TIF_IA32 flag that differs 32 from 64-bit tasks and look on syscall's nature: compat syscall, x32 syscall or native syscall.&lt;br /&gt;
&lt;br /&gt;
=== Seizing with two 32-bit and 64-bit parasites ===&lt;br /&gt;
&lt;br /&gt;
'''Pros''':&lt;br /&gt;
* no 32-bit calls in 64-bit parasite and vice-versa&lt;br /&gt;
* no need in exit in parasite: ptrace code doesn't allow to set 32-bit regset to 64-bit task and the reverse, running parasite the same nature as task bereaves us from those limits&lt;br /&gt;
&lt;br /&gt;
'''Cons''':&lt;br /&gt;
* need to have two/three (for x32 also) blobs for seizing&lt;br /&gt;
* macros in makefiles to build two parasites&lt;br /&gt;
* serialization of parasite's answers: arguments to parasite differ in size - serialize them, which added not nice-looking and less readable C macros&lt;br /&gt;
&lt;br /&gt;
=== Current approach ===&lt;br /&gt;
&lt;br /&gt;
FIXME&lt;br /&gt;
&lt;br /&gt;
== Needs to be done (TODO) ==&lt;br /&gt;
&lt;br /&gt;
=== Kernel patch for vsyscall page ===&lt;br /&gt;
&lt;br /&gt;
That's emulated page, not a vma - affects only in /proc/&amp;lt;pid&amp;gt;/maps for restored process. Depends on !TIF_IA32 &amp;amp;&amp;amp; !TIF_X32 - Andy got patches for disabling the emulation on per-pid basics, for now I ran tests with &amp;lt;code&amp;gt;vsyscall=none&amp;lt;/code&amp;gt; boot parameter because zdtm.py checks maps before/after C/R.&lt;br /&gt;
&lt;br /&gt;
=== Error dump on x32-bit app dumping ===&lt;br /&gt;
&lt;br /&gt;
At this moment we'll support only compat ia32 applications, attempt to dump x32 compat binary should result in error.&lt;br /&gt;
&lt;br /&gt;
=== Continue removing TIF_IA32 from uprobes &amp;amp; Oprofile ===&lt;br /&gt;
&lt;br /&gt;
This flag should be gone as it's suggested by Andy &amp;amp; Oleg.&lt;br /&gt;
There is quite lot of work to make kernel work without it, but small gain:&lt;br /&gt;
the restored ia32 process will be traced by uprobes/oprofile and stuff like that.&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
* [https://github.com/checkpoint-restore/criu/issues/43 github issue]&lt;br /&gt;
&lt;br /&gt;
[[Category: Under the hood‏‎]]&lt;/div&gt;</summary>
		<author><name>Dsafonov</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=Upstream_kernel_commits&amp;diff=4446</id>
		<title>Upstream kernel commits</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=Upstream_kernel_commits&amp;diff=4446"/>
		<updated>2017-09-22T15:58:46Z</updated>

		<summary type="html">&lt;p&gt;Dsafonov: arm64 vdso mremap commit merged in 4.14&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!--&lt;br /&gt;
  NOTE: to figure out which kernel version a commit was included into, please use&lt;br /&gt;
  git describe --contains COMMITID&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Pending patches ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Reference&lt;br /&gt;
! Description&lt;br /&gt;
! Status&lt;br /&gt;
|-&lt;br /&gt;
|[https://github.com/avagin/linux-task-diag/commits/task-diag-v3-devel v3-devel], [https://lkml.org/lkml/2015/7/6/142 v2], [http://lwn.net/Articles/633622/ v1] || kernel: add a netlink interface to get information about processes || ?&lt;br /&gt;
|-&lt;br /&gt;
|[https://lkml.org/lkml/2016/6/28/801 lkml] || fs: allow to use dirfd as root for openat and other *at syscalls || ?&lt;br /&gt;
|-&lt;br /&gt;
|[https://lkml.org/lkml/2017/1/23/712 lkml] || [PATCH] mnt: allow to add a mount into an existing group || &lt;br /&gt;
|-&lt;br /&gt;
|[https://lkml.org/lkml/2017/4/14/138 lkml] || ARM/shmem: Drop page coloring align for non-VIPT CPUs || ?&lt;br /&gt;
|-&lt;br /&gt;
|[https://lkml.org/lkml/2017/5/9/634 lkml] || fs: add an ioctl to get an owning userns for a superblock || ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Merged patches ==&lt;br /&gt;
&lt;br /&gt;
This table lists CRIU-related kernel commits already merged to vanilla.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; class=&amp;quot;unsortable&amp;quot; | Commit&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; class=&amp;quot;unsortable&amp;quot; | Description&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Kernel version&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|7773fbc541}} || procfs: make proc_get_link to use dentry instead of inode || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|640708a2cf}} || procfs: introduce the /proc/&amp;lt;pid&amp;gt;/map_files/ directory || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|067bce1a06}} || c/r: introduce CHECKPOINT_RESTORE symbol || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|028ee4be34}} || c/r: prctl: add PR_SET_MM codes to set up mm_struct entries || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b3f7f573a2}} || c/r: procfs: add start_data, end_data, start_brk members to /proc/$pid/stat v4 || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b8f566b04d}} || sysctl: add the kernel.ns_last_pid control || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|c9da99e647}} || unix_diag: Fixup RQLEN extension report || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|885ee74d5d}} || af_unix: Move CINQ/COUTQ code to helpers || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|257b529876}} || unix_diag: Add the MEMINFO extension || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|c0636faa53}} || inet_diag: Add the SKMEMINFO extension || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|5d2e5f274f}} || sock_diag: Introduce the meminfo nla core (v2) || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|288461e154}} || unix_diag: Include unix_diag.h into header-y target || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|e6fe2371bd}} || sock_diag: Arrange sock_diag.h such that it is exportable to userspace || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|e09e9d189b}} || unix: If we happen to find peer NULL when diag dumping, write zero. || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|3b0723c12e}} || unix_diag: Fix incoming connections nla length  || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|2ea744a583}} || net: unix -- Add missing module.h inclusion || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|5d531aaa64}} || unix_diag: Write it into kbuild || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|cbf391958a}} || unix_diag: Receive queue lenght NLA || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|2aac7a2cb0}} || unix_diag: Pending connections IDs NLA || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|ac02be8d96}} || unix_diag: Unix peer inode NLA || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|5f7b056946}} || unix_diag: Unix inode info NLA || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|f5248b48a6}} || unix_diag: Unix socket name NLA || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|5d3cae8bc3}} || unix_diag: Dumping exact socket core || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|45a96b9be6}} || unix_diag: Dumping all sockets core || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|22931d3b90}} || unix_diag: Basic module skeleton || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|fa7ff56f75}} || af_unix: Export stuff required for diag module || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|f65c1b534b}} || sock_diag: Generalize requests cookies managements || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|aec8dc62f6}} || sock_diag: Fix module netlink aliases || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|e7c466e58e}} || sock_diag: Move the SOCK_DIAG_BY_FAMILY cmd declaration || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|86e62ad6b2}} || udp_diag: Fix the !ipv6 case || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|b872a2371f}} || udp_diag: Make it module when ipv6 is a module || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|507dd7961e}} || udp_diag: Wire the udp_diag module into kbuild || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|b6d640c228}} || udp_diag: Implement the dump-all functionality || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|a925aa00a5}} || udp_diag: Implement the get_exact dumping functionality || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|52b7c59bc3}} || udp_diag: Basic skeleton || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|fce823381e}} || udp: Export code sk lookup routines || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|1942c518ca}} || inet_diag: Generalize inet_diag dump and get_exact calls || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|3c4d05c805}} || inet_diag: Introduce the inet socket dumping routine || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|8d07d1518a}} || inet_diag: Introduce the byte-code run on an inet socket || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|efb3cb428d}} || inet_diag: Split inet_diag_get_exact into parts || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|476f7dbff3}} || inet_diag: Split inet_diag_get_exact into parts || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|b005ab4ef8}} || inet_diag: Export inet diag cookie checking routine || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|87c22ea52e}} || inet_diag: Reduce the number of args for bytecode run routine || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|7b35eadd7e}} || inet_diag: Remove indirect sizeof from inet diag handlers || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|8ef874bfc7}} || sock_diag: Move the sock_ code to net/core/ || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|a029fe26b6}} || inet_diag: Cleanup type2proto last user || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|d23deaa07b}} || inet_diag: Introduce socket family checks || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|25c4cd2b6d}} || inet_diag: Switch the _dump to work with new header || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|fe50ce2846}} || inet_diag: Switch the _get_exact to work with new header || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|126fdc3249}} || inet_diag: Introduce new inet_diag_req header || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|d366477a52}} || sock_diag: Initial skeleton || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|f13c95f0e2}} || inet_diag: Switch from _GETSOCK to IPPROTO_ numbers || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|37f352b5e3}} || inet_diag: Move byte-code finding up the call-stack || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|8d34172dfd}} || sock_diag: Introduce new message type || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|818411616b}} || fs, proc: Introduce /proc/&amp;lt;pid&amp;gt;/task/&amp;lt;tid&amp;gt;/children entry v9 || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|5b172087f9}} || c/r: procfs: add arg_start/end, env_start/end and exit_code members || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|fe8c7f5cbf}} || c/r: prctl: Extend PR_SET_MM to set up more mm_struct entries || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|d97b46a646}} || syscalls, x86: Add __NR_kcmp syscall || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b32dfe3771}} || c/r: prctl: Add ability to set new mm_struct::exe_file || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|79f0713d40}} || prctl: Use CAP_SYS_RESOURCE for PR_SET_MM option || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|300f786b26}} || prctl: add ability to get clear_tid_address || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|4934b0329f}} || datagram: Factor out sk queue referencing || 3.4&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|3f518bf745}} || datagram: Add offset argument to __skb_recv_datagram || 3.4&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|da5ef6e51b}} || skb: Add skb_peek_next helper || 3.4&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ef64a54f6e}} || sock: Introduce the SO_PEEK_OFF sock option || 3.4&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|f55bb7f9cb}} || unix: Support peeking offset for datagram and seqpacket sockets || 3.4&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|fc0d753641}} || unix: Support peeking offset for stream sockets || 3.4&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|1d151c337d}} || fcntl: Add F_GETOWNER_UIDS option v3 || 3.6&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|370816aef0}} || tcp: Move code around || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ee9952831c}} || tcp: Initial repair mode || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c0e88ff0f2}} || tcp: Repair socket queues || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|5e6a3ce657}} || tcp: Report mss_clamp with TCP_MAXSEG option in repair mode || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b139ba4e90}} || tcp: Repair connection-time negotiated parameters || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|de248a75c3}} || tcp repair: Fix unaligned access when repairing options (v2) || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|736f24d5e5}} || c/r: prctl: Drop VMA flags test on PR_SET_MM_ stack data assignment || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|5702c5eeab}} || c/r: prctl: Move PR_GET_TID_ADDRESS to a proper place || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|16fbdce62d}} || proc: report file/anon bit in /proc/pid/pagemap || 3.4&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|bca1554373}} || proc/smaps: show amount of nonlinear ptes in vma || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b14f243a42}} || net: Dont use ifindices in hash fns || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|9c7dafbfab}} || net: Allow to create links with given ifindex || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|e6f8f1a739}} || veth: Allow to create peer link with given ifindex || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|aa79e66eee}} || net: Make ifindex generation per-net namespace || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|1fb9489bf1}} || net: Loopback ifindex is constant now || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|faf60af17f}} || procfs: Move /proc/pid/fd[info] handling code to fd.[ch] || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ddd3e0771b}} || procfs: Convert /proc/pid/fdinfo/ handling routines to seq-file || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|55985dd72a}} || procfs: Add ability to plug in auxiliary fdinfo providers || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|cbac5542d4}} || fs, eventfd: Add procfs fdinfo helper || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|138d22b586}} || fs, epoll: Add procfs fdinfo helper v2 || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|711c7bf991}} || fs, exportfs: Add export_encode_inode_fh helper || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|be77196b80}} || fs, notify: Add procfs fdinfo helper || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|e6dbcafb74}} || fs, fanotify: Add @mflags field to fanotify output || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|2787b04b6c}} || packet: Introduce net/packet/internal.h header || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|96ec632714}} || packet: Diag core and basic socket info dumping || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|8a360be0c5}} || packet: Report more packet sk info via diag module || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|eea68e2f1a}} || packet: Report socket mclist info via diag module || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|16f01365fa}} || packet: Report rings cfg via diag engine || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|fff3321d75}} || packet: Report fanout status via diag engine || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|0fa7fa98db}} || packet: Protect packet sk list with mutex (v2) || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|579035dc5d}} || kernel: limit a value of ns_last_pid to (0, max_pid) || 3.6&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|bc26ccd8fc}} || tcp: restore rcv_wscale in a repair mode (v2) || 3.6&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|f7b86bfe8d}} || sockopt: Make SO_BINDTODEVICE readable || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|e4e541a848}} || sock-diag: Report shutdown for inet and unix sockets (v2) || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|834f82e2aa}} || procfs: add VmFlags field in smaps output || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|06026d911c}} || tty: pty - Move TIOCPKT handling into pty.c || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c6298038bc}} || tty, ioctls -- Add new ioctl definitions for tty flags fetching || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|84fd7bdf12}} || tty: Add get- ioctls to fetch tty status v3 || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|a8fc927780}} || sk-filter: Add ability to get socket filter program (v2) || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|cacb6ba0f3}} || net: inet_diag -- Return error code if protocol handler is missed || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c454e6111d}} || tcp-repair: Handle zero-length data put in rcv queue || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ec34232575}} || tcp: fix retransmission in repair mode || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|2b9164771e}} || ipv6: adapt connect for repair move || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c91f6df2db}} || sockopt: Change getsockopt() of SO_BINDTODEVICE to return an interface name || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|3fcfe78658}} || ipc: add more comments to message copying related code || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|51eeacaa07}} || ipc: simplify message copying || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b30efe2775}} || ipc: convert prepare_copy() from macro to function || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|85398aa8de}} || ipc: simplify free_copy() call || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|3a665531a3}} || selftests: IPC message queue copy feature test || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|4a674f34ba}} || ipc: introduce message queue copy feature || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|f9dd87f473}} || ipc: message queue receive cleanup || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|03f5956680}} || ipc: add sysctl to specify desired next object id || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|9afdacda02}} || ipc: remove forced assignment of selected message || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|3f7d1fe108}} || arm: Wire up kcmp syscall || 3.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|1e142b29e2}} || kcmp: make it depend on CHECKPOINT_RESTORE || 3.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ceaa1fef65}} || tcp: adding a per-socket timestamp offset || 3.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|93be6ce0e9}} || tcp: set and get per-socket timestamp || 3.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ee684b6f28}} || tcp: send packets with a socket timestamp || 3.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|66dd34ad}} || signal: allow to send any siginfo to itself || 3.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ae5fc987}} || net: fix *_DIAG_MAX constants || 3.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|0f29c768}} || net: prepare netlink code for netlink diag || 3.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|eaaa3139}} || netlink: Diag core and basic socket info dumping (v2) || 3.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|84c751bd}} || ptrace: add ability to retrieve signals without removing from a queue (v4) || 3.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|040fa020}} || clear_refs: Sanitize accepted commands declaration || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|af9de7eb}} || clear_refs: Introduce private struct for mm_walk || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|2b0a9f01}} || pagemap-introduce-pagemap_entry_t-without-pmshift-bits || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|0f8975ec}} || mm: soft-dirty bits for user memory changes tracking || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|541c237c}} || pagemap: prepare to reuse constant bits with page-shift || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|57b8015e}} || posix-timers: Show sigevent info in proc file || 3.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|48f6a7a5}} || posix-timers: Introduce /proc/PID/timers file || 3.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|5ed67f05}} || posix timers: Allocate timer id per process (v2) || 3.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|15ef0298}} || posix-timers: Show clock ID in proc file || 3.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|29000cae}} || ptrace: add ability to get/set signal-blocked mask (v2) || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|274038f8}} || tun: Report &amp;quot;persist&amp;quot; flag to userspace || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|179ef71c}} || mm: Save soft-dirty bits on swapped pages || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|41bb3476}} || mm: Save soft-dirty bits on file pages || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|76975e9c}} || tun: Get skfilter layout || 3.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|849c9b6f}} || tun: Allow to skip filter on attach || 3.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|3d407a80}} || tun: Report whether the queue is attached or not || 3.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|fb7589a1}} || tun: Add ability to create tun device with given index || 3.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|e3e12028}} || tcp: don't apply tsoffset if rcv_tsecr is zero || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c7781a6e}} || tcp: initialize rcv_tstamp for restored sockets || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|7ed5c5ae}} || tcp: set timestamps for restored skb-s || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|6dec97dc}} || mm: move_ptes -- Set soft dirty bit depending on pte type || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c3d16e16}} || mm: migration -- Do not loose soft dirty bit if page is in migration state || 3.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|e9cdd6e7}} || mm: pagemap -- Inspect _PAGE_SOFT_DIRTY only on present pages || 3.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|dbde4979}} || tcp: don't update snd_nxt, when a socket is switched from repair mode || 3.13&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|d9104d1c}} || mm: track vma changes with VM_SOFTDIRTY bit || 3.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|34228d47}} || mm: Ignore VM_SOFTDIRTY on VMA merging || 3.14, 3.13-stable&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|24f91eba1}} || mm: don't lose the SOFT_DIRTY flag on mprotect || 3.14, 3.13-stable&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|49d063cb3}} || proc: show mnt_id in /proc/pid/fdinfo || 3.15&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|0bf073315}} || mm: Make freshly remapped file pages being softdirty unconditionally || 3.16&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|9aed8614a}} || mm: Don't forget to set softdirty on file mapped fault || 3.17&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b43790eed}} || mm: Don't forget to save file map softdiry bit on unmap || 3.16&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c86c97ff4}} || mm: Clear VM_SOFTDIRTY flag inside clear_refs_write instead of clear_soft_dirty || 3.16&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|af9c4957c}} || timerfd: Implement show_fdinfo method || 3.17&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|854d06d9f}} || docs: Procfs -- Document timerfd output || 3.17&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|5442e9fbd}} || timerfd: Implement timerfd_ioctl method to restore timerfd_ctx::ticks, v3 || 3.17&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|64e455079}} || mm: softdirty: enable write notifications on VMAs after VM_SOFTDIRTY cleared || 3.18&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|9c5990240}} || mm: introduce check_data_rlimit helper || 3.18&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|8764b338b}} || mm: use may_adjust_brk helper || 3.18&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|71fe97e18}} || prctl: PR_SET_MM -- factor out mmap_sem when updating mm::exe_file || 3.18&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|f606b77f1}} || prctl: PR_SET_MM -- introduce PR_SET_MM_MAP operation || 3.18&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|a3816ab0e}} || fs: Convert show_fdinfo functions to void || 3.19&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|9183df25f}} || shm: add memfd_create() syscall || 3.17&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|e4a0d3e72}} || aio: Make it possible to remap aio ring || 3.19&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|6c8c90319}} || proc: show locks in /proc/pid/fdinfo/X || 4.1&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|155e35d4d}} || VFS: Introduce inode-getting helpers for layered/unioned fs environments || 4.0&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|df1a085af}} || VFS: Add a fallthrough flag for marking virtual dentries || 4.0&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|f25801ee4}} || overlay: Call ovl_drop_write() earlier in ovl_dentry_open() || 4.2-rc2&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|4bacc9c92}} || overlayfs: Make f_path always point to the overlay and f_inode to the underlay || 4.2-rc2&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|9391dd00d}} || fix a braino in ovl_d_select_inode() || 4.2-rc2&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|13c4a9011}} || seccomp: add ptrace options for suspend/resume || 4.3-rc1&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|bab189918}} || bpf, seccomp: prepare for upcoming criu support || 4.4-rc1&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|f8e529ed9}} || seccomp, ptrace: add support for dumping seccomp filters || 4.4-rc1&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c83aa55d0}} || autofs: show pipe inode in mount options || 4.6-rc4&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b1ed4c4fa}} || tcp: add an ability to dump and restore window parameters || 4.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b059a453b}} || x86/vdso: Add mremap hook to vm_special_mapping || 4.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|f80fd3a5f}} || selftests/x86: Add vDSO mremap() test || 4.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|e38447ee1}} || x86/vdso: Unmap vdso blob on vvar mapping failure || 4.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|576ebfefd}} || x86/vdso: Replace calculate_addr in map_vdso() with addr || 4.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|2eefd8789}} || x86/arch_prctl/vdso: Add ARCH_MAP_VDSO_* || 4.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|90954e7b9}} || x86/coredump: Use pr_reg size, rather that TIF_IA32 flag || 4.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|cc87324b3}} || x86/ptrace: Down with test_thread_flag(TIF_IA32) || 4.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|684635105}} || x86/signal: Add SA_{X32,IA32}_ABI sa_flags || 4.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ed1e7db33}} || x86/signal: Remove bogus user_64bit_mode() check from sigaction_compat_abi() || v4.9-rc2&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|7b2dd3682}} || x86/coredump: Always use user_regs_struct for compat_elf_gregset_t || v4.9-rc7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|432490f9d}} || net: ip, diag -- Add diag interface for raw sockets || v4.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|cd05a0eca}} || net: ip, raw_diag -- Fix socket leaking for destroy request || v4.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|3de864f8c}} || net: ip, diag -- Adjust raw_abort to use unlocked __udp_disconnect || v4.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|9999370fa}} || net: ip, raw_diag -- Use jump for exiting from nested loop || v4.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c62cce2ca}} || net: add an ioctl to get a socket network namespace || v4.10-rc1&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|319b0534b9}} || tcp: allow to enable the repair mode for non-listening sockets || v4.10-rc1&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|ba94f3088b}} || unix: add ioctl to open a unix socket file with O_PATH ||&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|6a0b41d1e2}} || x86/mm: Introduce arch_rnd() to compute 32/64 mmap random base || 4.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|8f3e474f3c}} || x86/mm: Add task_size parameter to mmap_base() || 4.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|1b028f784e}} || x86/mm: Introduce mmap_compat_base() for 32-bit mmap() || 4.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|3e6ef9c809}} || x86/mm: Make mmap(MAP_32BIT) work correctly || 4.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|e13b73dd9c}} || x86/hugetlb: Adjust to the new native/compat mmap bases || 4.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ada26481df}} || x86/mm: Make in_compat_syscall() work during exec || 4.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|280e87e98c}} || ARM32: Support mremap() for sigpage/vDSO || 4.13&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|739586951b}} || arm64/vdso: Support mremap() for vDSO || 4.14-rc1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>Dsafonov</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=Upstream_kernel_commits&amp;diff=4391</id>
		<title>Upstream kernel commits</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=Upstream_kernel_commits&amp;diff=4391"/>
		<updated>2017-07-26T17:11:17Z</updated>

		<summary type="html">&lt;p&gt;Dsafonov: Add arm64 mremap() patch&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!--&lt;br /&gt;
  NOTE: to figure out which kernel version a commit was included into, please use&lt;br /&gt;
  git describe --contains COMMITID&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Pending patches ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Reference&lt;br /&gt;
! Description&lt;br /&gt;
! Status&lt;br /&gt;
|-&lt;br /&gt;
|[https://github.com/avagin/linux-task-diag/commits/task-diag-v3-devel v3-devel], [https://lkml.org/lkml/2015/7/6/142 v2], [http://lwn.net/Articles/633622/ v1] || kernel: add a netlink interface to get information about processes || ?&lt;br /&gt;
|-&lt;br /&gt;
|[https://lkml.org/lkml/2016/6/28/801 lkml] || fs: allow to use dirfd as root for openat and other *at syscalls || ?&lt;br /&gt;
|-&lt;br /&gt;
|[https://lkml.org/lkml/2017/1/23/712 lkml] || [PATCH] mnt: allow to add a mount into an existing group || &lt;br /&gt;
|-&lt;br /&gt;
|[https://lkml.org/lkml/2017/4/14/138 lkml] || ARM/shmem: Drop page coloring align for non-VIPT CPUs || ?&lt;br /&gt;
|-&lt;br /&gt;
|[https://lkml.org/lkml/2017/5/9/634 lkml] || fs: add an ioctl to get an owning userns for a superblock || ?&lt;br /&gt;
|-&lt;br /&gt;
|[https://lkml.org/lkml/2017/7/26/638 lkml] || arm64/vdso: Support mremap() for vDSO || ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Merged patches ==&lt;br /&gt;
&lt;br /&gt;
This table lists CRIU-related kernel commits already merged to vanilla.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; class=&amp;quot;unsortable&amp;quot; | Commit&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; class=&amp;quot;unsortable&amp;quot; | Description&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Kernel version&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|7773fbc541}} || procfs: make proc_get_link to use dentry instead of inode || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|640708a2cf}} || procfs: introduce the /proc/&amp;lt;pid&amp;gt;/map_files/ directory || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|067bce1a06}} || c/r: introduce CHECKPOINT_RESTORE symbol || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|028ee4be34}} || c/r: prctl: add PR_SET_MM codes to set up mm_struct entries || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b3f7f573a2}} || c/r: procfs: add start_data, end_data, start_brk members to /proc/$pid/stat v4 || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b8f566b04d}} || sysctl: add the kernel.ns_last_pid control || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|c9da99e647}} || unix_diag: Fixup RQLEN extension report || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|885ee74d5d}} || af_unix: Move CINQ/COUTQ code to helpers || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|257b529876}} || unix_diag: Add the MEMINFO extension || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|c0636faa53}} || inet_diag: Add the SKMEMINFO extension || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|5d2e5f274f}} || sock_diag: Introduce the meminfo nla core (v2) || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|288461e154}} || unix_diag: Include unix_diag.h into header-y target || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|e6fe2371bd}} || sock_diag: Arrange sock_diag.h such that it is exportable to userspace || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|e09e9d189b}} || unix: If we happen to find peer NULL when diag dumping, write zero. || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|3b0723c12e}} || unix_diag: Fix incoming connections nla length  || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|2ea744a583}} || net: unix -- Add missing module.h inclusion || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|5d531aaa64}} || unix_diag: Write it into kbuild || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|cbf391958a}} || unix_diag: Receive queue lenght NLA || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|2aac7a2cb0}} || unix_diag: Pending connections IDs NLA || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|ac02be8d96}} || unix_diag: Unix peer inode NLA || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|5f7b056946}} || unix_diag: Unix inode info NLA || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|f5248b48a6}} || unix_diag: Unix socket name NLA || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|5d3cae8bc3}} || unix_diag: Dumping exact socket core || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|45a96b9be6}} || unix_diag: Dumping all sockets core || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|22931d3b90}} || unix_diag: Basic module skeleton || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|fa7ff56f75}} || af_unix: Export stuff required for diag module || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|f65c1b534b}} || sock_diag: Generalize requests cookies managements || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|aec8dc62f6}} || sock_diag: Fix module netlink aliases || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|e7c466e58e}} || sock_diag: Move the SOCK_DIAG_BY_FAMILY cmd declaration || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|86e62ad6b2}} || udp_diag: Fix the !ipv6 case || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|b872a2371f}} || udp_diag: Make it module when ipv6 is a module || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|507dd7961e}} || udp_diag: Wire the udp_diag module into kbuild || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|b6d640c228}} || udp_diag: Implement the dump-all functionality || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|a925aa00a5}} || udp_diag: Implement the get_exact dumping functionality || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|52b7c59bc3}} || udp_diag: Basic skeleton || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|fce823381e}} || udp: Export code sk lookup routines || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|1942c518ca}} || inet_diag: Generalize inet_diag dump and get_exact calls || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|3c4d05c805}} || inet_diag: Introduce the inet socket dumping routine || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|8d07d1518a}} || inet_diag: Introduce the byte-code run on an inet socket || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|efb3cb428d}} || inet_diag: Split inet_diag_get_exact into parts || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|476f7dbff3}} || inet_diag: Split inet_diag_get_exact into parts || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|b005ab4ef8}} || inet_diag: Export inet diag cookie checking routine || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|87c22ea52e}} || inet_diag: Reduce the number of args for bytecode run routine || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|7b35eadd7e}} || inet_diag: Remove indirect sizeof from inet diag handlers || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|8ef874bfc7}} || sock_diag: Move the sock_ code to net/core/ || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|a029fe26b6}} || inet_diag: Cleanup type2proto last user || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|d23deaa07b}} || inet_diag: Introduce socket family checks || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|25c4cd2b6d}} || inet_diag: Switch the _dump to work with new header || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|fe50ce2846}} || inet_diag: Switch the _get_exact to work with new header || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|126fdc3249}} || inet_diag: Introduce new inet_diag_req header || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|d366477a52}} || sock_diag: Initial skeleton || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|f13c95f0e2}} || inet_diag: Switch from _GETSOCK to IPPROTO_ numbers || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|37f352b5e3}} || inet_diag: Move byte-code finding up the call-stack || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|8d34172dfd}} || sock_diag: Introduce new message type || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|818411616b}} || fs, proc: Introduce /proc/&amp;lt;pid&amp;gt;/task/&amp;lt;tid&amp;gt;/children entry v9 || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|5b172087f9}} || c/r: procfs: add arg_start/end, env_start/end and exit_code members || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|fe8c7f5cbf}} || c/r: prctl: Extend PR_SET_MM to set up more mm_struct entries || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|d97b46a646}} || syscalls, x86: Add __NR_kcmp syscall || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b32dfe3771}} || c/r: prctl: Add ability to set new mm_struct::exe_file || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|79f0713d40}} || prctl: Use CAP_SYS_RESOURCE for PR_SET_MM option || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|300f786b26}} || prctl: add ability to get clear_tid_address || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|4934b0329f}} || datagram: Factor out sk queue referencing || 3.4&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|3f518bf745}} || datagram: Add offset argument to __skb_recv_datagram || 3.4&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|da5ef6e51b}} || skb: Add skb_peek_next helper || 3.4&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ef64a54f6e}} || sock: Introduce the SO_PEEK_OFF sock option || 3.4&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|f55bb7f9cb}} || unix: Support peeking offset for datagram and seqpacket sockets || 3.4&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|fc0d753641}} || unix: Support peeking offset for stream sockets || 3.4&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|1d151c337d}} || fcntl: Add F_GETOWNER_UIDS option v3 || 3.6&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|370816aef0}} || tcp: Move code around || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ee9952831c}} || tcp: Initial repair mode || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c0e88ff0f2}} || tcp: Repair socket queues || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|5e6a3ce657}} || tcp: Report mss_clamp with TCP_MAXSEG option in repair mode || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b139ba4e90}} || tcp: Repair connection-time negotiated parameters || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|de248a75c3}} || tcp repair: Fix unaligned access when repairing options (v2) || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|736f24d5e5}} || c/r: prctl: Drop VMA flags test on PR_SET_MM_ stack data assignment || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|5702c5eeab}} || c/r: prctl: Move PR_GET_TID_ADDRESS to a proper place || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|16fbdce62d}} || proc: report file/anon bit in /proc/pid/pagemap || 3.4&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|bca1554373}} || proc/smaps: show amount of nonlinear ptes in vma || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b14f243a42}} || net: Dont use ifindices in hash fns || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|9c7dafbfab}} || net: Allow to create links with given ifindex || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|e6f8f1a739}} || veth: Allow to create peer link with given ifindex || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|aa79e66eee}} || net: Make ifindex generation per-net namespace || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|1fb9489bf1}} || net: Loopback ifindex is constant now || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|faf60af17f}} || procfs: Move /proc/pid/fd[info] handling code to fd.[ch] || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ddd3e0771b}} || procfs: Convert /proc/pid/fdinfo/ handling routines to seq-file || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|55985dd72a}} || procfs: Add ability to plug in auxiliary fdinfo providers || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|cbac5542d4}} || fs, eventfd: Add procfs fdinfo helper || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|138d22b586}} || fs, epoll: Add procfs fdinfo helper v2 || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|711c7bf991}} || fs, exportfs: Add export_encode_inode_fh helper || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|be77196b80}} || fs, notify: Add procfs fdinfo helper || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|e6dbcafb74}} || fs, fanotify: Add @mflags field to fanotify output || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|2787b04b6c}} || packet: Introduce net/packet/internal.h header || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|96ec632714}} || packet: Diag core and basic socket info dumping || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|8a360be0c5}} || packet: Report more packet sk info via diag module || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|eea68e2f1a}} || packet: Report socket mclist info via diag module || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|16f01365fa}} || packet: Report rings cfg via diag engine || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|fff3321d75}} || packet: Report fanout status via diag engine || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|0fa7fa98db}} || packet: Protect packet sk list with mutex (v2) || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|579035dc5d}} || kernel: limit a value of ns_last_pid to (0, max_pid) || 3.6&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|bc26ccd8fc}} || tcp: restore rcv_wscale in a repair mode (v2) || 3.6&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|f7b86bfe8d}} || sockopt: Make SO_BINDTODEVICE readable || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|e4e541a848}} || sock-diag: Report shutdown for inet and unix sockets (v2) || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|834f82e2aa}} || procfs: add VmFlags field in smaps output || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|06026d911c}} || tty: pty - Move TIOCPKT handling into pty.c || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c6298038bc}} || tty, ioctls -- Add new ioctl definitions for tty flags fetching || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|84fd7bdf12}} || tty: Add get- ioctls to fetch tty status v3 || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|a8fc927780}} || sk-filter: Add ability to get socket filter program (v2) || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|cacb6ba0f3}} || net: inet_diag -- Return error code if protocol handler is missed || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c454e6111d}} || tcp-repair: Handle zero-length data put in rcv queue || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ec34232575}} || tcp: fix retransmission in repair mode || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|2b9164771e}} || ipv6: adapt connect for repair move || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c91f6df2db}} || sockopt: Change getsockopt() of SO_BINDTODEVICE to return an interface name || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|3fcfe78658}} || ipc: add more comments to message copying related code || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|51eeacaa07}} || ipc: simplify message copying || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b30efe2775}} || ipc: convert prepare_copy() from macro to function || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|85398aa8de}} || ipc: simplify free_copy() call || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|3a665531a3}} || selftests: IPC message queue copy feature test || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|4a674f34ba}} || ipc: introduce message queue copy feature || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|f9dd87f473}} || ipc: message queue receive cleanup || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|03f5956680}} || ipc: add sysctl to specify desired next object id || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|9afdacda02}} || ipc: remove forced assignment of selected message || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|3f7d1fe108}} || arm: Wire up kcmp syscall || 3.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|1e142b29e2}} || kcmp: make it depend on CHECKPOINT_RESTORE || 3.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ceaa1fef65}} || tcp: adding a per-socket timestamp offset || 3.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|93be6ce0e9}} || tcp: set and get per-socket timestamp || 3.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ee684b6f28}} || tcp: send packets with a socket timestamp || 3.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|66dd34ad}} || signal: allow to send any siginfo to itself || 3.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ae5fc987}} || net: fix *_DIAG_MAX constants || 3.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|0f29c768}} || net: prepare netlink code for netlink diag || 3.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|eaaa3139}} || netlink: Diag core and basic socket info dumping (v2) || 3.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|84c751bd}} || ptrace: add ability to retrieve signals without removing from a queue (v4) || 3.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|040fa020}} || clear_refs: Sanitize accepted commands declaration || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|af9de7eb}} || clear_refs: Introduce private struct for mm_walk || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|2b0a9f01}} || pagemap-introduce-pagemap_entry_t-without-pmshift-bits || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|0f8975ec}} || mm: soft-dirty bits for user memory changes tracking || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|541c237c}} || pagemap: prepare to reuse constant bits with page-shift || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|57b8015e}} || posix-timers: Show sigevent info in proc file || 3.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|48f6a7a5}} || posix-timers: Introduce /proc/PID/timers file || 3.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|5ed67f05}} || posix timers: Allocate timer id per process (v2) || 3.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|15ef0298}} || posix-timers: Show clock ID in proc file || 3.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|29000cae}} || ptrace: add ability to get/set signal-blocked mask (v2) || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|274038f8}} || tun: Report &amp;quot;persist&amp;quot; flag to userspace || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|179ef71c}} || mm: Save soft-dirty bits on swapped pages || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|41bb3476}} || mm: Save soft-dirty bits on file pages || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|76975e9c}} || tun: Get skfilter layout || 3.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|849c9b6f}} || tun: Allow to skip filter on attach || 3.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|3d407a80}} || tun: Report whether the queue is attached or not || 3.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|fb7589a1}} || tun: Add ability to create tun device with given index || 3.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|e3e12028}} || tcp: don't apply tsoffset if rcv_tsecr is zero || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c7781a6e}} || tcp: initialize rcv_tstamp for restored sockets || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|7ed5c5ae}} || tcp: set timestamps for restored skb-s || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|6dec97dc}} || mm: move_ptes -- Set soft dirty bit depending on pte type || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c3d16e16}} || mm: migration -- Do not loose soft dirty bit if page is in migration state || 3.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|e9cdd6e7}} || mm: pagemap -- Inspect _PAGE_SOFT_DIRTY only on present pages || 3.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|dbde4979}} || tcp: don't update snd_nxt, when a socket is switched from repair mode || 3.13&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|d9104d1c}} || mm: track vma changes with VM_SOFTDIRTY bit || 3.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|34228d47}} || mm: Ignore VM_SOFTDIRTY on VMA merging || 3.14, 3.13-stable&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|24f91eba1}} || mm: don't lose the SOFT_DIRTY flag on mprotect || 3.14, 3.13-stable&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|49d063cb3}} || proc: show mnt_id in /proc/pid/fdinfo || 3.15&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|0bf073315}} || mm: Make freshly remapped file pages being softdirty unconditionally || 3.16&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|9aed8614a}} || mm: Don't forget to set softdirty on file mapped fault || 3.17&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b43790eed}} || mm: Don't forget to save file map softdiry bit on unmap || 3.16&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c86c97ff4}} || mm: Clear VM_SOFTDIRTY flag inside clear_refs_write instead of clear_soft_dirty || 3.16&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|af9c4957c}} || timerfd: Implement show_fdinfo method || 3.17&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|854d06d9f}} || docs: Procfs -- Document timerfd output || 3.17&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|5442e9fbd}} || timerfd: Implement timerfd_ioctl method to restore timerfd_ctx::ticks, v3 || 3.17&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|64e455079}} || mm: softdirty: enable write notifications on VMAs after VM_SOFTDIRTY cleared || 3.18&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|9c5990240}} || mm: introduce check_data_rlimit helper || 3.18&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|8764b338b}} || mm: use may_adjust_brk helper || 3.18&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|71fe97e18}} || prctl: PR_SET_MM -- factor out mmap_sem when updating mm::exe_file || 3.18&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|f606b77f1}} || prctl: PR_SET_MM -- introduce PR_SET_MM_MAP operation || 3.18&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|a3816ab0e}} || fs: Convert show_fdinfo functions to void || 3.19&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|9183df25f}} || shm: add memfd_create() syscall || 3.17&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|e4a0d3e72}} || aio: Make it possible to remap aio ring || 3.19&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|6c8c90319}} || proc: show locks in /proc/pid/fdinfo/X || 4.1&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|155e35d4d}} || VFS: Introduce inode-getting helpers for layered/unioned fs environments || 4.0&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|df1a085af}} || VFS: Add a fallthrough flag for marking virtual dentries || 4.0&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|f25801ee4}} || overlay: Call ovl_drop_write() earlier in ovl_dentry_open() || 4.2-rc2&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|4bacc9c92}} || overlayfs: Make f_path always point to the overlay and f_inode to the underlay || 4.2-rc2&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|9391dd00d}} || fix a braino in ovl_d_select_inode() || 4.2-rc2&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|13c4a9011}} || seccomp: add ptrace options for suspend/resume || 4.3-rc1&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|bab189918}} || bpf, seccomp: prepare for upcoming criu support || 4.4-rc1&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|f8e529ed9}} || seccomp, ptrace: add support for dumping seccomp filters || 4.4-rc1&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c83aa55d0}} || autofs: show pipe inode in mount options || 4.6-rc4&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b1ed4c4fa}} || tcp: add an ability to dump and restore window parameters || 4.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b059a453b}} || x86/vdso: Add mremap hook to vm_special_mapping || 4.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|f80fd3a5f}} || selftests/x86: Add vDSO mremap() test || 4.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|e38447ee1}} || x86/vdso: Unmap vdso blob on vvar mapping failure || 4.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|576ebfefd}} || x86/vdso: Replace calculate_addr in map_vdso() with addr || 4.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|2eefd8789}} || x86/arch_prctl/vdso: Add ARCH_MAP_VDSO_* || 4.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|90954e7b9}} || x86/coredump: Use pr_reg size, rather that TIF_IA32 flag || 4.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|cc87324b3}} || x86/ptrace: Down with test_thread_flag(TIF_IA32) || 4.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|684635105}} || x86/signal: Add SA_{X32,IA32}_ABI sa_flags || 4.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ed1e7db33}} || x86/signal: Remove bogus user_64bit_mode() check from sigaction_compat_abi() || v4.9-rc2&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|7b2dd3682}} || x86/coredump: Always use user_regs_struct for compat_elf_gregset_t || v4.9-rc7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|432490f9d}} || net: ip, diag -- Add diag interface for raw sockets || v4.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|cd05a0eca}} || net: ip, raw_diag -- Fix socket leaking for destroy request || v4.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|3de864f8c}} || net: ip, diag -- Adjust raw_abort to use unlocked __udp_disconnect || v4.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|9999370fa}} || net: ip, raw_diag -- Use jump for exiting from nested loop || v4.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c62cce2ca}} || net: add an ioctl to get a socket network namespace || v4.10-rc1&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|319b0534b9}} || tcp: allow to enable the repair mode for non-listening sockets || v4.10-rc1&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|ba94f3088b}} || unix: add ioctl to open a unix socket file with O_PATH ||&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|6a0b41d1e2}} || x86/mm: Introduce arch_rnd() to compute 32/64 mmap random base || 4.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|8f3e474f3c}} || x86/mm: Add task_size parameter to mmap_base() || 4.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|1b028f784e}} || x86/mm: Introduce mmap_compat_base() for 32-bit mmap() || 4.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|3e6ef9c809}} || x86/mm: Make mmap(MAP_32BIT) work correctly || 4.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|e13b73dd9c}} || x86/hugetlb: Adjust to the new native/compat mmap bases || 4.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ada26481df}} || x86/mm: Make in_compat_syscall() work during exec || 4.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|280e87e98c}} || ARM32: Support mremap() for sigpage/vDSO || 4.13&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>Dsafonov</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=Upstream_kernel_commits&amp;diff=4368</id>
		<title>Upstream kernel commits</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=Upstream_kernel_commits&amp;diff=4368"/>
		<updated>2017-07-14T18:12:38Z</updated>

		<summary type="html">&lt;p&gt;Dsafonov: arm32/mremap() is in torvalds's master&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!--&lt;br /&gt;
  NOTE: to figure out which kernel version a commit was included into, please use&lt;br /&gt;
  git describe --contains COMMITID&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Pending patches ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Reference&lt;br /&gt;
! Description&lt;br /&gt;
! Status&lt;br /&gt;
|-&lt;br /&gt;
|[https://github.com/avagin/linux-task-diag/commits/task-diag-v3-devel v3-devel], [https://lkml.org/lkml/2015/7/6/142 v2], [http://lwn.net/Articles/633622/ v1] || kernel: add a netlink interface to get information about processes || ?&lt;br /&gt;
|-&lt;br /&gt;
|[https://lkml.org/lkml/2016/6/28/801 lkml] || fs: allow to use dirfd as root for openat and other *at syscalls || ?&lt;br /&gt;
|-&lt;br /&gt;
|[https://lkml.org/lkml/2017/1/23/712 lkml] || [PATCH] mnt: allow to add a mount into an existing group || &lt;br /&gt;
|-&lt;br /&gt;
|[https://lkml.org/lkml/2017/4/14/138 lkml] || ARM/shmem: Drop page coloring align for non-VIPT CPUs || ?&lt;br /&gt;
|-&lt;br /&gt;
|[https://lkml.org/lkml/2017/5/9/634 lkml] || fs: add an ioctl to get an owning userns for a superblock || ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Merged patches ==&lt;br /&gt;
&lt;br /&gt;
This table lists CRIU-related kernel commits already merged to vanilla.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; class=&amp;quot;unsortable&amp;quot; | Commit&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; class=&amp;quot;unsortable&amp;quot; | Description&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Kernel version&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|7773fbc541}} || procfs: make proc_get_link to use dentry instead of inode || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|640708a2cf}} || procfs: introduce the /proc/&amp;lt;pid&amp;gt;/map_files/ directory || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|067bce1a06}} || c/r: introduce CHECKPOINT_RESTORE symbol || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|028ee4be34}} || c/r: prctl: add PR_SET_MM codes to set up mm_struct entries || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b3f7f573a2}} || c/r: procfs: add start_data, end_data, start_brk members to /proc/$pid/stat v4 || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b8f566b04d}} || sysctl: add the kernel.ns_last_pid control || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|c9da99e647}} || unix_diag: Fixup RQLEN extension report || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|885ee74d5d}} || af_unix: Move CINQ/COUTQ code to helpers || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|257b529876}} || unix_diag: Add the MEMINFO extension || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|c0636faa53}} || inet_diag: Add the SKMEMINFO extension || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|5d2e5f274f}} || sock_diag: Introduce the meminfo nla core (v2) || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|288461e154}} || unix_diag: Include unix_diag.h into header-y target || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|e6fe2371bd}} || sock_diag: Arrange sock_diag.h such that it is exportable to userspace || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|e09e9d189b}} || unix: If we happen to find peer NULL when diag dumping, write zero. || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|3b0723c12e}} || unix_diag: Fix incoming connections nla length  || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|2ea744a583}} || net: unix -- Add missing module.h inclusion || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|5d531aaa64}} || unix_diag: Write it into kbuild || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|cbf391958a}} || unix_diag: Receive queue lenght NLA || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|2aac7a2cb0}} || unix_diag: Pending connections IDs NLA || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|ac02be8d96}} || unix_diag: Unix peer inode NLA || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|5f7b056946}} || unix_diag: Unix inode info NLA || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|f5248b48a6}} || unix_diag: Unix socket name NLA || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|5d3cae8bc3}} || unix_diag: Dumping exact socket core || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|45a96b9be6}} || unix_diag: Dumping all sockets core || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|22931d3b90}} || unix_diag: Basic module skeleton || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|fa7ff56f75}} || af_unix: Export stuff required for diag module || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|f65c1b534b}} || sock_diag: Generalize requests cookies managements || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|aec8dc62f6}} || sock_diag: Fix module netlink aliases || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|e7c466e58e}} || sock_diag: Move the SOCK_DIAG_BY_FAMILY cmd declaration || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|86e62ad6b2}} || udp_diag: Fix the !ipv6 case || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|b872a2371f}} || udp_diag: Make it module when ipv6 is a module || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|507dd7961e}} || udp_diag: Wire the udp_diag module into kbuild || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|b6d640c228}} || udp_diag: Implement the dump-all functionality || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|a925aa00a5}} || udp_diag: Implement the get_exact dumping functionality || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|52b7c59bc3}} || udp_diag: Basic skeleton || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|fce823381e}} || udp: Export code sk lookup routines || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|1942c518ca}} || inet_diag: Generalize inet_diag dump and get_exact calls || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|3c4d05c805}} || inet_diag: Introduce the inet socket dumping routine || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|8d07d1518a}} || inet_diag: Introduce the byte-code run on an inet socket || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|efb3cb428d}} || inet_diag: Split inet_diag_get_exact into parts || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|476f7dbff3}} || inet_diag: Split inet_diag_get_exact into parts || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|b005ab4ef8}} || inet_diag: Export inet diag cookie checking routine || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|87c22ea52e}} || inet_diag: Reduce the number of args for bytecode run routine || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|7b35eadd7e}} || inet_diag: Remove indirect sizeof from inet diag handlers || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|8ef874bfc7}} || sock_diag: Move the sock_ code to net/core/ || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|a029fe26b6}} || inet_diag: Cleanup type2proto last user || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|d23deaa07b}} || inet_diag: Introduce socket family checks || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|25c4cd2b6d}} || inet_diag: Switch the _dump to work with new header || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|fe50ce2846}} || inet_diag: Switch the _get_exact to work with new header || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|126fdc3249}} || inet_diag: Introduce new inet_diag_req header || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|d366477a52}} || sock_diag: Initial skeleton || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|f13c95f0e2}} || inet_diag: Switch from _GETSOCK to IPPROTO_ numbers || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|37f352b5e3}} || inet_diag: Move byte-code finding up the call-stack || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|8d34172dfd}} || sock_diag: Introduce new message type || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|818411616b}} || fs, proc: Introduce /proc/&amp;lt;pid&amp;gt;/task/&amp;lt;tid&amp;gt;/children entry v9 || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|5b172087f9}} || c/r: procfs: add arg_start/end, env_start/end and exit_code members || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|fe8c7f5cbf}} || c/r: prctl: Extend PR_SET_MM to set up more mm_struct entries || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|d97b46a646}} || syscalls, x86: Add __NR_kcmp syscall || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b32dfe3771}} || c/r: prctl: Add ability to set new mm_struct::exe_file || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|79f0713d40}} || prctl: Use CAP_SYS_RESOURCE for PR_SET_MM option || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|300f786b26}} || prctl: add ability to get clear_tid_address || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|4934b0329f}} || datagram: Factor out sk queue referencing || 3.4&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|3f518bf745}} || datagram: Add offset argument to __skb_recv_datagram || 3.4&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|da5ef6e51b}} || skb: Add skb_peek_next helper || 3.4&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ef64a54f6e}} || sock: Introduce the SO_PEEK_OFF sock option || 3.4&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|f55bb7f9cb}} || unix: Support peeking offset for datagram and seqpacket sockets || 3.4&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|fc0d753641}} || unix: Support peeking offset for stream sockets || 3.4&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|1d151c337d}} || fcntl: Add F_GETOWNER_UIDS option v3 || 3.6&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|370816aef0}} || tcp: Move code around || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ee9952831c}} || tcp: Initial repair mode || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c0e88ff0f2}} || tcp: Repair socket queues || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|5e6a3ce657}} || tcp: Report mss_clamp with TCP_MAXSEG option in repair mode || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b139ba4e90}} || tcp: Repair connection-time negotiated parameters || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|de248a75c3}} || tcp repair: Fix unaligned access when repairing options (v2) || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|736f24d5e5}} || c/r: prctl: Drop VMA flags test on PR_SET_MM_ stack data assignment || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|5702c5eeab}} || c/r: prctl: Move PR_GET_TID_ADDRESS to a proper place || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|16fbdce62d}} || proc: report file/anon bit in /proc/pid/pagemap || 3.4&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|bca1554373}} || proc/smaps: show amount of nonlinear ptes in vma || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b14f243a42}} || net: Dont use ifindices in hash fns || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|9c7dafbfab}} || net: Allow to create links with given ifindex || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|e6f8f1a739}} || veth: Allow to create peer link with given ifindex || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|aa79e66eee}} || net: Make ifindex generation per-net namespace || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|1fb9489bf1}} || net: Loopback ifindex is constant now || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|faf60af17f}} || procfs: Move /proc/pid/fd[info] handling code to fd.[ch] || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ddd3e0771b}} || procfs: Convert /proc/pid/fdinfo/ handling routines to seq-file || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|55985dd72a}} || procfs: Add ability to plug in auxiliary fdinfo providers || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|cbac5542d4}} || fs, eventfd: Add procfs fdinfo helper || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|138d22b586}} || fs, epoll: Add procfs fdinfo helper v2 || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|711c7bf991}} || fs, exportfs: Add export_encode_inode_fh helper || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|be77196b80}} || fs, notify: Add procfs fdinfo helper || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|e6dbcafb74}} || fs, fanotify: Add @mflags field to fanotify output || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|2787b04b6c}} || packet: Introduce net/packet/internal.h header || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|96ec632714}} || packet: Diag core and basic socket info dumping || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|8a360be0c5}} || packet: Report more packet sk info via diag module || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|eea68e2f1a}} || packet: Report socket mclist info via diag module || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|16f01365fa}} || packet: Report rings cfg via diag engine || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|fff3321d75}} || packet: Report fanout status via diag engine || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|0fa7fa98db}} || packet: Protect packet sk list with mutex (v2) || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|579035dc5d}} || kernel: limit a value of ns_last_pid to (0, max_pid) || 3.6&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|bc26ccd8fc}} || tcp: restore rcv_wscale in a repair mode (v2) || 3.6&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|f7b86bfe8d}} || sockopt: Make SO_BINDTODEVICE readable || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|e4e541a848}} || sock-diag: Report shutdown for inet and unix sockets (v2) || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|834f82e2aa}} || procfs: add VmFlags field in smaps output || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|06026d911c}} || tty: pty - Move TIOCPKT handling into pty.c || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c6298038bc}} || tty, ioctls -- Add new ioctl definitions for tty flags fetching || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|84fd7bdf12}} || tty: Add get- ioctls to fetch tty status v3 || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|a8fc927780}} || sk-filter: Add ability to get socket filter program (v2) || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|cacb6ba0f3}} || net: inet_diag -- Return error code if protocol handler is missed || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c454e6111d}} || tcp-repair: Handle zero-length data put in rcv queue || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ec34232575}} || tcp: fix retransmission in repair mode || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|2b9164771e}} || ipv6: adapt connect for repair move || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c91f6df2db}} || sockopt: Change getsockopt() of SO_BINDTODEVICE to return an interface name || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|3fcfe78658}} || ipc: add more comments to message copying related code || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|51eeacaa07}} || ipc: simplify message copying || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b30efe2775}} || ipc: convert prepare_copy() from macro to function || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|85398aa8de}} || ipc: simplify free_copy() call || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|3a665531a3}} || selftests: IPC message queue copy feature test || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|4a674f34ba}} || ipc: introduce message queue copy feature || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|f9dd87f473}} || ipc: message queue receive cleanup || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|03f5956680}} || ipc: add sysctl to specify desired next object id || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|9afdacda02}} || ipc: remove forced assignment of selected message || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|3f7d1fe108}} || arm: Wire up kcmp syscall || 3.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|1e142b29e2}} || kcmp: make it depend on CHECKPOINT_RESTORE || 3.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ceaa1fef65}} || tcp: adding a per-socket timestamp offset || 3.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|93be6ce0e9}} || tcp: set and get per-socket timestamp || 3.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ee684b6f28}} || tcp: send packets with a socket timestamp || 3.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|66dd34ad}} || signal: allow to send any siginfo to itself || 3.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ae5fc987}} || net: fix *_DIAG_MAX constants || 3.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|0f29c768}} || net: prepare netlink code for netlink diag || 3.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|eaaa3139}} || netlink: Diag core and basic socket info dumping (v2) || 3.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|84c751bd}} || ptrace: add ability to retrieve signals without removing from a queue (v4) || 3.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|040fa020}} || clear_refs: Sanitize accepted commands declaration || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|af9de7eb}} || clear_refs: Introduce private struct for mm_walk || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|2b0a9f01}} || pagemap-introduce-pagemap_entry_t-without-pmshift-bits || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|0f8975ec}} || mm: soft-dirty bits for user memory changes tracking || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|541c237c}} || pagemap: prepare to reuse constant bits with page-shift || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|57b8015e}} || posix-timers: Show sigevent info in proc file || 3.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|48f6a7a5}} || posix-timers: Introduce /proc/PID/timers file || 3.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|5ed67f05}} || posix timers: Allocate timer id per process (v2) || 3.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|15ef0298}} || posix-timers: Show clock ID in proc file || 3.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|29000cae}} || ptrace: add ability to get/set signal-blocked mask (v2) || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|274038f8}} || tun: Report &amp;quot;persist&amp;quot; flag to userspace || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|179ef71c}} || mm: Save soft-dirty bits on swapped pages || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|41bb3476}} || mm: Save soft-dirty bits on file pages || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|76975e9c}} || tun: Get skfilter layout || 3.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|849c9b6f}} || tun: Allow to skip filter on attach || 3.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|3d407a80}} || tun: Report whether the queue is attached or not || 3.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|fb7589a1}} || tun: Add ability to create tun device with given index || 3.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|e3e12028}} || tcp: don't apply tsoffset if rcv_tsecr is zero || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c7781a6e}} || tcp: initialize rcv_tstamp for restored sockets || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|7ed5c5ae}} || tcp: set timestamps for restored skb-s || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|6dec97dc}} || mm: move_ptes -- Set soft dirty bit depending on pte type || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c3d16e16}} || mm: migration -- Do not loose soft dirty bit if page is in migration state || 3.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|e9cdd6e7}} || mm: pagemap -- Inspect _PAGE_SOFT_DIRTY only on present pages || 3.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|dbde4979}} || tcp: don't update snd_nxt, when a socket is switched from repair mode || 3.13&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|d9104d1c}} || mm: track vma changes with VM_SOFTDIRTY bit || 3.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|34228d47}} || mm: Ignore VM_SOFTDIRTY on VMA merging || 3.14, 3.13-stable&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|24f91eba1}} || mm: don't lose the SOFT_DIRTY flag on mprotect || 3.14, 3.13-stable&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|49d063cb3}} || proc: show mnt_id in /proc/pid/fdinfo || 3.15&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|0bf073315}} || mm: Make freshly remapped file pages being softdirty unconditionally || 3.16&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|9aed8614a}} || mm: Don't forget to set softdirty on file mapped fault || 3.17&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b43790eed}} || mm: Don't forget to save file map softdiry bit on unmap || 3.16&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c86c97ff4}} || mm: Clear VM_SOFTDIRTY flag inside clear_refs_write instead of clear_soft_dirty || 3.16&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|af9c4957c}} || timerfd: Implement show_fdinfo method || 3.17&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|854d06d9f}} || docs: Procfs -- Document timerfd output || 3.17&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|5442e9fbd}} || timerfd: Implement timerfd_ioctl method to restore timerfd_ctx::ticks, v3 || 3.17&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|64e455079}} || mm: softdirty: enable write notifications on VMAs after VM_SOFTDIRTY cleared || 3.18&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|9c5990240}} || mm: introduce check_data_rlimit helper || 3.18&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|8764b338b}} || mm: use may_adjust_brk helper || 3.18&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|71fe97e18}} || prctl: PR_SET_MM -- factor out mmap_sem when updating mm::exe_file || 3.18&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|f606b77f1}} || prctl: PR_SET_MM -- introduce PR_SET_MM_MAP operation || 3.18&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|a3816ab0e}} || fs: Convert show_fdinfo functions to void || 3.19&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|9183df25f}} || shm: add memfd_create() syscall || 3.17&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|e4a0d3e72}} || aio: Make it possible to remap aio ring || 3.19&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|6c8c90319}} || proc: show locks in /proc/pid/fdinfo/X || 4.1&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|155e35d4d}} || VFS: Introduce inode-getting helpers for layered/unioned fs environments || 4.0&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|df1a085af}} || VFS: Add a fallthrough flag for marking virtual dentries || 4.0&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|f25801ee4}} || overlay: Call ovl_drop_write() earlier in ovl_dentry_open() || 4.2-rc2&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|4bacc9c92}} || overlayfs: Make f_path always point to the overlay and f_inode to the underlay || 4.2-rc2&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|9391dd00d}} || fix a braino in ovl_d_select_inode() || 4.2-rc2&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|13c4a9011}} || seccomp: add ptrace options for suspend/resume || 4.3-rc1&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|bab189918}} || bpf, seccomp: prepare for upcoming criu support || 4.4-rc1&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|f8e529ed9}} || seccomp, ptrace: add support for dumping seccomp filters || 4.4-rc1&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c83aa55d0}} || autofs: show pipe inode in mount options || 4.6-rc4&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b1ed4c4fa}} || tcp: add an ability to dump and restore window parameters || 4.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b059a453b}} || x86/vdso: Add mremap hook to vm_special_mapping || 4.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|f80fd3a5f}} || selftests/x86: Add vDSO mremap() test || 4.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|e38447ee1}} || x86/vdso: Unmap vdso blob on vvar mapping failure || 4.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|576ebfefd}} || x86/vdso: Replace calculate_addr in map_vdso() with addr || 4.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|2eefd8789}} || x86/arch_prctl/vdso: Add ARCH_MAP_VDSO_* || 4.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|90954e7b9}} || x86/coredump: Use pr_reg size, rather that TIF_IA32 flag || 4.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|cc87324b3}} || x86/ptrace: Down with test_thread_flag(TIF_IA32) || 4.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|684635105}} || x86/signal: Add SA_{X32,IA32}_ABI sa_flags || 4.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ed1e7db33}} || x86/signal: Remove bogus user_64bit_mode() check from sigaction_compat_abi() || v4.9-rc2&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|7b2dd3682}} || x86/coredump: Always use user_regs_struct for compat_elf_gregset_t || v4.9-rc7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|432490f9d}} || net: ip, diag -- Add diag interface for raw sockets || v4.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|cd05a0eca}} || net: ip, raw_diag -- Fix socket leaking for destroy request || v4.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|3de864f8c}} || net: ip, diag -- Adjust raw_abort to use unlocked __udp_disconnect || v4.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|9999370fa}} || net: ip, raw_diag -- Use jump for exiting from nested loop || v4.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c62cce2ca}} || net: add an ioctl to get a socket network namespace || v4.10-rc1&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|319b0534b9}} || tcp: allow to enable the repair mode for non-listening sockets || v4.10-rc1&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|ba94f3088b}} || unix: add ioctl to open a unix socket file with O_PATH ||&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|6a0b41d1e2}} || x86/mm: Introduce arch_rnd() to compute 32/64 mmap random base || 4.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|8f3e474f3c}} || x86/mm: Add task_size parameter to mmap_base() || 4.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|1b028f784e}} || x86/mm: Introduce mmap_compat_base() for 32-bit mmap() || 4.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|3e6ef9c809}} || x86/mm: Make mmap(MAP_32BIT) work correctly || 4.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|e13b73dd9c}} || x86/hugetlb: Adjust to the new native/compat mmap bases || 4.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ada26481df}} || x86/mm: Make in_compat_syscall() work during exec || 4.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|280e87e98c}} || ARM32: Support mremap() for sigpage/vDSO || 4.13&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>Dsafonov</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=Upstream_kernel_commits&amp;diff=4273</id>
		<title>Upstream kernel commits</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=Upstream_kernel_commits&amp;diff=4273"/>
		<updated>2017-06-23T17:11:53Z</updated>

		<summary type="html">&lt;p&gt;Dsafonov: arm32 vdso mremap() linux-next hash&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!--&lt;br /&gt;
  NOTE: to figure out which kernel version a commit was included into, please use&lt;br /&gt;
  git describe --contains COMMITID&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Pending patches ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Reference&lt;br /&gt;
! Description&lt;br /&gt;
! Status&lt;br /&gt;
|-&lt;br /&gt;
|[https://github.com/avagin/linux-task-diag/commits/task-diag-v3-devel v3-devel], [https://lkml.org/lkml/2015/7/6/142 v2], [http://lwn.net/Articles/633622/ v1] || kernel: add a netlink interface to get information about processes || ?&lt;br /&gt;
|-&lt;br /&gt;
|[https://lkml.org/lkml/2016/6/28/801 lkml] || fs: allow to use dirfd as root for openat and other *at syscalls || ?&lt;br /&gt;
|-&lt;br /&gt;
|[https://lkml.org/lkml/2017/1/23/712 lkml] || [PATCH] mnt: allow to add a mount into an existing group || &lt;br /&gt;
|-&lt;br /&gt;
|{{linux-next.git|280e87e98c}} || ARM32: Support mremap() for sigpage/vDSO || [http://www.armlinux.org.uk/developer/patches/viewpatch.php?id=8683/1 in arm-tree]&lt;br /&gt;
|-&lt;br /&gt;
|[https://lkml.org/lkml/2017/4/14/138 lkml] || ARM/shmem: Drop page coloring align for non-VIPT CPUs || ?&lt;br /&gt;
|-&lt;br /&gt;
|[https://lkml.org/lkml/2017/5/9/634 lkml] || fs: add an ioctl to get an owning userns for a superblock || ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Merged patches ==&lt;br /&gt;
&lt;br /&gt;
This table lists CRIU-related kernel commits already merged to vanilla.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; class=&amp;quot;unsortable&amp;quot; | Commit&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; class=&amp;quot;unsortable&amp;quot; | Description&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Kernel version&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|7773fbc541}} || procfs: make proc_get_link to use dentry instead of inode || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|640708a2cf}} || procfs: introduce the /proc/&amp;lt;pid&amp;gt;/map_files/ directory || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|067bce1a06}} || c/r: introduce CHECKPOINT_RESTORE symbol || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|028ee4be34}} || c/r: prctl: add PR_SET_MM codes to set up mm_struct entries || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b3f7f573a2}} || c/r: procfs: add start_data, end_data, start_brk members to /proc/$pid/stat v4 || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b8f566b04d}} || sysctl: add the kernel.ns_last_pid control || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|c9da99e647}} || unix_diag: Fixup RQLEN extension report || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|885ee74d5d}} || af_unix: Move CINQ/COUTQ code to helpers || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|257b529876}} || unix_diag: Add the MEMINFO extension || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|c0636faa53}} || inet_diag: Add the SKMEMINFO extension || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|5d2e5f274f}} || sock_diag: Introduce the meminfo nla core (v2) || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|288461e154}} || unix_diag: Include unix_diag.h into header-y target || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|e6fe2371bd}} || sock_diag: Arrange sock_diag.h such that it is exportable to userspace || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|e09e9d189b}} || unix: If we happen to find peer NULL when diag dumping, write zero. || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|3b0723c12e}} || unix_diag: Fix incoming connections nla length  || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|2ea744a583}} || net: unix -- Add missing module.h inclusion || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|5d531aaa64}} || unix_diag: Write it into kbuild || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|cbf391958a}} || unix_diag: Receive queue lenght NLA || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|2aac7a2cb0}} || unix_diag: Pending connections IDs NLA || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|ac02be8d96}} || unix_diag: Unix peer inode NLA || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|5f7b056946}} || unix_diag: Unix inode info NLA || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|f5248b48a6}} || unix_diag: Unix socket name NLA || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|5d3cae8bc3}} || unix_diag: Dumping exact socket core || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|45a96b9be6}} || unix_diag: Dumping all sockets core || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|22931d3b90}} || unix_diag: Basic module skeleton || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|fa7ff56f75}} || af_unix: Export stuff required for diag module || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|f65c1b534b}} || sock_diag: Generalize requests cookies managements || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|aec8dc62f6}} || sock_diag: Fix module netlink aliases || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|e7c466e58e}} || sock_diag: Move the SOCK_DIAG_BY_FAMILY cmd declaration || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|86e62ad6b2}} || udp_diag: Fix the !ipv6 case || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|b872a2371f}} || udp_diag: Make it module when ipv6 is a module || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|507dd7961e}} || udp_diag: Wire the udp_diag module into kbuild || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|b6d640c228}} || udp_diag: Implement the dump-all functionality || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|a925aa00a5}} || udp_diag: Implement the get_exact dumping functionality || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|52b7c59bc3}} || udp_diag: Basic skeleton || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|fce823381e}} || udp: Export code sk lookup routines || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|1942c518ca}} || inet_diag: Generalize inet_diag dump and get_exact calls || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|3c4d05c805}} || inet_diag: Introduce the inet socket dumping routine || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|8d07d1518a}} || inet_diag: Introduce the byte-code run on an inet socket || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|efb3cb428d}} || inet_diag: Split inet_diag_get_exact into parts || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|476f7dbff3}} || inet_diag: Split inet_diag_get_exact into parts || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|b005ab4ef8}} || inet_diag: Export inet diag cookie checking routine || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|87c22ea52e}} || inet_diag: Reduce the number of args for bytecode run routine || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|7b35eadd7e}} || inet_diag: Remove indirect sizeof from inet diag handlers || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|8ef874bfc7}} || sock_diag: Move the sock_ code to net/core/ || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|a029fe26b6}} || inet_diag: Cleanup type2proto last user || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|d23deaa07b}} || inet_diag: Introduce socket family checks || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|25c4cd2b6d}} || inet_diag: Switch the _dump to work with new header || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|fe50ce2846}} || inet_diag: Switch the _get_exact to work with new header || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|126fdc3249}} || inet_diag: Introduce new inet_diag_req header || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|d366477a52}} || sock_diag: Initial skeleton || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|f13c95f0e2}} || inet_diag: Switch from _GETSOCK to IPPROTO_ numbers || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|37f352b5e3}} || inet_diag: Move byte-code finding up the call-stack || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|8d34172dfd}} || sock_diag: Introduce new message type || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|818411616b}} || fs, proc: Introduce /proc/&amp;lt;pid&amp;gt;/task/&amp;lt;tid&amp;gt;/children entry v9 || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|5b172087f9}} || c/r: procfs: add arg_start/end, env_start/end and exit_code members || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|fe8c7f5cbf}} || c/r: prctl: Extend PR_SET_MM to set up more mm_struct entries || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|d97b46a646}} || syscalls, x86: Add __NR_kcmp syscall || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b32dfe3771}} || c/r: prctl: Add ability to set new mm_struct::exe_file || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|79f0713d40}} || prctl: Use CAP_SYS_RESOURCE for PR_SET_MM option || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|300f786b26}} || prctl: add ability to get clear_tid_address || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|4934b0329f}} || datagram: Factor out sk queue referencing || 3.4&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|3f518bf745}} || datagram: Add offset argument to __skb_recv_datagram || 3.4&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|da5ef6e51b}} || skb: Add skb_peek_next helper || 3.4&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ef64a54f6e}} || sock: Introduce the SO_PEEK_OFF sock option || 3.4&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|f55bb7f9cb}} || unix: Support peeking offset for datagram and seqpacket sockets || 3.4&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|fc0d753641}} || unix: Support peeking offset for stream sockets || 3.4&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|1d151c337d}} || fcntl: Add F_GETOWNER_UIDS option v3 || 3.6&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|370816aef0}} || tcp: Move code around || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ee9952831c}} || tcp: Initial repair mode || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c0e88ff0f2}} || tcp: Repair socket queues || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|5e6a3ce657}} || tcp: Report mss_clamp with TCP_MAXSEG option in repair mode || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b139ba4e90}} || tcp: Repair connection-time negotiated parameters || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|de248a75c3}} || tcp repair: Fix unaligned access when repairing options (v2) || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|736f24d5e5}} || c/r: prctl: Drop VMA flags test on PR_SET_MM_ stack data assignment || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|5702c5eeab}} || c/r: prctl: Move PR_GET_TID_ADDRESS to a proper place || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|16fbdce62d}} || proc: report file/anon bit in /proc/pid/pagemap || 3.4&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|bca1554373}} || proc/smaps: show amount of nonlinear ptes in vma || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b14f243a42}} || net: Dont use ifindices in hash fns || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|9c7dafbfab}} || net: Allow to create links with given ifindex || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|e6f8f1a739}} || veth: Allow to create peer link with given ifindex || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|aa79e66eee}} || net: Make ifindex generation per-net namespace || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|1fb9489bf1}} || net: Loopback ifindex is constant now || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|faf60af17f}} || procfs: Move /proc/pid/fd[info] handling code to fd.[ch] || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ddd3e0771b}} || procfs: Convert /proc/pid/fdinfo/ handling routines to seq-file || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|55985dd72a}} || procfs: Add ability to plug in auxiliary fdinfo providers || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|cbac5542d4}} || fs, eventfd: Add procfs fdinfo helper || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|138d22b586}} || fs, epoll: Add procfs fdinfo helper v2 || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|711c7bf991}} || fs, exportfs: Add export_encode_inode_fh helper || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|be77196b80}} || fs, notify: Add procfs fdinfo helper || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|e6dbcafb74}} || fs, fanotify: Add @mflags field to fanotify output || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|2787b04b6c}} || packet: Introduce net/packet/internal.h header || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|96ec632714}} || packet: Diag core and basic socket info dumping || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|8a360be0c5}} || packet: Report more packet sk info via diag module || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|eea68e2f1a}} || packet: Report socket mclist info via diag module || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|16f01365fa}} || packet: Report rings cfg via diag engine || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|fff3321d75}} || packet: Report fanout status via diag engine || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|0fa7fa98db}} || packet: Protect packet sk list with mutex (v2) || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|579035dc5d}} || kernel: limit a value of ns_last_pid to (0, max_pid) || 3.6&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|bc26ccd8fc}} || tcp: restore rcv_wscale in a repair mode (v2) || 3.6&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|f7b86bfe8d}} || sockopt: Make SO_BINDTODEVICE readable || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|e4e541a848}} || sock-diag: Report shutdown for inet and unix sockets (v2) || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|834f82e2aa}} || procfs: add VmFlags field in smaps output || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|06026d911c}} || tty: pty - Move TIOCPKT handling into pty.c || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c6298038bc}} || tty, ioctls -- Add new ioctl definitions for tty flags fetching || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|84fd7bdf12}} || tty: Add get- ioctls to fetch tty status v3 || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|a8fc927780}} || sk-filter: Add ability to get socket filter program (v2) || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|cacb6ba0f3}} || net: inet_diag -- Return error code if protocol handler is missed || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c454e6111d}} || tcp-repair: Handle zero-length data put in rcv queue || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ec34232575}} || tcp: fix retransmission in repair mode || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|2b9164771e}} || ipv6: adapt connect for repair move || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c91f6df2db}} || sockopt: Change getsockopt() of SO_BINDTODEVICE to return an interface name || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|3fcfe78658}} || ipc: add more comments to message copying related code || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|51eeacaa07}} || ipc: simplify message copying || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b30efe2775}} || ipc: convert prepare_copy() from macro to function || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|85398aa8de}} || ipc: simplify free_copy() call || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|3a665531a3}} || selftests: IPC message queue copy feature test || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|4a674f34ba}} || ipc: introduce message queue copy feature || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|f9dd87f473}} || ipc: message queue receive cleanup || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|03f5956680}} || ipc: add sysctl to specify desired next object id || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|9afdacda02}} || ipc: remove forced assignment of selected message || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|3f7d1fe108}} || arm: Wire up kcmp syscall || 3.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|1e142b29e2}} || kcmp: make it depend on CHECKPOINT_RESTORE || 3.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ceaa1fef65}} || tcp: adding a per-socket timestamp offset || 3.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|93be6ce0e9}} || tcp: set and get per-socket timestamp || 3.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ee684b6f28}} || tcp: send packets with a socket timestamp || 3.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|66dd34ad}} || signal: allow to send any siginfo to itself || 3.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ae5fc987}} || net: fix *_DIAG_MAX constants || 3.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|0f29c768}} || net: prepare netlink code for netlink diag || 3.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|eaaa3139}} || netlink: Diag core and basic socket info dumping (v2) || 3.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|84c751bd}} || ptrace: add ability to retrieve signals without removing from a queue (v4) || 3.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|040fa020}} || clear_refs: Sanitize accepted commands declaration || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|af9de7eb}} || clear_refs: Introduce private struct for mm_walk || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|2b0a9f01}} || pagemap-introduce-pagemap_entry_t-without-pmshift-bits || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|0f8975ec}} || mm: soft-dirty bits for user memory changes tracking || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|541c237c}} || pagemap: prepare to reuse constant bits with page-shift || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|57b8015e}} || posix-timers: Show sigevent info in proc file || 3.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|48f6a7a5}} || posix-timers: Introduce /proc/PID/timers file || 3.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|5ed67f05}} || posix timers: Allocate timer id per process (v2) || 3.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|15ef0298}} || posix-timers: Show clock ID in proc file || 3.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|29000cae}} || ptrace: add ability to get/set signal-blocked mask (v2) || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|274038f8}} || tun: Report &amp;quot;persist&amp;quot; flag to userspace || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|179ef71c}} || mm: Save soft-dirty bits on swapped pages || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|41bb3476}} || mm: Save soft-dirty bits on file pages || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|76975e9c}} || tun: Get skfilter layout || 3.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|849c9b6f}} || tun: Allow to skip filter on attach || 3.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|3d407a80}} || tun: Report whether the queue is attached or not || 3.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|fb7589a1}} || tun: Add ability to create tun device with given index || 3.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|e3e12028}} || tcp: don't apply tsoffset if rcv_tsecr is zero || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c7781a6e}} || tcp: initialize rcv_tstamp for restored sockets || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|7ed5c5ae}} || tcp: set timestamps for restored skb-s || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|6dec97dc}} || mm: move_ptes -- Set soft dirty bit depending on pte type || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c3d16e16}} || mm: migration -- Do not loose soft dirty bit if page is in migration state || 3.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|e9cdd6e7}} || mm: pagemap -- Inspect _PAGE_SOFT_DIRTY only on present pages || 3.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|dbde4979}} || tcp: don't update snd_nxt, when a socket is switched from repair mode || 3.13&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|d9104d1c}} || mm: track vma changes with VM_SOFTDIRTY bit || 3.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|34228d47}} || mm: Ignore VM_SOFTDIRTY on VMA merging || 3.14, 3.13-stable&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|24f91eba1}} || mm: don't lose the SOFT_DIRTY flag on mprotect || 3.14, 3.13-stable&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|49d063cb3}} || proc: show mnt_id in /proc/pid/fdinfo || 3.15&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|0bf073315}} || mm: Make freshly remapped file pages being softdirty unconditionally || 3.16&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|9aed8614a}} || mm: Don't forget to set softdirty on file mapped fault || 3.17&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b43790eed}} || mm: Don't forget to save file map softdiry bit on unmap || 3.16&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c86c97ff4}} || mm: Clear VM_SOFTDIRTY flag inside clear_refs_write instead of clear_soft_dirty || 3.16&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|af9c4957c}} || timerfd: Implement show_fdinfo method || 3.17&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|854d06d9f}} || docs: Procfs -- Document timerfd output || 3.17&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|5442e9fbd}} || timerfd: Implement timerfd_ioctl method to restore timerfd_ctx::ticks, v3 || 3.17&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|64e455079}} || mm: softdirty: enable write notifications on VMAs after VM_SOFTDIRTY cleared || 3.18&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|9c5990240}} || mm: introduce check_data_rlimit helper || 3.18&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|8764b338b}} || mm: use may_adjust_brk helper || 3.18&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|71fe97e18}} || prctl: PR_SET_MM -- factor out mmap_sem when updating mm::exe_file || 3.18&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|f606b77f1}} || prctl: PR_SET_MM -- introduce PR_SET_MM_MAP operation || 3.18&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|a3816ab0e}} || fs: Convert show_fdinfo functions to void || 3.19&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|9183df25f}} || shm: add memfd_create() syscall || 3.17&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|e4a0d3e72}} || aio: Make it possible to remap aio ring || 3.19&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|6c8c90319}} || proc: show locks in /proc/pid/fdinfo/X || 4.1&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|155e35d4d}} || VFS: Introduce inode-getting helpers for layered/unioned fs environments || 4.0&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|df1a085af}} || VFS: Add a fallthrough flag for marking virtual dentries || 4.0&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|f25801ee4}} || overlay: Call ovl_drop_write() earlier in ovl_dentry_open() || 4.2-rc2&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|4bacc9c92}} || overlayfs: Make f_path always point to the overlay and f_inode to the underlay || 4.2-rc2&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|9391dd00d}} || fix a braino in ovl_d_select_inode() || 4.2-rc2&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|13c4a9011}} || seccomp: add ptrace options for suspend/resume || 4.3-rc1&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|bab189918}} || bpf, seccomp: prepare for upcoming criu support || 4.4-rc1&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|f8e529ed9}} || seccomp, ptrace: add support for dumping seccomp filters || 4.4-rc1&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c83aa55d0}} || autofs: show pipe inode in mount options || 4.6-rc4&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b1ed4c4fa}} || tcp: add an ability to dump and restore window parameters || 4.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b059a453b}} || x86/vdso: Add mremap hook to vm_special_mapping || 4.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|f80fd3a5f}} || selftests/x86: Add vDSO mremap() test || 4.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|e38447ee1}} || x86/vdso: Unmap vdso blob on vvar mapping failure || 4.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|576ebfefd}} || x86/vdso: Replace calculate_addr in map_vdso() with addr || 4.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|2eefd8789}} || x86/arch_prctl/vdso: Add ARCH_MAP_VDSO_* || 4.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|90954e7b9}} || x86/coredump: Use pr_reg size, rather that TIF_IA32 flag || 4.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|cc87324b3}} || x86/ptrace: Down with test_thread_flag(TIF_IA32) || 4.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|684635105}} || x86/signal: Add SA_{X32,IA32}_ABI sa_flags || 4.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ed1e7db33}} || x86/signal: Remove bogus user_64bit_mode() check from sigaction_compat_abi() || v4.9-rc2&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|7b2dd3682}} || x86/coredump: Always use user_regs_struct for compat_elf_gregset_t || v4.9-rc7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|432490f9d}} || net: ip, diag -- Add diag interface for raw sockets || v4.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|cd05a0eca}} || net: ip, raw_diag -- Fix socket leaking for destroy request || v4.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|3de864f8c}} || net: ip, diag -- Adjust raw_abort to use unlocked __udp_disconnect || v4.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|9999370fa}} || net: ip, raw_diag -- Use jump for exiting from nested loop || v4.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c62cce2ca}} || net: add an ioctl to get a socket network namespace || v4.10-rc1&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|319b0534b9}} || tcp: allow to enable the repair mode for non-listening sockets || v4.10-rc1&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|ba94f3088b}} || unix: add ioctl to open a unix socket file with O_PATH ||&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|6a0b41d1e2}} || x86/mm: Introduce arch_rnd() to compute 32/64 mmap random base || 4.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|8f3e474f3c}} || x86/mm: Add task_size parameter to mmap_base() || 4.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|1b028f784e}} || x86/mm: Introduce mmap_compat_base() for 32-bit mmap() || 4.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|3e6ef9c809}} || x86/mm: Make mmap(MAP_32BIT) work correctly || 4.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|e13b73dd9c}} || x86/hugetlb: Adjust to the new native/compat mmap bases || 4.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ada26481df}} || x86/mm: Make in_compat_syscall() work during exec || 4.12&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>Dsafonov</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=Upstream_kernel_commits&amp;diff=4272</id>
		<title>Upstream kernel commits</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=Upstream_kernel_commits&amp;diff=4272"/>
		<updated>2017-06-22T11:29:53Z</updated>

		<summary type="html">&lt;p&gt;Dsafonov: /* Pending patches */ Remove ia32 selftest - it wasn't applied and I will not push it hardly&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!--&lt;br /&gt;
  NOTE: to figure out which kernel version a commit was included into, please use&lt;br /&gt;
  git describe --contains COMMITID&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Pending patches ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Reference&lt;br /&gt;
! Description&lt;br /&gt;
! Status&lt;br /&gt;
|-&lt;br /&gt;
|[https://github.com/avagin/linux-task-diag/commits/task-diag-v3-devel v3-devel], [https://lkml.org/lkml/2015/7/6/142 v2], [http://lwn.net/Articles/633622/ v1] || kernel: add a netlink interface to get information about processes || ?&lt;br /&gt;
|-&lt;br /&gt;
|[https://lkml.org/lkml/2016/6/28/801 lkml] || fs: allow to use dirfd as root for openat and other *at syscalls || ?&lt;br /&gt;
|-&lt;br /&gt;
|[https://lkml.org/lkml/2017/1/23/712 lkml] || [PATCH] mnt: allow to add a mount into an existing group || &lt;br /&gt;
|-&lt;br /&gt;
|[https://lkml.org/lkml/2017/4/14/139 lkml] || ARM32: Support mremap() for sigpage/vDSO || [http://www.armlinux.org.uk/developer/patches/viewpatch.php?id=8683/1 in arm-tree]&lt;br /&gt;
|-&lt;br /&gt;
|[https://lkml.org/lkml/2017/4/14/138 lkml] || ARM/shmem: Drop page coloring align for non-VIPT CPUs || ?&lt;br /&gt;
|-&lt;br /&gt;
|[https://lkml.org/lkml/2017/5/9/634 lkml] || fs: add an ioctl to get an owning userns for a superblock || ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Merged patches ==&lt;br /&gt;
&lt;br /&gt;
This table lists CRIU-related kernel commits already merged to vanilla.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; class=&amp;quot;unsortable&amp;quot; | Commit&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; class=&amp;quot;unsortable&amp;quot; | Description&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Kernel version&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|7773fbc541}} || procfs: make proc_get_link to use dentry instead of inode || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|640708a2cf}} || procfs: introduce the /proc/&amp;lt;pid&amp;gt;/map_files/ directory || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|067bce1a06}} || c/r: introduce CHECKPOINT_RESTORE symbol || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|028ee4be34}} || c/r: prctl: add PR_SET_MM codes to set up mm_struct entries || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b3f7f573a2}} || c/r: procfs: add start_data, end_data, start_brk members to /proc/$pid/stat v4 || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b8f566b04d}} || sysctl: add the kernel.ns_last_pid control || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|c9da99e647}} || unix_diag: Fixup RQLEN extension report || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|885ee74d5d}} || af_unix: Move CINQ/COUTQ code to helpers || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|257b529876}} || unix_diag: Add the MEMINFO extension || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|c0636faa53}} || inet_diag: Add the SKMEMINFO extension || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|5d2e5f274f}} || sock_diag: Introduce the meminfo nla core (v2) || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|288461e154}} || unix_diag: Include unix_diag.h into header-y target || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|e6fe2371bd}} || sock_diag: Arrange sock_diag.h such that it is exportable to userspace || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|e09e9d189b}} || unix: If we happen to find peer NULL when diag dumping, write zero. || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|3b0723c12e}} || unix_diag: Fix incoming connections nla length  || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|2ea744a583}} || net: unix -- Add missing module.h inclusion || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|5d531aaa64}} || unix_diag: Write it into kbuild || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|cbf391958a}} || unix_diag: Receive queue lenght NLA || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|2aac7a2cb0}} || unix_diag: Pending connections IDs NLA || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|ac02be8d96}} || unix_diag: Unix peer inode NLA || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|5f7b056946}} || unix_diag: Unix inode info NLA || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|f5248b48a6}} || unix_diag: Unix socket name NLA || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|5d3cae8bc3}} || unix_diag: Dumping exact socket core || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|45a96b9be6}} || unix_diag: Dumping all sockets core || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|22931d3b90}} || unix_diag: Basic module skeleton || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|fa7ff56f75}} || af_unix: Export stuff required for diag module || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|f65c1b534b}} || sock_diag: Generalize requests cookies managements || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|aec8dc62f6}} || sock_diag: Fix module netlink aliases || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|e7c466e58e}} || sock_diag: Move the SOCK_DIAG_BY_FAMILY cmd declaration || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|86e62ad6b2}} || udp_diag: Fix the !ipv6 case || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|b872a2371f}} || udp_diag: Make it module when ipv6 is a module || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|507dd7961e}} || udp_diag: Wire the udp_diag module into kbuild || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|b6d640c228}} || udp_diag: Implement the dump-all functionality || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|a925aa00a5}} || udp_diag: Implement the get_exact dumping functionality || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|52b7c59bc3}} || udp_diag: Basic skeleton || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|fce823381e}} || udp: Export code sk lookup routines || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|1942c518ca}} || inet_diag: Generalize inet_diag dump and get_exact calls || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|3c4d05c805}} || inet_diag: Introduce the inet socket dumping routine || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|8d07d1518a}} || inet_diag: Introduce the byte-code run on an inet socket || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|efb3cb428d}} || inet_diag: Split inet_diag_get_exact into parts || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|476f7dbff3}} || inet_diag: Split inet_diag_get_exact into parts || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|b005ab4ef8}} || inet_diag: Export inet diag cookie checking routine || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|87c22ea52e}} || inet_diag: Reduce the number of args for bytecode run routine || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|7b35eadd7e}} || inet_diag: Remove indirect sizeof from inet diag handlers || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|8ef874bfc7}} || sock_diag: Move the sock_ code to net/core/ || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|a029fe26b6}} || inet_diag: Cleanup type2proto last user || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|d23deaa07b}} || inet_diag: Introduce socket family checks || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|25c4cd2b6d}} || inet_diag: Switch the _dump to work with new header || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|fe50ce2846}} || inet_diag: Switch the _get_exact to work with new header || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|126fdc3249}} || inet_diag: Introduce new inet_diag_req header || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|d366477a52}} || sock_diag: Initial skeleton || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|f13c95f0e2}} || inet_diag: Switch from _GETSOCK to IPPROTO_ numbers || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|37f352b5e3}} || inet_diag: Move byte-code finding up the call-stack || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|8d34172dfd}} || sock_diag: Introduce new message type || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|818411616b}} || fs, proc: Introduce /proc/&amp;lt;pid&amp;gt;/task/&amp;lt;tid&amp;gt;/children entry v9 || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|5b172087f9}} || c/r: procfs: add arg_start/end, env_start/end and exit_code members || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|fe8c7f5cbf}} || c/r: prctl: Extend PR_SET_MM to set up more mm_struct entries || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|d97b46a646}} || syscalls, x86: Add __NR_kcmp syscall || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b32dfe3771}} || c/r: prctl: Add ability to set new mm_struct::exe_file || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|79f0713d40}} || prctl: Use CAP_SYS_RESOURCE for PR_SET_MM option || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|300f786b26}} || prctl: add ability to get clear_tid_address || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|4934b0329f}} || datagram: Factor out sk queue referencing || 3.4&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|3f518bf745}} || datagram: Add offset argument to __skb_recv_datagram || 3.4&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|da5ef6e51b}} || skb: Add skb_peek_next helper || 3.4&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ef64a54f6e}} || sock: Introduce the SO_PEEK_OFF sock option || 3.4&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|f55bb7f9cb}} || unix: Support peeking offset for datagram and seqpacket sockets || 3.4&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|fc0d753641}} || unix: Support peeking offset for stream sockets || 3.4&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|1d151c337d}} || fcntl: Add F_GETOWNER_UIDS option v3 || 3.6&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|370816aef0}} || tcp: Move code around || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ee9952831c}} || tcp: Initial repair mode || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c0e88ff0f2}} || tcp: Repair socket queues || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|5e6a3ce657}} || tcp: Report mss_clamp with TCP_MAXSEG option in repair mode || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b139ba4e90}} || tcp: Repair connection-time negotiated parameters || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|de248a75c3}} || tcp repair: Fix unaligned access when repairing options (v2) || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|736f24d5e5}} || c/r: prctl: Drop VMA flags test on PR_SET_MM_ stack data assignment || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|5702c5eeab}} || c/r: prctl: Move PR_GET_TID_ADDRESS to a proper place || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|16fbdce62d}} || proc: report file/anon bit in /proc/pid/pagemap || 3.4&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|bca1554373}} || proc/smaps: show amount of nonlinear ptes in vma || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b14f243a42}} || net: Dont use ifindices in hash fns || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|9c7dafbfab}} || net: Allow to create links with given ifindex || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|e6f8f1a739}} || veth: Allow to create peer link with given ifindex || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|aa79e66eee}} || net: Make ifindex generation per-net namespace || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|1fb9489bf1}} || net: Loopback ifindex is constant now || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|faf60af17f}} || procfs: Move /proc/pid/fd[info] handling code to fd.[ch] || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ddd3e0771b}} || procfs: Convert /proc/pid/fdinfo/ handling routines to seq-file || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|55985dd72a}} || procfs: Add ability to plug in auxiliary fdinfo providers || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|cbac5542d4}} || fs, eventfd: Add procfs fdinfo helper || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|138d22b586}} || fs, epoll: Add procfs fdinfo helper v2 || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|711c7bf991}} || fs, exportfs: Add export_encode_inode_fh helper || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|be77196b80}} || fs, notify: Add procfs fdinfo helper || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|e6dbcafb74}} || fs, fanotify: Add @mflags field to fanotify output || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|2787b04b6c}} || packet: Introduce net/packet/internal.h header || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|96ec632714}} || packet: Diag core and basic socket info dumping || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|8a360be0c5}} || packet: Report more packet sk info via diag module || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|eea68e2f1a}} || packet: Report socket mclist info via diag module || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|16f01365fa}} || packet: Report rings cfg via diag engine || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|fff3321d75}} || packet: Report fanout status via diag engine || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|0fa7fa98db}} || packet: Protect packet sk list with mutex (v2) || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|579035dc5d}} || kernel: limit a value of ns_last_pid to (0, max_pid) || 3.6&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|bc26ccd8fc}} || tcp: restore rcv_wscale in a repair mode (v2) || 3.6&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|f7b86bfe8d}} || sockopt: Make SO_BINDTODEVICE readable || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|e4e541a848}} || sock-diag: Report shutdown for inet and unix sockets (v2) || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|834f82e2aa}} || procfs: add VmFlags field in smaps output || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|06026d911c}} || tty: pty - Move TIOCPKT handling into pty.c || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c6298038bc}} || tty, ioctls -- Add new ioctl definitions for tty flags fetching || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|84fd7bdf12}} || tty: Add get- ioctls to fetch tty status v3 || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|a8fc927780}} || sk-filter: Add ability to get socket filter program (v2) || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|cacb6ba0f3}} || net: inet_diag -- Return error code if protocol handler is missed || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c454e6111d}} || tcp-repair: Handle zero-length data put in rcv queue || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ec34232575}} || tcp: fix retransmission in repair mode || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|2b9164771e}} || ipv6: adapt connect for repair move || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c91f6df2db}} || sockopt: Change getsockopt() of SO_BINDTODEVICE to return an interface name || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|3fcfe78658}} || ipc: add more comments to message copying related code || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|51eeacaa07}} || ipc: simplify message copying || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b30efe2775}} || ipc: convert prepare_copy() from macro to function || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|85398aa8de}} || ipc: simplify free_copy() call || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|3a665531a3}} || selftests: IPC message queue copy feature test || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|4a674f34ba}} || ipc: introduce message queue copy feature || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|f9dd87f473}} || ipc: message queue receive cleanup || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|03f5956680}} || ipc: add sysctl to specify desired next object id || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|9afdacda02}} || ipc: remove forced assignment of selected message || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|3f7d1fe108}} || arm: Wire up kcmp syscall || 3.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|1e142b29e2}} || kcmp: make it depend on CHECKPOINT_RESTORE || 3.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ceaa1fef65}} || tcp: adding a per-socket timestamp offset || 3.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|93be6ce0e9}} || tcp: set and get per-socket timestamp || 3.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ee684b6f28}} || tcp: send packets with a socket timestamp || 3.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|66dd34ad}} || signal: allow to send any siginfo to itself || 3.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ae5fc987}} || net: fix *_DIAG_MAX constants || 3.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|0f29c768}} || net: prepare netlink code for netlink diag || 3.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|eaaa3139}} || netlink: Diag core and basic socket info dumping (v2) || 3.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|84c751bd}} || ptrace: add ability to retrieve signals without removing from a queue (v4) || 3.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|040fa020}} || clear_refs: Sanitize accepted commands declaration || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|af9de7eb}} || clear_refs: Introduce private struct for mm_walk || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|2b0a9f01}} || pagemap-introduce-pagemap_entry_t-without-pmshift-bits || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|0f8975ec}} || mm: soft-dirty bits for user memory changes tracking || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|541c237c}} || pagemap: prepare to reuse constant bits with page-shift || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|57b8015e}} || posix-timers: Show sigevent info in proc file || 3.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|48f6a7a5}} || posix-timers: Introduce /proc/PID/timers file || 3.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|5ed67f05}} || posix timers: Allocate timer id per process (v2) || 3.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|15ef0298}} || posix-timers: Show clock ID in proc file || 3.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|29000cae}} || ptrace: add ability to get/set signal-blocked mask (v2) || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|274038f8}} || tun: Report &amp;quot;persist&amp;quot; flag to userspace || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|179ef71c}} || mm: Save soft-dirty bits on swapped pages || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|41bb3476}} || mm: Save soft-dirty bits on file pages || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|76975e9c}} || tun: Get skfilter layout || 3.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|849c9b6f}} || tun: Allow to skip filter on attach || 3.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|3d407a80}} || tun: Report whether the queue is attached or not || 3.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|fb7589a1}} || tun: Add ability to create tun device with given index || 3.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|e3e12028}} || tcp: don't apply tsoffset if rcv_tsecr is zero || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c7781a6e}} || tcp: initialize rcv_tstamp for restored sockets || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|7ed5c5ae}} || tcp: set timestamps for restored skb-s || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|6dec97dc}} || mm: move_ptes -- Set soft dirty bit depending on pte type || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c3d16e16}} || mm: migration -- Do not loose soft dirty bit if page is in migration state || 3.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|e9cdd6e7}} || mm: pagemap -- Inspect _PAGE_SOFT_DIRTY only on present pages || 3.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|dbde4979}} || tcp: don't update snd_nxt, when a socket is switched from repair mode || 3.13&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|d9104d1c}} || mm: track vma changes with VM_SOFTDIRTY bit || 3.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|34228d47}} || mm: Ignore VM_SOFTDIRTY on VMA merging || 3.14, 3.13-stable&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|24f91eba1}} || mm: don't lose the SOFT_DIRTY flag on mprotect || 3.14, 3.13-stable&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|49d063cb3}} || proc: show mnt_id in /proc/pid/fdinfo || 3.15&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|0bf073315}} || mm: Make freshly remapped file pages being softdirty unconditionally || 3.16&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|9aed8614a}} || mm: Don't forget to set softdirty on file mapped fault || 3.17&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b43790eed}} || mm: Don't forget to save file map softdiry bit on unmap || 3.16&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c86c97ff4}} || mm: Clear VM_SOFTDIRTY flag inside clear_refs_write instead of clear_soft_dirty || 3.16&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|af9c4957c}} || timerfd: Implement show_fdinfo method || 3.17&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|854d06d9f}} || docs: Procfs -- Document timerfd output || 3.17&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|5442e9fbd}} || timerfd: Implement timerfd_ioctl method to restore timerfd_ctx::ticks, v3 || 3.17&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|64e455079}} || mm: softdirty: enable write notifications on VMAs after VM_SOFTDIRTY cleared || 3.18&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|9c5990240}} || mm: introduce check_data_rlimit helper || 3.18&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|8764b338b}} || mm: use may_adjust_brk helper || 3.18&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|71fe97e18}} || prctl: PR_SET_MM -- factor out mmap_sem when updating mm::exe_file || 3.18&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|f606b77f1}} || prctl: PR_SET_MM -- introduce PR_SET_MM_MAP operation || 3.18&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|a3816ab0e}} || fs: Convert show_fdinfo functions to void || 3.19&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|9183df25f}} || shm: add memfd_create() syscall || 3.17&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|e4a0d3e72}} || aio: Make it possible to remap aio ring || 3.19&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|6c8c90319}} || proc: show locks in /proc/pid/fdinfo/X || 4.1&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|155e35d4d}} || VFS: Introduce inode-getting helpers for layered/unioned fs environments || 4.0&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|df1a085af}} || VFS: Add a fallthrough flag for marking virtual dentries || 4.0&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|f25801ee4}} || overlay: Call ovl_drop_write() earlier in ovl_dentry_open() || 4.2-rc2&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|4bacc9c92}} || overlayfs: Make f_path always point to the overlay and f_inode to the underlay || 4.2-rc2&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|9391dd00d}} || fix a braino in ovl_d_select_inode() || 4.2-rc2&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|13c4a9011}} || seccomp: add ptrace options for suspend/resume || 4.3-rc1&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|bab189918}} || bpf, seccomp: prepare for upcoming criu support || 4.4-rc1&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|f8e529ed9}} || seccomp, ptrace: add support for dumping seccomp filters || 4.4-rc1&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c83aa55d0}} || autofs: show pipe inode in mount options || 4.6-rc4&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b1ed4c4fa}} || tcp: add an ability to dump and restore window parameters || 4.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b059a453b}} || x86/vdso: Add mremap hook to vm_special_mapping || 4.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|f80fd3a5f}} || selftests/x86: Add vDSO mremap() test || 4.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|e38447ee1}} || x86/vdso: Unmap vdso blob on vvar mapping failure || 4.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|576ebfefd}} || x86/vdso: Replace calculate_addr in map_vdso() with addr || 4.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|2eefd8789}} || x86/arch_prctl/vdso: Add ARCH_MAP_VDSO_* || 4.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|90954e7b9}} || x86/coredump: Use pr_reg size, rather that TIF_IA32 flag || 4.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|cc87324b3}} || x86/ptrace: Down with test_thread_flag(TIF_IA32) || 4.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|684635105}} || x86/signal: Add SA_{X32,IA32}_ABI sa_flags || 4.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ed1e7db33}} || x86/signal: Remove bogus user_64bit_mode() check from sigaction_compat_abi() || v4.9-rc2&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|7b2dd3682}} || x86/coredump: Always use user_regs_struct for compat_elf_gregset_t || v4.9-rc7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|432490f9d}} || net: ip, diag -- Add diag interface for raw sockets || v4.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|cd05a0eca}} || net: ip, raw_diag -- Fix socket leaking for destroy request || v4.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|3de864f8c}} || net: ip, diag -- Adjust raw_abort to use unlocked __udp_disconnect || v4.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|9999370fa}} || net: ip, raw_diag -- Use jump for exiting from nested loop || v4.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c62cce2ca}} || net: add an ioctl to get a socket network namespace || v4.10-rc1&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|319b0534b9}} || tcp: allow to enable the repair mode for non-listening sockets || v4.10-rc1&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|ba94f3088b}} || unix: add ioctl to open a unix socket file with O_PATH ||&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|6a0b41d1e2}} || x86/mm: Introduce arch_rnd() to compute 32/64 mmap random base || 4.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|8f3e474f3c}} || x86/mm: Add task_size parameter to mmap_base() || 4.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|1b028f784e}} || x86/mm: Introduce mmap_compat_base() for 32-bit mmap() || 4.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|3e6ef9c809}} || x86/mm: Make mmap(MAP_32BIT) work correctly || 4.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|e13b73dd9c}} || x86/hugetlb: Adjust to the new native/compat mmap bases || 4.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ada26481df}} || x86/mm: Make in_compat_syscall() work during exec || 4.12&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>Dsafonov</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=Upstream_kernel_commits&amp;diff=4271</id>
		<title>Upstream kernel commits</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=Upstream_kernel_commits&amp;diff=4271"/>
		<updated>2017-06-21T19:27:13Z</updated>

		<summary type="html">&lt;p&gt;Dsafonov: /* Pending patches */ arm32: vdso mremap() is applied to Russell's arm-tree&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!--&lt;br /&gt;
  NOTE: to figure out which kernel version a commit was included into, please use&lt;br /&gt;
  git describe --contains COMMITID&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Pending patches ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Reference&lt;br /&gt;
! Description&lt;br /&gt;
! Status&lt;br /&gt;
|-&lt;br /&gt;
|[https://github.com/avagin/linux-task-diag/commits/task-diag-v3-devel v3-devel], [https://lkml.org/lkml/2015/7/6/142 v2], [http://lwn.net/Articles/633622/ v1] || kernel: add a netlink interface to get information about processes || ?&lt;br /&gt;
|-&lt;br /&gt;
|[https://lkml.org/lkml/2016/6/28/801 lkml] || fs: allow to use dirfd as root for openat and other *at syscalls || ?&lt;br /&gt;
|-&lt;br /&gt;
|[https://lkml.org/lkml/2017/1/23/712 lkml] || [PATCH] mnt: allow to add a mount into an existing group || &lt;br /&gt;
|-&lt;br /&gt;
|[https://lkml.org/lkml/2017/3/6/545 lkml] || [PATCHv6 5/5] selftests/x86: add test for 32-bit mmap() return addr || ?&lt;br /&gt;
|-&lt;br /&gt;
|[https://lkml.org/lkml/2017/4/14/139 lkml] || ARM32: Support mremap() for sigpage/vDSO || [http://www.armlinux.org.uk/developer/patches/viewpatch.php?id=8683/1 in arm-tree]&lt;br /&gt;
|-&lt;br /&gt;
|[https://lkml.org/lkml/2017/4/14/138 lkml] || ARM/shmem: Drop page coloring align for non-VIPT CPUs || ?&lt;br /&gt;
|-&lt;br /&gt;
|[https://lkml.org/lkml/2017/5/9/634 lkml] || fs: add an ioctl to get an owning userns for a superblock || ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Merged patches ==&lt;br /&gt;
&lt;br /&gt;
This table lists CRIU-related kernel commits already merged to vanilla.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; class=&amp;quot;unsortable&amp;quot; | Commit&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; class=&amp;quot;unsortable&amp;quot; | Description&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Kernel version&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|7773fbc541}} || procfs: make proc_get_link to use dentry instead of inode || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|640708a2cf}} || procfs: introduce the /proc/&amp;lt;pid&amp;gt;/map_files/ directory || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|067bce1a06}} || c/r: introduce CHECKPOINT_RESTORE symbol || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|028ee4be34}} || c/r: prctl: add PR_SET_MM codes to set up mm_struct entries || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b3f7f573a2}} || c/r: procfs: add start_data, end_data, start_brk members to /proc/$pid/stat v4 || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b8f566b04d}} || sysctl: add the kernel.ns_last_pid control || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|c9da99e647}} || unix_diag: Fixup RQLEN extension report || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|885ee74d5d}} || af_unix: Move CINQ/COUTQ code to helpers || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|257b529876}} || unix_diag: Add the MEMINFO extension || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|c0636faa53}} || inet_diag: Add the SKMEMINFO extension || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|5d2e5f274f}} || sock_diag: Introduce the meminfo nla core (v2) || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|288461e154}} || unix_diag: Include unix_diag.h into header-y target || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|e6fe2371bd}} || sock_diag: Arrange sock_diag.h such that it is exportable to userspace || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|e09e9d189b}} || unix: If we happen to find peer NULL when diag dumping, write zero. || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|3b0723c12e}} || unix_diag: Fix incoming connections nla length  || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|2ea744a583}} || net: unix -- Add missing module.h inclusion || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|5d531aaa64}} || unix_diag: Write it into kbuild || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|cbf391958a}} || unix_diag: Receive queue lenght NLA || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|2aac7a2cb0}} || unix_diag: Pending connections IDs NLA || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|ac02be8d96}} || unix_diag: Unix peer inode NLA || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|5f7b056946}} || unix_diag: Unix inode info NLA || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|f5248b48a6}} || unix_diag: Unix socket name NLA || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|5d3cae8bc3}} || unix_diag: Dumping exact socket core || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|45a96b9be6}} || unix_diag: Dumping all sockets core || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|22931d3b90}} || unix_diag: Basic module skeleton || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|fa7ff56f75}} || af_unix: Export stuff required for diag module || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|f65c1b534b}} || sock_diag: Generalize requests cookies managements || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|aec8dc62f6}} || sock_diag: Fix module netlink aliases || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|e7c466e58e}} || sock_diag: Move the SOCK_DIAG_BY_FAMILY cmd declaration || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|86e62ad6b2}} || udp_diag: Fix the !ipv6 case || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|b872a2371f}} || udp_diag: Make it module when ipv6 is a module || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|507dd7961e}} || udp_diag: Wire the udp_diag module into kbuild || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|b6d640c228}} || udp_diag: Implement the dump-all functionality || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|a925aa00a5}} || udp_diag: Implement the get_exact dumping functionality || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|52b7c59bc3}} || udp_diag: Basic skeleton || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|fce823381e}} || udp: Export code sk lookup routines || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|1942c518ca}} || inet_diag: Generalize inet_diag dump and get_exact calls || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|3c4d05c805}} || inet_diag: Introduce the inet socket dumping routine || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|8d07d1518a}} || inet_diag: Introduce the byte-code run on an inet socket || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|efb3cb428d}} || inet_diag: Split inet_diag_get_exact into parts || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|476f7dbff3}} || inet_diag: Split inet_diag_get_exact into parts || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|b005ab4ef8}} || inet_diag: Export inet diag cookie checking routine || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|87c22ea52e}} || inet_diag: Reduce the number of args for bytecode run routine || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|7b35eadd7e}} || inet_diag: Remove indirect sizeof from inet diag handlers || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|8ef874bfc7}} || sock_diag: Move the sock_ code to net/core/ || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|a029fe26b6}} || inet_diag: Cleanup type2proto last user || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|d23deaa07b}} || inet_diag: Introduce socket family checks || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|25c4cd2b6d}} || inet_diag: Switch the _dump to work with new header || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|fe50ce2846}} || inet_diag: Switch the _get_exact to work with new header || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|126fdc3249}} || inet_diag: Introduce new inet_diag_req header || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|d366477a52}} || sock_diag: Initial skeleton || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|f13c95f0e2}} || inet_diag: Switch from _GETSOCK to IPPROTO_ numbers || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|37f352b5e3}} || inet_diag: Move byte-code finding up the call-stack || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|8d34172dfd}} || sock_diag: Introduce new message type || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|818411616b}} || fs, proc: Introduce /proc/&amp;lt;pid&amp;gt;/task/&amp;lt;tid&amp;gt;/children entry v9 || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|5b172087f9}} || c/r: procfs: add arg_start/end, env_start/end and exit_code members || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|fe8c7f5cbf}} || c/r: prctl: Extend PR_SET_MM to set up more mm_struct entries || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|d97b46a646}} || syscalls, x86: Add __NR_kcmp syscall || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b32dfe3771}} || c/r: prctl: Add ability to set new mm_struct::exe_file || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|79f0713d40}} || prctl: Use CAP_SYS_RESOURCE for PR_SET_MM option || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|300f786b26}} || prctl: add ability to get clear_tid_address || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|4934b0329f}} || datagram: Factor out sk queue referencing || 3.4&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|3f518bf745}} || datagram: Add offset argument to __skb_recv_datagram || 3.4&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|da5ef6e51b}} || skb: Add skb_peek_next helper || 3.4&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ef64a54f6e}} || sock: Introduce the SO_PEEK_OFF sock option || 3.4&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|f55bb7f9cb}} || unix: Support peeking offset for datagram and seqpacket sockets || 3.4&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|fc0d753641}} || unix: Support peeking offset for stream sockets || 3.4&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|1d151c337d}} || fcntl: Add F_GETOWNER_UIDS option v3 || 3.6&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|370816aef0}} || tcp: Move code around || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ee9952831c}} || tcp: Initial repair mode || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c0e88ff0f2}} || tcp: Repair socket queues || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|5e6a3ce657}} || tcp: Report mss_clamp with TCP_MAXSEG option in repair mode || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b139ba4e90}} || tcp: Repair connection-time negotiated parameters || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|de248a75c3}} || tcp repair: Fix unaligned access when repairing options (v2) || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|736f24d5e5}} || c/r: prctl: Drop VMA flags test on PR_SET_MM_ stack data assignment || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|5702c5eeab}} || c/r: prctl: Move PR_GET_TID_ADDRESS to a proper place || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|16fbdce62d}} || proc: report file/anon bit in /proc/pid/pagemap || 3.4&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|bca1554373}} || proc/smaps: show amount of nonlinear ptes in vma || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b14f243a42}} || net: Dont use ifindices in hash fns || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|9c7dafbfab}} || net: Allow to create links with given ifindex || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|e6f8f1a739}} || veth: Allow to create peer link with given ifindex || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|aa79e66eee}} || net: Make ifindex generation per-net namespace || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|1fb9489bf1}} || net: Loopback ifindex is constant now || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|faf60af17f}} || procfs: Move /proc/pid/fd[info] handling code to fd.[ch] || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ddd3e0771b}} || procfs: Convert /proc/pid/fdinfo/ handling routines to seq-file || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|55985dd72a}} || procfs: Add ability to plug in auxiliary fdinfo providers || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|cbac5542d4}} || fs, eventfd: Add procfs fdinfo helper || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|138d22b586}} || fs, epoll: Add procfs fdinfo helper v2 || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|711c7bf991}} || fs, exportfs: Add export_encode_inode_fh helper || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|be77196b80}} || fs, notify: Add procfs fdinfo helper || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|e6dbcafb74}} || fs, fanotify: Add @mflags field to fanotify output || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|2787b04b6c}} || packet: Introduce net/packet/internal.h header || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|96ec632714}} || packet: Diag core and basic socket info dumping || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|8a360be0c5}} || packet: Report more packet sk info via diag module || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|eea68e2f1a}} || packet: Report socket mclist info via diag module || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|16f01365fa}} || packet: Report rings cfg via diag engine || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|fff3321d75}} || packet: Report fanout status via diag engine || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|0fa7fa98db}} || packet: Protect packet sk list with mutex (v2) || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|579035dc5d}} || kernel: limit a value of ns_last_pid to (0, max_pid) || 3.6&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|bc26ccd8fc}} || tcp: restore rcv_wscale in a repair mode (v2) || 3.6&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|f7b86bfe8d}} || sockopt: Make SO_BINDTODEVICE readable || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|e4e541a848}} || sock-diag: Report shutdown for inet and unix sockets (v2) || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|834f82e2aa}} || procfs: add VmFlags field in smaps output || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|06026d911c}} || tty: pty - Move TIOCPKT handling into pty.c || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c6298038bc}} || tty, ioctls -- Add new ioctl definitions for tty flags fetching || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|84fd7bdf12}} || tty: Add get- ioctls to fetch tty status v3 || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|a8fc927780}} || sk-filter: Add ability to get socket filter program (v2) || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|cacb6ba0f3}} || net: inet_diag -- Return error code if protocol handler is missed || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c454e6111d}} || tcp-repair: Handle zero-length data put in rcv queue || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ec34232575}} || tcp: fix retransmission in repair mode || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|2b9164771e}} || ipv6: adapt connect for repair move || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c91f6df2db}} || sockopt: Change getsockopt() of SO_BINDTODEVICE to return an interface name || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|3fcfe78658}} || ipc: add more comments to message copying related code || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|51eeacaa07}} || ipc: simplify message copying || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b30efe2775}} || ipc: convert prepare_copy() from macro to function || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|85398aa8de}} || ipc: simplify free_copy() call || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|3a665531a3}} || selftests: IPC message queue copy feature test || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|4a674f34ba}} || ipc: introduce message queue copy feature || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|f9dd87f473}} || ipc: message queue receive cleanup || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|03f5956680}} || ipc: add sysctl to specify desired next object id || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|9afdacda02}} || ipc: remove forced assignment of selected message || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|3f7d1fe108}} || arm: Wire up kcmp syscall || 3.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|1e142b29e2}} || kcmp: make it depend on CHECKPOINT_RESTORE || 3.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ceaa1fef65}} || tcp: adding a per-socket timestamp offset || 3.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|93be6ce0e9}} || tcp: set and get per-socket timestamp || 3.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ee684b6f28}} || tcp: send packets with a socket timestamp || 3.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|66dd34ad}} || signal: allow to send any siginfo to itself || 3.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ae5fc987}} || net: fix *_DIAG_MAX constants || 3.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|0f29c768}} || net: prepare netlink code for netlink diag || 3.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|eaaa3139}} || netlink: Diag core and basic socket info dumping (v2) || 3.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|84c751bd}} || ptrace: add ability to retrieve signals without removing from a queue (v4) || 3.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|040fa020}} || clear_refs: Sanitize accepted commands declaration || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|af9de7eb}} || clear_refs: Introduce private struct for mm_walk || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|2b0a9f01}} || pagemap-introduce-pagemap_entry_t-without-pmshift-bits || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|0f8975ec}} || mm: soft-dirty bits for user memory changes tracking || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|541c237c}} || pagemap: prepare to reuse constant bits with page-shift || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|57b8015e}} || posix-timers: Show sigevent info in proc file || 3.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|48f6a7a5}} || posix-timers: Introduce /proc/PID/timers file || 3.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|5ed67f05}} || posix timers: Allocate timer id per process (v2) || 3.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|15ef0298}} || posix-timers: Show clock ID in proc file || 3.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|29000cae}} || ptrace: add ability to get/set signal-blocked mask (v2) || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|274038f8}} || tun: Report &amp;quot;persist&amp;quot; flag to userspace || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|179ef71c}} || mm: Save soft-dirty bits on swapped pages || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|41bb3476}} || mm: Save soft-dirty bits on file pages || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|76975e9c}} || tun: Get skfilter layout || 3.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|849c9b6f}} || tun: Allow to skip filter on attach || 3.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|3d407a80}} || tun: Report whether the queue is attached or not || 3.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|fb7589a1}} || tun: Add ability to create tun device with given index || 3.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|e3e12028}} || tcp: don't apply tsoffset if rcv_tsecr is zero || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c7781a6e}} || tcp: initialize rcv_tstamp for restored sockets || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|7ed5c5ae}} || tcp: set timestamps for restored skb-s || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|6dec97dc}} || mm: move_ptes -- Set soft dirty bit depending on pte type || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c3d16e16}} || mm: migration -- Do not loose soft dirty bit if page is in migration state || 3.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|e9cdd6e7}} || mm: pagemap -- Inspect _PAGE_SOFT_DIRTY only on present pages || 3.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|dbde4979}} || tcp: don't update snd_nxt, when a socket is switched from repair mode || 3.13&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|d9104d1c}} || mm: track vma changes with VM_SOFTDIRTY bit || 3.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|34228d47}} || mm: Ignore VM_SOFTDIRTY on VMA merging || 3.14, 3.13-stable&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|24f91eba1}} || mm: don't lose the SOFT_DIRTY flag on mprotect || 3.14, 3.13-stable&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|49d063cb3}} || proc: show mnt_id in /proc/pid/fdinfo || 3.15&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|0bf073315}} || mm: Make freshly remapped file pages being softdirty unconditionally || 3.16&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|9aed8614a}} || mm: Don't forget to set softdirty on file mapped fault || 3.17&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b43790eed}} || mm: Don't forget to save file map softdiry bit on unmap || 3.16&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c86c97ff4}} || mm: Clear VM_SOFTDIRTY flag inside clear_refs_write instead of clear_soft_dirty || 3.16&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|af9c4957c}} || timerfd: Implement show_fdinfo method || 3.17&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|854d06d9f}} || docs: Procfs -- Document timerfd output || 3.17&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|5442e9fbd}} || timerfd: Implement timerfd_ioctl method to restore timerfd_ctx::ticks, v3 || 3.17&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|64e455079}} || mm: softdirty: enable write notifications on VMAs after VM_SOFTDIRTY cleared || 3.18&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|9c5990240}} || mm: introduce check_data_rlimit helper || 3.18&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|8764b338b}} || mm: use may_adjust_brk helper || 3.18&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|71fe97e18}} || prctl: PR_SET_MM -- factor out mmap_sem when updating mm::exe_file || 3.18&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|f606b77f1}} || prctl: PR_SET_MM -- introduce PR_SET_MM_MAP operation || 3.18&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|a3816ab0e}} || fs: Convert show_fdinfo functions to void || 3.19&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|9183df25f}} || shm: add memfd_create() syscall || 3.17&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|e4a0d3e72}} || aio: Make it possible to remap aio ring || 3.19&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|6c8c90319}} || proc: show locks in /proc/pid/fdinfo/X || 4.1&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|155e35d4d}} || VFS: Introduce inode-getting helpers for layered/unioned fs environments || 4.0&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|df1a085af}} || VFS: Add a fallthrough flag for marking virtual dentries || 4.0&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|f25801ee4}} || overlay: Call ovl_drop_write() earlier in ovl_dentry_open() || 4.2-rc2&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|4bacc9c92}} || overlayfs: Make f_path always point to the overlay and f_inode to the underlay || 4.2-rc2&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|9391dd00d}} || fix a braino in ovl_d_select_inode() || 4.2-rc2&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|13c4a9011}} || seccomp: add ptrace options for suspend/resume || 4.3-rc1&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|bab189918}} || bpf, seccomp: prepare for upcoming criu support || 4.4-rc1&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|f8e529ed9}} || seccomp, ptrace: add support for dumping seccomp filters || 4.4-rc1&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c83aa55d0}} || autofs: show pipe inode in mount options || 4.6-rc4&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b1ed4c4fa}} || tcp: add an ability to dump and restore window parameters || 4.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b059a453b}} || x86/vdso: Add mremap hook to vm_special_mapping || 4.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|f80fd3a5f}} || selftests/x86: Add vDSO mremap() test || 4.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|e38447ee1}} || x86/vdso: Unmap vdso blob on vvar mapping failure || 4.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|576ebfefd}} || x86/vdso: Replace calculate_addr in map_vdso() with addr || 4.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|2eefd8789}} || x86/arch_prctl/vdso: Add ARCH_MAP_VDSO_* || 4.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|90954e7b9}} || x86/coredump: Use pr_reg size, rather that TIF_IA32 flag || 4.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|cc87324b3}} || x86/ptrace: Down with test_thread_flag(TIF_IA32) || 4.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|684635105}} || x86/signal: Add SA_{X32,IA32}_ABI sa_flags || 4.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ed1e7db33}} || x86/signal: Remove bogus user_64bit_mode() check from sigaction_compat_abi() || v4.9-rc2&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|7b2dd3682}} || x86/coredump: Always use user_regs_struct for compat_elf_gregset_t || v4.9-rc7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|432490f9d}} || net: ip, diag -- Add diag interface for raw sockets || v4.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|cd05a0eca}} || net: ip, raw_diag -- Fix socket leaking for destroy request || v4.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|3de864f8c}} || net: ip, diag -- Adjust raw_abort to use unlocked __udp_disconnect || v4.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|9999370fa}} || net: ip, raw_diag -- Use jump for exiting from nested loop || v4.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c62cce2ca}} || net: add an ioctl to get a socket network namespace || v4.10-rc1&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|319b0534b9}} || tcp: allow to enable the repair mode for non-listening sockets || v4.10-rc1&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|ba94f3088b}} || unix: add ioctl to open a unix socket file with O_PATH ||&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|6a0b41d1e2}} || x86/mm: Introduce arch_rnd() to compute 32/64 mmap random base || 4.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|8f3e474f3c}} || x86/mm: Add task_size parameter to mmap_base() || 4.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|1b028f784e}} || x86/mm: Introduce mmap_compat_base() for 32-bit mmap() || 4.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|3e6ef9c809}} || x86/mm: Make mmap(MAP_32BIT) work correctly || 4.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|e13b73dd9c}} || x86/hugetlb: Adjust to the new native/compat mmap bases || 4.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ada26481df}} || x86/mm: Make in_compat_syscall() work during exec || 4.12&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>Dsafonov</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=32bit_tasks_C/R&amp;diff=4222</id>
		<title>32bit tasks C/R</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=32bit_tasks_C/R&amp;diff=4222"/>
		<updated>2017-05-18T18:50:25Z</updated>

		<summary type="html">&lt;p&gt;Dsafonov: Fixes for older kenels (vz-related) - done&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Compatible applications ==&lt;br /&gt;
&lt;br /&gt;
On x86_64 there are two types of compatible applications:&lt;br /&gt;
* ia32 - compiled to run on i686 target, can be executed on x86_64 with &amp;lt;code&amp;gt;IA32_EMULATION&amp;lt;/code&amp;gt; config option set.&lt;br /&gt;
* x32 - specially compiled binaries to run on x86_64 machine with &amp;lt;code&amp;gt;CONFIG_X86_X32&amp;lt;/code&amp;gt; config option set.&lt;br /&gt;
&lt;br /&gt;
Both of them uses 4 byte pointers thus can address no more than 4Gb of virtual memory.&amp;lt;br /&amp;gt;&lt;br /&gt;
But x32 uses full 64-bit register set (and thus can't be launched on i686 host natively).&amp;lt;br /&amp;gt;&lt;br /&gt;
Both of them requires additional environment on x86_64 as Glibc, libraries, and compiler support.&amp;lt;br /&amp;gt;&lt;br /&gt;
x32 is rarely distributed (at this moment only [https://wiki.debian.org/X32Port Debian x32 port can be easily found]).&amp;lt;br /&amp;gt;&lt;br /&gt;
So, CRIU will support ia32 C/R at this moment, x32 support may be quite easily added on top of ia32 as needed patches have already added in kernel with ia32 C/R support.&amp;lt;br /&amp;gt;&lt;br /&gt;
The following text uses ''compatible'' and ''32-bit'' in the meaning of ia32 applications unless otherwise specified.&lt;br /&gt;
&lt;br /&gt;
== Difference between native and compat applications ==&lt;br /&gt;
&lt;br /&gt;
From the CPU's point of view, 32-bit compatibility mode applications differ to 64-bit application by current CS (code segment selector): if corresponding value of L-bit from flags of entry in descriptors table is set the CPU will be in 64-bit mode when this segment descriptor is being used. There are some other differences between 32 and 64-bit selectors, one can read about them [https://www.malwaretech.com/2014/02/the-0x33-segment-selector-heavens-gate.html in the article &amp;quot;The 0x33 Segment Selector (Heavens Gate)&amp;quot;]. Code selectors for both bits are defined in kernel headers as &amp;lt;code&amp;gt;__USER32_CS&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;__USER_CS&amp;lt;/code&amp;gt; and corresponds to descriptors in GDT (Global Descriptors Table). One can change 64-bit mode to compatibility mode by swapping CS value (e.g., with longjump).&lt;br /&gt;
&lt;br /&gt;
From the Linux kernel's point of view, applications differ by values set during exec of application such as &amp;lt;code&amp;gt;mmap_base&amp;lt;/code&amp;gt; or thread info flags &amp;lt;code&amp;gt;TIF_ADDR32&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;TIF_IA32&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;TIF_X32&amp;lt;/code&amp;gt;.&lt;br /&gt;
Both native and compat applications can do 32 or 64-bit syscalls.&lt;br /&gt;
&lt;br /&gt;
== Mixed-bitness applications ==&lt;br /&gt;
&lt;br /&gt;
That's entirely possible with current kernel ABI to create mixed-bitness applications, which may be ''very'' entangled.&lt;br /&gt;
For example, one could set ''both'' 32-bit and 64-bit robust futex list pointers.&lt;br /&gt;
Or one can create multi-threaded application where some threads are executing 32-bit code, some 64-bit code.&lt;br /&gt;
&lt;br /&gt;
If we ever meet application of such mixed-bitness kind, the support may be added to CRIU quite easily, but it should be done under some compile-time config as it'll add more syscalls to usual C/R where they aren't needed.&lt;br /&gt;
&lt;br /&gt;
At this moment there is no plans to add such support and it's quite unlikely that we'll find such application in real world (non-syntetic test).&lt;br /&gt;
&lt;br /&gt;
== Approaches to C/R compatible applications ==&lt;br /&gt;
&lt;br /&gt;
C/R of compatible applications can be done differently, this section describes cons/pros of each, to address decision why C/R of 32-bit tasks done ''that'' way and not some other.&lt;br /&gt;
&lt;br /&gt;
=== Restore with exec() of 32-bit dummy binary vs from 64-bit CRIU ===&lt;br /&gt;
&lt;br /&gt;
Restore of 32-bit application can be done with some daemon that runs in 32-bit mode and communicates with CRIU binary (or 32-bit CRIU subprocess).&lt;br /&gt;
&lt;br /&gt;
'''Pros''':&lt;br /&gt;
* no kernel patches expected (not quite true: vDSO mremap() still needed support)&lt;br /&gt;
&lt;br /&gt;
'''Cons''':&lt;br /&gt;
* CRIU code base does not have special restore daemon to communicate with - code needs to be reworked&lt;br /&gt;
* 64-bit app can have 32-bit child, which could be a parent to 64-bit and so on - need to re-exec native 64-bit CRIU from 32-bit dummy (or 32-bit CRIU)&lt;br /&gt;
* need to send to the daemon properties of restoring processes, open fds to images, share memory with parsed ps_tree and so on... The number of IPC calls will slow down restore&lt;br /&gt;
* restoring becomes more complicated, and if looking forward to restoring user/pid sub-namespaces, it will be too entangled&lt;br /&gt;
* no optimized inheritance for task's properties those erase with exec()&lt;br /&gt;
* will need also another daemon for x32&lt;br /&gt;
&lt;br /&gt;
=== Restore with a flag to sigreturn() or arch_prctl() ===&lt;br /&gt;
&lt;br /&gt;
The initial attempt to do 32-bit C/R, was rejected by lkml community by many reasons. It should have swapped thread info flags (such as &amp;lt;code&amp;gt;TIF_ADDR32&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;TIF_IA32&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;TIF_X32&amp;lt;/code&amp;gt;), unmap native 64-bit vDSO blob from process's address space and map compatible 32-bit vDSO - all according to some bit in sigframe in &amp;lt;code&amp;gt;rt_sigreturn()&amp;lt;/code&amp;gt; call or some dedicated for it &amp;lt;code&amp;gt;arch_prctl()&amp;lt;/code&amp;gt; call.&lt;br /&gt;
&lt;br /&gt;
'''Pros''':&lt;br /&gt;
* Simple from the point of CRIU: just do sigreturn with a new bit set or call arch_prctl() and do sigreturn&lt;br /&gt;
&lt;br /&gt;
'''Cons''':&lt;br /&gt;
* If 32-bit vDSO image on restored host differ from dumped (in image), need to catch task after sigreturn and make jump trampolines separately - in case of arch_prctl() simpler ([https://lkml.org/lkml/2016/6/1/425 that's why arch_prctl was in initial RFC])&lt;br /&gt;
* Too many points of failure for one syscall, too complicated&lt;br /&gt;
* Just adding a way to swap those thread info flags from userspace would result in a new races/bugs (as e.g., TASK_SIZE macro depends on TIF_ADDR32, the mmap code may do unexpected things)&lt;br /&gt;
&lt;br /&gt;
After discussion in lkml, conclusion was: separate changing personality (like thread info flags) from API to map vDSO blobs, remove TIF_IA32 flag that differs 32 from 64-bit tasks and look on syscall's nature: compat syscall, x32 syscall or native syscall.&lt;br /&gt;
&lt;br /&gt;
=== Seizing with two 32-bit and 64-bit parasites ===&lt;br /&gt;
&lt;br /&gt;
'''Pros''':&lt;br /&gt;
* no 32-bit calls in 64-bit parasite and vice-versa&lt;br /&gt;
* no need in exit in parasite: ptrace code doesn't allow to set 32-bit regset to 64-bit task and the reverse, running parasite the same nature as task bereaves us from those limits&lt;br /&gt;
&lt;br /&gt;
'''Cons''':&lt;br /&gt;
* need to have two/three (for x32 also) blobs for seizing&lt;br /&gt;
* macros in makefiles to build two parasites&lt;br /&gt;
* serialization of parasite's answers: arguments to parasite differ in size - serialize them, which added not nice-looking and less readable C macros&lt;br /&gt;
&lt;br /&gt;
=== Current approach ===&lt;br /&gt;
&lt;br /&gt;
FIXME&lt;br /&gt;
&lt;br /&gt;
== Needs to be done (TODO) ==&lt;br /&gt;
&lt;br /&gt;
=== List of failed tests ===&lt;br /&gt;
&lt;br /&gt;
The table is being kept up-to-date by [[User:Dsafonov|Dsafonov]] with latest kernel/CRIU patches in his environment, some of which may be yet not in tree or even yet not sent.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Name&lt;br /&gt;
! Fail reason&lt;br /&gt;
|-&lt;br /&gt;
| autofs || test's bug - hangs without C/R&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Kernel patch for vsyscall page ===&lt;br /&gt;
&lt;br /&gt;
That's emulated page, not a vma - affects only in /proc/&amp;lt;pid&amp;gt;/maps for restored process. Depends on !TIF_IA32 &amp;amp;&amp;amp; !TIF_X32 - Andy got patches for disabling the emulation on per-pid basics, for now I ran tests with &amp;lt;code&amp;gt;vsyscall=none&amp;lt;/code&amp;gt; boot parameter because zdtm.py checks maps before/after C/R.&lt;br /&gt;
&lt;br /&gt;
=== Error dump on x32-bit app dumping ===&lt;br /&gt;
&lt;br /&gt;
At this moment we'll support only compat ia32 applications, attempt to dump x32 compat binary should result in error.&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
* [https://github.com/xemul/criu/issues/43 github issue]&lt;br /&gt;
&lt;br /&gt;
[[Category: Development]]&lt;br /&gt;
[[Category: Under the hood‏‎]]&lt;/div&gt;</summary>
		<author><name>Dsafonov</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=32bit_tasks_C/R&amp;diff=4203</id>
		<title>32bit tasks C/R</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=32bit_tasks_C/R&amp;diff=4203"/>
		<updated>2017-05-05T10:00:45Z</updated>

		<summary type="html">&lt;p&gt;Dsafonov: /* List of failed tests */ Remove tests fixed in criu-dev&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Compatible applications ==&lt;br /&gt;
&lt;br /&gt;
On x86_64 there are two types of compatible applications:&lt;br /&gt;
* ia32 - compiled to run on i686 target, can be executed on x86_64 with &amp;lt;code&amp;gt;IA32_EMULATION&amp;lt;/code&amp;gt; config option set.&lt;br /&gt;
* x32 - specially compiled binaries to run on x86_64 machine with &amp;lt;code&amp;gt;CONFIG_X86_X32&amp;lt;/code&amp;gt; config option set.&lt;br /&gt;
&lt;br /&gt;
Both of them uses 4 byte pointers thus can address no more than 4Gb of virtual memory.&amp;lt;br /&amp;gt;&lt;br /&gt;
But x32 uses full 64-bit register set (and thus can't be launched on i686 host natively).&amp;lt;br /&amp;gt;&lt;br /&gt;
Both of them requires additional environment on x86_64 as Glibc, libraries, and compiler support.&amp;lt;br /&amp;gt;&lt;br /&gt;
x32 is rarely distributed (at this moment only [https://wiki.debian.org/X32Port Debian x32 port can be easily found]).&amp;lt;br /&amp;gt;&lt;br /&gt;
So, CRIU will support ia32 C/R at this moment, x32 support may be quite easily added on top of ia32 as needed patches have already added in kernel with ia32 C/R support.&amp;lt;br /&amp;gt;&lt;br /&gt;
The following text uses ''compatible'' and ''32-bit'' in the meaning of ia32 applications unless otherwise specified.&lt;br /&gt;
&lt;br /&gt;
== Difference between native and compat applications ==&lt;br /&gt;
&lt;br /&gt;
From the CPU's point of view, 32-bit compatibility mode applications differ to 64-bit application by current CS (code segment selector): if corresponding value of L-bit from flags of entry in descriptors table is set the CPU will be in 64-bit mode when this segment descriptor is being used. There are some other differences between 32 and 64-bit selectors, one can read about them [https://www.malwaretech.com/2014/02/the-0x33-segment-selector-heavens-gate.html in the article &amp;quot;The 0x33 Segment Selector (Heavens Gate)&amp;quot;]. Code selectors for both bits are defined in kernel headers as &amp;lt;code&amp;gt;__USER32_CS&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;__USER_CS&amp;lt;/code&amp;gt; and corresponds to descriptors in GDT (Global Descriptors Table). One can change 64-bit mode to compatibility mode by swapping CS value (e.g., with longjump).&lt;br /&gt;
&lt;br /&gt;
From the Linux kernel's point of view, applications differ by values set during exec of application such as &amp;lt;code&amp;gt;mmap_base&amp;lt;/code&amp;gt; or thread info flags &amp;lt;code&amp;gt;TIF_ADDR32&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;TIF_IA32&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;TIF_X32&amp;lt;/code&amp;gt;.&lt;br /&gt;
Both native and compat applications can do 32 or 64-bit syscalls.&lt;br /&gt;
&lt;br /&gt;
== Mixed-bitness applications ==&lt;br /&gt;
&lt;br /&gt;
That's entirely possible with current kernel ABI to create mixed-bitness applications, which may be ''very'' entangled.&lt;br /&gt;
For example, one could set ''both'' 32-bit and 64-bit robust futex list pointers.&lt;br /&gt;
Or one can create multi-threaded application where some threads are executing 32-bit code, some 64-bit code.&lt;br /&gt;
&lt;br /&gt;
If we ever meet application of such mixed-bitness kind, the support may be added to CRIU quite easily, but it should be done under some compile-time config as it'll add more syscalls to usual C/R where they aren't needed.&lt;br /&gt;
&lt;br /&gt;
At this moment there is no plans to add such support and it's quite unlikely that we'll find such application in real world (non-syntetic test).&lt;br /&gt;
&lt;br /&gt;
== Approaches to C/R compatible applications ==&lt;br /&gt;
&lt;br /&gt;
C/R of compatible applications can be done differently, this section describes cons/pros of each, to address decision why C/R of 32-bit tasks done ''that'' way and not some other.&lt;br /&gt;
&lt;br /&gt;
=== Restore with exec() of 32-bit dummy binary vs from 64-bit CRIU ===&lt;br /&gt;
&lt;br /&gt;
Restore of 32-bit application can be done with some daemon that runs in 32-bit mode and communicates with CRIU binary (or 32-bit CRIU subprocess).&lt;br /&gt;
&lt;br /&gt;
'''Pros''':&lt;br /&gt;
* no kernel patches expected (not quite true: vDSO mremap() still needed support)&lt;br /&gt;
&lt;br /&gt;
'''Cons''':&lt;br /&gt;
* CRIU code base does not have special restore daemon to communicate with - code needs to be reworked&lt;br /&gt;
* 64-bit app can have 32-bit child, which could be a parent to 64-bit and so on - need to re-exec native 64-bit CRIU from 32-bit dummy (or 32-bit CRIU)&lt;br /&gt;
* need to send to the daemon properties of restoring processes, open fds to images, share memory with parsed ps_tree and so on... The number of IPC calls will slow down restore&lt;br /&gt;
* restoring becomes more complicated, and if looking forward to restoring user/pid sub-namespaces, it will be too entangled&lt;br /&gt;
* no optimized inheritance for task's properties those erase with exec()&lt;br /&gt;
* will need also another daemon for x32&lt;br /&gt;
&lt;br /&gt;
=== Restore with a flag to sigreturn() or arch_prctl() ===&lt;br /&gt;
&lt;br /&gt;
The initial attempt to do 32-bit C/R, was rejected by lkml community by many reasons. It should have swapped thread info flags (such as &amp;lt;code&amp;gt;TIF_ADDR32&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;TIF_IA32&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;TIF_X32&amp;lt;/code&amp;gt;), unmap native 64-bit vDSO blob from process's address space and map compatible 32-bit vDSO - all according to some bit in sigframe in &amp;lt;code&amp;gt;rt_sigreturn()&amp;lt;/code&amp;gt; call or some dedicated for it &amp;lt;code&amp;gt;arch_prctl()&amp;lt;/code&amp;gt; call.&lt;br /&gt;
&lt;br /&gt;
'''Pros''':&lt;br /&gt;
* Simple from the point of CRIU: just do sigreturn with a new bit set or call arch_prctl() and do sigreturn&lt;br /&gt;
&lt;br /&gt;
'''Cons''':&lt;br /&gt;
* If 32-bit vDSO image on restored host differ from dumped (in image), need to catch task after sigreturn and make jump trampolines separately - in case of arch_prctl() simpler ([https://lkml.org/lkml/2016/6/1/425 that's why arch_prctl was in initial RFC])&lt;br /&gt;
* Too many points of failure for one syscall, too complicated&lt;br /&gt;
* Just adding a way to swap those thread info flags from userspace would result in a new races/bugs (as e.g., TASK_SIZE macro depends on TIF_ADDR32, the mmap code may do unexpected things)&lt;br /&gt;
&lt;br /&gt;
After discussion in lkml, conclusion was: separate changing personality (like thread info flags) from API to map vDSO blobs, remove TIF_IA32 flag that differs 32 from 64-bit tasks and look on syscall's nature: compat syscall, x32 syscall or native syscall.&lt;br /&gt;
&lt;br /&gt;
=== Seizing with two 32-bit and 64-bit parasites ===&lt;br /&gt;
&lt;br /&gt;
'''Pros''':&lt;br /&gt;
* no 32-bit calls in 64-bit parasite and vice-versa&lt;br /&gt;
* no need in exit in parasite: ptrace code doesn't allow to set 32-bit regset to 64-bit task and the reverse, running parasite the same nature as task bereaves us from those limits&lt;br /&gt;
&lt;br /&gt;
'''Cons''':&lt;br /&gt;
* need to have two/three (for x32 also) blobs for seizing&lt;br /&gt;
* macros in makefiles to build two parasites&lt;br /&gt;
* serialization of parasite's answers: arguments to parasite differ in size - serialize them, which added not nice-looking and less readable C macros&lt;br /&gt;
&lt;br /&gt;
=== Current approach ===&lt;br /&gt;
&lt;br /&gt;
FIXME&lt;br /&gt;
&lt;br /&gt;
== Needs to be done (TODO) ==&lt;br /&gt;
&lt;br /&gt;
=== List of failed tests ===&lt;br /&gt;
&lt;br /&gt;
The table is being kept up-to-date by [[User:Dsafonov|Dsafonov]] with latest kernel/CRIU patches in his environment, some of which may be yet not in tree or even yet not sent.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Name&lt;br /&gt;
! Fail reason&lt;br /&gt;
|-&lt;br /&gt;
| autofs || test's bug - hangs without C/R&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Fixes for older kernels ===&lt;br /&gt;
&lt;br /&gt;
For kernels with backported mainline patches for 32-bit C/R (like vzkernel) there are a couple of things to do like different sizes of vdso/vvar (or vvar may not be even present).&lt;br /&gt;
&lt;br /&gt;
=== Kernel patch for vsyscall page ===&lt;br /&gt;
&lt;br /&gt;
That's emulated page, not a vma - affects only in /proc/&amp;lt;pid&amp;gt;/maps for restored process. Depends on !TIF_IA32 &amp;amp;&amp;amp; !TIF_X32 - Andy got patches for disabling the emulation on per-pid basics, for now I ran tests with &amp;lt;code&amp;gt;vsyscall=none&amp;lt;/code&amp;gt; boot parameter because zdtm.py checks maps before/after C/R.&lt;br /&gt;
&lt;br /&gt;
=== Error dump on x32-bit app dumping ===&lt;br /&gt;
&lt;br /&gt;
At this moment we'll support only compat ia32 applications, attempt to dump x32 compat binary should result in error.&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
* [https://github.com/xemul/criu/issues/43 github issue]&lt;br /&gt;
&lt;br /&gt;
[[Category: Development]]&lt;br /&gt;
[[Category: Under the hood‏‎]]&lt;/div&gt;</summary>
		<author><name>Dsafonov</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=What_cannot_be_checkpointed&amp;diff=4202</id>
		<title>What cannot be checkpointed</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=What_cannot_be_checkpointed&amp;diff=4202"/>
		<updated>2017-05-04T18:29:27Z</updated>

		<summary type="html">&lt;p&gt;Dsafonov: /* Cannot be dumped (yet) */ I guess, it's time to remove compat from can't be dumped as for v3.0 :)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This article describes what application can do to make CRIU refuse to dump it, summarizing our experience in the area.&lt;br /&gt;
Note that there is no &amp;quot;What cannot be restored&amp;quot; article, and never will be. Is something was dumped, it should be restored.&lt;br /&gt;
&lt;br /&gt;
Some things cannot be dumped at all, some require special option to be used.&lt;br /&gt;
&lt;br /&gt;
== Dumped with special option ==&lt;br /&gt;
&lt;br /&gt;
=== External resources ===&lt;br /&gt;
&lt;br /&gt;
By default CRIU allows to dump the set of processes and their resources if this set has no connections outside. However, in some situations it makes sense to ignore this external connection on dump and recreate one on restore. So, what this &amp;quot;connection outside&amp;quot; is? For example:&lt;br /&gt;
&lt;br /&gt;
''Main article: [[External resources]]''&lt;br /&gt;
&lt;br /&gt;
=== File locks ===&lt;br /&gt;
&lt;br /&gt;
A file lock is an object, that belongs to some filesystem. On dump it's impossible to find out whether this lock help by one task ''can'' be used by some other. Thus, CRIU doesn't dump tasks with held locks. The &amp;lt;code&amp;gt;--file-locks&amp;lt;/code&amp;gt; CLI option tells CRIU to dump the lock.&lt;br /&gt;
&lt;br /&gt;
''Main article: [[File locks]]''&lt;br /&gt;
&lt;br /&gt;
=== Invisible files ===&lt;br /&gt;
&lt;br /&gt;
Sometimes a file name cannot be found in a filesystem. In this case criu can leave a temporary name for it.&lt;br /&gt;
&lt;br /&gt;
''Main article: [[Invisible files]]''&lt;br /&gt;
&lt;br /&gt;
== Cannot be dumped (yet) ==&lt;br /&gt;
&lt;br /&gt;
=== Devices ===&lt;br /&gt;
&lt;br /&gt;
If a task has opened or mapped any character or block device, this typically means, it wants some connection to the hardware. In this case dump (and restore) is impossible. The exception is virtual devices like null, zero, etc. and TUN network device (used by OpenVPN).&lt;br /&gt;
&lt;br /&gt;
The explanation why device file cannot be dumped and restored in a generic way is two fold. First of all, application can be dumped for live migration and on restore there can be no such device. But that's easy. Other than this, we don't know how all the devices work. App might have loaded some state into it, and in order to dump it properly we need to fetch that state. This is not something that can be done in a generic manner.&lt;br /&gt;
&lt;br /&gt;
=== Tasks with debugger attached ===&lt;br /&gt;
&lt;br /&gt;
CRIU uses the same API as debuggers do to get some tasks' state and this API (the ptrace one) doesn't allow for multiple debuggers to explore a task. Thus tasks under gdb or strace cannot be dumped.&lt;br /&gt;
&lt;br /&gt;
=== Task from a different user (for non-root) ===&lt;br /&gt;
&lt;br /&gt;
For security reasons, if CRIU is requested by non-root to dump some other task, it doesn't do it unless the dumpee belongs to the same user.&lt;br /&gt;
&lt;br /&gt;
''See also: [[User-mode]]''&lt;br /&gt;
&lt;br /&gt;
=== Sockets other than TCP, UDP, UNIX, packet and netlink ===&lt;br /&gt;
&lt;br /&gt;
=== Packetized pipes ===&lt;br /&gt;
&lt;br /&gt;
These are pipes created with &amp;lt;code&amp;gt;O_DIRECT&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Cork-ed UDP sockets ===&lt;br /&gt;
&lt;br /&gt;
=== Files sent over unix sockets ===&lt;br /&gt;
&lt;br /&gt;
=== Half-opened UNIX connections ===&lt;br /&gt;
&lt;br /&gt;
=== SysVIPC memory segment w/o IPC namespace ===&lt;br /&gt;
&lt;br /&gt;
IPC objects are not tied to any tasks. Thus once CRIU meets an IPC memory attached to a task, it requires the whole IPC namespace to be dumped as well.&lt;br /&gt;
&lt;br /&gt;
== Dump/restore of graphical applications ==&lt;br /&gt;
Dumping + restoring an application connected to a &amp;quot;real&amp;quot; Xserver (e.g. on your laptop) is impossible now due to part of the app's state is in the Xserver and we don't dump this.&lt;br /&gt;
&lt;br /&gt;
[[Category:Using]]&lt;/div&gt;</summary>
		<author><name>Dsafonov</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=Installation&amp;diff=4201</id>
		<title>Installation</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=Installation&amp;diff=4201"/>
		<updated>2017-05-04T17:29:55Z</updated>

		<summary type="html">&lt;p&gt;Dsafonov: /* Configuring the kernel */ Add NETFILTER_XT_MARK for iptables-restore&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;code&amp;gt;criu&amp;lt;/code&amp;gt; is an utility to checkpoint/restore a process tree. This page describes how to manually build and install prerequisites and the tool itself.&lt;br /&gt;
&lt;br /&gt;
== Installing from packages ==&lt;br /&gt;
&lt;br /&gt;
Some distributions provide ready-to-use [[packages]]. If no, or the CRIU version you want is not yet there, you will need to get CRIU sources and compile it.&lt;br /&gt;
&lt;br /&gt;
== Obtaining CRIU Source ==&lt;br /&gt;
&lt;br /&gt;
You can download the source code as a release tarball or sync the [https://github.com/xemul/criu git repository]. If you plan to modify CRIU sources the latter way is highly recommended.&lt;br /&gt;
&lt;br /&gt;
=== Getting source tarball ===&lt;br /&gt;
: {{Latest release}}&lt;br /&gt;
&lt;br /&gt;
=== Cloning git repository ===&lt;br /&gt;
 git clone https://github.com/xemul/criu&lt;br /&gt;
&lt;br /&gt;
== Dependencies ==&lt;br /&gt;
&lt;br /&gt;
=== Compiler and C Library ===&lt;br /&gt;
&lt;br /&gt;
CRIU is mostly written in C and the build system is based on Makefiles. Thus just install standard &amp;lt;code&amp;gt;gcc&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt; packages (on Debian, &amp;lt;code&amp;gt;[https://packages.debian.org/build-essential build-essential]&amp;lt;/code&amp;gt; will pull in both at once).&lt;br /&gt;
&lt;br /&gt;
For building on x86 with compatible 32-bit applications C/R support you will need &amp;lt;code&amp;gt;libc6-dev-i386, gcc-multilib&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;gcc&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
If you are cross compiling for ARM, use distribution packages or download prebuilt toolchains from Linaro.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
Downloading Linaro toolchains&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
 sudo apt-get install lib32stdc++6 lib32z1 # These are ia32 binaries&lt;br /&gt;
 mkdir -p deps/`uname -m`-linux-gnu&lt;br /&gt;
 cd deps&lt;br /&gt;
 wget http://releases.linaro.org/14.09/components/toolchain/binaries/gcc-linaro-arm-linux-gnueabihf-4.9-2014.09_linux.tar.xz&lt;br /&gt;
 tar --strip=1 -C `uname -m`-linux-gnu -xf gcc-linaro-arm-linux-gnueabihf-4.9-2014.09_linux.tar.xz&lt;br /&gt;
 wget http://releases.linaro.org/14.09/components/toolchain/binaries/gcc-linaro-aarch64-linux-gnu-4.9-2014.09_linux.tar.xz&lt;br /&gt;
 tar --strip=1 -C `uname -m`-linux-gnu -xf gcc-linaro-aarch64-linux-gnu-4.9-2014.09_linux.tar.xz&lt;br /&gt;
 cd ..&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Protocol Buffers ===&lt;br /&gt;
&lt;br /&gt;
CRIU uses the [https://developers.google.com/protocol-buffers/ Google Protocol Buffers] to read and write [[images]] and thus requires [https://github.com/protobuf-c/protobuf-c C language bindings]. The &amp;lt;code&amp;gt;protoc&amp;lt;/code&amp;gt; tool is required at build time and the &amp;lt;code&amp;gt;libprotobuf-c.so&amp;lt;/code&amp;gt; shared object is required at build and run time. [[CRIT]] also uses python language bindings for protocol buffers and requires the &amp;lt;code&amp;gt;descriptor.proto&amp;lt;/code&amp;gt; file typically provided by a distribution's protobuf development package.&lt;br /&gt;
&lt;br /&gt;
==== Distribution Packages ====&lt;br /&gt;
The easiest way is to install distribution packages.&lt;br /&gt;
&lt;br /&gt;
* RPM package names&lt;br /&gt;
** &amp;lt;code&amp;gt;group Development\ Tools&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;protobuf&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;protobuf-c&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;protobuf-c-devel&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;protobuf-compiler&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;protobuf-devel&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;protobuf-python&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;libnet-devel&amp;lt;/code&amp;gt;&lt;br /&gt;
* Debian package names&lt;br /&gt;
** &amp;lt;code&amp;gt;build-essential&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;libprotobuf-dev&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;libprotobuf-c0-dev&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;protobuf-c-compiler&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;protobuf-compiler&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;python-protobuf&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;libnet1-dev&amp;lt;/code&amp;gt;&lt;br /&gt;
* Ubuntu&lt;br /&gt;
** The below will get your freshly installed Ubuntu host ready to compile criu. &amp;quot;--no-install-recommends&amp;quot; parameter is to avoid asciidoc pulling in a lot of dependencies.&lt;br /&gt;
** sudo apt-get install --no-install-recommends git build-essential libprotobuf-dev libprotobuf-c0-dev protobuf-c-compiler protobuf-compiler python-protobuf libnl-3-dev libpth-dev pkg-config libcap-dev asciidoc libnet&lt;br /&gt;
&lt;br /&gt;
==== Building Protocol Buffers From Source ====&lt;br /&gt;
If you would like to build from source, you can use the following commands to obtain the source code repositories, configure, and build the code. On a Debian based system, you may have to install &amp;lt;code&amp;gt;autoconf curl g++ libtool&amp;lt;/code&amp;gt; packages first.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
To build protobuf&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
 cd deps&lt;br /&gt;
 git clone https://github.com/google/protobuf.git protobuf&lt;br /&gt;
 cd protobuf&lt;br /&gt;
 ./autogen.sh&lt;br /&gt;
 ./configure --prefix=`pwd`/../`uname -m`-linux-gnu&lt;br /&gt;
 make&lt;br /&gt;
 make install&lt;br /&gt;
 cd ../..&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
To build protobuf-c&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
 cd deps&lt;br /&gt;
 git clone https://github.com/protobuf-c/protobuf-c.git protobuf-c&lt;br /&gt;
 cd protobuf-c&lt;br /&gt;
 ./autogen.sh&lt;br /&gt;
 mkdir ../pbc-`uname -m`&lt;br /&gt;
 cd ../pbc-`uname -m`&lt;br /&gt;
 ../protobuf-c/configure --prefix=`pwd`/../`uname -m`-linux-gnu \&lt;br /&gt;
   PKG_CONFIG_PATH=`pwd`/../`uname -m`-linux-gnu/lib/pkgconfig&lt;br /&gt;
 make&lt;br /&gt;
 make install&lt;br /&gt;
 cd ../..&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
To cross-compile for ARM some more tricks will be required.&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
For ARMv7&lt;br /&gt;
&lt;br /&gt;
 cd deps&lt;br /&gt;
 mkdir -p pbc-arm&lt;br /&gt;
 cd pbc-arm&lt;br /&gt;
 ../protobuf-c/configure --host=arm-linux-gnueabihf --prefix=`pwd`/../arm-linux-gnueabihf \&lt;br /&gt;
                         --disable-protoc PATH=`pwd`/../`uname -m`-linux-gnu/bin:$PATH&lt;br /&gt;
 make PATH=`pwd`/../`uname -m`-linux-gnu/bin:$PATH&lt;br /&gt;
 make install PATH=`pwd`/../`uname -m`-linux-gnu/bin:$PATH&lt;br /&gt;
 cd ../..&lt;br /&gt;
&lt;br /&gt;
For ARM8&lt;br /&gt;
&lt;br /&gt;
 cd deps&lt;br /&gt;
 mkdir -p pbc-aarch64&lt;br /&gt;
 cd pbc-aarch64&lt;br /&gt;
  ../protobuf-c/configure --host=aarch64-linux-gnu --prefix=`pwd`/../aarch64-linux-gnu \&lt;br /&gt;
                          --disable-protoc PATH=`pwd`/../`uname -m`-linux-gnu/bin:$PATH&lt;br /&gt;
 make PATH=`pwd`/../`uname -m`-linux-gnu/bin:$PATH&lt;br /&gt;
 make install PATH=`pwd`/../`uname -m`-linux-gnu/bin:$PATH&lt;br /&gt;
 cd ../..&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Other deps ===&lt;br /&gt;
* &amp;lt;code&amp;gt;pkg-config&amp;lt;/code&amp;gt; to check on build library dependencies.&lt;br /&gt;
* &amp;lt;code&amp;gt;libnl3&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;libnl3-devel&amp;lt;/code&amp;gt; (RPM distros) or &amp;lt;code&amp;gt;libnl-3-dev&amp;lt;/code&amp;gt; (DEB distros) for network operations.&lt;br /&gt;
* &amp;lt;code&amp;gt;python-ipaddr&amp;lt;/code&amp;gt; is used by CRIT to pretty-print ip.&lt;br /&gt;
* If &amp;lt;code&amp;gt;libbsd&amp;lt;/code&amp;gt; available, CRIU will be compiled with setproctitle() support. It will allow to make process titles of service workers to be more verbose.&lt;br /&gt;
* The iproute2 tool version 3.5.0 or higher is needed for dumping network namespaces. The latest one can be cloned from [http://git.kernel.org/?p=linux/kernel/git/shemminger/iproute2.git;a=summary iproute2]. It should be compiled and a path to ip written in the environment variable &amp;lt;code&amp;gt;CR_IP_TOOL&amp;lt;/code&amp;gt;.&lt;br /&gt;
* &amp;lt;code&amp;gt;libcap-devel&amp;lt;/code&amp;gt; (RPM) or &amp;lt;code&amp;gt;libcap-dev&amp;lt;/code&amp;gt; (DEB)&lt;br /&gt;
* If you would like to use &amp;lt;code&amp;gt;make test&amp;lt;/code&amp;gt; you should install &amp;lt;code&amp;gt;libaio-devel&amp;lt;/code&amp;gt; (RPM) or &amp;lt;code&amp;gt;libaio-dev&amp;lt;/code&amp;gt; (DEB).&lt;br /&gt;
* For test launcher &amp;lt;code&amp;gt;zdtm.py&amp;lt;/code&amp;gt; you need &amp;lt;code&amp;gt;PyYAML&amp;lt;/code&amp;gt; (RPM) or &amp;lt;code&amp;gt;python-yaml&amp;lt;/code&amp;gt; (DEB).&lt;br /&gt;
&lt;br /&gt;
== Linux Kernel ==&lt;br /&gt;
&lt;br /&gt;
Linux kernel v3.11 or newer is required, with some specific options set. If your distribution does not provide needed kernel, you might want to compile one yourself.&lt;br /&gt;
&lt;br /&gt;
=== Configuring the kernel ===&lt;br /&gt;
&lt;br /&gt;
Most likely the first thing to enable is the &amp;lt;code&amp;gt;CONFIG_EXPERT=y&amp;lt;/code&amp;gt; (General setup -&amp;gt; Configure standard kernel features (expert users)) option, which on x86_64 depends on the &amp;lt;code&amp;gt;CONFIG_EMBEDDED=y&amp;lt;/code&amp;gt; (General setup -&amp;gt; Embedded system) one (welcome to Kconfig reverse chains hell).&lt;br /&gt;
&lt;br /&gt;
The following options must be enabled for CRIU to work:&lt;br /&gt;
&lt;br /&gt;
* ''General setup'' options&lt;br /&gt;
** &amp;lt;code&amp;gt;CONFIG_CHECKPOINT_RESTORE=y&amp;lt;/code&amp;gt; (Checkpoint/restore support)&lt;br /&gt;
** &amp;lt;code&amp;gt;CONFIG_NAMESPACES=y&amp;lt;/code&amp;gt; (Namespaces support)&lt;br /&gt;
** &amp;lt;code&amp;gt;CONFIG_UTS_NS=y&amp;lt;/code&amp;gt; (Namespaces support -&amp;gt; UTS namespace)&lt;br /&gt;
** &amp;lt;code&amp;gt;CONFIG_IPC_NS=y&amp;lt;/code&amp;gt; (Namespaces support -&amp;gt; IPC namespace)&lt;br /&gt;
** &amp;lt;code&amp;gt;CONFIG_PID_NS=y&amp;lt;/code&amp;gt; (Namespaces support -&amp;gt; PID namespaces)&lt;br /&gt;
** &amp;lt;code&amp;gt;CONFIG_NET_NS=y&amp;lt;/code&amp;gt; (Namespaces support -&amp;gt; Network namespace)&lt;br /&gt;
** &amp;lt;code&amp;gt;CONFIG_FHANDLE=y&amp;lt;/code&amp;gt; (Open by fhandle syscalls)&lt;br /&gt;
** &amp;lt;code&amp;gt;CONFIG_EVENTFD=y&amp;lt;/code&amp;gt; (Enable eventfd() system call)&lt;br /&gt;
** &amp;lt;code&amp;gt;CONFIG_EPOLL=y&amp;lt;/code&amp;gt; (Enable eventpoll support)&lt;br /&gt;
* ''Networking support -&amp;gt; Networking options'' options for sock-diag subsystem&lt;br /&gt;
** &amp;lt;code&amp;gt;CONFIG_UNIX_DIAG=y&amp;lt;/code&amp;gt; (Unix domain sockets -&amp;gt; UNIX: socket monitoring interface)&lt;br /&gt;
** &amp;lt;code&amp;gt;CONFIG_INET_DIAG=y&amp;lt;/code&amp;gt; (TCP/IP networking -&amp;gt; INET: socket monitoring interface)&lt;br /&gt;
** &amp;lt;code&amp;gt;CONFIG_INET_UDP_DIAG=y&amp;lt;/code&amp;gt; (TCP/IP networking -&amp;gt; INET: socket monitoring interface -&amp;gt; UDP: socket monitoring interface)&lt;br /&gt;
** &amp;lt;code&amp;gt;CONFIG_PACKET_DIAG=y&amp;lt;/code&amp;gt; (Packet socket -&amp;gt; Packet: sockets monitoring interface)&lt;br /&gt;
** &amp;lt;code&amp;gt;CONFIG_NETLINK_DIAG=y&amp;lt;/code&amp;gt; (Netlink socket -&amp;gt; Netlink: sockets monitoring interface)&lt;br /&gt;
&lt;br /&gt;
Other options not required by CRIU, but C/R supported ([[ZDTM test suite]] may fail without them):&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_INOTIFY_USER=y&amp;lt;/code&amp;gt; (File systems -&amp;gt; Inotify support for userspace)&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_FANOTIFY=y&amp;lt;/code&amp;gt; (File systems -&amp;gt; Filesystem wide access notification)&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_NETFILTER_XT_MARK=y&amp;lt;/code&amp;gt; (Networking support -&amp;gt; Networking options -&amp;gt; Network packet filtering framework (Netfilter) -&amp;gt; Core Netfilter Configuration -&amp;gt; Netfilter Xtables support (required for ip_tables) -&amp;gt; nfmark target and match support)&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_MEMCG=y&amp;lt;/code&amp;gt; (General setup -&amp;gt; Control Group support -&amp;gt; Memory controller)&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_CGROUP_DEVICE=y&amp;lt;/code&amp;gt; (General setup -&amp;gt; Control Group support -&amp;gt; Device controller)&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_MACVLAN=y&amp;lt;/code&amp;gt; (Device Drivers -&amp;gt; Network device support -&amp;gt; Network core driver support -&amp;gt; MAC-VLAN support)&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_BRIDGE=y&amp;lt;/code&amp;gt; (Networking support -&amp;gt; Networking options -&amp;gt; 802.1d Ethernet Bridging)&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_BINFMT_MISC=y&amp;lt;/code&amp;gt; (Userspace binary formats -&amp;gt; Kernel support for MISC binaries)&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_IA32_EMULATION=y&amp;lt;/code&amp;gt; (x86 only) (Executable file formats -&amp;gt; Emulations -&amp;gt; IA32 Emulation)&lt;br /&gt;
&lt;br /&gt;
For some [[usage scenarios]] there is an ability to track memory changes and produce [[incremental dumps]]. Need to enable the &amp;lt;code&amp;gt;CONFIG_MEM_SOFT_DIRTY=y&amp;lt;/code&amp;gt; (optional) (Processor type and features -&amp;gt; Track memory changes).&lt;br /&gt;
&lt;br /&gt;
Note we also have our [[custom kernel]], which might contain some experimental CRIU related patches.&lt;br /&gt;
&lt;br /&gt;
== Building CRIU From Source ==&lt;br /&gt;
&lt;br /&gt;
=== Native Compilation ===&lt;br /&gt;
Simply run &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt; in the CRIU source directory.&lt;br /&gt;
&lt;br /&gt;
=== Compilation in Docker container ===&lt;br /&gt;
&lt;br /&gt;
There's a ''docker-build'' target in Makefile which builds CRIU in Ubuntu Docker container. Just run &amp;lt;code&amp;gt;make docker-build&amp;lt;/code&amp;gt; and that's it.&lt;br /&gt;
&lt;br /&gt;
=== Non-standard compilation ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
Building natively, but specifying built dependencies manually&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
 cd deps&lt;br /&gt;
 rsync -a --exclude=.git --exclude=deps .. criu-`uname -m`&lt;br /&gt;
 cd criu-`uname -m`&lt;br /&gt;
 make \&lt;br /&gt;
   USERCFLAGS=&amp;quot;-I`pwd`/../`uname -m`-linux-gnu/include -L`pwd`/../`uname -m`-linux-gnu/lib&amp;quot; \&lt;br /&gt;
   PATH=&amp;quot;`pwd`/../`uname -m`-linux-gnu/bin:$PATH&amp;quot;&lt;br /&gt;
 sudo LD_LIBRARY_PATH=`pwd`/../`uname -m`-linux-gnu/lib ./criu check&lt;br /&gt;
 cd ../..&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
Cross Compilation for ARM&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
ARMv7&lt;br /&gt;
 cd deps&lt;br /&gt;
 rsync -a --exclude=.git --exclude=deps .. criu-arm&lt;br /&gt;
 cd criu-arm&lt;br /&gt;
 make \&lt;br /&gt;
   ARCH=arm \&lt;br /&gt;
   CROSS_COMPILE=`pwd`/../`uname -m`-linux-gnu/bin/arm-linux-gnueabihf- \&lt;br /&gt;
   USERCFLAGS=&amp;quot;-I`pwd`/../arm-linux-gnueabihf/include -L`pwd`/../arm-linux-gnueabihf/lib&amp;quot; \&lt;br /&gt;
   PATH=&amp;quot;`pwd`/../`uname -m`-linux-gnu/bin:$PATH&amp;quot;&lt;br /&gt;
 cd ../..&lt;br /&gt;
&lt;br /&gt;
ARMv8&lt;br /&gt;
  cd deps&lt;br /&gt;
  rsync -a --exclude=.git --exclude=deps .. criu-aarch64&lt;br /&gt;
  cd criu-aarch64&lt;br /&gt;
  make \&lt;br /&gt;
   ARCH=aarch64 \&lt;br /&gt;
   CROSS_COMPILE=`pwd`/../`uname -m`-linux-gnu/bin/aarch64-linux-gnu- \&lt;br /&gt;
   USERCFLAGS=&amp;quot;-I`pwd`/../aarch64-linux-gnu/include -L`pwd`/../aarch64-linux-gnu/lib&amp;quot; \&lt;br /&gt;
   PATH=&amp;quot;`pwd`/../`uname -m`-linux-gnu/bin:$PATH&amp;quot;&lt;br /&gt;
  cd ../..&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
&lt;br /&gt;
CRIU has functionality that is either optional or behaves differently depending on the kernel CRIU is running on. By default build process includes maximum of it, but this behavior can be changed.&lt;br /&gt;
&lt;br /&gt;
''Main article: [[Configuring]]''&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
CRIU works perfectly even when run from the sources directory (with the &amp;quot;./criu&amp;quot; command), but if you want to have in standard paths run &amp;lt;code&amp;gt;make install&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
You may need to install the following packages to generate docs in Debian-based OS's to avoid errors from install-man:&lt;br /&gt;
* &amp;lt;code&amp;gt;asciidoc&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;xmlto&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Checking That It Works ==&lt;br /&gt;
&lt;br /&gt;
First thing to do is to run &amp;lt;code&amp;gt;criu check&amp;lt;/code&amp;gt;. At the end it should say &amp;quot;Looks OK&amp;quot;, if it doesn't the messages on the screen explain what functionality is missing. &lt;br /&gt;
&lt;br /&gt;
Some kernel functionality is required in rare cases and may not block the dump (but sometimes may). These features can be checked by adding the &amp;lt;code&amp;gt;--extra&amp;lt;/code&amp;gt; flag.&lt;br /&gt;
&lt;br /&gt;
If you're using our custom kernel, then the &amp;lt;code&amp;gt;--all&amp;lt;/code&amp;gt; option can be used, in this case CRIU would check for ''all'' the kernel features to work.&lt;br /&gt;
&lt;br /&gt;
You can then try running the [[ZDTM Test Suite]] which sits in the &amp;lt;code&amp;gt;tests/zdtm/&amp;lt;/code&amp;gt; directory.&lt;br /&gt;
&lt;br /&gt;
== Further reading ==&lt;br /&gt;
&lt;br /&gt;
* [[Checking the kernel]]&lt;br /&gt;
* [[Usage]]&lt;br /&gt;
* [[Advanced usage]]&lt;br /&gt;
* [[:Category:HOWTO]]&lt;br /&gt;
&lt;br /&gt;
[[Category:HOWTO]]&lt;/div&gt;</summary>
		<author><name>Dsafonov</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=32bit_tasks_C/R&amp;diff=4196</id>
		<title>32bit tasks C/R</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=32bit_tasks_C/R&amp;diff=4196"/>
		<updated>2017-05-02T19:24:28Z</updated>

		<summary type="html">&lt;p&gt;Dsafonov: Add a note about mixed-bitness applications&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Compatible applications ==&lt;br /&gt;
&lt;br /&gt;
On x86_64 there are two types of compatible applications:&lt;br /&gt;
* ia32 - compiled to run on i686 target, can be executed on x86_64 with &amp;lt;code&amp;gt;IA32_EMULATION&amp;lt;/code&amp;gt; config option set.&lt;br /&gt;
* x32 - specially compiled binaries to run on x86_64 machine with &amp;lt;code&amp;gt;CONFIG_X86_X32&amp;lt;/code&amp;gt; config option set.&lt;br /&gt;
&lt;br /&gt;
Both of them uses 4 byte pointers thus can address no more than 4Gb of virtual memory.&amp;lt;br /&amp;gt;&lt;br /&gt;
But x32 uses full 64-bit register set (and thus can't be launched on i686 host natively).&amp;lt;br /&amp;gt;&lt;br /&gt;
Both of them requires additional environment on x86_64 as Glibc, libraries, and compiler support.&amp;lt;br /&amp;gt;&lt;br /&gt;
x32 is rarely distributed (at this moment only [https://wiki.debian.org/X32Port Debian x32 port can be easily found]).&amp;lt;br /&amp;gt;&lt;br /&gt;
So, CRIU will support ia32 C/R at this moment, x32 support may be quite easily added on top of ia32 as needed patches have already added in kernel with ia32 C/R support.&amp;lt;br /&amp;gt;&lt;br /&gt;
The following text uses ''compatible'' and ''32-bit'' in the meaning of ia32 applications unless otherwise specified.&lt;br /&gt;
&lt;br /&gt;
== Difference between native and compat applications ==&lt;br /&gt;
&lt;br /&gt;
From the CPU's point of view, 32-bit compatibility mode applications differ to 64-bit application by current CS (code segment selector): if corresponding value of L-bit from flags of entry in descriptors table is set the CPU will be in 64-bit mode when this segment descriptor is being used. There are some other differences between 32 and 64-bit selectors, one can read about them [https://www.malwaretech.com/2014/02/the-0x33-segment-selector-heavens-gate.html in the article &amp;quot;The 0x33 Segment Selector (Heavens Gate)&amp;quot;]. Code selectors for both bits are defined in kernel headers as &amp;lt;code&amp;gt;__USER32_CS&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;__USER_CS&amp;lt;/code&amp;gt; and corresponds to descriptors in GDT (Global Descriptors Table). One can change 64-bit mode to compatibility mode by swapping CS value (e.g., with longjump).&lt;br /&gt;
&lt;br /&gt;
From the Linux kernel's point of view, applications differ by values set during exec of application such as &amp;lt;code&amp;gt;mmap_base&amp;lt;/code&amp;gt; or thread info flags &amp;lt;code&amp;gt;TIF_ADDR32&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;TIF_IA32&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;TIF_X32&amp;lt;/code&amp;gt;.&lt;br /&gt;
Both native and compat applications can do 32 or 64-bit syscalls.&lt;br /&gt;
&lt;br /&gt;
== Mixed-bitness applications ==&lt;br /&gt;
&lt;br /&gt;
That's entirely possible with current kernel ABI to create mixed-bitness applications, which may be ''very'' entangled.&lt;br /&gt;
For example, one could set ''both'' 32-bit and 64-bit robust futex list pointers.&lt;br /&gt;
Or one can create multi-threaded application where some threads are executing 32-bit code, some 64-bit code.&lt;br /&gt;
&lt;br /&gt;
If we ever meet application of such mixed-bitness kind, the support may be added to CRIU quite easily, but it should be done under some compile-time config as it'll add more syscalls to usual C/R where they aren't needed.&lt;br /&gt;
&lt;br /&gt;
At this moment there is no plans to add such support and it's quite unlikely that we'll find such application in real world (non-syntetic test).&lt;br /&gt;
&lt;br /&gt;
== Approaches to C/R compatible applications ==&lt;br /&gt;
&lt;br /&gt;
C/R of compatible applications can be done differently, this section describes cons/pros of each, to address decision why C/R of 32-bit tasks done ''that'' way and not some other.&lt;br /&gt;
&lt;br /&gt;
=== Restore with exec() of 32-bit dummy binary vs from 64-bit CRIU ===&lt;br /&gt;
&lt;br /&gt;
Restore of 32-bit application can be done with some daemon that runs in 32-bit mode and communicates with CRIU binary (or 32-bit CRIU subprocess).&lt;br /&gt;
&lt;br /&gt;
'''Pros''':&lt;br /&gt;
* no kernel patches expected (not quite true: vDSO mremap() still needed support)&lt;br /&gt;
&lt;br /&gt;
'''Cons''':&lt;br /&gt;
* CRIU code base does not have special restore daemon to communicate with - code needs to be reworked&lt;br /&gt;
* 64-bit app can have 32-bit child, which could be a parent to 64-bit and so on - need to re-exec native 64-bit CRIU from 32-bit dummy (or 32-bit CRIU)&lt;br /&gt;
* need to send to the daemon properties of restoring processes, open fds to images, share memory with parsed ps_tree and so on... The number of IPC calls will slow down restore&lt;br /&gt;
* restoring becomes more complicated, and if looking forward to restoring user/pid sub-namespaces, it will be too entangled&lt;br /&gt;
* no optimized inheritance for task's properties those erase with exec()&lt;br /&gt;
* will need also another daemon for x32&lt;br /&gt;
&lt;br /&gt;
=== Restore with a flag to sigreturn() or arch_prctl() ===&lt;br /&gt;
&lt;br /&gt;
The initial attempt to do 32-bit C/R, was rejected by lkml community by many reasons. It should have swapped thread info flags (such as &amp;lt;code&amp;gt;TIF_ADDR32&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;TIF_IA32&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;TIF_X32&amp;lt;/code&amp;gt;), unmap native 64-bit vDSO blob from process's address space and map compatible 32-bit vDSO - all according to some bit in sigframe in &amp;lt;code&amp;gt;rt_sigreturn()&amp;lt;/code&amp;gt; call or some dedicated for it &amp;lt;code&amp;gt;arch_prctl()&amp;lt;/code&amp;gt; call.&lt;br /&gt;
&lt;br /&gt;
'''Pros''':&lt;br /&gt;
* Simple from the point of CRIU: just do sigreturn with a new bit set or call arch_prctl() and do sigreturn&lt;br /&gt;
&lt;br /&gt;
'''Cons''':&lt;br /&gt;
* If 32-bit vDSO image on restored host differ from dumped (in image), need to catch task after sigreturn and make jump trampolines separately - in case of arch_prctl() simpler ([https://lkml.org/lkml/2016/6/1/425 that's why arch_prctl was in initial RFC])&lt;br /&gt;
* Too many points of failure for one syscall, too complicated&lt;br /&gt;
* Just adding a way to swap those thread info flags from userspace would result in a new races/bugs (as e.g., TASK_SIZE macro depends on TIF_ADDR32, the mmap code may do unexpected things)&lt;br /&gt;
&lt;br /&gt;
After discussion in lkml, conclusion was: separate changing personality (like thread info flags) from API to map vDSO blobs, remove TIF_IA32 flag that differs 32 from 64-bit tasks and look on syscall's nature: compat syscall, x32 syscall or native syscall.&lt;br /&gt;
&lt;br /&gt;
=== Seizing with two 32-bit and 64-bit parasites ===&lt;br /&gt;
&lt;br /&gt;
'''Pros''':&lt;br /&gt;
* no 32-bit calls in 64-bit parasite and vice-versa&lt;br /&gt;
* no need in exit in parasite: ptrace code doesn't allow to set 32-bit regset to 64-bit task and the reverse, running parasite the same nature as task bereaves us from those limits&lt;br /&gt;
&lt;br /&gt;
'''Cons''':&lt;br /&gt;
* need to have two/three (for x32 also) blobs for seizing&lt;br /&gt;
* macros in makefiles to build two parasites&lt;br /&gt;
* serialization of parasite's answers: arguments to parasite differ in size - serialize them, which added not nice-looking and less readable C macros&lt;br /&gt;
&lt;br /&gt;
=== Current approach ===&lt;br /&gt;
&lt;br /&gt;
FIXME&lt;br /&gt;
&lt;br /&gt;
== Needs to be done (TODO) ==&lt;br /&gt;
&lt;br /&gt;
=== List of failed tests ===&lt;br /&gt;
&lt;br /&gt;
The table is being kept up-to-date by [[User:Dsafonov|Dsafonov]] with latest kernel/CRIU patches in his environment, some of which may be yet not in tree or even yet not sent.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Name&lt;br /&gt;
! Fail reason&lt;br /&gt;
|-&lt;br /&gt;
| futex-rl || sys_get_robust_list() should be compat syscall for 32-bit tasks: kernel keeps two different lists: &amp;lt;code&amp;gt;robust_list&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;compat_robust_list&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;task_struct&amp;lt;/code&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
| autofs || test's bug - hangs without C/R&lt;br /&gt;
|-&lt;br /&gt;
| vdso01 || need to add 32-bit vDSO symbols: __kernel_* (and check them with handlers in test)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Fixes for older kernels ===&lt;br /&gt;
&lt;br /&gt;
For kernels with backported mainline patches for 32-bit C/R (like vzkernel) there are a couple of things to do like different sizes of vdso/vvar (or vvar may not be even present).&lt;br /&gt;
&lt;br /&gt;
=== Kernel patch for vsyscall page ===&lt;br /&gt;
&lt;br /&gt;
That's emulated page, not a vma - affects only in /proc/&amp;lt;pid&amp;gt;/maps for restored process. Depends on !TIF_IA32 &amp;amp;&amp;amp; !TIF_X32 - Andy got patches for disabling the emulation on per-pid basics, for now I ran tests with &amp;lt;code&amp;gt;vsyscall=none&amp;lt;/code&amp;gt; boot parameter because zdtm.py checks maps before/after C/R.&lt;br /&gt;
&lt;br /&gt;
=== Error dump on x32-bit app dumping ===&lt;br /&gt;
&lt;br /&gt;
At this moment we'll support only compat ia32 applications, attempt to dump x32 compat binary should result in error.&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
* [https://github.com/xemul/criu/issues/43 github issue]&lt;br /&gt;
&lt;br /&gt;
[[Category: Development]]&lt;br /&gt;
[[Category: Under the hood‏‎]]&lt;/div&gt;</summary>
		<author><name>Dsafonov</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=Upstream_kernel_commits&amp;diff=4195</id>
		<title>Upstream kernel commits</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=Upstream_kernel_commits&amp;diff=4195"/>
		<updated>2017-05-02T10:03:05Z</updated>

		<summary type="html">&lt;p&gt;Dsafonov: /* Merged patches */ fixes for x86-mmap() in master (will be 4.12 release)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!--&lt;br /&gt;
  NOTE: to figure out which kernel version a commit was included into, please use&lt;br /&gt;
  git describe --contains COMMITID&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Pending patches ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Reference&lt;br /&gt;
! Description&lt;br /&gt;
! Status&lt;br /&gt;
|-&lt;br /&gt;
|[https://github.com/avagin/linux-task-diag/commits/task-diag-v3-devel v3-devel], [https://lkml.org/lkml/2015/7/6/142 v2], [http://lwn.net/Articles/633622/ v1] || kernel: add a netlink interface to get information about processes || ?&lt;br /&gt;
|-&lt;br /&gt;
|[https://lkml.org/lkml/2016/6/28/801 lkml] || fs: allow to use dirfd as root for openat and other *at syscalls || ?&lt;br /&gt;
|-&lt;br /&gt;
|[https://lkml.org/lkml/2017/1/23/712 lkml] || [PATCH] mnt: allow to add a mount into an existing group || &lt;br /&gt;
|-&lt;br /&gt;
|[https://lkml.org/lkml/2017/3/6/545 lkml] || [PATCHv6 5/5] selftests/x86: add test for 32-bit mmap() return addr || ?&lt;br /&gt;
|-&lt;br /&gt;
|[https://lkml.org/lkml/2017/4/14/139 lkml] || ARM32: Support mremap() for sigpage/vDSO || ?&lt;br /&gt;
|-&lt;br /&gt;
|[https://lkml.org/lkml/2017/4/14/138 lkml] || ARM/shmem: Drop page coloring align for non-VIPT CPUs || ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Merged patches ==&lt;br /&gt;
&lt;br /&gt;
This table lists CRIU-related kernel commits already merged to vanilla.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; class=&amp;quot;unsortable&amp;quot; | Commit&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; class=&amp;quot;unsortable&amp;quot; | Description&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Kernel version&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|7773fbc541}} || procfs: make proc_get_link to use dentry instead of inode || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|640708a2cf}} || procfs: introduce the /proc/&amp;lt;pid&amp;gt;/map_files/ directory || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|067bce1a06}} || c/r: introduce CHECKPOINT_RESTORE symbol || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|028ee4be34}} || c/r: prctl: add PR_SET_MM codes to set up mm_struct entries || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b3f7f573a2}} || c/r: procfs: add start_data, end_data, start_brk members to /proc/$pid/stat v4 || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b8f566b04d}} || sysctl: add the kernel.ns_last_pid control || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|c9da99e647}} || unix_diag: Fixup RQLEN extension report || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|885ee74d5d}} || af_unix: Move CINQ/COUTQ code to helpers || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|257b529876}} || unix_diag: Add the MEMINFO extension || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|c0636faa53}} || inet_diag: Add the SKMEMINFO extension || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|5d2e5f274f}} || sock_diag: Introduce the meminfo nla core (v2) || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|288461e154}} || unix_diag: Include unix_diag.h into header-y target || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|e6fe2371bd}} || sock_diag: Arrange sock_diag.h such that it is exportable to userspace || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|e09e9d189b}} || unix: If we happen to find peer NULL when diag dumping, write zero. || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|3b0723c12e}} || unix_diag: Fix incoming connections nla length  || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|2ea744a583}} || net: unix -- Add missing module.h inclusion || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|5d531aaa64}} || unix_diag: Write it into kbuild || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|cbf391958a}} || unix_diag: Receive queue lenght NLA || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|2aac7a2cb0}} || unix_diag: Pending connections IDs NLA || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|ac02be8d96}} || unix_diag: Unix peer inode NLA || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|5f7b056946}} || unix_diag: Unix inode info NLA || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|f5248b48a6}} || unix_diag: Unix socket name NLA || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|5d3cae8bc3}} || unix_diag: Dumping exact socket core || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|45a96b9be6}} || unix_diag: Dumping all sockets core || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|22931d3b90}} || unix_diag: Basic module skeleton || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|fa7ff56f75}} || af_unix: Export stuff required for diag module || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|f65c1b534b}} || sock_diag: Generalize requests cookies managements || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|aec8dc62f6}} || sock_diag: Fix module netlink aliases || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|e7c466e58e}} || sock_diag: Move the SOCK_DIAG_BY_FAMILY cmd declaration || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|86e62ad6b2}} || udp_diag: Fix the !ipv6 case || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|b872a2371f}} || udp_diag: Make it module when ipv6 is a module || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|507dd7961e}} || udp_diag: Wire the udp_diag module into kbuild || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|b6d640c228}} || udp_diag: Implement the dump-all functionality || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|a925aa00a5}} || udp_diag: Implement the get_exact dumping functionality || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|52b7c59bc3}} || udp_diag: Basic skeleton || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|fce823381e}} || udp: Export code sk lookup routines || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|1942c518ca}} || inet_diag: Generalize inet_diag dump and get_exact calls || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|3c4d05c805}} || inet_diag: Introduce the inet socket dumping routine || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|8d07d1518a}} || inet_diag: Introduce the byte-code run on an inet socket || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|efb3cb428d}} || inet_diag: Split inet_diag_get_exact into parts || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|476f7dbff3}} || inet_diag: Split inet_diag_get_exact into parts || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|b005ab4ef8}} || inet_diag: Export inet diag cookie checking routine || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|87c22ea52e}} || inet_diag: Reduce the number of args for bytecode run routine || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|7b35eadd7e}} || inet_diag: Remove indirect sizeof from inet diag handlers || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|8ef874bfc7}} || sock_diag: Move the sock_ code to net/core/ || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|a029fe26b6}} || inet_diag: Cleanup type2proto last user || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|d23deaa07b}} || inet_diag: Introduce socket family checks || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|25c4cd2b6d}} || inet_diag: Switch the _dump to work with new header || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|fe50ce2846}} || inet_diag: Switch the _get_exact to work with new header || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|126fdc3249}} || inet_diag: Introduce new inet_diag_req header || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|d366477a52}} || sock_diag: Initial skeleton || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|f13c95f0e2}} || inet_diag: Switch from _GETSOCK to IPPROTO_ numbers || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|37f352b5e3}} || inet_diag: Move byte-code finding up the call-stack || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|8d34172dfd}} || sock_diag: Introduce new message type || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|818411616b}} || fs, proc: Introduce /proc/&amp;lt;pid&amp;gt;/task/&amp;lt;tid&amp;gt;/children entry v9 || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|5b172087f9}} || c/r: procfs: add arg_start/end, env_start/end and exit_code members || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|fe8c7f5cbf}} || c/r: prctl: Extend PR_SET_MM to set up more mm_struct entries || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|d97b46a646}} || syscalls, x86: Add __NR_kcmp syscall || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b32dfe3771}} || c/r: prctl: Add ability to set new mm_struct::exe_file || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|79f0713d40}} || prctl: Use CAP_SYS_RESOURCE for PR_SET_MM option || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|300f786b26}} || prctl: add ability to get clear_tid_address || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|4934b0329f}} || datagram: Factor out sk queue referencing || 3.4&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|3f518bf745}} || datagram: Add offset argument to __skb_recv_datagram || 3.4&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|da5ef6e51b}} || skb: Add skb_peek_next helper || 3.4&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ef64a54f6e}} || sock: Introduce the SO_PEEK_OFF sock option || 3.4&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|f55bb7f9cb}} || unix: Support peeking offset for datagram and seqpacket sockets || 3.4&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|fc0d753641}} || unix: Support peeking offset for stream sockets || 3.4&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|1d151c337d}} || fcntl: Add F_GETOWNER_UIDS option v3 || 3.6&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|370816aef0}} || tcp: Move code around || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ee9952831c}} || tcp: Initial repair mode || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c0e88ff0f2}} || tcp: Repair socket queues || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|5e6a3ce657}} || tcp: Report mss_clamp with TCP_MAXSEG option in repair mode || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b139ba4e90}} || tcp: Repair connection-time negotiated parameters || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|de248a75c3}} || tcp repair: Fix unaligned access when repairing options (v2) || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|736f24d5e5}} || c/r: prctl: Drop VMA flags test on PR_SET_MM_ stack data assignment || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|5702c5eeab}} || c/r: prctl: Move PR_GET_TID_ADDRESS to a proper place || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|16fbdce62d}} || proc: report file/anon bit in /proc/pid/pagemap || 3.4&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|bca1554373}} || proc/smaps: show amount of nonlinear ptes in vma || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b14f243a42}} || net: Dont use ifindices in hash fns || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|9c7dafbfab}} || net: Allow to create links with given ifindex || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|e6f8f1a739}} || veth: Allow to create peer link with given ifindex || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|aa79e66eee}} || net: Make ifindex generation per-net namespace || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|1fb9489bf1}} || net: Loopback ifindex is constant now || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|faf60af17f}} || procfs: Move /proc/pid/fd[info] handling code to fd.[ch] || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ddd3e0771b}} || procfs: Convert /proc/pid/fdinfo/ handling routines to seq-file || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|55985dd72a}} || procfs: Add ability to plug in auxiliary fdinfo providers || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|cbac5542d4}} || fs, eventfd: Add procfs fdinfo helper || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|138d22b586}} || fs, epoll: Add procfs fdinfo helper v2 || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|711c7bf991}} || fs, exportfs: Add export_encode_inode_fh helper || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|be77196b80}} || fs, notify: Add procfs fdinfo helper || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|e6dbcafb74}} || fs, fanotify: Add @mflags field to fanotify output || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|2787b04b6c}} || packet: Introduce net/packet/internal.h header || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|96ec632714}} || packet: Diag core and basic socket info dumping || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|8a360be0c5}} || packet: Report more packet sk info via diag module || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|eea68e2f1a}} || packet: Report socket mclist info via diag module || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|16f01365fa}} || packet: Report rings cfg via diag engine || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|fff3321d75}} || packet: Report fanout status via diag engine || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|0fa7fa98db}} || packet: Protect packet sk list with mutex (v2) || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|579035dc5d}} || kernel: limit a value of ns_last_pid to (0, max_pid) || 3.6&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|bc26ccd8fc}} || tcp: restore rcv_wscale in a repair mode (v2) || 3.6&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|f7b86bfe8d}} || sockopt: Make SO_BINDTODEVICE readable || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|e4e541a848}} || sock-diag: Report shutdown for inet and unix sockets (v2) || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|834f82e2aa}} || procfs: add VmFlags field in smaps output || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|06026d911c}} || tty: pty - Move TIOCPKT handling into pty.c || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c6298038bc}} || tty, ioctls -- Add new ioctl definitions for tty flags fetching || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|84fd7bdf12}} || tty: Add get- ioctls to fetch tty status v3 || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|a8fc927780}} || sk-filter: Add ability to get socket filter program (v2) || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|cacb6ba0f3}} || net: inet_diag -- Return error code if protocol handler is missed || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c454e6111d}} || tcp-repair: Handle zero-length data put in rcv queue || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ec34232575}} || tcp: fix retransmission in repair mode || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|2b9164771e}} || ipv6: adapt connect for repair move || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c91f6df2db}} || sockopt: Change getsockopt() of SO_BINDTODEVICE to return an interface name || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|3fcfe78658}} || ipc: add more comments to message copying related code || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|51eeacaa07}} || ipc: simplify message copying || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b30efe2775}} || ipc: convert prepare_copy() from macro to function || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|85398aa8de}} || ipc: simplify free_copy() call || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|3a665531a3}} || selftests: IPC message queue copy feature test || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|4a674f34ba}} || ipc: introduce message queue copy feature || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|f9dd87f473}} || ipc: message queue receive cleanup || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|03f5956680}} || ipc: add sysctl to specify desired next object id || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|9afdacda02}} || ipc: remove forced assignment of selected message || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|3f7d1fe108}} || arm: Wire up kcmp syscall || 3.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|1e142b29e2}} || kcmp: make it depend on CHECKPOINT_RESTORE || 3.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ceaa1fef65}} || tcp: adding a per-socket timestamp offset || 3.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|93be6ce0e9}} || tcp: set and get per-socket timestamp || 3.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ee684b6f28}} || tcp: send packets with a socket timestamp || 3.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|66dd34ad}} || signal: allow to send any siginfo to itself || 3.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ae5fc987}} || net: fix *_DIAG_MAX constants || 3.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|0f29c768}} || net: prepare netlink code for netlink diag || 3.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|eaaa3139}} || netlink: Diag core and basic socket info dumping (v2) || 3.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|84c751bd}} || ptrace: add ability to retrieve signals without removing from a queue (v4) || 3.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|040fa020}} || clear_refs: Sanitize accepted commands declaration || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|af9de7eb}} || clear_refs: Introduce private struct for mm_walk || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|2b0a9f01}} || pagemap-introduce-pagemap_entry_t-without-pmshift-bits || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|0f8975ec}} || mm: soft-dirty bits for user memory changes tracking || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|541c237c}} || pagemap: prepare to reuse constant bits with page-shift || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|57b8015e}} || posix-timers: Show sigevent info in proc file || 3.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|48f6a7a5}} || posix-timers: Introduce /proc/PID/timers file || 3.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|5ed67f05}} || posix timers: Allocate timer id per process (v2) || 3.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|15ef0298}} || posix-timers: Show clock ID in proc file || 3.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|29000cae}} || ptrace: add ability to get/set signal-blocked mask (v2) || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|274038f8}} || tun: Report &amp;quot;persist&amp;quot; flag to userspace || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|179ef71c}} || mm: Save soft-dirty bits on swapped pages || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|41bb3476}} || mm: Save soft-dirty bits on file pages || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|76975e9c}} || tun: Get skfilter layout || 3.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|849c9b6f}} || tun: Allow to skip filter on attach || 3.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|3d407a80}} || tun: Report whether the queue is attached or not || 3.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|fb7589a1}} || tun: Add ability to create tun device with given index || 3.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|e3e12028}} || tcp: don't apply tsoffset if rcv_tsecr is zero || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c7781a6e}} || tcp: initialize rcv_tstamp for restored sockets || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|7ed5c5ae}} || tcp: set timestamps for restored skb-s || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|6dec97dc}} || mm: move_ptes -- Set soft dirty bit depending on pte type || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c3d16e16}} || mm: migration -- Do not loose soft dirty bit if page is in migration state || 3.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|e9cdd6e7}} || mm: pagemap -- Inspect _PAGE_SOFT_DIRTY only on present pages || 3.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|dbde4979}} || tcp: don't update snd_nxt, when a socket is switched from repair mode || 3.13&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|d9104d1c}} || mm: track vma changes with VM_SOFTDIRTY bit || 3.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|34228d47}} || mm: Ignore VM_SOFTDIRTY on VMA merging || 3.14, 3.13-stable&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|24f91eba1}} || mm: don't lose the SOFT_DIRTY flag on mprotect || 3.14, 3.13-stable&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|49d063cb3}} || proc: show mnt_id in /proc/pid/fdinfo || 3.15&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|0bf073315}} || mm: Make freshly remapped file pages being softdirty unconditionally || 3.16&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|9aed8614a}} || mm: Don't forget to set softdirty on file mapped fault || 3.17&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b43790eed}} || mm: Don't forget to save file map softdiry bit on unmap || 3.16&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c86c97ff4}} || mm: Clear VM_SOFTDIRTY flag inside clear_refs_write instead of clear_soft_dirty || 3.16&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|af9c4957c}} || timerfd: Implement show_fdinfo method || 3.17&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|854d06d9f}} || docs: Procfs -- Document timerfd output || 3.17&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|5442e9fbd}} || timerfd: Implement timerfd_ioctl method to restore timerfd_ctx::ticks, v3 || 3.17&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|64e455079}} || mm: softdirty: enable write notifications on VMAs after VM_SOFTDIRTY cleared || 3.18&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|9c5990240}} || mm: introduce check_data_rlimit helper || 3.18&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|8764b338b}} || mm: use may_adjust_brk helper || 3.18&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|71fe97e18}} || prctl: PR_SET_MM -- factor out mmap_sem when updating mm::exe_file || 3.18&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|f606b77f1}} || prctl: PR_SET_MM -- introduce PR_SET_MM_MAP operation || 3.18&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|a3816ab0e}} || fs: Convert show_fdinfo functions to void || 3.19&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|9183df25f}} || shm: add memfd_create() syscall || 3.17&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|e4a0d3e72}} || aio: Make it possible to remap aio ring || 3.19&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|6c8c90319}} || proc: show locks in /proc/pid/fdinfo/X || 4.1&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|155e35d4d}} || VFS: Introduce inode-getting helpers for layered/unioned fs environments || 4.0&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|df1a085af}} || VFS: Add a fallthrough flag for marking virtual dentries || 4.0&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|f25801ee4}} || overlay: Call ovl_drop_write() earlier in ovl_dentry_open() || 4.2-rc2&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|4bacc9c92}} || overlayfs: Make f_path always point to the overlay and f_inode to the underlay || 4.2-rc2&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|9391dd00d}} || fix a braino in ovl_d_select_inode() || 4.2-rc2&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|13c4a9011}} || seccomp: add ptrace options for suspend/resume || 4.3-rc1&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|bab189918}} || bpf, seccomp: prepare for upcoming criu support || 4.4-rc1&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|f8e529ed9}} || seccomp, ptrace: add support for dumping seccomp filters || 4.4-rc1&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c83aa55d0}} || autofs: show pipe inode in mount options || 4.6-rc4&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b1ed4c4fa}} || tcp: add an ability to dump and restore window parameters || 4.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b059a453b}} || x86/vdso: Add mremap hook to vm_special_mapping || 4.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|f80fd3a5f}} || selftests/x86: Add vDSO mremap() test || 4.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|e38447ee1}} || x86/vdso: Unmap vdso blob on vvar mapping failure || 4.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|576ebfefd}} || x86/vdso: Replace calculate_addr in map_vdso() with addr || 4.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|2eefd8789}} || x86/arch_prctl/vdso: Add ARCH_MAP_VDSO_* || 4.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|90954e7b9}} || x86/coredump: Use pr_reg size, rather that TIF_IA32 flag || 4.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|cc87324b3}} || x86/ptrace: Down with test_thread_flag(TIF_IA32) || 4.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|684635105}} || x86/signal: Add SA_{X32,IA32}_ABI sa_flags || 4.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ed1e7db33}} || x86/signal: Remove bogus user_64bit_mode() check from sigaction_compat_abi() || v4.9-rc2&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|7b2dd3682}} || x86/coredump: Always use user_regs_struct for compat_elf_gregset_t || v4.9-rc7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|432490f9d}} || net: ip, diag -- Add diag interface for raw sockets || v4.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|cd05a0eca}} || net: ip, raw_diag -- Fix socket leaking for destroy request || v4.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|3de864f8c}} || net: ip, diag -- Adjust raw_abort to use unlocked __udp_disconnect || v4.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|9999370fa}} || net: ip, raw_diag -- Use jump for exiting from nested loop || v4.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c62cce2ca}} || net: add an ioctl to get a socket network namespace || v4.10-rc1&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|319b0534b9}} || tcp: allow to enable the repair mode for non-listening sockets || v4.10-rc1&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|ba94f3088b}} || unix: add ioctl to open a unix socket file with O_PATH ||&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|6a0b41d1e2}} || x86/mm: Introduce arch_rnd() to compute 32/64 mmap random base || 4.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|8f3e474f3c}} || x86/mm: Add task_size parameter to mmap_base() || 4.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|1b028f784e}} || x86/mm: Introduce mmap_compat_base() for 32-bit mmap() || 4.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|3e6ef9c809}} || x86/mm: Make mmap(MAP_32BIT) work correctly || 4.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|e13b73dd9c}} || x86/hugetlb: Adjust to the new native/compat mmap bases || 4.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ada26481df}} || x86/mm: Make in_compat_syscall() work during exec || 4.12&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>Dsafonov</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=32bit_tasks_C/R&amp;diff=4170</id>
		<title>32bit tasks C/R</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=32bit_tasks_C/R&amp;diff=4170"/>
		<updated>2017-04-21T20:37:19Z</updated>

		<summary type="html">&lt;p&gt;Dsafonov: /* Needs to be done (TODO) */ kerndat check posted, vdso helper segfault fixed&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Compatible applications ==&lt;br /&gt;
&lt;br /&gt;
On x86_64 there are two types of compatible applications:&lt;br /&gt;
* ia32 - compiled to run on i686 target, can be executed on x86_64 with &amp;lt;code&amp;gt;IA32_EMULATION&amp;lt;/code&amp;gt; config option set.&lt;br /&gt;
* x32 - specially compiled binaries to run on x86_64 machine with &amp;lt;code&amp;gt;CONFIG_X86_X32&amp;lt;/code&amp;gt; config option set.&lt;br /&gt;
&lt;br /&gt;
Both of them uses 4 byte pointers thus can address no more than 4Gb of virtual memory.&amp;lt;br /&amp;gt;&lt;br /&gt;
But x32 uses full 64-bit register set (and thus can't be launched on i686 host natively).&amp;lt;br /&amp;gt;&lt;br /&gt;
Both of them requires additional environment on x86_64 as Glibc, libraries, and compiler support.&amp;lt;br /&amp;gt;&lt;br /&gt;
x32 is rarely distributed (at this moment only [https://wiki.debian.org/X32Port Debian x32 port can be easily found]).&amp;lt;br /&amp;gt;&lt;br /&gt;
So, CRIU will support ia32 C/R at this moment, x32 support may be quite easily added on top of ia32 as needed patches have already added in kernel with ia32 C/R support.&amp;lt;br /&amp;gt;&lt;br /&gt;
The following text uses ''compatible'' and ''32-bit'' in the meaning of ia32 applications unless otherwise specified.&lt;br /&gt;
&lt;br /&gt;
== Difference between native and compat applications ==&lt;br /&gt;
&lt;br /&gt;
From the CPU's point of view, 32-bit compatibility mode applications differ to 64-bit application by current CS (code segment selector): if corresponding value of L-bit from flags of entry in descriptors table is set the CPU will be in 64-bit mode when this segment descriptor is being used. There are some other differences between 32 and 64-bit selectors, one can read about them [https://www.malwaretech.com/2014/02/the-0x33-segment-selector-heavens-gate.html in the article &amp;quot;The 0x33 Segment Selector (Heavens Gate)&amp;quot;]. Code selectors for both bits are defined in kernel headers as &amp;lt;code&amp;gt;__USER32_CS&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;__USER_CS&amp;lt;/code&amp;gt; and corresponds to descriptors in GDT (Global Descriptors Table). One can change 64-bit mode to compatibility mode by swapping CS value (e.g., with longjump).&lt;br /&gt;
&lt;br /&gt;
From the Linux kernel's point of view, applications differ by values set during exec of application such as &amp;lt;code&amp;gt;mmap_base&amp;lt;/code&amp;gt; or thread info flags &amp;lt;code&amp;gt;TIF_ADDR32&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;TIF_IA32&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;TIF_X32&amp;lt;/code&amp;gt;.&lt;br /&gt;
Both native and compat applications can do 32 or 64-bit syscalls.&lt;br /&gt;
&lt;br /&gt;
== Approaches to C/R compatible applications ==&lt;br /&gt;
&lt;br /&gt;
C/R of compatible applications can be done differently, this section describes cons/pros of each, to address decision why C/R of 32-bit tasks done ''that'' way and not some other.&lt;br /&gt;
&lt;br /&gt;
=== Restore with exec() of 32-bit dummy binary vs from 64-bit CRIU ===&lt;br /&gt;
&lt;br /&gt;
Restore of 32-bit application can be done with some daemon that runs in 32-bit mode and communicates with CRIU binary (or 32-bit CRIU subprocess).&lt;br /&gt;
&lt;br /&gt;
'''Pros''':&lt;br /&gt;
* no kernel patches expected (not quite true: vDSO mremap() still needed support)&lt;br /&gt;
&lt;br /&gt;
'''Cons''':&lt;br /&gt;
* CRIU code base does not have special restore daemon to communicate with - code needs to be reworked&lt;br /&gt;
* 64-bit app can have 32-bit child, which could be a parent to 64-bit and so on - need to re-exec native 64-bit CRIU from 32-bit dummy (or 32-bit CRIU)&lt;br /&gt;
* need to send to the daemon properties of restoring processes, open fds to images, share memory with parsed ps_tree and so on... The number of IPC calls will slow down restore&lt;br /&gt;
* restoring becomes more complicated, and if looking forward to restoring user/pid sub-namespaces, it will be too entangled&lt;br /&gt;
* no optimized inheritance for task's properties those erase with exec()&lt;br /&gt;
* will need also another daemon for x32&lt;br /&gt;
&lt;br /&gt;
=== Restore with a flag to sigreturn() or arch_prctl() ===&lt;br /&gt;
&lt;br /&gt;
The initial attempt to do 32-bit C/R, was rejected by lkml community by many reasons. It should have swapped thread info flags (such as &amp;lt;code&amp;gt;TIF_ADDR32&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;TIF_IA32&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;TIF_X32&amp;lt;/code&amp;gt;), unmap native 64-bit vDSO blob from process's address space and map compatible 32-bit vDSO - all according to some bit in sigframe in &amp;lt;code&amp;gt;rt_sigreturn()&amp;lt;/code&amp;gt; call or some dedicated for it &amp;lt;code&amp;gt;arch_prctl()&amp;lt;/code&amp;gt; call.&lt;br /&gt;
&lt;br /&gt;
'''Pros''':&lt;br /&gt;
* Simple from the point of CRIU: just do sigreturn with a new bit set or call arch_prctl() and do sigreturn&lt;br /&gt;
&lt;br /&gt;
'''Cons''':&lt;br /&gt;
* If 32-bit vDSO image on restored host differ from dumped (in image), need to catch task after sigreturn and make jump trampolines separately - in case of arch_prctl() simpler ([https://lkml.org/lkml/2016/6/1/425 that's why arch_prctl was in initial RFC])&lt;br /&gt;
* Too many points of failure for one syscall, too complicated&lt;br /&gt;
* Just adding a way to swap those thread info flags from userspace would result in a new races/bugs (as e.g., TASK_SIZE macro depends on TIF_ADDR32, the mmap code may do unexpected things)&lt;br /&gt;
&lt;br /&gt;
After discussion in lkml, conclusion was: separate changing personality (like thread info flags) from API to map vDSO blobs, remove TIF_IA32 flag that differs 32 from 64-bit tasks and look on syscall's nature: compat syscall, x32 syscall or native syscall.&lt;br /&gt;
&lt;br /&gt;
=== Seizing with two 32-bit and 64-bit parasites ===&lt;br /&gt;
&lt;br /&gt;
'''Pros''':&lt;br /&gt;
* no 32-bit calls in 64-bit parasite and vice-versa&lt;br /&gt;
* no need in exit in parasite: ptrace code doesn't allow to set 32-bit regset to 64-bit task and the reverse, running parasite the same nature as task bereaves us from those limits&lt;br /&gt;
&lt;br /&gt;
'''Cons''':&lt;br /&gt;
* need to have two/three (for x32 also) blobs for seizing&lt;br /&gt;
* macros in makefiles to build two parasites&lt;br /&gt;
* serialization of parasite's answers: arguments to parasite differ in size - serialize them, which added not nice-looking and less readable C macros&lt;br /&gt;
&lt;br /&gt;
=== Current approach ===&lt;br /&gt;
&lt;br /&gt;
FIXME&lt;br /&gt;
&lt;br /&gt;
== Needs to be done (TODO) ==&lt;br /&gt;
&lt;br /&gt;
=== List of failed tests ===&lt;br /&gt;
&lt;br /&gt;
The table is being kept up-to-date by [[User:Dsafonov|Dsafonov]] with latest kernel/CRIU patches in his environment, some of which may be yet not in tree or even yet not sent.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Name&lt;br /&gt;
! Fail reason&lt;br /&gt;
|-&lt;br /&gt;
| futex-rl || sys_get_robust_list() should be compat syscall for 32-bit tasks: kernel keeps two different lists: &amp;lt;code&amp;gt;robust_list&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;compat_robust_list&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;task_struct&amp;lt;/code&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
| autofs || test's bug - hangs without C/R&lt;br /&gt;
|-&lt;br /&gt;
| vdso01 || need to add 32-bit vDSO symbols: __kernel_* (and check them with handlers in test)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Fixes for older kernels ===&lt;br /&gt;
&lt;br /&gt;
For kernels with backported mainline patches for 32-bit C/R (like vzkernel) there are a couple of things to do like different sizes of vdso/vvar (or vvar may not be even present).&lt;br /&gt;
&lt;br /&gt;
=== Kernel patch for vsyscall page ===&lt;br /&gt;
&lt;br /&gt;
That's emulated page, not a vma - affects only in /proc/&amp;lt;pid&amp;gt;/maps for restored process. Depends on !TIF_IA32 &amp;amp;&amp;amp; !TIF_X32 - Andy got patches for disabling the emulation on per-pid basics, for now I ran tests with &amp;lt;code&amp;gt;vsyscall=none&amp;lt;/code&amp;gt; boot parameter because zdtm.py checks maps before/after C/R.&lt;br /&gt;
&lt;br /&gt;
=== Error dump on x32-bit app dumping ===&lt;br /&gt;
&lt;br /&gt;
At this moment we'll support only compat ia32 applications, attempt to dump x32 compat binary should result in error.&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
* [https://github.com/xemul/criu/issues/43 github issue]&lt;br /&gt;
&lt;br /&gt;
[[Category: Development]]&lt;br /&gt;
[[Category: Under the hood‏‎]]&lt;/div&gt;</summary>
		<author><name>Dsafonov</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=Installation&amp;diff=4162</id>
		<title>Installation</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=Installation&amp;diff=4162"/>
		<updated>2017-04-20T16:51:51Z</updated>

		<summary type="html">&lt;p&gt;Dsafonov: /* Compiler and C Library */ Delete about 32-bit in criu-dev only&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;code&amp;gt;criu&amp;lt;/code&amp;gt; is an utility to checkpoint/restore a process tree. This page describes how to manually build and install prerequisites and the tool itself.&lt;br /&gt;
&lt;br /&gt;
== Installing from packages ==&lt;br /&gt;
&lt;br /&gt;
Some distributions provide ready-to-use [[packages]]. If no, or the CRIU version you want is not yet there, you will need to get CRIU sources and compile it.&lt;br /&gt;
&lt;br /&gt;
== Obtaining CRIU Source ==&lt;br /&gt;
&lt;br /&gt;
You can download the source code as a release tarball or sync the [https://github.com/xemul/criu git repository]. If you plan to modify CRIU sources the latter way is highly recommended.&lt;br /&gt;
&lt;br /&gt;
=== Getting source tarball ===&lt;br /&gt;
: {{Latest release}}&lt;br /&gt;
&lt;br /&gt;
=== Cloning git repository ===&lt;br /&gt;
 git clone https://github.com/xemul/criu&lt;br /&gt;
&lt;br /&gt;
== Dependencies ==&lt;br /&gt;
&lt;br /&gt;
=== Compiler and C Library ===&lt;br /&gt;
&lt;br /&gt;
CRIU is mostly written in C and the build system is based on Makefiles. Thus just install standard &amp;lt;code&amp;gt;gcc&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt; packages (on Debian, &amp;lt;code&amp;gt;[https://packages.debian.org/build-essential build-essential]&amp;lt;/code&amp;gt; will pull in both at once).&lt;br /&gt;
&lt;br /&gt;
For building on x86 with compatible 32-bit applications C/R support you will need &amp;lt;code&amp;gt;libc6-dev-i386, gcc-multilib&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;gcc&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
If you are cross compiling for ARM, use distribution packages or download prebuilt toolchains from Linaro.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
Downloading Linaro toolchains&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
 sudo apt-get install lib32stdc++6 lib32z1 # These are ia32 binaries&lt;br /&gt;
 mkdir -p deps/`uname -m`-linux-gnu&lt;br /&gt;
 cd deps&lt;br /&gt;
 wget http://releases.linaro.org/14.09/components/toolchain/binaries/gcc-linaro-arm-linux-gnueabihf-4.9-2014.09_linux.tar.xz&lt;br /&gt;
 tar --strip=1 -C `uname -m`-linux-gnu -xf gcc-linaro-arm-linux-gnueabihf-4.9-2014.09_linux.tar.xz&lt;br /&gt;
 wget http://releases.linaro.org/14.09/components/toolchain/binaries/gcc-linaro-aarch64-linux-gnu-4.9-2014.09_linux.tar.xz&lt;br /&gt;
 tar --strip=1 -C `uname -m`-linux-gnu -xf gcc-linaro-aarch64-linux-gnu-4.9-2014.09_linux.tar.xz&lt;br /&gt;
 cd ..&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Protocol Buffers ===&lt;br /&gt;
&lt;br /&gt;
CRIU uses the [https://developers.google.com/protocol-buffers/ Google Protocol Buffers] to read and write [[images]] and thus requires [https://github.com/protobuf-c/protobuf-c C language bindings]. The &amp;lt;code&amp;gt;protoc&amp;lt;/code&amp;gt; tool is required at build time and the &amp;lt;code&amp;gt;libprotobuf-c.so&amp;lt;/code&amp;gt; shared object is required at build and run time. [[CRIT]] also uses python language bindings for protocol buffers and requires the &amp;lt;code&amp;gt;descriptor.proto&amp;lt;/code&amp;gt; file typically provided by a distribution's protobuf development package.&lt;br /&gt;
&lt;br /&gt;
==== Distribution Packages ====&lt;br /&gt;
The easiest way is to install distribution packages.&lt;br /&gt;
&lt;br /&gt;
* RPM package names&lt;br /&gt;
** &amp;lt;code&amp;gt;group Development\ Tools&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;protobuf&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;protobuf-c&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;protobuf-c-devel&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;protobuf-compiler&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;protobuf-devel&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;protobuf-python&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;libnet-devel&amp;lt;/code&amp;gt;&lt;br /&gt;
* Debian package names&lt;br /&gt;
** &amp;lt;code&amp;gt;build-essential&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;libprotobuf-dev&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;libprotobuf-c0-dev&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;protobuf-c-compiler&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;protobuf-compiler&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;python-protobuf&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;libnet1-dev&amp;lt;/code&amp;gt;&lt;br /&gt;
* Ubuntu&lt;br /&gt;
** The below will get your freshly installed Ubuntu host ready to compile criu. &amp;quot;--no-install-recommends&amp;quot; parameter is to avoid asciidoc pulling in a lot of dependencies.&lt;br /&gt;
** sudo apt-get install --no-install-recommends git build-essential libprotobuf-dev libprotobuf-c0-dev protobuf-c-compiler protobuf-compiler python-protobuf libnl-3-dev libpth-dev pkg-config libcap-dev asciidoc libnet&lt;br /&gt;
&lt;br /&gt;
==== Building Protocol Buffers From Source ====&lt;br /&gt;
If you would like to build from source, you can use the following commands to obtain the source code repositories, configure, and build the code. On a Debian based system, you may have to install &amp;lt;code&amp;gt;autoconf curl g++ libtool&amp;lt;/code&amp;gt; packages first.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
To build protobuf&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
 cd deps&lt;br /&gt;
 git clone https://github.com/google/protobuf.git protobuf&lt;br /&gt;
 cd protobuf&lt;br /&gt;
 ./autogen.sh&lt;br /&gt;
 ./configure --prefix=`pwd`/../`uname -m`-linux-gnu&lt;br /&gt;
 make&lt;br /&gt;
 make install&lt;br /&gt;
 cd ../..&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
To build protobuf-c&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
 cd deps&lt;br /&gt;
 git clone https://github.com/protobuf-c/protobuf-c.git protobuf-c&lt;br /&gt;
 cd protobuf-c&lt;br /&gt;
 ./autogen.sh&lt;br /&gt;
 mkdir ../pbc-`uname -m`&lt;br /&gt;
 cd ../pbc-`uname -m`&lt;br /&gt;
 ../protobuf-c/configure --prefix=`pwd`/../`uname -m`-linux-gnu \&lt;br /&gt;
   PKG_CONFIG_PATH=`pwd`/../`uname -m`-linux-gnu/lib/pkgconfig&lt;br /&gt;
 make&lt;br /&gt;
 make install&lt;br /&gt;
 cd ../..&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
To cross-compile for ARM some more tricks will be required.&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
For ARMv7&lt;br /&gt;
&lt;br /&gt;
 cd deps&lt;br /&gt;
 mkdir -p pbc-arm&lt;br /&gt;
 cd pbc-arm&lt;br /&gt;
 ../protobuf-c/configure --host=arm-linux-gnueabihf --prefix=`pwd`/../arm-linux-gnueabihf \&lt;br /&gt;
                         --disable-protoc PATH=`pwd`/../`uname -m`-linux-gnu/bin:$PATH&lt;br /&gt;
 make PATH=`pwd`/../`uname -m`-linux-gnu/bin:$PATH&lt;br /&gt;
 make install PATH=`pwd`/../`uname -m`-linux-gnu/bin:$PATH&lt;br /&gt;
 cd ../..&lt;br /&gt;
&lt;br /&gt;
For ARM8&lt;br /&gt;
&lt;br /&gt;
 cd deps&lt;br /&gt;
 mkdir -p pbc-aarch64&lt;br /&gt;
 cd pbc-aarch64&lt;br /&gt;
  ../protobuf-c/configure --host=aarch64-linux-gnu --prefix=`pwd`/../aarch64-linux-gnu \&lt;br /&gt;
                          --disable-protoc PATH=`pwd`/../`uname -m`-linux-gnu/bin:$PATH&lt;br /&gt;
 make PATH=`pwd`/../`uname -m`-linux-gnu/bin:$PATH&lt;br /&gt;
 make install PATH=`pwd`/../`uname -m`-linux-gnu/bin:$PATH&lt;br /&gt;
 cd ../..&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Other deps ===&lt;br /&gt;
* &amp;lt;code&amp;gt;pkg-config&amp;lt;/code&amp;gt; to check on build library dependencies.&lt;br /&gt;
* &amp;lt;code&amp;gt;libnl3&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;libnl3-devel&amp;lt;/code&amp;gt; (RPM distros) or &amp;lt;code&amp;gt;libnl-3-dev&amp;lt;/code&amp;gt; (DEB distros) for network operations.&lt;br /&gt;
* &amp;lt;code&amp;gt;python-ipaddr&amp;lt;/code&amp;gt; is used by CRIT to pretty-print ip.&lt;br /&gt;
* If &amp;lt;code&amp;gt;libbsd&amp;lt;/code&amp;gt; available, CRIU will be compiled with setproctitle() support. It will allow to make process titles of service workers to be more verbose.&lt;br /&gt;
* The iproute2 tool version 3.5.0 or higher is needed for dumping network namespaces. The latest one can be cloned from [http://git.kernel.org/?p=linux/kernel/git/shemminger/iproute2.git;a=summary iproute2]. It should be compiled and a path to ip written in the environment variable &amp;lt;code&amp;gt;CR_IP_TOOL&amp;lt;/code&amp;gt;.&lt;br /&gt;
* &amp;lt;code&amp;gt;libcap-devel&amp;lt;/code&amp;gt; (RPM) or &amp;lt;code&amp;gt;libcap-dev&amp;lt;/code&amp;gt; (DEB)&lt;br /&gt;
* If you would like to use &amp;lt;code&amp;gt;make test&amp;lt;/code&amp;gt; you should install &amp;lt;code&amp;gt;libaio-devel&amp;lt;/code&amp;gt; (RPM) or &amp;lt;code&amp;gt;libaio-dev&amp;lt;/code&amp;gt; (DEB).&lt;br /&gt;
* For test launcher &amp;lt;code&amp;gt;zdtm.py&amp;lt;/code&amp;gt; you need &amp;lt;code&amp;gt;PyYAML&amp;lt;/code&amp;gt; (RPM) or &amp;lt;code&amp;gt;python-yaml&amp;lt;/code&amp;gt; (DEB).&lt;br /&gt;
&lt;br /&gt;
== Linux Kernel ==&lt;br /&gt;
&lt;br /&gt;
Linux kernel v3.11 or newer is required, with some specific options set. If your distribution does not provide needed kernel, you might want to compile one yourself.&lt;br /&gt;
&lt;br /&gt;
=== Configuring the kernel ===&lt;br /&gt;
&lt;br /&gt;
Most likely the first thing to enable is the &amp;lt;code&amp;gt;CONFIG_EXPERT=y&amp;lt;/code&amp;gt; (General setup -&amp;gt; Configure standard kernel features (expert users)) option, which on x86_64 depends on the &amp;lt;code&amp;gt;CONFIG_EMBEDDED=y&amp;lt;/code&amp;gt; (General setup -&amp;gt; Embedded system) one (welcome to Kconfig reverse chains hell).&lt;br /&gt;
&lt;br /&gt;
The following options must be enabled for CRIU to work:&lt;br /&gt;
&lt;br /&gt;
* ''General setup'' options&lt;br /&gt;
** &amp;lt;code&amp;gt;CONFIG_CHECKPOINT_RESTORE=y&amp;lt;/code&amp;gt; (Checkpoint/restore support)&lt;br /&gt;
** &amp;lt;code&amp;gt;CONFIG_NAMESPACES=y&amp;lt;/code&amp;gt; (Namespaces support)&lt;br /&gt;
** &amp;lt;code&amp;gt;CONFIG_UTS_NS=y&amp;lt;/code&amp;gt; (Namespaces support -&amp;gt; UTS namespace)&lt;br /&gt;
** &amp;lt;code&amp;gt;CONFIG_IPC_NS=y&amp;lt;/code&amp;gt; (Namespaces support -&amp;gt; IPC namespace)&lt;br /&gt;
** &amp;lt;code&amp;gt;CONFIG_PID_NS=y&amp;lt;/code&amp;gt; (Namespaces support -&amp;gt; PID namespaces)&lt;br /&gt;
** &amp;lt;code&amp;gt;CONFIG_NET_NS=y&amp;lt;/code&amp;gt; (Namespaces support -&amp;gt; Network namespace)&lt;br /&gt;
** &amp;lt;code&amp;gt;CONFIG_FHANDLE=y&amp;lt;/code&amp;gt; (Open by fhandle syscalls)&lt;br /&gt;
** &amp;lt;code&amp;gt;CONFIG_EVENTFD=y&amp;lt;/code&amp;gt; (Enable eventfd() system call)&lt;br /&gt;
** &amp;lt;code&amp;gt;CONFIG_EPOLL=y&amp;lt;/code&amp;gt; (Enable eventpoll support)&lt;br /&gt;
* ''Networking support -&amp;gt; Networking options'' options for sock-diag subsystem&lt;br /&gt;
** &amp;lt;code&amp;gt;CONFIG_UNIX_DIAG=y&amp;lt;/code&amp;gt; (Unix domain sockets -&amp;gt; UNIX: socket monitoring interface)&lt;br /&gt;
** &amp;lt;code&amp;gt;CONFIG_INET_DIAG=y&amp;lt;/code&amp;gt; (TCP/IP networking -&amp;gt; INET: socket monitoring interface)&lt;br /&gt;
** &amp;lt;code&amp;gt;CONFIG_INET_UDP_DIAG=y&amp;lt;/code&amp;gt; (TCP/IP networking -&amp;gt; INET: socket monitoring interface -&amp;gt; UDP: socket monitoring interface)&lt;br /&gt;
** &amp;lt;code&amp;gt;CONFIG_PACKET_DIAG=y&amp;lt;/code&amp;gt; (Packet socket -&amp;gt; Packet: sockets monitoring interface)&lt;br /&gt;
** &amp;lt;code&amp;gt;CONFIG_NETLINK_DIAG=y&amp;lt;/code&amp;gt; (Netlink socket -&amp;gt; Netlink: sockets monitoring interface)&lt;br /&gt;
&lt;br /&gt;
Other options not required by CRIU, but C/R supported ([[ZDTM test suite]] may fail without them):&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_INOTIFY_USER=y&amp;lt;/code&amp;gt; (File systems -&amp;gt; Inotify support for userspace)&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_FANOTIFY=y&amp;lt;/code&amp;gt; (File systems -&amp;gt; Filesystem wide access notification)&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_MEMCG=y&amp;lt;/code&amp;gt; (General setup -&amp;gt; Control Group support -&amp;gt; Memory controller)&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_CGROUP_DEVICE=y&amp;lt;/code&amp;gt; (General setup -&amp;gt; Control Group support -&amp;gt; Device controller)&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_MACVLAN=y&amp;lt;/code&amp;gt; (Device Drivers -&amp;gt; Network device support -&amp;gt; Network core driver support -&amp;gt; MAC-VLAN support)&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_BRIDGE=y&amp;lt;/code&amp;gt; (Networking support -&amp;gt; Networking options -&amp;gt; 802.1d Ethernet Bridging)&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_BINFMT_MISC=y&amp;lt;/code&amp;gt; (Userspace binary formats -&amp;gt; Kernel support for MISC binaries)&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_IA32_EMULATION=y&amp;lt;/code&amp;gt; (x86 only) (Executable file formats -&amp;gt; Emulations -&amp;gt; IA32 Emulation)&lt;br /&gt;
&lt;br /&gt;
For some [[usage scenarios]] there is an ability to track memory changes and produce [[incremental dumps]]. Need to enable the &amp;lt;code&amp;gt;CONFIG_MEM_SOFT_DIRTY=y&amp;lt;/code&amp;gt; (optional) (Processor type and features -&amp;gt; Track memory changes).&lt;br /&gt;
&lt;br /&gt;
Note we also have our [[custom kernel]], which might contain some experimental CRIU related patches.&lt;br /&gt;
&lt;br /&gt;
== Building CRIU From Source ==&lt;br /&gt;
&lt;br /&gt;
=== Native Compilation ===&lt;br /&gt;
Simply run &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt; in the CRIU source directory.&lt;br /&gt;
&lt;br /&gt;
=== Compilation in Docker container ===&lt;br /&gt;
&lt;br /&gt;
There's a ''docker-build'' target in Makefile which builds CRIU in Ubuntu Docker container. Just run &amp;lt;code&amp;gt;make docker-build&amp;lt;/code&amp;gt; and that's it.&lt;br /&gt;
&lt;br /&gt;
=== Non-standard compilation ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
Building natively, but specifying built dependencies manually&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
 cd deps&lt;br /&gt;
 rsync -a --exclude=.git --exclude=deps .. criu-`uname -m`&lt;br /&gt;
 cd criu-`uname -m`&lt;br /&gt;
 make \&lt;br /&gt;
   USERCFLAGS=&amp;quot;-I`pwd`/../`uname -m`-linux-gnu/include -L`pwd`/../`uname -m`-linux-gnu/lib&amp;quot; \&lt;br /&gt;
   PATH=&amp;quot;`pwd`/../`uname -m`-linux-gnu/bin:$PATH&amp;quot;&lt;br /&gt;
 sudo LD_LIBRARY_PATH=`pwd`/../`uname -m`-linux-gnu/lib ./criu check&lt;br /&gt;
 cd ../..&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
Cross Compilation for ARM&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
ARMv7&lt;br /&gt;
 cd deps&lt;br /&gt;
 rsync -a --exclude=.git --exclude=deps .. criu-arm&lt;br /&gt;
 cd criu-arm&lt;br /&gt;
 make \&lt;br /&gt;
   ARCH=arm \&lt;br /&gt;
   CROSS_COMPILE=`pwd`/../`uname -m`-linux-gnu/bin/arm-linux-gnueabihf- \&lt;br /&gt;
   USERCFLAGS=&amp;quot;-I`pwd`/../arm-linux-gnueabihf/include -L`pwd`/../arm-linux-gnueabihf/lib&amp;quot; \&lt;br /&gt;
   PATH=&amp;quot;`pwd`/../`uname -m`-linux-gnu/bin:$PATH&amp;quot;&lt;br /&gt;
 cd ../..&lt;br /&gt;
&lt;br /&gt;
ARMv8&lt;br /&gt;
  cd deps&lt;br /&gt;
  rsync -a --exclude=.git --exclude=deps .. criu-aarch64&lt;br /&gt;
  cd criu-aarch64&lt;br /&gt;
  make \&lt;br /&gt;
   ARCH=aarch64 \&lt;br /&gt;
   CROSS_COMPILE=`pwd`/../`uname -m`-linux-gnu/bin/aarch64-linux-gnu- \&lt;br /&gt;
   USERCFLAGS=&amp;quot;-I`pwd`/../aarch64-linux-gnu/include -L`pwd`/../aarch64-linux-gnu/lib&amp;quot; \&lt;br /&gt;
   PATH=&amp;quot;`pwd`/../`uname -m`-linux-gnu/bin:$PATH&amp;quot;&lt;br /&gt;
  cd ../..&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
&lt;br /&gt;
CRIU has functionality that is either optional or behaves differently depending on the kernel CRIU is running on. By default build process includes maximum of it, but this behavior can be changed.&lt;br /&gt;
&lt;br /&gt;
''Main article: [[Configuring]]''&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
CRIU works perfectly even when run from the sources directory (with the &amp;quot;./criu&amp;quot; command), but if you want to have in standard paths run &amp;lt;code&amp;gt;make install&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
You may need to install the following packages to generate docs in Debian-based OS's to avoid errors from install-man:&lt;br /&gt;
* &amp;lt;code&amp;gt;asciidoc&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;xmlto&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Checking That It Works ==&lt;br /&gt;
&lt;br /&gt;
First thing to do is to run &amp;lt;code&amp;gt;criu check&amp;lt;/code&amp;gt;. At the end it should say &amp;quot;Looks OK&amp;quot;, if it doesn't the messages on the screen explain what functionality is missing. &lt;br /&gt;
&lt;br /&gt;
Some kernel functionality is required in rare cases and may not block the dump (but sometimes may). These features can be checked by adding the &amp;lt;code&amp;gt;--extra&amp;lt;/code&amp;gt; flag.&lt;br /&gt;
&lt;br /&gt;
If you're using our custom kernel, then the &amp;lt;code&amp;gt;--all&amp;lt;/code&amp;gt; option can be used, in this case CRIU would check for ''all'' the kernel features to work.&lt;br /&gt;
&lt;br /&gt;
You can then try running the [[ZDTM Test Suite]] which sits in the &amp;lt;code&amp;gt;tests/zdtm/&amp;lt;/code&amp;gt; directory.&lt;br /&gt;
&lt;br /&gt;
== Further reading ==&lt;br /&gt;
&lt;br /&gt;
* [[Checking the kernel]]&lt;br /&gt;
* [[Usage]]&lt;br /&gt;
* [[Advanced usage]]&lt;br /&gt;
* [[:Category:HOWTO]]&lt;br /&gt;
&lt;br /&gt;
[[Category:HOWTO]]&lt;/div&gt;</summary>
		<author><name>Dsafonov</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=Installation&amp;diff=4157</id>
		<title>Installation</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=Installation&amp;diff=4157"/>
		<updated>2017-04-19T12:15:59Z</updated>

		<summary type="html">&lt;p&gt;Dsafonov: /* Configuring the kernel */ add BINFMT_MISC - zdtm.py fails if it can't mount it&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;code&amp;gt;criu&amp;lt;/code&amp;gt; is an utility to checkpoint/restore a process tree. This page describes how to manually build and install prerequisites and the tool itself.&lt;br /&gt;
&lt;br /&gt;
== Installing from packages ==&lt;br /&gt;
&lt;br /&gt;
Some distributions provide ready-to-use [[packages]]. If no, or the CRIU version you want is not yet there, you will need to get CRIU sources and compile it.&lt;br /&gt;
&lt;br /&gt;
== Obtaining CRIU Source ==&lt;br /&gt;
&lt;br /&gt;
You can download the source code as a release tarball or sync the [https://github.com/xemul/criu git repository]. If you plan to modify CRIU sources the latter way is highly recommended.&lt;br /&gt;
&lt;br /&gt;
=== Getting source tarball ===&lt;br /&gt;
: {{Latest release}}&lt;br /&gt;
&lt;br /&gt;
=== Cloning git repository ===&lt;br /&gt;
 git clone https://github.com/xemul/criu&lt;br /&gt;
&lt;br /&gt;
== Dependencies ==&lt;br /&gt;
&lt;br /&gt;
=== Compiler and C Library ===&lt;br /&gt;
&lt;br /&gt;
CRIU is mostly written in C and the build system is based on Makefiles. Thus just install standard &amp;lt;code&amp;gt;gcc&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt; packages (on Debian, &amp;lt;code&amp;gt;[https://packages.debian.org/build-essential build-essential]&amp;lt;/code&amp;gt; will pull in both at once).&lt;br /&gt;
&lt;br /&gt;
For building on x86 with compatible 32-bit applications C/R support you will need &amp;lt;code&amp;gt;libc6-dev-i386, gcc-multilib&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;gcc&amp;lt;/code&amp;gt; (only in criu-dev for now, kernel patching needed).&lt;br /&gt;
&lt;br /&gt;
If you are cross compiling for ARM, use distribution packages or download prebuilt toolchains from Linaro.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
Downloading Linaro toolchains&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
 sudo apt-get install lib32stdc++6 lib32z1 # These are ia32 binaries&lt;br /&gt;
 mkdir -p deps/`uname -m`-linux-gnu&lt;br /&gt;
 cd deps&lt;br /&gt;
 wget http://releases.linaro.org/14.09/components/toolchain/binaries/gcc-linaro-arm-linux-gnueabihf-4.9-2014.09_linux.tar.xz&lt;br /&gt;
 tar --strip=1 -C `uname -m`-linux-gnu -xf gcc-linaro-arm-linux-gnueabihf-4.9-2014.09_linux.tar.xz&lt;br /&gt;
 wget http://releases.linaro.org/14.09/components/toolchain/binaries/gcc-linaro-aarch64-linux-gnu-4.9-2014.09_linux.tar.xz&lt;br /&gt;
 tar --strip=1 -C `uname -m`-linux-gnu -xf gcc-linaro-aarch64-linux-gnu-4.9-2014.09_linux.tar.xz&lt;br /&gt;
 cd ..&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Protocol Buffers ===&lt;br /&gt;
&lt;br /&gt;
CRIU uses the [https://developers.google.com/protocol-buffers/ Google Protocol Buffers] to read and write [[images]] and thus requires [https://github.com/protobuf-c/protobuf-c C language bindings]. The &amp;lt;code&amp;gt;protoc&amp;lt;/code&amp;gt; tool is required at build time and the &amp;lt;code&amp;gt;libprotobuf-c.so&amp;lt;/code&amp;gt; shared object is required at build and run time. [[CRIT]] also uses python language bindings for protocol buffers and requires the &amp;lt;code&amp;gt;descriptor.proto&amp;lt;/code&amp;gt; file typically provided by a distribution's protobuf development package.&lt;br /&gt;
&lt;br /&gt;
==== Distribution Packages ====&lt;br /&gt;
The easiest way is to install distribution packages.&lt;br /&gt;
&lt;br /&gt;
* RPM package names&lt;br /&gt;
** &amp;lt;code&amp;gt;group Development\ Tools&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;protobuf&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;protobuf-c&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;protobuf-c-devel&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;protobuf-compiler&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;protobuf-devel&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;protobuf-python&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;libnet-devel&amp;lt;/code&amp;gt;&lt;br /&gt;
* Debian package names&lt;br /&gt;
** &amp;lt;code&amp;gt;build-essential&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;libprotobuf-dev&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;libprotobuf-c0-dev&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;protobuf-c-compiler&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;protobuf-compiler&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;python-protobuf&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;libnet1-dev&amp;lt;/code&amp;gt;&lt;br /&gt;
* Ubuntu&lt;br /&gt;
** The below will get your freshly installed Ubuntu host ready to compile criu. &amp;quot;--no-install-recommends&amp;quot; parameter is to avoid asciidoc pulling in a lot of dependencies.&lt;br /&gt;
** sudo apt-get install --no-install-recommends git build-essential libprotobuf-dev libprotobuf-c0-dev protobuf-c-compiler protobuf-compiler python-protobuf libnl-3-dev libpth-dev pkg-config libcap-dev asciidoc libnet&lt;br /&gt;
&lt;br /&gt;
==== Building Protocol Buffers From Source ====&lt;br /&gt;
If you would like to build from source, you can use the following commands to obtain the source code repositories, configure, and build the code. On a Debian based system, you may have to install &amp;lt;code&amp;gt;autoconf curl g++ libtool&amp;lt;/code&amp;gt; packages first.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
To build protobuf&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
 cd deps&lt;br /&gt;
 git clone https://github.com/google/protobuf.git protobuf&lt;br /&gt;
 cd protobuf&lt;br /&gt;
 ./autogen.sh&lt;br /&gt;
 ./configure --prefix=`pwd`/../`uname -m`-linux-gnu&lt;br /&gt;
 make&lt;br /&gt;
 make install&lt;br /&gt;
 cd ../..&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
To build protobuf-c&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
 cd deps&lt;br /&gt;
 git clone https://github.com/protobuf-c/protobuf-c.git protobuf-c&lt;br /&gt;
 cd protobuf-c&lt;br /&gt;
 ./autogen.sh&lt;br /&gt;
 mkdir ../pbc-`uname -m`&lt;br /&gt;
 cd ../pbc-`uname -m`&lt;br /&gt;
 ../protobuf-c/configure --prefix=`pwd`/../`uname -m`-linux-gnu \&lt;br /&gt;
   PKG_CONFIG_PATH=`pwd`/../`uname -m`-linux-gnu/lib/pkgconfig&lt;br /&gt;
 make&lt;br /&gt;
 make install&lt;br /&gt;
 cd ../..&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
To cross-compile for ARM some more tricks will be required.&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
For ARMv7&lt;br /&gt;
&lt;br /&gt;
 cd deps&lt;br /&gt;
 mkdir -p pbc-arm&lt;br /&gt;
 cd pbc-arm&lt;br /&gt;
 ../protobuf-c/configure --host=arm-linux-gnueabihf --prefix=`pwd`/../arm-linux-gnueabihf \&lt;br /&gt;
                         --disable-protoc PATH=`pwd`/../`uname -m`-linux-gnu/bin:$PATH&lt;br /&gt;
 make PATH=`pwd`/../`uname -m`-linux-gnu/bin:$PATH&lt;br /&gt;
 make install PATH=`pwd`/../`uname -m`-linux-gnu/bin:$PATH&lt;br /&gt;
 cd ../..&lt;br /&gt;
&lt;br /&gt;
For ARM8&lt;br /&gt;
&lt;br /&gt;
 cd deps&lt;br /&gt;
 mkdir -p pbc-aarch64&lt;br /&gt;
 cd pbc-aarch64&lt;br /&gt;
  ../protobuf-c/configure --host=aarch64-linux-gnu --prefix=`pwd`/../aarch64-linux-gnu \&lt;br /&gt;
                          --disable-protoc PATH=`pwd`/../`uname -m`-linux-gnu/bin:$PATH&lt;br /&gt;
 make PATH=`pwd`/../`uname -m`-linux-gnu/bin:$PATH&lt;br /&gt;
 make install PATH=`pwd`/../`uname -m`-linux-gnu/bin:$PATH&lt;br /&gt;
 cd ../..&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Other deps ===&lt;br /&gt;
* &amp;lt;code&amp;gt;pkg-config&amp;lt;/code&amp;gt; to check on build library dependencies.&lt;br /&gt;
* &amp;lt;code&amp;gt;libnl3&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;libnl3-devel&amp;lt;/code&amp;gt; (RPM distros) or &amp;lt;code&amp;gt;libnl-3-dev&amp;lt;/code&amp;gt; (DEB distros) for network operations.&lt;br /&gt;
* &amp;lt;code&amp;gt;python-ipaddr&amp;lt;/code&amp;gt; is used by CRIT to pretty-print ip.&lt;br /&gt;
* If &amp;lt;code&amp;gt;libbsd&amp;lt;/code&amp;gt; available, CRIU will be compiled with setproctitle() support. It will allow to make process titles of service workers to be more verbose.&lt;br /&gt;
* The iproute2 tool version 3.5.0 or higher is needed for dumping network namespaces. The latest one can be cloned from [http://git.kernel.org/?p=linux/kernel/git/shemminger/iproute2.git;a=summary iproute2]. It should be compiled and a path to ip written in the environment variable &amp;lt;code&amp;gt;CR_IP_TOOL&amp;lt;/code&amp;gt;.&lt;br /&gt;
* &amp;lt;code&amp;gt;libcap-devel&amp;lt;/code&amp;gt; (RPM) or &amp;lt;code&amp;gt;libcap-dev&amp;lt;/code&amp;gt; (DEB)&lt;br /&gt;
* If you would like to use &amp;lt;code&amp;gt;make test&amp;lt;/code&amp;gt; you should install &amp;lt;code&amp;gt;libaio-devel&amp;lt;/code&amp;gt; (RPM) or &amp;lt;code&amp;gt;libaio-dev&amp;lt;/code&amp;gt; (DEB).&lt;br /&gt;
* For test launcher &amp;lt;code&amp;gt;zdtm.py&amp;lt;/code&amp;gt; you need &amp;lt;code&amp;gt;PyYAML&amp;lt;/code&amp;gt; (RPM) or &amp;lt;code&amp;gt;python-yaml&amp;lt;/code&amp;gt; (DEB).&lt;br /&gt;
&lt;br /&gt;
== Linux Kernel ==&lt;br /&gt;
&lt;br /&gt;
Linux kernel v3.11 or newer is required, with some specific options set. If your distribution does not provide needed kernel, you might want to compile one yourself.&lt;br /&gt;
&lt;br /&gt;
=== Configuring the kernel ===&lt;br /&gt;
&lt;br /&gt;
Most likely the first thing to enable is the &amp;lt;code&amp;gt;CONFIG_EXPERT=y&amp;lt;/code&amp;gt; (General setup -&amp;gt; Configure standard kernel features (expert users)) option, which on x86_64 depends on the &amp;lt;code&amp;gt;CONFIG_EMBEDDED=y&amp;lt;/code&amp;gt; (General setup -&amp;gt; Embedded system) one (welcome to Kconfig reverse chains hell).&lt;br /&gt;
&lt;br /&gt;
The following options must be enabled for CRIU to work:&lt;br /&gt;
&lt;br /&gt;
* ''General setup'' options&lt;br /&gt;
** &amp;lt;code&amp;gt;CONFIG_CHECKPOINT_RESTORE=y&amp;lt;/code&amp;gt; (Checkpoint/restore support)&lt;br /&gt;
** &amp;lt;code&amp;gt;CONFIG_NAMESPACES=y&amp;lt;/code&amp;gt; (Namespaces support)&lt;br /&gt;
** &amp;lt;code&amp;gt;CONFIG_UTS_NS=y&amp;lt;/code&amp;gt; (Namespaces support -&amp;gt; UTS namespace)&lt;br /&gt;
** &amp;lt;code&amp;gt;CONFIG_IPC_NS=y&amp;lt;/code&amp;gt; (Namespaces support -&amp;gt; IPC namespace)&lt;br /&gt;
** &amp;lt;code&amp;gt;CONFIG_PID_NS=y&amp;lt;/code&amp;gt; (Namespaces support -&amp;gt; PID namespaces)&lt;br /&gt;
** &amp;lt;code&amp;gt;CONFIG_NET_NS=y&amp;lt;/code&amp;gt; (Namespaces support -&amp;gt; Network namespace)&lt;br /&gt;
** &amp;lt;code&amp;gt;CONFIG_FHANDLE=y&amp;lt;/code&amp;gt; (Open by fhandle syscalls)&lt;br /&gt;
** &amp;lt;code&amp;gt;CONFIG_EVENTFD=y&amp;lt;/code&amp;gt; (Enable eventfd() system call)&lt;br /&gt;
** &amp;lt;code&amp;gt;CONFIG_EPOLL=y&amp;lt;/code&amp;gt; (Enable eventpoll support)&lt;br /&gt;
* ''Networking support -&amp;gt; Networking options'' options for sock-diag subsystem&lt;br /&gt;
** &amp;lt;code&amp;gt;CONFIG_UNIX_DIAG=y&amp;lt;/code&amp;gt; (Unix domain sockets -&amp;gt; UNIX: socket monitoring interface)&lt;br /&gt;
** &amp;lt;code&amp;gt;CONFIG_INET_DIAG=y&amp;lt;/code&amp;gt; (TCP/IP networking -&amp;gt; INET: socket monitoring interface)&lt;br /&gt;
** &amp;lt;code&amp;gt;CONFIG_INET_UDP_DIAG=y&amp;lt;/code&amp;gt; (TCP/IP networking -&amp;gt; INET: socket monitoring interface -&amp;gt; UDP: socket monitoring interface)&lt;br /&gt;
** &amp;lt;code&amp;gt;CONFIG_PACKET_DIAG=y&amp;lt;/code&amp;gt; (Packet socket -&amp;gt; Packet: sockets monitoring interface)&lt;br /&gt;
** &amp;lt;code&amp;gt;CONFIG_NETLINK_DIAG=y&amp;lt;/code&amp;gt; (Netlink socket -&amp;gt; Netlink: sockets monitoring interface)&lt;br /&gt;
&lt;br /&gt;
Other options not required by CRIU, but C/R supported ([[ZDTM test suite]] may fail without them):&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_INOTIFY_USER=y&amp;lt;/code&amp;gt; (File systems -&amp;gt; Inotify support for userspace)&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_FANOTIFY=y&amp;lt;/code&amp;gt; (File systems -&amp;gt; Filesystem wide access notification)&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_MEMCG=y&amp;lt;/code&amp;gt; (General setup -&amp;gt; Control Group support -&amp;gt; Memory controller)&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_CGROUP_DEVICE=y&amp;lt;/code&amp;gt; (General setup -&amp;gt; Control Group support -&amp;gt; Device controller)&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_MACVLAN=y&amp;lt;/code&amp;gt; (Device Drivers -&amp;gt; Network device support -&amp;gt; Network core driver support -&amp;gt; MAC-VLAN support)&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_BRIDGE=y&amp;lt;/code&amp;gt; (Networking support -&amp;gt; Networking options -&amp;gt; 802.1d Ethernet Bridging)&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_BINFMT_MISC=y&amp;lt;/code&amp;gt; (Userspace binary formats -&amp;gt; Kernel support for MISC binaries)&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_IA32_EMULATION=y&amp;lt;/code&amp;gt; (x86 only) (Executable file formats -&amp;gt; Emulations -&amp;gt; IA32 Emulation)&lt;br /&gt;
&lt;br /&gt;
For some [[usage scenarios]] there is an ability to track memory changes and produce [[incremental dumps]]. Need to enable the &amp;lt;code&amp;gt;CONFIG_MEM_SOFT_DIRTY=y&amp;lt;/code&amp;gt; (optional) (Processor type and features -&amp;gt; Track memory changes).&lt;br /&gt;
&lt;br /&gt;
Note we also have our [[custom kernel]], which might contain some experimental CRIU related patches.&lt;br /&gt;
&lt;br /&gt;
== Building CRIU From Source ==&lt;br /&gt;
&lt;br /&gt;
=== Native Compilation ===&lt;br /&gt;
Simply run &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt; in the CRIU source directory.&lt;br /&gt;
&lt;br /&gt;
=== Compilation in Docker container ===&lt;br /&gt;
&lt;br /&gt;
There's a ''docker-build'' target in Makefile which builds CRIU in Ubuntu Docker container. Just run &amp;lt;code&amp;gt;make docker-build&amp;lt;/code&amp;gt; and that's it.&lt;br /&gt;
&lt;br /&gt;
=== Non-standard compilation ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
Building natively, but specifying built dependencies manually&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
 cd deps&lt;br /&gt;
 rsync -a --exclude=.git --exclude=deps .. criu-`uname -m`&lt;br /&gt;
 cd criu-`uname -m`&lt;br /&gt;
 make \&lt;br /&gt;
   USERCFLAGS=&amp;quot;-I`pwd`/../`uname -m`-linux-gnu/include -L`pwd`/../`uname -m`-linux-gnu/lib&amp;quot; \&lt;br /&gt;
   PATH=&amp;quot;`pwd`/../`uname -m`-linux-gnu/bin:$PATH&amp;quot;&lt;br /&gt;
 sudo LD_LIBRARY_PATH=`pwd`/../`uname -m`-linux-gnu/lib ./criu check&lt;br /&gt;
 cd ../..&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
Cross Compilation for ARM&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
ARMv7&lt;br /&gt;
 cd deps&lt;br /&gt;
 rsync -a --exclude=.git --exclude=deps .. criu-arm&lt;br /&gt;
 cd criu-arm&lt;br /&gt;
 make \&lt;br /&gt;
   ARCH=arm \&lt;br /&gt;
   CROSS_COMPILE=`pwd`/../`uname -m`-linux-gnu/bin/arm-linux-gnueabihf- \&lt;br /&gt;
   USERCFLAGS=&amp;quot;-I`pwd`/../arm-linux-gnueabihf/include -L`pwd`/../arm-linux-gnueabihf/lib&amp;quot; \&lt;br /&gt;
   PATH=&amp;quot;`pwd`/../`uname -m`-linux-gnu/bin:$PATH&amp;quot;&lt;br /&gt;
 cd ../..&lt;br /&gt;
&lt;br /&gt;
ARMv8&lt;br /&gt;
  cd deps&lt;br /&gt;
  rsync -a --exclude=.git --exclude=deps .. criu-aarch64&lt;br /&gt;
  cd criu-aarch64&lt;br /&gt;
  make \&lt;br /&gt;
   ARCH=aarch64 \&lt;br /&gt;
   CROSS_COMPILE=`pwd`/../`uname -m`-linux-gnu/bin/aarch64-linux-gnu- \&lt;br /&gt;
   USERCFLAGS=&amp;quot;-I`pwd`/../aarch64-linux-gnu/include -L`pwd`/../aarch64-linux-gnu/lib&amp;quot; \&lt;br /&gt;
   PATH=&amp;quot;`pwd`/../`uname -m`-linux-gnu/bin:$PATH&amp;quot;&lt;br /&gt;
  cd ../..&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
&lt;br /&gt;
CRIU has functionality that is either optional or behaves differently depending on the kernel CRIU is running on. By default build process includes maximum of it, but this behavior can be changed.&lt;br /&gt;
&lt;br /&gt;
''Main article: [[Configuring]]''&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
CRIU works perfectly even when run from the sources directory (with the &amp;quot;./criu&amp;quot; command), but if you want to have in standard paths run &amp;lt;code&amp;gt;make install&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
You may need to install the following packages to generate docs in Debian-based OS's to avoid errors from install-man:&lt;br /&gt;
* &amp;lt;code&amp;gt;asciidoc&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;xmlto&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Checking That It Works ==&lt;br /&gt;
&lt;br /&gt;
First thing to do is to run &amp;lt;code&amp;gt;criu check&amp;lt;/code&amp;gt;. At the end it should say &amp;quot;Looks OK&amp;quot;, if it doesn't the messages on the screen explain what functionality is missing. &lt;br /&gt;
&lt;br /&gt;
Some kernel functionality is required in rare cases and may not block the dump (but sometimes may). These features can be checked by adding the &amp;lt;code&amp;gt;--extra&amp;lt;/code&amp;gt; flag.&lt;br /&gt;
&lt;br /&gt;
If you're using our custom kernel, then the &amp;lt;code&amp;gt;--all&amp;lt;/code&amp;gt; option can be used, in this case CRIU would check for ''all'' the kernel features to work.&lt;br /&gt;
&lt;br /&gt;
You can then try running the [[ZDTM Test Suite]] which sits in the &amp;lt;code&amp;gt;tests/zdtm/&amp;lt;/code&amp;gt; directory.&lt;br /&gt;
&lt;br /&gt;
== Further reading ==&lt;br /&gt;
&lt;br /&gt;
* [[Checking the kernel]]&lt;br /&gt;
* [[Usage]]&lt;br /&gt;
* [[Advanced usage]]&lt;br /&gt;
* [[:Category:HOWTO]]&lt;br /&gt;
&lt;br /&gt;
[[Category:HOWTO]]&lt;/div&gt;</summary>
		<author><name>Dsafonov</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=Installation&amp;diff=4154</id>
		<title>Installation</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=Installation&amp;diff=4154"/>
		<updated>2017-04-17T11:05:55Z</updated>

		<summary type="html">&lt;p&gt;Dsafonov: /* Configuring the kernel */ Add a link to ZDTM page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;code&amp;gt;criu&amp;lt;/code&amp;gt; is an utility to checkpoint/restore a process tree. This page describes how to manually build and install prerequisites and the tool itself.&lt;br /&gt;
&lt;br /&gt;
== Installing from packages ==&lt;br /&gt;
&lt;br /&gt;
Some distributions provide ready-to-use [[packages]]. If no, or the CRIU version you want is not yet there, you will need to get CRIU sources and compile it.&lt;br /&gt;
&lt;br /&gt;
== Obtaining CRIU Source ==&lt;br /&gt;
&lt;br /&gt;
You can download the source code as a release tarball or sync the [https://github.com/xemul/criu git repository]. If you plan to modify CRIU sources the latter way is highly recommended.&lt;br /&gt;
&lt;br /&gt;
=== Getting source tarball ===&lt;br /&gt;
: {{Latest release}}&lt;br /&gt;
&lt;br /&gt;
=== Cloning git repository ===&lt;br /&gt;
 git clone https://github.com/xemul/criu&lt;br /&gt;
&lt;br /&gt;
== Dependencies ==&lt;br /&gt;
&lt;br /&gt;
=== Compiler and C Library ===&lt;br /&gt;
&lt;br /&gt;
CRIU is mostly written in C and the build system is based on Makefiles. Thus just install standard &amp;lt;code&amp;gt;gcc&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt; packages (on Debian, &amp;lt;code&amp;gt;[https://packages.debian.org/build-essential build-essential]&amp;lt;/code&amp;gt; will pull in both at once).&lt;br /&gt;
&lt;br /&gt;
For building on x86 with compatible 32-bit applications C/R support you will need &amp;lt;code&amp;gt;libc6-dev-i386, gcc-multilib&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;gcc&amp;lt;/code&amp;gt; (only in criu-dev for now, kernel patching needed).&lt;br /&gt;
&lt;br /&gt;
If you are cross compiling for ARM, use distribution packages or download prebuilt toolchains from Linaro.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
Downloading Linaro toolchains&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
 sudo apt-get install lib32stdc++6 lib32z1 # These are ia32 binaries&lt;br /&gt;
 mkdir -p deps/`uname -m`-linux-gnu&lt;br /&gt;
 cd deps&lt;br /&gt;
 wget http://releases.linaro.org/14.09/components/toolchain/binaries/gcc-linaro-arm-linux-gnueabihf-4.9-2014.09_linux.tar.xz&lt;br /&gt;
 tar --strip=1 -C `uname -m`-linux-gnu -xf gcc-linaro-arm-linux-gnueabihf-4.9-2014.09_linux.tar.xz&lt;br /&gt;
 wget http://releases.linaro.org/14.09/components/toolchain/binaries/gcc-linaro-aarch64-linux-gnu-4.9-2014.09_linux.tar.xz&lt;br /&gt;
 tar --strip=1 -C `uname -m`-linux-gnu -xf gcc-linaro-aarch64-linux-gnu-4.9-2014.09_linux.tar.xz&lt;br /&gt;
 cd ..&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Protocol Buffers ===&lt;br /&gt;
&lt;br /&gt;
CRIU uses the [https://developers.google.com/protocol-buffers/ Google Protocol Buffers] to read and write [[images]] and thus requires [https://github.com/protobuf-c/protobuf-c C language bindings]. The &amp;lt;code&amp;gt;protoc&amp;lt;/code&amp;gt; tool is required at build time and the &amp;lt;code&amp;gt;libprotobuf-c.so&amp;lt;/code&amp;gt; shared object is required at build and run time. [[CRIT]] also uses python language bindings for protocol buffers and requires the &amp;lt;code&amp;gt;descriptor.proto&amp;lt;/code&amp;gt; file typically provided by a distribution's protobuf development package.&lt;br /&gt;
&lt;br /&gt;
==== Distribution Packages ====&lt;br /&gt;
The easiest way is to install distribution packages.&lt;br /&gt;
&lt;br /&gt;
* RPM package names&lt;br /&gt;
** &amp;lt;code&amp;gt;group Development\ Tools&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;protobuf&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;protobuf-c&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;protobuf-c-devel&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;protobuf-compiler&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;protobuf-devel&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;protobuf-python&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;libnet-devel&amp;lt;/code&amp;gt;&lt;br /&gt;
* Debian package names&lt;br /&gt;
** &amp;lt;code&amp;gt;build-essential&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;libprotobuf-dev&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;libprotobuf-c0-dev&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;protobuf-c-compiler&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;protobuf-compiler&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;python-protobuf&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;libnet1-dev&amp;lt;/code&amp;gt;&lt;br /&gt;
* Ubuntu&lt;br /&gt;
** The below will get your freshly installed Ubuntu host ready to compile criu. &amp;quot;--no-install-recommends&amp;quot; parameter is to avoid asciidoc pulling in a lot of dependencies.&lt;br /&gt;
** sudo apt-get install --no-install-recommends git build-essential libprotobuf-dev libprotobuf-c0-dev protobuf-c-compiler protobuf-compiler python-protobuf libnl-3-dev libpth-dev pkg-config libcap-dev asciidoc libnet&lt;br /&gt;
&lt;br /&gt;
==== Building Protocol Buffers From Source ====&lt;br /&gt;
If you would like to build from source, you can use the following commands to obtain the source code repositories, configure, and build the code. On a Debian based system, you may have to install &amp;lt;code&amp;gt;autoconf curl g++ libtool&amp;lt;/code&amp;gt; packages first.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
To build protobuf&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
 cd deps&lt;br /&gt;
 git clone https://github.com/google/protobuf.git protobuf&lt;br /&gt;
 cd protobuf&lt;br /&gt;
 ./autogen.sh&lt;br /&gt;
 ./configure --prefix=`pwd`/../`uname -m`-linux-gnu&lt;br /&gt;
 make&lt;br /&gt;
 make install&lt;br /&gt;
 cd ../..&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
To build protobuf-c&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
 cd deps&lt;br /&gt;
 git clone https://github.com/protobuf-c/protobuf-c.git protobuf-c&lt;br /&gt;
 cd protobuf-c&lt;br /&gt;
 ./autogen.sh&lt;br /&gt;
 mkdir ../pbc-`uname -m`&lt;br /&gt;
 cd ../pbc-`uname -m`&lt;br /&gt;
 ../protobuf-c/configure --prefix=`pwd`/../`uname -m`-linux-gnu \&lt;br /&gt;
   PKG_CONFIG_PATH=`pwd`/../`uname -m`-linux-gnu/lib/pkgconfig&lt;br /&gt;
 make&lt;br /&gt;
 make install&lt;br /&gt;
 cd ../..&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
To cross-compile for ARM some more tricks will be required.&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
For ARMv7&lt;br /&gt;
&lt;br /&gt;
 cd deps&lt;br /&gt;
 mkdir -p pbc-arm&lt;br /&gt;
 cd pbc-arm&lt;br /&gt;
 ../protobuf-c/configure --host=arm-linux-gnueabihf --prefix=`pwd`/../arm-linux-gnueabihf \&lt;br /&gt;
                         --disable-protoc PATH=`pwd`/../`uname -m`-linux-gnu/bin:$PATH&lt;br /&gt;
 make PATH=`pwd`/../`uname -m`-linux-gnu/bin:$PATH&lt;br /&gt;
 make install PATH=`pwd`/../`uname -m`-linux-gnu/bin:$PATH&lt;br /&gt;
 cd ../..&lt;br /&gt;
&lt;br /&gt;
For ARM8&lt;br /&gt;
&lt;br /&gt;
 cd deps&lt;br /&gt;
 mkdir -p pbc-aarch64&lt;br /&gt;
 cd pbc-aarch64&lt;br /&gt;
  ../protobuf-c/configure --host=aarch64-linux-gnu --prefix=`pwd`/../aarch64-linux-gnu \&lt;br /&gt;
                          --disable-protoc PATH=`pwd`/../`uname -m`-linux-gnu/bin:$PATH&lt;br /&gt;
 make PATH=`pwd`/../`uname -m`-linux-gnu/bin:$PATH&lt;br /&gt;
 make install PATH=`pwd`/../`uname -m`-linux-gnu/bin:$PATH&lt;br /&gt;
 cd ../..&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Other deps ===&lt;br /&gt;
* &amp;lt;code&amp;gt;pkg-config&amp;lt;/code&amp;gt; to check on build library dependencies.&lt;br /&gt;
* &amp;lt;code&amp;gt;libnl3&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;libnl3-devel&amp;lt;/code&amp;gt; (RPM distros) or &amp;lt;code&amp;gt;libnl-3-dev&amp;lt;/code&amp;gt; (DEB distros) for network operations.&lt;br /&gt;
* &amp;lt;code&amp;gt;python-ipaddr&amp;lt;/code&amp;gt; is used by CRIT to pretty-print ip.&lt;br /&gt;
* If &amp;lt;code&amp;gt;libbsd&amp;lt;/code&amp;gt; available, CRIU will be compiled with setproctitle() support. It will allow to make process titles of service workers to be more verbose.&lt;br /&gt;
* The iproute2 tool version 3.5.0 or higher is needed for dumping network namespaces. The latest one can be cloned from [http://git.kernel.org/?p=linux/kernel/git/shemminger/iproute2.git;a=summary iproute2]. It should be compiled and a path to ip written in the environment variable &amp;lt;code&amp;gt;CR_IP_TOOL&amp;lt;/code&amp;gt;.&lt;br /&gt;
* &amp;lt;code&amp;gt;libcap-devel&amp;lt;/code&amp;gt; (RPM) or &amp;lt;code&amp;gt;libcap-dev&amp;lt;/code&amp;gt; (DEB)&lt;br /&gt;
* If you would like to use &amp;lt;code&amp;gt;make test&amp;lt;/code&amp;gt; you should install &amp;lt;code&amp;gt;libaio-devel&amp;lt;/code&amp;gt; (RPM) or &amp;lt;code&amp;gt;libaio-dev&amp;lt;/code&amp;gt; (DEB).&lt;br /&gt;
* For test launcher &amp;lt;code&amp;gt;zdtm.py&amp;lt;/code&amp;gt; you need &amp;lt;code&amp;gt;PyYAML&amp;lt;/code&amp;gt; (RPM) or &amp;lt;code&amp;gt;python-yaml&amp;lt;/code&amp;gt; (DEB).&lt;br /&gt;
&lt;br /&gt;
== Linux Kernel ==&lt;br /&gt;
&lt;br /&gt;
Linux kernel v3.11 or newer is required, with some specific options set. If your distribution does not provide needed kernel, you might want to compile one yourself.&lt;br /&gt;
&lt;br /&gt;
=== Configuring the kernel ===&lt;br /&gt;
&lt;br /&gt;
Most likely the first thing to enable is the &amp;lt;code&amp;gt;CONFIG_EXPERT=y&amp;lt;/code&amp;gt; (General setup -&amp;gt; Configure standard kernel features (expert users)) option, which on x86_64 depends on the &amp;lt;code&amp;gt;CONFIG_EMBEDDED=y&amp;lt;/code&amp;gt; (General setup -&amp;gt; Embedded system) one (welcome to Kconfig reverse chains hell).&lt;br /&gt;
&lt;br /&gt;
The following options must be enabled for CRIU to work:&lt;br /&gt;
&lt;br /&gt;
* ''General setup'' options&lt;br /&gt;
** &amp;lt;code&amp;gt;CONFIG_CHECKPOINT_RESTORE=y&amp;lt;/code&amp;gt; (Checkpoint/restore support)&lt;br /&gt;
** &amp;lt;code&amp;gt;CONFIG_NAMESPACES=y&amp;lt;/code&amp;gt; (Namespaces support)&lt;br /&gt;
** &amp;lt;code&amp;gt;CONFIG_UTS_NS=y&amp;lt;/code&amp;gt; (Namespaces support -&amp;gt; UTS namespace)&lt;br /&gt;
** &amp;lt;code&amp;gt;CONFIG_IPC_NS=y&amp;lt;/code&amp;gt; (Namespaces support -&amp;gt; IPC namespace)&lt;br /&gt;
** &amp;lt;code&amp;gt;CONFIG_PID_NS=y&amp;lt;/code&amp;gt; (Namespaces support -&amp;gt; PID namespaces)&lt;br /&gt;
** &amp;lt;code&amp;gt;CONFIG_NET_NS=y&amp;lt;/code&amp;gt; (Namespaces support -&amp;gt; Network namespace)&lt;br /&gt;
** &amp;lt;code&amp;gt;CONFIG_FHANDLE=y&amp;lt;/code&amp;gt; (Open by fhandle syscalls)&lt;br /&gt;
** &amp;lt;code&amp;gt;CONFIG_EVENTFD=y&amp;lt;/code&amp;gt; (Enable eventfd() system call)&lt;br /&gt;
** &amp;lt;code&amp;gt;CONFIG_EPOLL=y&amp;lt;/code&amp;gt; (Enable eventpoll support)&lt;br /&gt;
* ''Networking support -&amp;gt; Networking options'' options for sock-diag subsystem&lt;br /&gt;
** &amp;lt;code&amp;gt;CONFIG_UNIX_DIAG=y&amp;lt;/code&amp;gt; (Unix domain sockets -&amp;gt; UNIX: socket monitoring interface)&lt;br /&gt;
** &amp;lt;code&amp;gt;CONFIG_INET_DIAG=y&amp;lt;/code&amp;gt; (TCP/IP networking -&amp;gt; INET: socket monitoring interface)&lt;br /&gt;
** &amp;lt;code&amp;gt;CONFIG_INET_UDP_DIAG=y&amp;lt;/code&amp;gt; (TCP/IP networking -&amp;gt; INET: socket monitoring interface -&amp;gt; UDP: socket monitoring interface)&lt;br /&gt;
** &amp;lt;code&amp;gt;CONFIG_PACKET_DIAG=y&amp;lt;/code&amp;gt; (Packet socket -&amp;gt; Packet: sockets monitoring interface)&lt;br /&gt;
** &amp;lt;code&amp;gt;CONFIG_NETLINK_DIAG=y&amp;lt;/code&amp;gt; (Netlink socket -&amp;gt; Netlink: sockets monitoring interface)&lt;br /&gt;
&lt;br /&gt;
Other options not required by CRIU, but C/R supported ([[ZDTM test suite]] may fail without them):&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_INOTIFY_USER=y&amp;lt;/code&amp;gt; (File systems -&amp;gt; Inotify support for userspace)&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_FANOTIFY=y&amp;lt;/code&amp;gt; (File systems -&amp;gt; Filesystem wide access notification)&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_MEMCG=y&amp;lt;/code&amp;gt; (General setup -&amp;gt; Control Group support -&amp;gt; Memory controller)&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_CGROUP_DEVICE=y&amp;lt;/code&amp;gt; (General setup -&amp;gt; Control Group support -&amp;gt; Device controller)&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_MACVLAN=y&amp;lt;/code&amp;gt; (Device Drivers -&amp;gt; Network device support -&amp;gt; Network core driver support -&amp;gt; MAC-VLAN support)&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_BRIDGE=y&amp;lt;/code&amp;gt; (Networking support -&amp;gt; Networking options -&amp;gt; 802.1d Ethernet Bridging)&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_IA32_EMULATION=y&amp;lt;/code&amp;gt; (x86 only) (Executable file formats -&amp;gt; Emulations -&amp;gt; IA32 Emulation)&lt;br /&gt;
&lt;br /&gt;
For some [[usage scenarios]] there is an ability to track memory changes and produce [[incremental dumps]]. Need to enable the &amp;lt;code&amp;gt;CONFIG_MEM_SOFT_DIRTY=y&amp;lt;/code&amp;gt; (optional) (Processor type and features -&amp;gt; Track memory changes).&lt;br /&gt;
&lt;br /&gt;
Note we also have our [[custom kernel]], which might contain some experimental CRIU related patches.&lt;br /&gt;
&lt;br /&gt;
== Building CRIU From Source ==&lt;br /&gt;
&lt;br /&gt;
=== Native Compilation ===&lt;br /&gt;
Simply run &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt; in the CRIU source directory.&lt;br /&gt;
&lt;br /&gt;
=== Compilation in Docker container ===&lt;br /&gt;
&lt;br /&gt;
There's a ''docker-build'' target in Makefile which builds CRIU in Ubuntu Docker container. Just run &amp;lt;code&amp;gt;make docker-build&amp;lt;/code&amp;gt; and that's it.&lt;br /&gt;
&lt;br /&gt;
=== Non-standard compilation ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
Building natively, but specifying built dependencies manually&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
 cd deps&lt;br /&gt;
 rsync -a --exclude=.git --exclude=deps .. criu-`uname -m`&lt;br /&gt;
 cd criu-`uname -m`&lt;br /&gt;
 make \&lt;br /&gt;
   USERCFLAGS=&amp;quot;-I`pwd`/../`uname -m`-linux-gnu/include -L`pwd`/../`uname -m`-linux-gnu/lib&amp;quot; \&lt;br /&gt;
   PATH=&amp;quot;`pwd`/../`uname -m`-linux-gnu/bin:$PATH&amp;quot;&lt;br /&gt;
 sudo LD_LIBRARY_PATH=`pwd`/../`uname -m`-linux-gnu/lib ./criu check&lt;br /&gt;
 cd ../..&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
Cross Compilation for ARM&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
ARMv7&lt;br /&gt;
 cd deps&lt;br /&gt;
 rsync -a --exclude=.git --exclude=deps .. criu-arm&lt;br /&gt;
 cd criu-arm&lt;br /&gt;
 make \&lt;br /&gt;
   ARCH=arm \&lt;br /&gt;
   CROSS_COMPILE=`pwd`/../`uname -m`-linux-gnu/bin/arm-linux-gnueabihf- \&lt;br /&gt;
   USERCFLAGS=&amp;quot;-I`pwd`/../arm-linux-gnueabihf/include -L`pwd`/../arm-linux-gnueabihf/lib&amp;quot; \&lt;br /&gt;
   PATH=&amp;quot;`pwd`/../`uname -m`-linux-gnu/bin:$PATH&amp;quot;&lt;br /&gt;
 cd ../..&lt;br /&gt;
&lt;br /&gt;
ARMv8&lt;br /&gt;
  cd deps&lt;br /&gt;
  rsync -a --exclude=.git --exclude=deps .. criu-aarch64&lt;br /&gt;
  cd criu-aarch64&lt;br /&gt;
  make \&lt;br /&gt;
   ARCH=aarch64 \&lt;br /&gt;
   CROSS_COMPILE=`pwd`/../`uname -m`-linux-gnu/bin/aarch64-linux-gnu- \&lt;br /&gt;
   USERCFLAGS=&amp;quot;-I`pwd`/../aarch64-linux-gnu/include -L`pwd`/../aarch64-linux-gnu/lib&amp;quot; \&lt;br /&gt;
   PATH=&amp;quot;`pwd`/../`uname -m`-linux-gnu/bin:$PATH&amp;quot;&lt;br /&gt;
  cd ../..&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
&lt;br /&gt;
CRIU has functionality that is either optional or behaves differently depending on the kernel CRIU is running on. By default build process includes maximum of it, but this behavior can be changed.&lt;br /&gt;
&lt;br /&gt;
''Main article: [[Configuring]]''&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
CRIU works perfectly even when run from the sources directory (with the &amp;quot;./criu&amp;quot; command), but if you want to have in standard paths run &amp;lt;code&amp;gt;make install&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
You may need to install the following packages to generate docs in Debian-based OS's to avoid errors from install-man:&lt;br /&gt;
* &amp;lt;code&amp;gt;asciidoc&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;xmlto&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Checking That It Works ==&lt;br /&gt;
&lt;br /&gt;
First thing to do is to run &amp;lt;code&amp;gt;criu check&amp;lt;/code&amp;gt;. At the end it should say &amp;quot;Looks OK&amp;quot;, if it doesn't the messages on the screen explain what functionality is missing. &lt;br /&gt;
&lt;br /&gt;
Some kernel functionality is required in rare cases and may not block the dump (but sometimes may). These features can be checked by adding the &amp;lt;code&amp;gt;--extra&amp;lt;/code&amp;gt; flag.&lt;br /&gt;
&lt;br /&gt;
If you're using our custom kernel, then the &amp;lt;code&amp;gt;--all&amp;lt;/code&amp;gt; option can be used, in this case CRIU would check for ''all'' the kernel features to work.&lt;br /&gt;
&lt;br /&gt;
You can then try running the [[ZDTM Test Suite]] which sits in the &amp;lt;code&amp;gt;tests/zdtm/&amp;lt;/code&amp;gt; directory.&lt;br /&gt;
&lt;br /&gt;
== Further reading ==&lt;br /&gt;
&lt;br /&gt;
* [[Checking the kernel]]&lt;br /&gt;
* [[Usage]]&lt;br /&gt;
* [[Advanced usage]]&lt;br /&gt;
* [[:Category:HOWTO]]&lt;br /&gt;
&lt;br /&gt;
[[Category:HOWTO]]&lt;/div&gt;</summary>
		<author><name>Dsafonov</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=Installation&amp;diff=4153</id>
		<title>Installation</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=Installation&amp;diff=4153"/>
		<updated>2017-04-17T11:03:10Z</updated>

		<summary type="html">&lt;p&gt;Dsafonov: /* Configuring the kernel */ Specify those options, that are not required by CRIU, but C/R supported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;code&amp;gt;criu&amp;lt;/code&amp;gt; is an utility to checkpoint/restore a process tree. This page describes how to manually build and install prerequisites and the tool itself.&lt;br /&gt;
&lt;br /&gt;
== Installing from packages ==&lt;br /&gt;
&lt;br /&gt;
Some distributions provide ready-to-use [[packages]]. If no, or the CRIU version you want is not yet there, you will need to get CRIU sources and compile it.&lt;br /&gt;
&lt;br /&gt;
== Obtaining CRIU Source ==&lt;br /&gt;
&lt;br /&gt;
You can download the source code as a release tarball or sync the [https://github.com/xemul/criu git repository]. If you plan to modify CRIU sources the latter way is highly recommended.&lt;br /&gt;
&lt;br /&gt;
=== Getting source tarball ===&lt;br /&gt;
: {{Latest release}}&lt;br /&gt;
&lt;br /&gt;
=== Cloning git repository ===&lt;br /&gt;
 git clone https://github.com/xemul/criu&lt;br /&gt;
&lt;br /&gt;
== Dependencies ==&lt;br /&gt;
&lt;br /&gt;
=== Compiler and C Library ===&lt;br /&gt;
&lt;br /&gt;
CRIU is mostly written in C and the build system is based on Makefiles. Thus just install standard &amp;lt;code&amp;gt;gcc&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt; packages (on Debian, &amp;lt;code&amp;gt;[https://packages.debian.org/build-essential build-essential]&amp;lt;/code&amp;gt; will pull in both at once).&lt;br /&gt;
&lt;br /&gt;
For building on x86 with compatible 32-bit applications C/R support you will need &amp;lt;code&amp;gt;libc6-dev-i386, gcc-multilib&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;gcc&amp;lt;/code&amp;gt; (only in criu-dev for now, kernel patching needed).&lt;br /&gt;
&lt;br /&gt;
If you are cross compiling for ARM, use distribution packages or download prebuilt toolchains from Linaro.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
Downloading Linaro toolchains&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
 sudo apt-get install lib32stdc++6 lib32z1 # These are ia32 binaries&lt;br /&gt;
 mkdir -p deps/`uname -m`-linux-gnu&lt;br /&gt;
 cd deps&lt;br /&gt;
 wget http://releases.linaro.org/14.09/components/toolchain/binaries/gcc-linaro-arm-linux-gnueabihf-4.9-2014.09_linux.tar.xz&lt;br /&gt;
 tar --strip=1 -C `uname -m`-linux-gnu -xf gcc-linaro-arm-linux-gnueabihf-4.9-2014.09_linux.tar.xz&lt;br /&gt;
 wget http://releases.linaro.org/14.09/components/toolchain/binaries/gcc-linaro-aarch64-linux-gnu-4.9-2014.09_linux.tar.xz&lt;br /&gt;
 tar --strip=1 -C `uname -m`-linux-gnu -xf gcc-linaro-aarch64-linux-gnu-4.9-2014.09_linux.tar.xz&lt;br /&gt;
 cd ..&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Protocol Buffers ===&lt;br /&gt;
&lt;br /&gt;
CRIU uses the [https://developers.google.com/protocol-buffers/ Google Protocol Buffers] to read and write [[images]] and thus requires [https://github.com/protobuf-c/protobuf-c C language bindings]. The &amp;lt;code&amp;gt;protoc&amp;lt;/code&amp;gt; tool is required at build time and the &amp;lt;code&amp;gt;libprotobuf-c.so&amp;lt;/code&amp;gt; shared object is required at build and run time. [[CRIT]] also uses python language bindings for protocol buffers and requires the &amp;lt;code&amp;gt;descriptor.proto&amp;lt;/code&amp;gt; file typically provided by a distribution's protobuf development package.&lt;br /&gt;
&lt;br /&gt;
==== Distribution Packages ====&lt;br /&gt;
The easiest way is to install distribution packages.&lt;br /&gt;
&lt;br /&gt;
* RPM package names&lt;br /&gt;
** &amp;lt;code&amp;gt;group Development\ Tools&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;protobuf&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;protobuf-c&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;protobuf-c-devel&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;protobuf-compiler&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;protobuf-devel&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;protobuf-python&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;libnet-devel&amp;lt;/code&amp;gt;&lt;br /&gt;
* Debian package names&lt;br /&gt;
** &amp;lt;code&amp;gt;build-essential&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;libprotobuf-dev&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;libprotobuf-c0-dev&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;protobuf-c-compiler&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;protobuf-compiler&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;python-protobuf&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;libnet1-dev&amp;lt;/code&amp;gt;&lt;br /&gt;
* Ubuntu&lt;br /&gt;
** The below will get your freshly installed Ubuntu host ready to compile criu. &amp;quot;--no-install-recommends&amp;quot; parameter is to avoid asciidoc pulling in a lot of dependencies.&lt;br /&gt;
** sudo apt-get install --no-install-recommends git build-essential libprotobuf-dev libprotobuf-c0-dev protobuf-c-compiler protobuf-compiler python-protobuf libnl-3-dev libpth-dev pkg-config libcap-dev asciidoc libnet&lt;br /&gt;
&lt;br /&gt;
==== Building Protocol Buffers From Source ====&lt;br /&gt;
If you would like to build from source, you can use the following commands to obtain the source code repositories, configure, and build the code. On a Debian based system, you may have to install &amp;lt;code&amp;gt;autoconf curl g++ libtool&amp;lt;/code&amp;gt; packages first.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
To build protobuf&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
 cd deps&lt;br /&gt;
 git clone https://github.com/google/protobuf.git protobuf&lt;br /&gt;
 cd protobuf&lt;br /&gt;
 ./autogen.sh&lt;br /&gt;
 ./configure --prefix=`pwd`/../`uname -m`-linux-gnu&lt;br /&gt;
 make&lt;br /&gt;
 make install&lt;br /&gt;
 cd ../..&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
To build protobuf-c&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
 cd deps&lt;br /&gt;
 git clone https://github.com/protobuf-c/protobuf-c.git protobuf-c&lt;br /&gt;
 cd protobuf-c&lt;br /&gt;
 ./autogen.sh&lt;br /&gt;
 mkdir ../pbc-`uname -m`&lt;br /&gt;
 cd ../pbc-`uname -m`&lt;br /&gt;
 ../protobuf-c/configure --prefix=`pwd`/../`uname -m`-linux-gnu \&lt;br /&gt;
   PKG_CONFIG_PATH=`pwd`/../`uname -m`-linux-gnu/lib/pkgconfig&lt;br /&gt;
 make&lt;br /&gt;
 make install&lt;br /&gt;
 cd ../..&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
To cross-compile for ARM some more tricks will be required.&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
For ARMv7&lt;br /&gt;
&lt;br /&gt;
 cd deps&lt;br /&gt;
 mkdir -p pbc-arm&lt;br /&gt;
 cd pbc-arm&lt;br /&gt;
 ../protobuf-c/configure --host=arm-linux-gnueabihf --prefix=`pwd`/../arm-linux-gnueabihf \&lt;br /&gt;
                         --disable-protoc PATH=`pwd`/../`uname -m`-linux-gnu/bin:$PATH&lt;br /&gt;
 make PATH=`pwd`/../`uname -m`-linux-gnu/bin:$PATH&lt;br /&gt;
 make install PATH=`pwd`/../`uname -m`-linux-gnu/bin:$PATH&lt;br /&gt;
 cd ../..&lt;br /&gt;
&lt;br /&gt;
For ARM8&lt;br /&gt;
&lt;br /&gt;
 cd deps&lt;br /&gt;
 mkdir -p pbc-aarch64&lt;br /&gt;
 cd pbc-aarch64&lt;br /&gt;
  ../protobuf-c/configure --host=aarch64-linux-gnu --prefix=`pwd`/../aarch64-linux-gnu \&lt;br /&gt;
                          --disable-protoc PATH=`pwd`/../`uname -m`-linux-gnu/bin:$PATH&lt;br /&gt;
 make PATH=`pwd`/../`uname -m`-linux-gnu/bin:$PATH&lt;br /&gt;
 make install PATH=`pwd`/../`uname -m`-linux-gnu/bin:$PATH&lt;br /&gt;
 cd ../..&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Other deps ===&lt;br /&gt;
* &amp;lt;code&amp;gt;pkg-config&amp;lt;/code&amp;gt; to check on build library dependencies.&lt;br /&gt;
* &amp;lt;code&amp;gt;libnl3&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;libnl3-devel&amp;lt;/code&amp;gt; (RPM distros) or &amp;lt;code&amp;gt;libnl-3-dev&amp;lt;/code&amp;gt; (DEB distros) for network operations.&lt;br /&gt;
* &amp;lt;code&amp;gt;python-ipaddr&amp;lt;/code&amp;gt; is used by CRIT to pretty-print ip.&lt;br /&gt;
* If &amp;lt;code&amp;gt;libbsd&amp;lt;/code&amp;gt; available, CRIU will be compiled with setproctitle() support. It will allow to make process titles of service workers to be more verbose.&lt;br /&gt;
* The iproute2 tool version 3.5.0 or higher is needed for dumping network namespaces. The latest one can be cloned from [http://git.kernel.org/?p=linux/kernel/git/shemminger/iproute2.git;a=summary iproute2]. It should be compiled and a path to ip written in the environment variable &amp;lt;code&amp;gt;CR_IP_TOOL&amp;lt;/code&amp;gt;.&lt;br /&gt;
* &amp;lt;code&amp;gt;libcap-devel&amp;lt;/code&amp;gt; (RPM) or &amp;lt;code&amp;gt;libcap-dev&amp;lt;/code&amp;gt; (DEB)&lt;br /&gt;
* If you would like to use &amp;lt;code&amp;gt;make test&amp;lt;/code&amp;gt; you should install &amp;lt;code&amp;gt;libaio-devel&amp;lt;/code&amp;gt; (RPM) or &amp;lt;code&amp;gt;libaio-dev&amp;lt;/code&amp;gt; (DEB).&lt;br /&gt;
* For test launcher &amp;lt;code&amp;gt;zdtm.py&amp;lt;/code&amp;gt; you need &amp;lt;code&amp;gt;PyYAML&amp;lt;/code&amp;gt; (RPM) or &amp;lt;code&amp;gt;python-yaml&amp;lt;/code&amp;gt; (DEB).&lt;br /&gt;
&lt;br /&gt;
== Linux Kernel ==&lt;br /&gt;
&lt;br /&gt;
Linux kernel v3.11 or newer is required, with some specific options set. If your distribution does not provide needed kernel, you might want to compile one yourself.&lt;br /&gt;
&lt;br /&gt;
=== Configuring the kernel ===&lt;br /&gt;
&lt;br /&gt;
Most likely the first thing to enable is the &amp;lt;code&amp;gt;CONFIG_EXPERT=y&amp;lt;/code&amp;gt; (General setup -&amp;gt; Configure standard kernel features (expert users)) option, which on x86_64 depends on the &amp;lt;code&amp;gt;CONFIG_EMBEDDED=y&amp;lt;/code&amp;gt; (General setup -&amp;gt; Embedded system) one (welcome to Kconfig reverse chains hell).&lt;br /&gt;
&lt;br /&gt;
The following options must be enabled for CRIU to work:&lt;br /&gt;
&lt;br /&gt;
* ''General setup'' options&lt;br /&gt;
** &amp;lt;code&amp;gt;CONFIG_CHECKPOINT_RESTORE=y&amp;lt;/code&amp;gt; (Checkpoint/restore support)&lt;br /&gt;
** &amp;lt;code&amp;gt;CONFIG_NAMESPACES=y&amp;lt;/code&amp;gt; (Namespaces support)&lt;br /&gt;
** &amp;lt;code&amp;gt;CONFIG_UTS_NS=y&amp;lt;/code&amp;gt; (Namespaces support -&amp;gt; UTS namespace)&lt;br /&gt;
** &amp;lt;code&amp;gt;CONFIG_IPC_NS=y&amp;lt;/code&amp;gt; (Namespaces support -&amp;gt; IPC namespace)&lt;br /&gt;
** &amp;lt;code&amp;gt;CONFIG_PID_NS=y&amp;lt;/code&amp;gt; (Namespaces support -&amp;gt; PID namespaces)&lt;br /&gt;
** &amp;lt;code&amp;gt;CONFIG_NET_NS=y&amp;lt;/code&amp;gt; (Namespaces support -&amp;gt; Network namespace)&lt;br /&gt;
** &amp;lt;code&amp;gt;CONFIG_FHANDLE=y&amp;lt;/code&amp;gt; (Open by fhandle syscalls)&lt;br /&gt;
** &amp;lt;code&amp;gt;CONFIG_EVENTFD=y&amp;lt;/code&amp;gt; (Enable eventfd() system call)&lt;br /&gt;
** &amp;lt;code&amp;gt;CONFIG_EPOLL=y&amp;lt;/code&amp;gt; (Enable eventpoll support)&lt;br /&gt;
* ''Networking support -&amp;gt; Networking options'' options for sock-diag subsystem&lt;br /&gt;
** &amp;lt;code&amp;gt;CONFIG_UNIX_DIAG=y&amp;lt;/code&amp;gt; (Unix domain sockets -&amp;gt; UNIX: socket monitoring interface)&lt;br /&gt;
** &amp;lt;code&amp;gt;CONFIG_INET_DIAG=y&amp;lt;/code&amp;gt; (TCP/IP networking -&amp;gt; INET: socket monitoring interface)&lt;br /&gt;
** &amp;lt;code&amp;gt;CONFIG_INET_UDP_DIAG=y&amp;lt;/code&amp;gt; (TCP/IP networking -&amp;gt; INET: socket monitoring interface -&amp;gt; UDP: socket monitoring interface)&lt;br /&gt;
** &amp;lt;code&amp;gt;CONFIG_PACKET_DIAG=y&amp;lt;/code&amp;gt; (Packet socket -&amp;gt; Packet: sockets monitoring interface)&lt;br /&gt;
** &amp;lt;code&amp;gt;CONFIG_NETLINK_DIAG=y&amp;lt;/code&amp;gt; (Netlink socket -&amp;gt; Netlink: sockets monitoring interface)&lt;br /&gt;
&lt;br /&gt;
Other options not required by CRIU, but C/R supported (ZDTM may fail without them):&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_INOTIFY_USER=y&amp;lt;/code&amp;gt; (File systems -&amp;gt; Inotify support for userspace)&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_FANOTIFY=y&amp;lt;/code&amp;gt; (File systems -&amp;gt; Filesystem wide access notification)&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_MEMCG=y&amp;lt;/code&amp;gt; (General setup -&amp;gt; Control Group support -&amp;gt; Memory controller)&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_CGROUP_DEVICE=y&amp;lt;/code&amp;gt; (General setup -&amp;gt; Control Group support -&amp;gt; Device controller)&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_MACVLAN=y&amp;lt;/code&amp;gt; (Device Drivers -&amp;gt; Network device support -&amp;gt; Network core driver support -&amp;gt; MAC-VLAN support)&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_BRIDGE=y&amp;lt;/code&amp;gt; (Networking support -&amp;gt; Networking options -&amp;gt; 802.1d Ethernet Bridging)&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_IA32_EMULATION=y&amp;lt;/code&amp;gt; (x86 only) (Executable file formats -&amp;gt; Emulations -&amp;gt; IA32 Emulation)&lt;br /&gt;
&lt;br /&gt;
For some [[usage scenarios]] there is an ability to track memory changes and produce [[incremental dumps]]. Need to enable the &amp;lt;code&amp;gt;CONFIG_MEM_SOFT_DIRTY=y&amp;lt;/code&amp;gt; (optional) (Processor type and features -&amp;gt; Track memory changes).&lt;br /&gt;
&lt;br /&gt;
Note we also have our [[custom kernel]], which might contain some experimental CRIU related patches.&lt;br /&gt;
&lt;br /&gt;
== Building CRIU From Source ==&lt;br /&gt;
&lt;br /&gt;
=== Native Compilation ===&lt;br /&gt;
Simply run &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt; in the CRIU source directory.&lt;br /&gt;
&lt;br /&gt;
=== Compilation in Docker container ===&lt;br /&gt;
&lt;br /&gt;
There's a ''docker-build'' target in Makefile which builds CRIU in Ubuntu Docker container. Just run &amp;lt;code&amp;gt;make docker-build&amp;lt;/code&amp;gt; and that's it.&lt;br /&gt;
&lt;br /&gt;
=== Non-standard compilation ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
Building natively, but specifying built dependencies manually&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
 cd deps&lt;br /&gt;
 rsync -a --exclude=.git --exclude=deps .. criu-`uname -m`&lt;br /&gt;
 cd criu-`uname -m`&lt;br /&gt;
 make \&lt;br /&gt;
   USERCFLAGS=&amp;quot;-I`pwd`/../`uname -m`-linux-gnu/include -L`pwd`/../`uname -m`-linux-gnu/lib&amp;quot; \&lt;br /&gt;
   PATH=&amp;quot;`pwd`/../`uname -m`-linux-gnu/bin:$PATH&amp;quot;&lt;br /&gt;
 sudo LD_LIBRARY_PATH=`pwd`/../`uname -m`-linux-gnu/lib ./criu check&lt;br /&gt;
 cd ../..&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
Cross Compilation for ARM&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
ARMv7&lt;br /&gt;
 cd deps&lt;br /&gt;
 rsync -a --exclude=.git --exclude=deps .. criu-arm&lt;br /&gt;
 cd criu-arm&lt;br /&gt;
 make \&lt;br /&gt;
   ARCH=arm \&lt;br /&gt;
   CROSS_COMPILE=`pwd`/../`uname -m`-linux-gnu/bin/arm-linux-gnueabihf- \&lt;br /&gt;
   USERCFLAGS=&amp;quot;-I`pwd`/../arm-linux-gnueabihf/include -L`pwd`/../arm-linux-gnueabihf/lib&amp;quot; \&lt;br /&gt;
   PATH=&amp;quot;`pwd`/../`uname -m`-linux-gnu/bin:$PATH&amp;quot;&lt;br /&gt;
 cd ../..&lt;br /&gt;
&lt;br /&gt;
ARMv8&lt;br /&gt;
  cd deps&lt;br /&gt;
  rsync -a --exclude=.git --exclude=deps .. criu-aarch64&lt;br /&gt;
  cd criu-aarch64&lt;br /&gt;
  make \&lt;br /&gt;
   ARCH=aarch64 \&lt;br /&gt;
   CROSS_COMPILE=`pwd`/../`uname -m`-linux-gnu/bin/aarch64-linux-gnu- \&lt;br /&gt;
   USERCFLAGS=&amp;quot;-I`pwd`/../aarch64-linux-gnu/include -L`pwd`/../aarch64-linux-gnu/lib&amp;quot; \&lt;br /&gt;
   PATH=&amp;quot;`pwd`/../`uname -m`-linux-gnu/bin:$PATH&amp;quot;&lt;br /&gt;
  cd ../..&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
&lt;br /&gt;
CRIU has functionality that is either optional or behaves differently depending on the kernel CRIU is running on. By default build process includes maximum of it, but this behavior can be changed.&lt;br /&gt;
&lt;br /&gt;
''Main article: [[Configuring]]''&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
CRIU works perfectly even when run from the sources directory (with the &amp;quot;./criu&amp;quot; command), but if you want to have in standard paths run &amp;lt;code&amp;gt;make install&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
You may need to install the following packages to generate docs in Debian-based OS's to avoid errors from install-man:&lt;br /&gt;
* &amp;lt;code&amp;gt;asciidoc&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;xmlto&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Checking That It Works ==&lt;br /&gt;
&lt;br /&gt;
First thing to do is to run &amp;lt;code&amp;gt;criu check&amp;lt;/code&amp;gt;. At the end it should say &amp;quot;Looks OK&amp;quot;, if it doesn't the messages on the screen explain what functionality is missing. &lt;br /&gt;
&lt;br /&gt;
Some kernel functionality is required in rare cases and may not block the dump (but sometimes may). These features can be checked by adding the &amp;lt;code&amp;gt;--extra&amp;lt;/code&amp;gt; flag.&lt;br /&gt;
&lt;br /&gt;
If you're using our custom kernel, then the &amp;lt;code&amp;gt;--all&amp;lt;/code&amp;gt; option can be used, in this case CRIU would check for ''all'' the kernel features to work.&lt;br /&gt;
&lt;br /&gt;
You can then try running the [[ZDTM Test Suite]] which sits in the &amp;lt;code&amp;gt;tests/zdtm/&amp;lt;/code&amp;gt; directory.&lt;br /&gt;
&lt;br /&gt;
== Further reading ==&lt;br /&gt;
&lt;br /&gt;
* [[Checking the kernel]]&lt;br /&gt;
* [[Usage]]&lt;br /&gt;
* [[Advanced usage]]&lt;br /&gt;
* [[:Category:HOWTO]]&lt;br /&gt;
&lt;br /&gt;
[[Category:HOWTO]]&lt;/div&gt;</summary>
		<author><name>Dsafonov</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=Upstream_kernel_commits&amp;diff=4150</id>
		<title>Upstream kernel commits</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=Upstream_kernel_commits&amp;diff=4150"/>
		<updated>2017-04-14T10:32:06Z</updated>

		<summary type="html">&lt;p&gt;Dsafonov: /* Pending patches */ arm criu patches&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!--&lt;br /&gt;
  NOTE: to figure out which kernel version a commit was included into, please use&lt;br /&gt;
  git describe --contains COMMITID&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Pending patches ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Reference&lt;br /&gt;
! Description&lt;br /&gt;
! Status&lt;br /&gt;
|-&lt;br /&gt;
|[https://github.com/avagin/linux-task-diag/commits/task-diag-v3-devel v3-devel], [https://lkml.org/lkml/2015/7/6/142 v2], [http://lwn.net/Articles/633622/ v1] || kernel: add a netlink interface to get information about processes || ?&lt;br /&gt;
|-&lt;br /&gt;
|[https://lkml.org/lkml/2016/6/28/801 lkml] || fs: allow to use dirfd as root for openat and other *at syscalls || ?&lt;br /&gt;
|-&lt;br /&gt;
|[https://lkml.org/lkml/2017/1/23/712 lkml] || [PATCH] mnt: allow to add a mount into an existing group || &lt;br /&gt;
|-&lt;br /&gt;
|[https://lkml.org/lkml/2017/3/6/545 lkml] || [PATCHv6 5/5] selftests/x86: add test for 32-bit mmap() return addr || ?&lt;br /&gt;
|-&lt;br /&gt;
|[https://lkml.org/lkml/2017/4/14/139 lkml] || ARM32: Support mremap() for sigpage/vDSO || ?&lt;br /&gt;
|-&lt;br /&gt;
|[https://lkml.org/lkml/2017/4/14/138 lkml] || ARM/shmem: Drop page coloring align for non-VIPT CPUs || ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Merged patches ==&lt;br /&gt;
&lt;br /&gt;
This table lists CRIU-related kernel commits already merged to vanilla.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; class=&amp;quot;unsortable&amp;quot; | Commit&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; class=&amp;quot;unsortable&amp;quot; | Description&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Kernel version&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|7773fbc541}} || procfs: make proc_get_link to use dentry instead of inode || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|640708a2cf}} || procfs: introduce the /proc/&amp;lt;pid&amp;gt;/map_files/ directory || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|067bce1a06}} || c/r: introduce CHECKPOINT_RESTORE symbol || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|028ee4be34}} || c/r: prctl: add PR_SET_MM codes to set up mm_struct entries || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b3f7f573a2}} || c/r: procfs: add start_data, end_data, start_brk members to /proc/$pid/stat v4 || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b8f566b04d}} || sysctl: add the kernel.ns_last_pid control || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|c9da99e647}} || unix_diag: Fixup RQLEN extension report || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|885ee74d5d}} || af_unix: Move CINQ/COUTQ code to helpers || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|257b529876}} || unix_diag: Add the MEMINFO extension || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|c0636faa53}} || inet_diag: Add the SKMEMINFO extension || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|5d2e5f274f}} || sock_diag: Introduce the meminfo nla core (v2) || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|288461e154}} || unix_diag: Include unix_diag.h into header-y target || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|e6fe2371bd}} || sock_diag: Arrange sock_diag.h such that it is exportable to userspace || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|e09e9d189b}} || unix: If we happen to find peer NULL when diag dumping, write zero. || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|3b0723c12e}} || unix_diag: Fix incoming connections nla length  || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|2ea744a583}} || net: unix -- Add missing module.h inclusion || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|5d531aaa64}} || unix_diag: Write it into kbuild || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|cbf391958a}} || unix_diag: Receive queue lenght NLA || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|2aac7a2cb0}} || unix_diag: Pending connections IDs NLA || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|ac02be8d96}} || unix_diag: Unix peer inode NLA || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|5f7b056946}} || unix_diag: Unix inode info NLA || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|f5248b48a6}} || unix_diag: Unix socket name NLA || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|5d3cae8bc3}} || unix_diag: Dumping exact socket core || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|45a96b9be6}} || unix_diag: Dumping all sockets core || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|22931d3b90}} || unix_diag: Basic module skeleton || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|fa7ff56f75}} || af_unix: Export stuff required for diag module || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|f65c1b534b}} || sock_diag: Generalize requests cookies managements || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|aec8dc62f6}} || sock_diag: Fix module netlink aliases || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|e7c466e58e}} || sock_diag: Move the SOCK_DIAG_BY_FAMILY cmd declaration || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|86e62ad6b2}} || udp_diag: Fix the !ipv6 case || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|b872a2371f}} || udp_diag: Make it module when ipv6 is a module || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|507dd7961e}} || udp_diag: Wire the udp_diag module into kbuild || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|b6d640c228}} || udp_diag: Implement the dump-all functionality || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|a925aa00a5}} || udp_diag: Implement the get_exact dumping functionality || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|52b7c59bc3}} || udp_diag: Basic skeleton || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|fce823381e}} || udp: Export code sk lookup routines || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|1942c518ca}} || inet_diag: Generalize inet_diag dump and get_exact calls || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|3c4d05c805}} || inet_diag: Introduce the inet socket dumping routine || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|8d07d1518a}} || inet_diag: Introduce the byte-code run on an inet socket || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|efb3cb428d}} || inet_diag: Split inet_diag_get_exact into parts || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|476f7dbff3}} || inet_diag: Split inet_diag_get_exact into parts || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|b005ab4ef8}} || inet_diag: Export inet diag cookie checking routine || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|87c22ea52e}} || inet_diag: Reduce the number of args for bytecode run routine || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|7b35eadd7e}} || inet_diag: Remove indirect sizeof from inet diag handlers || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|8ef874bfc7}} || sock_diag: Move the sock_ code to net/core/ || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|a029fe26b6}} || inet_diag: Cleanup type2proto last user || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|d23deaa07b}} || inet_diag: Introduce socket family checks || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|25c4cd2b6d}} || inet_diag: Switch the _dump to work with new header || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|fe50ce2846}} || inet_diag: Switch the _get_exact to work with new header || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|126fdc3249}} || inet_diag: Introduce new inet_diag_req header || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|d366477a52}} || sock_diag: Initial skeleton || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|f13c95f0e2}} || inet_diag: Switch from _GETSOCK to IPPROTO_ numbers || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|37f352b5e3}} || inet_diag: Move byte-code finding up the call-stack || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|8d34172dfd}} || sock_diag: Introduce new message type || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|818411616b}} || fs, proc: Introduce /proc/&amp;lt;pid&amp;gt;/task/&amp;lt;tid&amp;gt;/children entry v9 || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|5b172087f9}} || c/r: procfs: add arg_start/end, env_start/end and exit_code members || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|fe8c7f5cbf}} || c/r: prctl: Extend PR_SET_MM to set up more mm_struct entries || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|d97b46a646}} || syscalls, x86: Add __NR_kcmp syscall || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b32dfe3771}} || c/r: prctl: Add ability to set new mm_struct::exe_file || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|79f0713d40}} || prctl: Use CAP_SYS_RESOURCE for PR_SET_MM option || 3.3&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|300f786b26}} || prctl: add ability to get clear_tid_address || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|4934b0329f}} || datagram: Factor out sk queue referencing || 3.4&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|3f518bf745}} || datagram: Add offset argument to __skb_recv_datagram || 3.4&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|da5ef6e51b}} || skb: Add skb_peek_next helper || 3.4&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ef64a54f6e}} || sock: Introduce the SO_PEEK_OFF sock option || 3.4&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|f55bb7f9cb}} || unix: Support peeking offset for datagram and seqpacket sockets || 3.4&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|fc0d753641}} || unix: Support peeking offset for stream sockets || 3.4&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|1d151c337d}} || fcntl: Add F_GETOWNER_UIDS option v3 || 3.6&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|370816aef0}} || tcp: Move code around || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ee9952831c}} || tcp: Initial repair mode || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c0e88ff0f2}} || tcp: Repair socket queues || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|5e6a3ce657}} || tcp: Report mss_clamp with TCP_MAXSEG option in repair mode || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b139ba4e90}} || tcp: Repair connection-time negotiated parameters || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|de248a75c3}} || tcp repair: Fix unaligned access when repairing options (v2) || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|736f24d5e5}} || c/r: prctl: Drop VMA flags test on PR_SET_MM_ stack data assignment || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|5702c5eeab}} || c/r: prctl: Move PR_GET_TID_ADDRESS to a proper place || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|16fbdce62d}} || proc: report file/anon bit in /proc/pid/pagemap || 3.4&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|bca1554373}} || proc/smaps: show amount of nonlinear ptes in vma || 3.5&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b14f243a42}} || net: Dont use ifindices in hash fns || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|9c7dafbfab}} || net: Allow to create links with given ifindex || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|e6f8f1a739}} || veth: Allow to create peer link with given ifindex || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|aa79e66eee}} || net: Make ifindex generation per-net namespace || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|1fb9489bf1}} || net: Loopback ifindex is constant now || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|faf60af17f}} || procfs: Move /proc/pid/fd[info] handling code to fd.[ch] || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ddd3e0771b}} || procfs: Convert /proc/pid/fdinfo/ handling routines to seq-file || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|55985dd72a}} || procfs: Add ability to plug in auxiliary fdinfo providers || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|cbac5542d4}} || fs, eventfd: Add procfs fdinfo helper || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|138d22b586}} || fs, epoll: Add procfs fdinfo helper v2 || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|711c7bf991}} || fs, exportfs: Add export_encode_inode_fh helper || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|be77196b80}} || fs, notify: Add procfs fdinfo helper || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|e6dbcafb74}} || fs, fanotify: Add @mflags field to fanotify output || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|2787b04b6c}} || packet: Introduce net/packet/internal.h header || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|96ec632714}} || packet: Diag core and basic socket info dumping || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|8a360be0c5}} || packet: Report more packet sk info via diag module || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|eea68e2f1a}} || packet: Report socket mclist info via diag module || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|16f01365fa}} || packet: Report rings cfg via diag engine || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|fff3321d75}} || packet: Report fanout status via diag engine || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|0fa7fa98db}} || packet: Protect packet sk list with mutex (v2) || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|579035dc5d}} || kernel: limit a value of ns_last_pid to (0, max_pid) || 3.6&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|bc26ccd8fc}} || tcp: restore rcv_wscale in a repair mode (v2) || 3.6&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|f7b86bfe8d}} || sockopt: Make SO_BINDTODEVICE readable || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|e4e541a848}} || sock-diag: Report shutdown for inet and unix sockets (v2) || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|834f82e2aa}} || procfs: add VmFlags field in smaps output || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|06026d911c}} || tty: pty - Move TIOCPKT handling into pty.c || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c6298038bc}} || tty, ioctls -- Add new ioctl definitions for tty flags fetching || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|84fd7bdf12}} || tty: Add get- ioctls to fetch tty status v3 || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|a8fc927780}} || sk-filter: Add ability to get socket filter program (v2) || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|cacb6ba0f3}} || net: inet_diag -- Return error code if protocol handler is missed || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c454e6111d}} || tcp-repair: Handle zero-length data put in rcv queue || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ec34232575}} || tcp: fix retransmission in repair mode || 3.7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|2b9164771e}} || ipv6: adapt connect for repair move || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c91f6df2db}} || sockopt: Change getsockopt() of SO_BINDTODEVICE to return an interface name || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|3fcfe78658}} || ipc: add more comments to message copying related code || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|51eeacaa07}} || ipc: simplify message copying || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b30efe2775}} || ipc: convert prepare_copy() from macro to function || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|85398aa8de}} || ipc: simplify free_copy() call || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|3a665531a3}} || selftests: IPC message queue copy feature test || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|4a674f34ba}} || ipc: introduce message queue copy feature || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|f9dd87f473}} || ipc: message queue receive cleanup || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|03f5956680}} || ipc: add sysctl to specify desired next object id || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|9afdacda02}} || ipc: remove forced assignment of selected message || 3.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|3f7d1fe108}} || arm: Wire up kcmp syscall || 3.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|1e142b29e2}} || kcmp: make it depend on CHECKPOINT_RESTORE || 3.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ceaa1fef65}} || tcp: adding a per-socket timestamp offset || 3.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|93be6ce0e9}} || tcp: set and get per-socket timestamp || 3.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ee684b6f28}} || tcp: send packets with a socket timestamp || 3.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|66dd34ad}} || signal: allow to send any siginfo to itself || 3.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ae5fc987}} || net: fix *_DIAG_MAX constants || 3.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|0f29c768}} || net: prepare netlink code for netlink diag || 3.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|eaaa3139}} || netlink: Diag core and basic socket info dumping (v2) || 3.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|84c751bd}} || ptrace: add ability to retrieve signals without removing from a queue (v4) || 3.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|040fa020}} || clear_refs: Sanitize accepted commands declaration || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|af9de7eb}} || clear_refs: Introduce private struct for mm_walk || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|2b0a9f01}} || pagemap-introduce-pagemap_entry_t-without-pmshift-bits || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|0f8975ec}} || mm: soft-dirty bits for user memory changes tracking || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|541c237c}} || pagemap: prepare to reuse constant bits with page-shift || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|57b8015e}} || posix-timers: Show sigevent info in proc file || 3.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|48f6a7a5}} || posix-timers: Introduce /proc/PID/timers file || 3.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|5ed67f05}} || posix timers: Allocate timer id per process (v2) || 3.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|15ef0298}} || posix-timers: Show clock ID in proc file || 3.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|29000cae}} || ptrace: add ability to get/set signal-blocked mask (v2) || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|274038f8}} || tun: Report &amp;quot;persist&amp;quot; flag to userspace || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|179ef71c}} || mm: Save soft-dirty bits on swapped pages || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|41bb3476}} || mm: Save soft-dirty bits on file pages || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|76975e9c}} || tun: Get skfilter layout || 3.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|849c9b6f}} || tun: Allow to skip filter on attach || 3.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|3d407a80}} || tun: Report whether the queue is attached or not || 3.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|fb7589a1}} || tun: Add ability to create tun device with given index || 3.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|e3e12028}} || tcp: don't apply tsoffset if rcv_tsecr is zero || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c7781a6e}} || tcp: initialize rcv_tstamp for restored sockets || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|7ed5c5ae}} || tcp: set timestamps for restored skb-s || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|6dec97dc}} || mm: move_ptes -- Set soft dirty bit depending on pte type || 3.11&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c3d16e16}} || mm: migration -- Do not loose soft dirty bit if page is in migration state || 3.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|e9cdd6e7}} || mm: pagemap -- Inspect _PAGE_SOFT_DIRTY only on present pages || 3.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|dbde4979}} || tcp: don't update snd_nxt, when a socket is switched from repair mode || 3.13&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|d9104d1c}} || mm: track vma changes with VM_SOFTDIRTY bit || 3.12&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|34228d47}} || mm: Ignore VM_SOFTDIRTY on VMA merging || 3.14, 3.13-stable&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|24f91eba1}} || mm: don't lose the SOFT_DIRTY flag on mprotect || 3.14, 3.13-stable&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|49d063cb3}} || proc: show mnt_id in /proc/pid/fdinfo || 3.15&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|0bf073315}} || mm: Make freshly remapped file pages being softdirty unconditionally || 3.16&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|9aed8614a}} || mm: Don't forget to set softdirty on file mapped fault || 3.17&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b43790eed}} || mm: Don't forget to save file map softdiry bit on unmap || 3.16&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c86c97ff4}} || mm: Clear VM_SOFTDIRTY flag inside clear_refs_write instead of clear_soft_dirty || 3.16&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|af9c4957c}} || timerfd: Implement show_fdinfo method || 3.17&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|854d06d9f}} || docs: Procfs -- Document timerfd output || 3.17&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|5442e9fbd}} || timerfd: Implement timerfd_ioctl method to restore timerfd_ctx::ticks, v3 || 3.17&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|64e455079}} || mm: softdirty: enable write notifications on VMAs after VM_SOFTDIRTY cleared || 3.18&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|9c5990240}} || mm: introduce check_data_rlimit helper || 3.18&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|8764b338b}} || mm: use may_adjust_brk helper || 3.18&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|71fe97e18}} || prctl: PR_SET_MM -- factor out mmap_sem when updating mm::exe_file || 3.18&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|f606b77f1}} || prctl: PR_SET_MM -- introduce PR_SET_MM_MAP operation || 3.18&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|a3816ab0e}} || fs: Convert show_fdinfo functions to void || 3.19&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|9183df25f}} || shm: add memfd_create() syscall || 3.17&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|e4a0d3e72}} || aio: Make it possible to remap aio ring || 3.19&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|6c8c90319}} || proc: show locks in /proc/pid/fdinfo/X || 4.1&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|155e35d4d}} || VFS: Introduce inode-getting helpers for layered/unioned fs environments || 4.0&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|df1a085af}} || VFS: Add a fallthrough flag for marking virtual dentries || 4.0&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|f25801ee4}} || overlay: Call ovl_drop_write() earlier in ovl_dentry_open() || 4.2-rc2&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|4bacc9c92}} || overlayfs: Make f_path always point to the overlay and f_inode to the underlay || 4.2-rc2&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|9391dd00d}} || fix a braino in ovl_d_select_inode() || 4.2-rc2&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|13c4a9011}} || seccomp: add ptrace options for suspend/resume || 4.3-rc1&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|bab189918}} || bpf, seccomp: prepare for upcoming criu support || 4.4-rc1&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|f8e529ed9}} || seccomp, ptrace: add support for dumping seccomp filters || 4.4-rc1&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c83aa55d0}} || autofs: show pipe inode in mount options || 4.6-rc4&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b1ed4c4fa}} || tcp: add an ability to dump and restore window parameters || 4.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|b059a453b}} || x86/vdso: Add mremap hook to vm_special_mapping || 4.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|f80fd3a5f}} || selftests/x86: Add vDSO mremap() test || 4.8&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|e38447ee1}} || x86/vdso: Unmap vdso blob on vvar mapping failure || 4.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|576ebfefd}} || x86/vdso: Replace calculate_addr in map_vdso() with addr || 4.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|2eefd8789}} || x86/arch_prctl/vdso: Add ARCH_MAP_VDSO_* || 4.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|90954e7b9}} || x86/coredump: Use pr_reg size, rather that TIF_IA32 flag || 4.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|cc87324b3}} || x86/ptrace: Down with test_thread_flag(TIF_IA32) || 4.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|684635105}} || x86/signal: Add SA_{X32,IA32}_ABI sa_flags || 4.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|ed1e7db33}} || x86/signal: Remove bogus user_64bit_mode() check from sigaction_compat_abi() || v4.9-rc2&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|7b2dd3682}} || x86/coredump: Always use user_regs_struct for compat_elf_gregset_t || v4.9-rc7&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|432490f9d}} || net: ip, diag -- Add diag interface for raw sockets || v4.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|cd05a0eca}} || net: ip, raw_diag -- Fix socket leaking for destroy request || v4.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|3de864f8c}} || net: ip, diag -- Adjust raw_abort to use unlocked __udp_disconnect || v4.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|9999370fa}} || net: ip, raw_diag -- Use jump for exiting from nested loop || v4.10&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|c62cce2ca}} || net: add an ioctl to get a socket network namespace || v4.10-rc1&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|319b0534b9}} || tcp: allow to enable the repair mode for non-listening sockets || v4.10-rc1&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|ba94f3088b}} || unix: add ioctl to open a unix socket file with O_PATH ||&lt;br /&gt;
|-&lt;br /&gt;
|{{tip.git|6a0b41d1e2}} || x86/mm: Introduce arch_rnd() to compute 32/64 mmap random base ||&lt;br /&gt;
|-&lt;br /&gt;
|{{tip.git|8f3e474f3c}} || x86/mm: Add task_size parameter to mmap_base() ||&lt;br /&gt;
|-&lt;br /&gt;
|{{tip.git|1b028f784e}} || x86/mm: Introduce mmap_compat_base() for 32-bit mmap() ||&lt;br /&gt;
|-&lt;br /&gt;
|{{tip.git|3e6ef9c809}} || x86/mm: Make mmap(MAP_32BIT) work correctly ||&lt;br /&gt;
|-&lt;br /&gt;
|{{tip.git|e13b73dd9c}} || x86/hugetlb: Adjust to the new native/compat mmap bases ||&lt;br /&gt;
|-&lt;br /&gt;
|{{tip.git|ada26481df}} || x86/mm: Make in_compat_syscall() work during exec ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>Dsafonov</name></author>
	</entry>
</feed>