<?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=Cyrillos</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=Cyrillos"/>
	<link rel="alternate" type="text/html" href="https://criu.org/Special:Contributions/Cyrillos"/>
	<updated>2026-05-13T14:44:56Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.35.6</generator>
	<entry>
		<id>https://criu.org/index.php?title=Main_Page&amp;diff=4981</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=Main_Page&amp;diff=4981"/>
		<updated>2019-09-11T09:32:56Z</updated>

		<summary type="html">&lt;p&gt;Cyrillos: Add willet image&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;float: {{{1|right}}}&amp;quot;&amp;gt;&lt;br /&gt;
{{Download box|left}}&lt;br /&gt;
[[Image:Willet_texas_april2003_1_1280.png|right|178px]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
__NOTOC__&lt;br /&gt;
&amp;lt;big&amp;gt;Welcome to CRIU, a project to implement checkpoint/restore functionality for Linux.&lt;br /&gt;
&lt;br /&gt;
Checkpoint/Restore In Userspace, or CRIU (pronounced kree-oo, IPA: /krɪʊ/, Russian: криу), is a Linux software. It can freeze a running application (or part of it) and checkpoint its state to disk. The data saved can be used to restore the application and run it exactly as it was during the time of the freeze. Using this functionality, application or container live migration, snapshots, remote debugging, and [[usage scenarios|many other things]] are now possible.&lt;br /&gt;
&lt;br /&gt;
CRIU started as a project of Virtuozzo, and grew with the tremendous help from the [[community]]. It is currently used by (integrated into) OpenVZ, [[LXC]]/LXD, [[Docker]], Podman, and [[Integration|other software]], and [[packages|packaged for many Linux distributions]].&lt;br /&gt;
&amp;lt;/big&amp;gt;&lt;br /&gt;
{{Like}}&lt;br /&gt;
&amp;lt;br clear=&amp;quot;both&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;m_right&amp;quot;&amp;gt;&lt;br /&gt;
{{News block 2}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;m_left&amp;quot;&amp;gt;&lt;br /&gt;
== Using ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&lt;br /&gt;
;Getting [[packages]] for your distribution&lt;br /&gt;
: Or try manual [[installation]] to have CRIU on your system&lt;br /&gt;
&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;[[CLI]], [[RPC]] and [[C API]]&lt;br /&gt;
: Three ways to start using the C/R functionality.  [[:Category:API|More info]] about APIs.&lt;br /&gt;
&lt;br /&gt;
;[[Usage scenarios]]&lt;br /&gt;
: Ideas how criu can be used (some are crazy indeed)&lt;br /&gt;
&lt;br /&gt;
;[[:Category:HOWTO]]&lt;br /&gt;
: Collection of real world examples of how to use CRIU. Some are complex, some are not. HOW TO dump a [[simple loop]] might be the best one to start with. Also a set of [[asciinema]] records for real-life examples.&lt;br /&gt;
&lt;br /&gt;
;[[FAQ]] &amp;amp; [[When C/R fails]]&lt;br /&gt;
: A sort of troubleshooting guide&lt;br /&gt;
&lt;br /&gt;
;[[What can change after C/R]]&lt;br /&gt;
: CRIU cannot (yet) save and restore every single bit of tasks' state. This page describes what bits visible through standard kernel API are such.&lt;br /&gt;
&lt;br /&gt;
;[[What cannot be checkpointed]]&lt;br /&gt;
: What an application could do to make CRIU refuse to dump it.&lt;br /&gt;
&lt;br /&gt;
;[[Contacts]]&lt;br /&gt;
: Ways to communicate with CRIU community&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;m_center&amp;quot;&amp;gt;&lt;br /&gt;
== Developing ==&lt;br /&gt;
If you're interested in CRIU development, please subscribe to the criu mailing list: https://lists.openvz.org/mailman/listinfo/criu&lt;br /&gt;
&lt;br /&gt;
;[[Images]]&lt;br /&gt;
: Description of image files format&lt;br /&gt;
&lt;br /&gt;
;[[Plugins]]&lt;br /&gt;
: CRIU can call plugins provided by people&lt;br /&gt;
&lt;br /&gt;
;[[Upstream kernel commits]]&lt;br /&gt;
: Mainline kernel commits tracker&lt;br /&gt;
&lt;br /&gt;
;[[Recent commits]]&lt;br /&gt;
: CRIU tool repository commits&lt;br /&gt;
&lt;br /&gt;
;[[Manpages]]&lt;br /&gt;
: Kernel's manpages commits tracker&lt;br /&gt;
&lt;br /&gt;
;[[ZDTM Test Suite]]&lt;br /&gt;
: Zero downtime test suite&lt;br /&gt;
&lt;br /&gt;
;[[Todo|TODO]]&lt;br /&gt;
: Current TODO list&lt;br /&gt;
&lt;br /&gt;
;[[User namespace]]&lt;br /&gt;
: Implementing user namespace support&lt;br /&gt;
&lt;br /&gt;
;[[Postulates]]&lt;br /&gt;
: What to keep in mind when writing new code&lt;br /&gt;
&lt;br /&gt;
;[https://coveralls.io/github/checkpoint-restore/criu Code coverage results]&lt;br /&gt;
: Shows how zdtm run covers the criu code paths&lt;br /&gt;
&lt;br /&gt;
;[[How to submit patches]]&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;both&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;m_left&amp;quot;&amp;gt;&lt;br /&gt;
== Under the hood ==&lt;br /&gt;
* [[Checkpoint/Restore]]&lt;br /&gt;
* [[:Category:Under the hood]]&lt;br /&gt;
* [[:Category:Network]]&lt;br /&gt;
* [[:Category:Files]]&lt;br /&gt;
* [[:Category:Memory]]&lt;br /&gt;
* [[Pending signals]]&lt;br /&gt;
* [[Stages of restoring]]&lt;br /&gt;
* [[Code blobs]]&lt;br /&gt;
* [[Comparison to other CR projects]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;m_center&amp;quot;&amp;gt;&lt;br /&gt;
== External links ==&lt;br /&gt;
{{:Articles}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;m_right&amp;quot;&amp;gt;&lt;br /&gt;
== Misc ==&lt;br /&gt;
* [[Podcasts]] and other audio/video interviews&lt;br /&gt;
* Project [[history]]&lt;br /&gt;
* [[Logo]] description&lt;br /&gt;
* [[Events]]&lt;br /&gt;
* [[CRIU acronym fun]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Cyrillos</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=File:Willet_texas_april2003_1_1280.png&amp;diff=4980</id>
		<title>File:Willet texas april2003 1 1280.png</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=File:Willet_texas_april2003_1_1280.png&amp;diff=4980"/>
		<updated>2019-09-11T09:32:02Z</updated>

		<summary type="html">&lt;p&gt;Cyrillos: Taken and adopted from https://www.hbw.com/ibc/photo/willet-tringa-semipalmata/eastern-willet-shore

Species: Willet Tringa semipalmata
Subspecies: semipalmata
Author: Lars Petersson
Date: Saturday, April 5, 2003
Added to IBC: 2 Feb 2017 - 23:06&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
Taken and adopted from https://www.hbw.com/ibc/photo/willet-tringa-semipalmata/eastern-willet-shore&lt;br /&gt;
&lt;br /&gt;
Species: Willet Tringa semipalmata&lt;br /&gt;
Subspecies: semipalmata&lt;br /&gt;
Author: Lars Petersson&lt;br /&gt;
Date: Saturday, April 5, 2003&lt;br /&gt;
Added to IBC: 2 Feb 2017 - 23:06&lt;/div&gt;</summary>
		<author><name>Cyrillos</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=Google_Summer_of_Code_Ideas&amp;diff=4818</id>
		<title>Google Summer of Code Ideas</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=Google_Summer_of_Code_Ideas&amp;diff=4818"/>
		<updated>2019-01-29T15:58:54Z</updated>

		<summary type="html">&lt;p&gt;Cyrillos: Drop diskless migration, I will not have enough time to be a mentor&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Google Summer of Code (GSoC) is a global program that offers post-secondary students an opportunity to be paid for contributing to an open source project over a three month period. &lt;br /&gt;
&lt;br /&gt;
This page contains project ideas for upcoming Google Summer of Code.&lt;br /&gt;
&lt;br /&gt;
== Suggested ideas ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Post-copy for shared memory and hugetlbfs ===&lt;br /&gt;
 &lt;br /&gt;
'''Summary:''' extend post-copy memory restore and migration to support shared memory and hugetlbfs.&lt;br /&gt;
&lt;br /&gt;
CRIU relies on [[Userfaultfd]] mechanism in the Linux kernel to implement the demand paging in userspace and allow post-copy memory (or lazy) [[Lazy_migration|migration]]. However, currently this support is limited to anonymous private memory mappings, although kernel also supports shared memory areas and hugetlbfs backed memory.&lt;br /&gt;
&lt;br /&gt;
The shared memory support for lazy migration can be added to CRIU without kernel modifications, while proper handling of hugetlbfs would require userfaultfd callbacks for [http://man7.org/linux/man-pages/man2/fallocate.2.html fallocate(PUNCH_HOLE)] and [http://man7.org/linux/man-pages/man2/madvise.2.html madvise(MADV_REMOVE)] system calls.&lt;br /&gt;
 &lt;br /&gt;
'''Links:'''&lt;br /&gt;
* [https://www.kernel.org/doc/html/latest/admin-guide/mm/userfaultfd.html Userfaultfd]&lt;br /&gt;
* [https://www.kernel.org/doc/html/latest/admin-guide/mm/hugetlbpage.html hugetlbfs]&lt;br /&gt;
'''Details:'''&lt;br /&gt;
* Skill level: most probably advanced?&lt;br /&gt;
* Language: C&lt;br /&gt;
* Mentor: Mike Rapoport &amp;lt;rppt@linux.ibm.com&amp;gt; / Andrey Vagin &amp;lt;avagin@gmail.com&amp;gt;&lt;br /&gt;
* Suggested by: Mike Rapoport &amp;lt;rppt@linux.ibm.com&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Optimize logging engine ===&lt;br /&gt;
 &lt;br /&gt;
'''Summary:''' CRIU puts a lots of logs when doing its job. Logging is done with simple fprintf function. They are typically useless, but ''if'' some operation fails -- the logs are the only way to find what was the reason for failure.&lt;br /&gt;
&lt;br /&gt;
At the same time the printf family of functions is known to take some time to work -- they need to scan the format string for %-s and then convert the arguments into strings. If comparing criu dump with and without logs the time difference is notable (15%-20%), so speeding the logs up will help improve criu performance.&lt;br /&gt;
&lt;br /&gt;
One of the solutions to the problem might be binary logging. The problem with binary logs is the amount of efforts to convert existing logs to binary form. Preferably, the switch to binary logging either keeps existing log() calls intact, either has some automatics to convert them.&lt;br /&gt;
&lt;br /&gt;
The option to keep log() calls intact might be in pre-compilation pass of the sources. In this pass each &amp;lt;code&amp;gt;log(fmt, ...)&amp;lt;/code&amp;gt; call gets translated into a call to a binary log function that saves &amp;lt;code&amp;gt;fmt&amp;lt;/code&amp;gt; identifier copies all the args ''as is'' into the log file. The binary log decode utility, required in this case, should then find the fmt string by its ID in the log file and print the resulting message.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
'''Links:'''&lt;br /&gt;
* [[Better logging]]&lt;br /&gt;
 &lt;br /&gt;
'''Details:'''&lt;br /&gt;
* Skill level: intermediate&lt;br /&gt;
* Language: C, though decoder/preprocessor can be in any language&lt;br /&gt;
* Mentor: Andrei Vagin &amp;lt;avagin@gmail.com&amp;gt; / Pavel Emelyanov &amp;lt;xemul@openvz.org&amp;gt;&lt;br /&gt;
* Suggested by: Andrei Vagin &amp;lt;avagin@gmail.com&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Add support for checkpoint/restore of CORK-ed UDP socket ===&lt;br /&gt;
 &lt;br /&gt;
'''Summary:''' Support C/R of corked UDP socket&lt;br /&gt;
 &lt;br /&gt;
There's UDP_CORK option for sockets. As man page says:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    If this option is enabled, then all data output on this socket&lt;br /&gt;
    is accumulated into a single datagram that is transmitted when&lt;br /&gt;
    the option is disabled.  This option should not be used in&lt;br /&gt;
    code intended to be portable.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Currently criu refuses to dump this case, so it's effectively a bug. Supporting&lt;br /&gt;
this will need extending the kernel API to allow criu read back the write queue&lt;br /&gt;
of the socket (see [[TCP connection|how it's done]] for TCP sockets, for example). Then&lt;br /&gt;
the queue is written into the image and is restored into the socket (with the CORK&lt;br /&gt;
bit set too).&lt;br /&gt;
 &lt;br /&gt;
'''Links:'''&lt;br /&gt;
* https://github.com/checkpoint-restore/criu/issues/409&lt;br /&gt;
* [[Sockets]], [[TCP connection]]&lt;br /&gt;
* [[https://groups.google.com/forum/#!topic/comp.os.linux.networking/Uz8PYiTCZSg UDP cork explained]]&lt;br /&gt;
 &lt;br /&gt;
'''Details:'''&lt;br /&gt;
* Skill level: intermediate (+linux kernel)&lt;br /&gt;
* Language: C&lt;br /&gt;
* Mentor: Pavel Emelianov &amp;lt;xemul@virtuozzo.com&amp;gt;&lt;br /&gt;
* Suggested by: Pavel Emelianov &amp;lt;xemul@virtuozzo.com&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Optimize the pre-dump algorithm ===&lt;br /&gt;
 &lt;br /&gt;
'''Summary:''' Optimize the pre-dump algorithm to avoid pinning to many memory in RAM&lt;br /&gt;
 &lt;br /&gt;
Current [[CLI/cmd/pre-dump|pre-dump]] mode is used to write task memory contents into image&lt;br /&gt;
files w/o stopping the task for too long. It does this by stopping the task, infecting it and&lt;br /&gt;
draining all the memory into a set of pipes. Then the task is cured and resumed and the pipes'&lt;br /&gt;
contents is written into images (maybe a [[page server]]). This approach creates a big stress&lt;br /&gt;
on memory subsystem, as keeping all the memory in pipes creates a lot of unreclaimable memory&lt;br /&gt;
(pages in pipes are not swappable), as well as the number of pipes themselves can be buge (as&lt;br /&gt;
one pipe doesn't store more than a fixed certain amount of data).&lt;br /&gt;
&lt;br /&gt;
We can try to use sys_read_process_vm() syscall to mitigate all of the above. To do this we&lt;br /&gt;
need to allocate a temporary buffer in criu, then walk the target process vm by copying the&lt;br /&gt;
memory piece-by-piece into it, then flush the data into image (or page server), then repeat.&lt;br /&gt;
&lt;br /&gt;
Ideally there should be sys_splice_process_vm() syscall in the kernel, that does the same as&lt;br /&gt;
the read_process_vm does, but vmsplices the data&lt;br /&gt;
 &lt;br /&gt;
'''Links:'''&lt;br /&gt;
* https://github.com/checkpoint-restore/criu/issues/351&lt;br /&gt;
* [[Memory dumping and restoring]], [[Memory changes tracking]]&lt;br /&gt;
* [http://man7.org/linux/man-pages/man2/process_vm_readv.2.html process_vm_readv(2)] [http://man7.org/linux/man-pages/man2/vmsplice.2.html vmsplice(2)] [https://lkml.org/lkml/2017/11/22/527 RFC for splice_process_vm syscall]&lt;br /&gt;
 &lt;br /&gt;
'''Details:'''&lt;br /&gt;
* Skill level: advanced&lt;br /&gt;
* Language: C&lt;br /&gt;
* Mentor: Pavel Emelianov &amp;lt;xemul@virtuozzo.com&amp;gt;&lt;br /&gt;
* Suggested by: Pavel Emelianov &amp;lt;xemul@virtuozzo.com&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Anonymise image files ===&lt;br /&gt;
 &lt;br /&gt;
'''Summary:''' Teach [[CRIT]] to remove sensitive information from images&lt;br /&gt;
 &lt;br /&gt;
When reporting a BUG it may be not acceptable for the reporter to send us raw images, as they may contain sensitive data. Need to teach CRIT to &amp;quot;anonymise&amp;quot; images for publication.&lt;br /&gt;
&lt;br /&gt;
List of data to shred:&lt;br /&gt;
&lt;br /&gt;
* Memory contents. For the sake of investigation, all the memory contents can be just removed. Only the sizes of pages*.img files are enough.&lt;br /&gt;
* Paths to files. Here we should keep the paths relations to each other. The simplest way seem to be replacing file names with &amp;quot;random&amp;quot; (or sequential) strings, BUT (!) keeping an eye on making this mapping be 1:1. Note, that file paths may also sit in sk-unix.img.&lt;br /&gt;
* Registers.&lt;br /&gt;
* Process names. (But relations should be kept).&lt;br /&gt;
* Contents of streams, i.e. pipe/fifo data, sk-queue, tcp-stream, tty data.&lt;br /&gt;
* Ghost files.&lt;br /&gt;
* Tarballs with tmpfs-s.&lt;br /&gt;
* IP addresses in sk-inet-s, ip tool dumps and net*.img.&lt;br /&gt;
 &lt;br /&gt;
'''Links:'''&lt;br /&gt;
* https://github.com/checkpoint-restore/criu/issues/360&lt;br /&gt;
* [[CRIT]], [[Images]]&lt;br /&gt;
* External links to mailing lists or web sites&lt;br /&gt;
 &lt;br /&gt;
'''Details:'''&lt;br /&gt;
* Skill level: beginner&lt;br /&gt;
* Language: Python&lt;br /&gt;
* Mentor: Pavel Emelianov &amp;lt;xemul@virtuozzo.com&amp;gt;&lt;br /&gt;
* Suggested by: Pavel Emelianov &amp;lt;xemul@virtuozzo.com&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Porting crit functionalities in GO ===&lt;br /&gt;
 &lt;br /&gt;
'''Summary:''' Implement image view and manipulation in Go&lt;br /&gt;
 &lt;br /&gt;
CRIU's checkpoint images are stored on disk using protobuf. For easier analysis of checkpoint files CRIU has a tool called [[CRIT|CRiu Image Tool (CRIT)]]. It can display/decode CRIU image files from binary protobuf to JSON as well as encode JSON files back to the binary format. With closer integration of CRIU in container runtimes it becomes important to be able to view the CRIU output files. Either for manipulation before restoring or for reading checkpoint statistics (memory pages written to disk, memory pages skipped, process downtime).&lt;br /&gt;
&lt;br /&gt;
Currently CRIT is implemented in Python, for easier integration in other Go projects it is important to have image manipulation and analysis available from GO. This means we need a Go based library to read/modify/write/encode/decode CRIU's image files. Based on this library a Go based implementation of CRIT would be useful.&lt;br /&gt;
&lt;br /&gt;
'''Links:'''&lt;br /&gt;
* [[CRIT]]&lt;br /&gt;
* Possible use case see LXD: https://github.com/lxc/lxd/blob/cb55b1c5a484a43e0c21c6ae8c4a2e30b4d45be3/lxd/migrate_container.go#L179&lt;br /&gt;
* https://github.com/lxc/lxd/pull/4072&lt;br /&gt;
* https://github.com/checkpoint-restore/go-criu/blob/master/phaul/stats.go&lt;br /&gt;
 &lt;br /&gt;
'''Details:'''&lt;br /&gt;
* Skill level: beginner&lt;br /&gt;
* Language: Go&lt;br /&gt;
* Mentor: Adrian Reber &amp;lt;areber@redhat.com&amp;gt;&lt;br /&gt;
* Suggested by: Adrian Reber &amp;lt;areber@redhat.com&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Memory changes tracking with userfaultfd-WP ===&lt;br /&gt;
 &lt;br /&gt;
'''Summary:''' add ability to track memory changes of the snapshotted processes using userfaultfd-WP&lt;br /&gt;
&lt;br /&gt;
Currently CRIU uses [[Memory_changes_tracking|Soft-dirty]] mechanism in Linux kernel to track memory changes.&lt;br /&gt;
This mechanism can be complemented (or even completely replaced) with recently proposed write protection support for&lt;br /&gt;
userfaultfd (userfaultfd-WP).&lt;br /&gt;
&lt;br /&gt;
Userfault allows implementation of paging in userspace. It allows an application to receive notifications about page faults and provide the desired memory contents for the faulting pages. In the current upstream kernels only missing page faults are supported, but there is an ongoing work to allow notifications for write faults as well. Using such notifications it would be possible to precisely track memory changes during pre-dump iterations. This approach may prove to be more efficient than soft-dirty.&lt;br /&gt;
 &lt;br /&gt;
'''Links:'''&lt;br /&gt;
* [https://www.kernel.org/doc/html/latest/admin-guide/mm/userfaultfd.html Userfaultfd]&lt;br /&gt;
* [https://github.com/xzpeter/linux/tree/uffd-wp-merged Userfaultfd-WP]&lt;br /&gt;
* [https://www.kernel.org/doc/html/latest/admin-guide/mm/soft-dirty.html?highlight=soft%20dirty Soft-Dirty]&lt;br /&gt;
* https://lwn.net/Articles/777258/&lt;br /&gt;
&lt;br /&gt;
'''Details:'''&lt;br /&gt;
* Skill level: most probably advanced?&lt;br /&gt;
* Language: C&lt;br /&gt;
* Mentor: Mike Rapoport &amp;lt;rppt@linux.ibm.com&amp;gt;&lt;br /&gt;
* Suggested by: Mike Rapoport &amp;lt;rppt@linux.ibm.com&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:GSoC]]&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>Cyrillos</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=Google_Summer_of_Code_Ideas&amp;diff=4797</id>
		<title>Google Summer of Code Ideas</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=Google_Summer_of_Code_Ideas&amp;diff=4797"/>
		<updated>2019-01-16T21:24:01Z</updated>

		<summary type="html">&lt;p&gt;Cyrillos: diskless migration&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Google Summer of Code (GSoC) is a global program that offers post-secondary students an opportunity to be paid for contributing to an open source project over a three month period. &lt;br /&gt;
&lt;br /&gt;
This page contains project ideas for upcoming Google Summer of Code.&lt;br /&gt;
&lt;br /&gt;
== Suggested ideas ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Post-copy for shared memory and hugetlbfs ===&lt;br /&gt;
 &lt;br /&gt;
'''Summary:''' extend post-copy memory restore and migration to support shared memory and hugeltbfs.&lt;br /&gt;
&lt;br /&gt;
CRIU relies on [[Userfaultfd]] mechanism in the Linux kernel to implement the demand paging in userspace and allow post-copy memory (or lazy) [[Lazy_migration|migration]]. However, currently this support is limited to anonymous private memory mappings, although kernel also supports shared memory areas and hugetlbfs backed memory.&lt;br /&gt;
&lt;br /&gt;
The shared memory support for lazy migration can be added to CRIU without kernel modifications, while proper handling of hugetlbfs would require userfaultfd callbacks for [http://man7.org/linux/man-pages/man2/fallocate.2.html fallocate(PUNCH_HOLE)] and [http://man7.org/linux/man-pages/man2/madvise.2.html madvise(MADV_REMOVE)] system calls.&lt;br /&gt;
 &lt;br /&gt;
'''Links:'''&lt;br /&gt;
* [https://www.kernel.org/doc/html/latest/admin-guide/mm/userfaultfd.html Userfaultfd]&lt;br /&gt;
* [https://www.kernel.org/doc/html/latest/admin-guide/mm/hugetlbpage.html hugetlbfs]&lt;br /&gt;
'''Details:'''&lt;br /&gt;
* Skill level: most probably advanced?&lt;br /&gt;
* Language: C&lt;br /&gt;
* Mentor: Mike Rapoport &amp;lt;rppt@linux.ibm.com&amp;gt;&lt;br /&gt;
* Suggested by: Mike Rapoport &amp;lt;rppt@linux.ibm.com&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Optimize logging engine ===&lt;br /&gt;
 &lt;br /&gt;
'''Summary:''' TODO: Short description of the project&lt;br /&gt;
 &lt;br /&gt;
TODO: Detailed description of the project.&lt;br /&gt;
 &lt;br /&gt;
'''Links:'''&lt;br /&gt;
* Wiki links to relevant material&lt;br /&gt;
* External links to mailing lists or web sites&lt;br /&gt;
 &lt;br /&gt;
'''Details:'''&lt;br /&gt;
* Skill level: beginner or intermediate or advanced&lt;br /&gt;
* Language: C&lt;br /&gt;
* Mentor: Andrei Vagin &amp;lt;avagin@gmail.com&amp;gt;&lt;br /&gt;
* Suggested by: Andrei Vagin &amp;lt;avagin@gmail.com&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Add support for checkpoint/restore of cgroups v2 ===&lt;br /&gt;
 &lt;br /&gt;
'''Summary:''' TODO: Short description of the project&lt;br /&gt;
 &lt;br /&gt;
TODO: Detailed description of the project.&lt;br /&gt;
 &lt;br /&gt;
'''Links:'''&lt;br /&gt;
* https://github.com/checkpoint-restore/criu/issues/252&lt;br /&gt;
* Wiki links to relevant material&lt;br /&gt;
* External links to mailing lists or web sites&lt;br /&gt;
 &lt;br /&gt;
'''Details:'''&lt;br /&gt;
* Skill level: beginner or intermediate or advanced&lt;br /&gt;
* Language: C&lt;br /&gt;
* Suggested by: Person who suggested the idea&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Add support for checkpoint/restore of CORK-ed UDP socket ===&lt;br /&gt;
 &lt;br /&gt;
'''Summary:''' Support C/R of corked UDP socket&lt;br /&gt;
 &lt;br /&gt;
There's UDP_CORK option for sockets. As man page says:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    If this option is enabled, then all data output on this socket&lt;br /&gt;
    is accumulated into a single datagram that is transmitted when&lt;br /&gt;
    the option is disabled.  This option should not be used in&lt;br /&gt;
    code intended to be portable.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Currently criu refuses to dump this case, so it's effectively a bug. Supporting&lt;br /&gt;
this will need extending the kernel API to allow criu read back the write queue&lt;br /&gt;
of the socket (see [[TCP connection|how it's done]] for TCP sockets, for example). Then&lt;br /&gt;
the queue is written into the image and is restored into the socket (with the CORK&lt;br /&gt;
bit set too).&lt;br /&gt;
 &lt;br /&gt;
'''Links:'''&lt;br /&gt;
* https://github.com/checkpoint-restore/criu/issues/409&lt;br /&gt;
* [[Sockets]], [[TCP connection]]&lt;br /&gt;
* [[https://groups.google.com/forum/#!topic/comp.os.linux.networking/Uz8PYiTCZSg UDP cork explained]]&lt;br /&gt;
 &lt;br /&gt;
'''Details:'''&lt;br /&gt;
* Skill level: intermediate (+linux kernel)&lt;br /&gt;
* Language: C&lt;br /&gt;
* Mentor: Pavel Emelianov &amp;lt;xemul@virtuozzo.com&amp;gt;&lt;br /&gt;
* Suggested by: Pavel Emelianov &amp;lt;xemul@virtuozzo.com&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Optimize the pre-dump algorithm ===&lt;br /&gt;
 &lt;br /&gt;
'''Summary:''' Optimize the pre-dump algorithm to avoid pinning to many memory in RAM&lt;br /&gt;
 &lt;br /&gt;
Current [[CLI/cmd/pre-dump|pre-dump]] mode is used to write task memory contents into image&lt;br /&gt;
files w/o stopping the task for too long. It does this by stopping the task, infecting it and&lt;br /&gt;
draining all the memory into a set of pipes. Then the task is cured and resumed and the pipes'&lt;br /&gt;
contents is written into images (maybe a [[page server]]). This approach creates a big stress&lt;br /&gt;
on memory subsystem, as keeping all the memory in pipes creates a lot of unreclaimable memory&lt;br /&gt;
(pages in pipes are not swappable), as well as the number of pipes themselves can be buge (as&lt;br /&gt;
one pipe doesn't store more than a fixed certain amount of data).&lt;br /&gt;
&lt;br /&gt;
We can try to use sys_read_process_vm() syscall to mitigate all of the above. To do this we&lt;br /&gt;
need to allocate a temporary buffer in criu, then walk the target process vm by copying the&lt;br /&gt;
memory piece-by-piece into it, then flush the data into image (or page server), then repeat.&lt;br /&gt;
&lt;br /&gt;
Ideally there should be sys_splice_process_vm() syscall in the kernel, that does the same as&lt;br /&gt;
the read_process_vm does, but vmsplices the data&lt;br /&gt;
 &lt;br /&gt;
'''Links:'''&lt;br /&gt;
* https://github.com/checkpoint-restore/criu/issues/351&lt;br /&gt;
* [[Memory dumping and restoring]], [[Memory changes tracking]]&lt;br /&gt;
* [http://man7.org/linux/man-pages/man2/process_vm_readv.2.html process_vm_readv(2)] [http://man7.org/linux/man-pages/man2/vmsplice.2.html vmsplice(2)] [https://lkml.org/lkml/2017/11/22/527 RFC for splice_process_vm syscall]&lt;br /&gt;
 &lt;br /&gt;
'''Details:'''&lt;br /&gt;
* Skill level: advanced&lt;br /&gt;
* Language: C&lt;br /&gt;
* Mentor: Pavel Emelianov &amp;lt;xemul@virtuozzo.com&amp;gt;&lt;br /&gt;
* Suggested by: Pavel Emelianov &amp;lt;xemul@virtuozzo.com&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Anonymize image files ===&lt;br /&gt;
 &lt;br /&gt;
'''Summary:''' Teach [[CRIT]] to remove sensitive information from images&lt;br /&gt;
 &lt;br /&gt;
When reporting a BUG it may be not acceptable for the reporter to send us raw images, as they may contain sensitive data. Need to teach CRIT to &amp;quot;anonymise&amp;quot; images for publication.&lt;br /&gt;
&lt;br /&gt;
List of data to shred:&lt;br /&gt;
&lt;br /&gt;
* Memory contents. For the sake of investigation, all the memory contents can be just removed. Only the sizes of pages*.img files are enough.&lt;br /&gt;
* Paths to files. Here we should keep the paths relations to each other. The simplest way seem to be replacing file names with &amp;quot;random&amp;quot; (or sequential) strings, BUT (!) keeping an eye on making this mapping be 1:1. Note, that file paths may also sit in sk-unix.img.&lt;br /&gt;
* Registers.&lt;br /&gt;
* Process names. (But relations should be kept).&lt;br /&gt;
* Contents of streams, i.e. pipe/fifo data, sk-queue, tcp-stream, tty data.&lt;br /&gt;
* Ghost files.&lt;br /&gt;
* Tarballs with tmpfs-s.&lt;br /&gt;
* IP addresses in sk-inet-s, ip tool dumps and net*.img.&lt;br /&gt;
 &lt;br /&gt;
'''Links:'''&lt;br /&gt;
* https://github.com/checkpoint-restore/criu/issues/360&lt;br /&gt;
* [[CRIT]], [[Images]]&lt;br /&gt;
* External links to mailing lists or web sites&lt;br /&gt;
 &lt;br /&gt;
'''Details:'''&lt;br /&gt;
* Skill level: beginner&lt;br /&gt;
* Language: Python&lt;br /&gt;
* Mentor: Pavel Emelianov &amp;lt;xemul@virtuozzo.com&amp;gt;&lt;br /&gt;
* Suggested by: Pavel Emelianov &amp;lt;xemul@virtuozzo.com&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Porting crit functionalities in GO ===&lt;br /&gt;
 &lt;br /&gt;
'''Summary:''' TODO: Short description of the project&lt;br /&gt;
 &lt;br /&gt;
TODO: Detailed description of the project.&lt;br /&gt;
&lt;br /&gt;
'''Links:'''&lt;br /&gt;
* Wiki links to relevant material&lt;br /&gt;
* External links to mailing lists or web sites&lt;br /&gt;
 &lt;br /&gt;
'''Details:'''&lt;br /&gt;
* Skill level: beginner or intermediate or advanced&lt;br /&gt;
* Language: Go&lt;br /&gt;
* Mentor: Adrian Reber &amp;lt;areber@redhat.com&amp;gt;&lt;br /&gt;
* Suggested by: Adrian Reber &amp;lt;areber@redhat.com&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Implement diskless migration ===&lt;br /&gt;
 &lt;br /&gt;
'''Summary:''' Need to investigate and implement that named diskless migration.&lt;br /&gt;
 &lt;br /&gt;
By diskless we imply a case where all images generated by checkpoint procedure do not sit on storage at all but rather get collected by the criu service on a destination machine, and read from memory later once restore procedure is initiated. More importantly the memory transferred should be deduplicated on the fly and premapped at some preliminary address. Later the restore procedure just remap data to proper positions without copying page data at all.&lt;br /&gt;
&lt;br /&gt;
This task is under the question still and the section is like a placeholder.&lt;br /&gt;
 &lt;br /&gt;
'''Details:'''&lt;br /&gt;
* Skill level: expert&lt;br /&gt;
* Language: C&lt;/div&gt;</summary>
		<author><name>Cyrillos</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=Xsave&amp;diff=4636</id>
		<title>Xsave</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=Xsave&amp;diff=4636"/>
		<updated>2018-08-12T20:54:58Z</updated>

		<summary type="html">&lt;p&gt;Cyrillos: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
&lt;br /&gt;
XSAVE stands for similar x86 instruction [https://hjlebbink.github.io/x86doc/html/XSAVE.html &amp;lt;code&amp;gt;xsave&amp;lt;/code&amp;gt;] which places extended processor state into a memory area. The saving can be initiated by any userspace application at any moment and size of the memory frame depends on processor features and may vary between different models. Thus if checkpoint and restore are done on different processors the next call to &amp;lt;code&amp;gt;xsave&amp;lt;/code&amp;gt; may corrupt memory if sizes mismatch.&lt;br /&gt;
&lt;br /&gt;
=== Helpers ===&lt;br /&gt;
&lt;br /&gt;
There are several helpers we will refer on in this page&lt;br /&gt;
&lt;br /&gt;
 static inline void native_cpuid(unsigned int *eax, unsigned int *ebx,&lt;br /&gt;
 				unsigned int *ecx, unsigned int *edx)&lt;br /&gt;
 {&lt;br /&gt;
 	/* ecx is often an input as well as an output. */&lt;br /&gt;
 	asm volatile(&amp;quot;cpuid&amp;quot;&lt;br /&gt;
 	    : &amp;quot;=a&amp;quot; (*eax),&lt;br /&gt;
 	      &amp;quot;=b&amp;quot; (*ebx),&lt;br /&gt;
 	      &amp;quot;=c&amp;quot; (*ecx),&lt;br /&gt;
 	      &amp;quot;=d&amp;quot; (*edx)&lt;br /&gt;
 	    : &amp;quot;0&amp;quot; (*eax), &amp;quot;2&amp;quot; (*ecx)&lt;br /&gt;
 	    : &amp;quot;memory&amp;quot;);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 static inline void cpuid(unsigned int op,&lt;br /&gt;
 			 unsigned int *eax, unsigned int *ebx,&lt;br /&gt;
 			 unsigned int *ecx, unsigned int *edx)&lt;br /&gt;
 {&lt;br /&gt;
 	*eax = op;&lt;br /&gt;
 	*ecx = 0;&lt;br /&gt;
 	native_cpuid(eax, ebx, ecx, edx);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 static inline void cpuid_count(unsigned int op, int count,&lt;br /&gt;
 			       unsigned int *eax, unsigned int *ebx,&lt;br /&gt;
 			       unsigned int *ecx, unsigned int *edx)&lt;br /&gt;
 {&lt;br /&gt;
 	*eax = op;&lt;br /&gt;
 	*ecx = count;&lt;br /&gt;
 	native_cpuid(eax, ebx, ecx, edx);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== Frame size ===&lt;br /&gt;
&lt;br /&gt;
Run &amp;lt;code&amp;gt; cpuid(0x1, &amp;amp;eax, &amp;amp;ebx, &amp;amp;ecx, &amp;amp;edx)&amp;lt;/code&amp;gt; and bits 26 and 27 are both set in &amp;lt;code&amp;gt;ecx&amp;lt;/code&amp;gt; if &amp;lt;code&amp;gt;xsave&amp;lt;/code&amp;gt; is supported (strictly speaking bit 27 is reserved for operating system which can clear it to indicate that instruction is disabled).&lt;br /&gt;
&lt;br /&gt;
After that we can fetch maximal frame size which applications may use via &amp;lt;code&amp;gt;cpuid_count(0xd, 0, &amp;amp;eax, &amp;amp;ebx, &amp;amp;ecx, &amp;amp;edx)&amp;lt;/code&amp;gt;, in result &amp;lt;code&amp;gt;ebx&amp;lt;/code&amp;gt; will contain the size to keep currently enabled components of the frame and &amp;lt;code&amp;gt;ecx&amp;lt;/code&amp;gt; will keep the value of maximal frame size. The maximal here means the size needed when all components are enabled (OS may disable some of components).&lt;br /&gt;
&lt;br /&gt;
=== Enumerating frame components ===&lt;br /&gt;
&lt;br /&gt;
To enumerate which components of the frame are enabled execute &amp;lt;code&amp;gt;cpuid_count(0xd, 0, &amp;amp;eax, &amp;amp;ebx, &amp;amp;ecx, &amp;amp;edx)&amp;lt;/code&amp;gt;. Each component will have bit set to 1 in 64 bit mask &amp;lt;code&amp;gt;eax + ((uint64_t)edx &amp;lt;&amp;lt; 32)&amp;lt;/code&amp;gt; if enabled.&lt;br /&gt;
&lt;br /&gt;
Current list of known components is the following (numbers are the bit position):&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;: x87 floating point registers&lt;br /&gt;
* &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;: SSE registers&lt;br /&gt;
* &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;: AVX registers&lt;br /&gt;
* &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt;: MPX bounds registers&lt;br /&gt;
* &amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt;: MPX CSR&lt;br /&gt;
* &amp;lt;code&amp;gt;5&amp;lt;/code&amp;gt;: AVX-512 opmask&lt;br /&gt;
* &amp;lt;code&amp;gt;6&amp;lt;/code&amp;gt;: AVX-512 Hi256&lt;br /&gt;
* &amp;lt;code&amp;gt;7&amp;lt;/code&amp;gt;: AVX-512 ZMM_Hi256&lt;br /&gt;
* &amp;lt;code&amp;gt;8&amp;lt;/code&amp;gt;: Processor Trace&lt;br /&gt;
* &amp;lt;code&amp;gt;9&amp;lt;/code&amp;gt;: Protection Keys User registers&lt;br /&gt;
* &amp;lt;code&amp;gt;10&amp;lt;/code&amp;gt;: Hardware Duty Cycling&lt;br /&gt;
&lt;br /&gt;
Once the bit mask is obtained we have to walk over each bit set and call &amp;lt;code&amp;gt;cpuid_count(0xd, component, &amp;amp;eax, &amp;amp;ebx, &amp;amp;ecx, &amp;amp;edx)&amp;lt;/code&amp;gt;, where &amp;lt;code&amp;gt;component&amp;lt;/code&amp;gt; is the bit position we are interested in. In other words it should be from 0 to 10. The result of this call is sitting in &amp;lt;code&amp;gt;ebx&amp;lt;/code&amp;gt; which represent offset of the component from the frame base address and &amp;lt;code&amp;gt;eax&amp;lt;/code&amp;gt; which shows component size. Note that some of components are supervisor components and if &amp;lt;code&amp;gt;(ecx &amp;amp; 1) == 0&amp;lt;/code&amp;gt; from the &amp;lt;code&amp;gt;cpuid_count&amp;lt;/code&amp;gt; call above then its offset should not be considered while size is still valid.&lt;br /&gt;
&lt;br /&gt;
=== Potential memory corruption ===&lt;br /&gt;
&lt;br /&gt;
When processes are dumped and restored on different cpu, the application may have remembered frame size on its own somewhere inside own code and in worst scenario it may allocate memory with size less than needed on different cpu, so the next call to &amp;lt;code&amp;gt;xsave&amp;lt;/code&amp;gt; silently overwrite memory leading to sigsegv in best case.&lt;br /&gt;
&lt;br /&gt;
Current criu implementation check for &amp;lt;code&amp;gt;cpuinfo&amp;lt;/code&amp;gt; images to be compatible and size and features required to match. In turn some OS may mask some of the features with cpuid faulting engine but still all cpus in the pool should report same maximal size of the frame.&lt;/div&gt;</summary>
		<author><name>Cyrillos</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=Xsave&amp;diff=4635</id>
		<title>Xsave</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=Xsave&amp;diff=4635"/>
		<updated>2018-08-12T20:42:11Z</updated>

		<summary type="html">&lt;p&gt;Cyrillos: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
&lt;br /&gt;
XSAVE stands for similar x86 instruction [https://hjlebbink.github.io/x86doc/html/XSAVE.html &amp;lt;code&amp;gt;xsave&amp;lt;/code&amp;gt;] which places extended processor state into a memory area. The saving can be initiated by any userspace application at any moment and size of the memory frame depends on processor features and may vary between different models. Thus if checkpoint and restore are done on different processors the next call to &amp;lt;code&amp;gt;xsave&amp;lt;/code&amp;gt; may corrupt memory if sizes mismatch.&lt;br /&gt;
&lt;br /&gt;
=== Helpers ===&lt;br /&gt;
&lt;br /&gt;
There are several helpers we will refer on in this page&lt;br /&gt;
&lt;br /&gt;
 static inline void native_cpuid(unsigned int *eax, unsigned int *ebx,&lt;br /&gt;
 				unsigned int *ecx, unsigned int *edx)&lt;br /&gt;
 {&lt;br /&gt;
 	/* ecx is often an input as well as an output. */&lt;br /&gt;
 	asm volatile(&amp;quot;cpuid&amp;quot;&lt;br /&gt;
 	    : &amp;quot;=a&amp;quot; (*eax),&lt;br /&gt;
 	      &amp;quot;=b&amp;quot; (*ebx),&lt;br /&gt;
 	      &amp;quot;=c&amp;quot; (*ecx),&lt;br /&gt;
 	      &amp;quot;=d&amp;quot; (*edx)&lt;br /&gt;
 	    : &amp;quot;0&amp;quot; (*eax), &amp;quot;2&amp;quot; (*ecx)&lt;br /&gt;
 	    : &amp;quot;memory&amp;quot;);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 static inline void cpuid(unsigned int op,&lt;br /&gt;
 			 unsigned int *eax, unsigned int *ebx,&lt;br /&gt;
 			 unsigned int *ecx, unsigned int *edx)&lt;br /&gt;
 {&lt;br /&gt;
 	*eax = op;&lt;br /&gt;
 	*ecx = 0;&lt;br /&gt;
 	native_cpuid(eax, ebx, ecx, edx);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 static inline void cpuid_count(unsigned int op, int count,&lt;br /&gt;
 			       unsigned int *eax, unsigned int *ebx,&lt;br /&gt;
 			       unsigned int *ecx, unsigned int *edx)&lt;br /&gt;
 {&lt;br /&gt;
 	*eax = op;&lt;br /&gt;
 	*ecx = count;&lt;br /&gt;
 	native_cpuid(eax, ebx, ecx, edx);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== Frame size ===&lt;br /&gt;
&lt;br /&gt;
Run &amp;lt;code&amp;gt; cpuid(0x1, &amp;amp;eax, &amp;amp;ebx, &amp;amp;ecx, &amp;amp;edx)&amp;lt;/code&amp;gt; and bits 26 and 27 are both set in &amp;lt;code&amp;gt;ecx&amp;lt;/code&amp;gt; if &amp;lt;code&amp;gt;xsave&amp;lt;/code&amp;gt; is supported (strictly speaking bit 27 is reserved for operating system which can clear it to indicate that instruction is disabled).&lt;br /&gt;
&lt;br /&gt;
After that we can fetch maximal frame size which applications may use via &amp;lt;code&amp;gt;cpuid_count(0xd, 0, &amp;amp;eax, &amp;amp;ebx, &amp;amp;ecx, &amp;amp;edx)&amp;lt;/code&amp;gt;, in result &amp;lt;code&amp;gt;ebx&amp;lt;/code&amp;gt; will contain the size to keep currently enabled components of the frame and &amp;lt;code&amp;gt;ecx&amp;lt;/code&amp;gt; will keep the value of maximal frame size. The maximal here means the size needed when all components are enabled (OS may disable some of components).&lt;br /&gt;
&lt;br /&gt;
=== Enumerating frame components ===&lt;br /&gt;
&lt;br /&gt;
To enumerate which components of the frame are enabled execute &amp;lt;code&amp;gt;cpuid_count(0xd, 0, &amp;amp;eax, &amp;amp;ebx, &amp;amp;ecx, &amp;amp;edx)&amp;lt;/code&amp;gt;. Each component will have bit set to 1 in 64 bit mask &amp;lt;code&amp;gt;eax + ((uint64_t)edx &amp;lt;&amp;lt; 32)&amp;lt;/code&amp;gt; if enabled.&lt;br /&gt;
&lt;br /&gt;
Current list of known components is the following (numbers are the bit position):&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;: x87 floating point registers&lt;br /&gt;
* &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;: SSE registers&lt;br /&gt;
* &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;: AVX registers&lt;br /&gt;
* &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt;: MPX bounds registers&lt;br /&gt;
* &amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt;: MPX CSR&lt;br /&gt;
* &amp;lt;code&amp;gt;5&amp;lt;/code&amp;gt;: AVX-512 opmask&lt;br /&gt;
* &amp;lt;code&amp;gt;6&amp;lt;/code&amp;gt;: AVX-512 Hi256&lt;br /&gt;
* &amp;lt;code&amp;gt;7&amp;lt;/code&amp;gt;: AVX-512 ZMM_Hi256&lt;br /&gt;
* &amp;lt;code&amp;gt;8&amp;lt;/code&amp;gt;: Processor Trace&lt;br /&gt;
* &amp;lt;code&amp;gt;9&amp;lt;/code&amp;gt;: Protection Keys User registers&lt;br /&gt;
* &amp;lt;code&amp;gt;10&amp;lt;/code&amp;gt;: Hardware Duty Cycling&lt;br /&gt;
&lt;br /&gt;
Once the bit mask is obtained we have to walk over each bit set and call &amp;lt;code&amp;gt;cpuid_count(0xd, component, &amp;amp;eax, &amp;amp;ebx, &amp;amp;ecx, &amp;amp;edx)&amp;lt;/code&amp;gt;, where &amp;lt;code&amp;gt;component&amp;lt;/code&amp;gt; is the bit position we are interested in. In other words it should be from 0 to 10. The result of this call is sitting in &amp;lt;code&amp;gt;ebx&amp;lt;/code&amp;gt; which represent offset of the component from the frame base address and &amp;lt;code&amp;gt;eax&amp;lt;/code&amp;gt; which shows component size. Note that some of components are supervisor components and if &amp;lt;code&amp;gt;(ecx &amp;amp; 1) == 0&amp;lt;/code&amp;gt; from the &amp;lt;code&amp;gt;cpuid_count&amp;lt;/code&amp;gt; call above then its offset should not be considered while size is still valid.&lt;br /&gt;
&lt;br /&gt;
=== Potential memory corruption ===&lt;br /&gt;
&lt;br /&gt;
When processes are dumped and restored on different cpu, the application may have remembered frame size on its own somewhere inside own code and in worst scenario...&lt;/div&gt;</summary>
		<author><name>Cyrillos</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=Xsave&amp;diff=4634</id>
		<title>Xsave</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=Xsave&amp;diff=4634"/>
		<updated>2018-08-12T20:39:15Z</updated>

		<summary type="html">&lt;p&gt;Cyrillos: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
&lt;br /&gt;
XSAVE stands for similar x86 instruction [https://hjlebbink.github.io/x86doc/html/XSAVE.html &amp;lt;code&amp;gt;xsave&amp;lt;/code&amp;gt;] which places extended processor state into a memory area. The saving can be initiated by any userspace application at any moment and size of the memory frame depends on processor features and may vary between different models. Thus if checkpoint and restore are done on different processors the next call to &amp;lt;code&amp;gt;xsave&amp;lt;/code&amp;gt; may corrupt memory if sizes mismatch.&lt;br /&gt;
&lt;br /&gt;
=== Helpers ===&lt;br /&gt;
&lt;br /&gt;
There are several helpers we will refer on in this page&lt;br /&gt;
&lt;br /&gt;
 static inline void native_cpuid(unsigned int *eax, unsigned int *ebx,&lt;br /&gt;
 				unsigned int *ecx, unsigned int *edx)&lt;br /&gt;
 {&lt;br /&gt;
 	/* ecx is often an input as well as an output. */&lt;br /&gt;
 	asm volatile(&amp;quot;cpuid&amp;quot;&lt;br /&gt;
 	    : &amp;quot;=a&amp;quot; (*eax),&lt;br /&gt;
 	      &amp;quot;=b&amp;quot; (*ebx),&lt;br /&gt;
 	      &amp;quot;=c&amp;quot; (*ecx),&lt;br /&gt;
 	      &amp;quot;=d&amp;quot; (*edx)&lt;br /&gt;
 	    : &amp;quot;0&amp;quot; (*eax), &amp;quot;2&amp;quot; (*ecx)&lt;br /&gt;
 	    : &amp;quot;memory&amp;quot;);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 static inline void cpuid(unsigned int op,&lt;br /&gt;
 			 unsigned int *eax, unsigned int *ebx,&lt;br /&gt;
 			 unsigned int *ecx, unsigned int *edx)&lt;br /&gt;
 {&lt;br /&gt;
 	*eax = op;&lt;br /&gt;
 	*ecx = 0;&lt;br /&gt;
 	native_cpuid(eax, ebx, ecx, edx);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 static inline void cpuid_count(unsigned int op, int count,&lt;br /&gt;
 			       unsigned int *eax, unsigned int *ebx,&lt;br /&gt;
 			       unsigned int *ecx, unsigned int *edx)&lt;br /&gt;
 {&lt;br /&gt;
 	*eax = op;&lt;br /&gt;
 	*ecx = count;&lt;br /&gt;
 	native_cpuid(eax, ebx, ecx, edx);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== Frame size ===&lt;br /&gt;
&lt;br /&gt;
Run &amp;lt;code&amp;gt; cpuid(0x1, &amp;amp;eax, &amp;amp;ebx, &amp;amp;ecx, &amp;amp;edx)&amp;lt;/code&amp;gt; and bits 26 and 27 are both set in &amp;lt;code&amp;gt;ecx&amp;lt;/code&amp;gt; if &amp;lt;code&amp;gt;xsave&amp;lt;/code&amp;gt; is supported (strictly speaking bit 27 is reserved for operating system which can clear it to indicate that instruction is disabled).&lt;br /&gt;
&lt;br /&gt;
After that we can fetch maximal frame size which applications may use via &amp;lt;code&amp;gt;cpuid_count(0xd, 0, &amp;amp;eax, &amp;amp;ebx, &amp;amp;ecx, &amp;amp;edx)&amp;lt;/code&amp;gt;, in result &amp;lt;code&amp;gt;ebx&amp;lt;/code&amp;gt; will contain the size to keep currently enabled components of the frame and &amp;lt;code&amp;gt;ecx&amp;lt;/code&amp;gt; will keep the value of maximal frame size. The maximal here means the size needed when all components are enabled (OS may disable some of components).&lt;br /&gt;
&lt;br /&gt;
=== Enumerating frame components ===&lt;br /&gt;
&lt;br /&gt;
To enumerate which components of the frame are enabled execute &amp;lt;code&amp;gt;cpuid_count(0xd, 0, &amp;amp;eax, &amp;amp;ebx, &amp;amp;ecx, &amp;amp;edx)&amp;lt;/code&amp;gt;. Each component will have bit set to 1 in 64 bit mask &amp;lt;code&amp;gt;eax + ((uint64_t)edx &amp;lt;&amp;lt; 32)&amp;lt;/code&amp;gt; if enabled.&lt;br /&gt;
&lt;br /&gt;
Current list of known components is the following (numbers are the bit position):&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;: x87 floating point registers&lt;br /&gt;
* &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;: SSE registers&lt;br /&gt;
* &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;: AVX registers&lt;br /&gt;
* &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt;: MPX bounds registers&lt;br /&gt;
* &amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt;: MPX CSR&lt;br /&gt;
* &amp;lt;code&amp;gt;5&amp;lt;/code&amp;gt;: AVX-512 opmask&lt;br /&gt;
* &amp;lt;code&amp;gt;6&amp;lt;/code&amp;gt;: AVX-512 Hi256&lt;br /&gt;
* &amp;lt;code&amp;gt;7&amp;lt;/code&amp;gt;: AVX-512 ZMM_Hi256&lt;br /&gt;
* &amp;lt;code&amp;gt;8&amp;lt;/code&amp;gt;: Processor Trace&lt;br /&gt;
* &amp;lt;code&amp;gt;9&amp;lt;/code&amp;gt;: Protection Keys User registers&lt;br /&gt;
* &amp;lt;code&amp;gt;10&amp;lt;/code&amp;gt;: Hardware Duty Cycling&lt;br /&gt;
&lt;br /&gt;
Once the bit mask is obtained we have to walk over each bit set and call &amp;lt;code&amp;gt;cpuid_count(0xd, component, &amp;amp;eax, &amp;amp;ebx, &amp;amp;ecx, &amp;amp;edx)&amp;lt;/code&amp;gt;, where &amp;lt;code&amp;gt;component&amp;lt;/code&amp;gt; is the bit position we are interested in. In other words it should be from 0 to 10. The result of this call is sitting in &amp;lt;code&amp;gt;ebx&amp;lt;/code&amp;gt; which represent offset of the component from the frame base address and &amp;lt;code&amp;gt;eax&amp;lt;/code&amp;gt; which shows component size. Note that some of components are supervisor components and if &amp;lt;code&amp;gt;(ecx &amp;amp; 1) == 0&amp;lt;/code&amp;gt; from the &amp;lt;code&amp;gt;cpuid_count&amp;lt;/code&amp;gt; call above then its offset is undefined.&lt;/div&gt;</summary>
		<author><name>Cyrillos</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=Xsave&amp;diff=4633</id>
		<title>Xsave</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=Xsave&amp;diff=4633"/>
		<updated>2018-08-12T20:36:31Z</updated>

		<summary type="html">&lt;p&gt;Cyrillos: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
&lt;br /&gt;
XSAVE stands for similar x86 instruction [https://hjlebbink.github.io/x86doc/html/XSAVE.html &amp;lt;code&amp;gt;xsave&amp;lt;/code&amp;gt;] which places extended processor state into a memory area. The saving can be initiated by any userspace application at any moment and size of the memory frame depends on processor features and may vary between different models. Thus if checkpoint and restore are done on different processors the next call to &amp;lt;code&amp;gt;xsave&amp;lt;/code&amp;gt; may corrupt memory if sizes mismatch.&lt;br /&gt;
&lt;br /&gt;
=== Helpers ===&lt;br /&gt;
&lt;br /&gt;
There are several helpers we will refer on in this page&lt;br /&gt;
&lt;br /&gt;
 static inline void native_cpuid(unsigned int *eax, unsigned int *ebx,&lt;br /&gt;
 				unsigned int *ecx, unsigned int *edx)&lt;br /&gt;
 {&lt;br /&gt;
 	/* ecx is often an input as well as an output. */&lt;br /&gt;
 	asm volatile(&amp;quot;cpuid&amp;quot;&lt;br /&gt;
 	    : &amp;quot;=a&amp;quot; (*eax),&lt;br /&gt;
 	      &amp;quot;=b&amp;quot; (*ebx),&lt;br /&gt;
 	      &amp;quot;=c&amp;quot; (*ecx),&lt;br /&gt;
 	      &amp;quot;=d&amp;quot; (*edx)&lt;br /&gt;
 	    : &amp;quot;0&amp;quot; (*eax), &amp;quot;2&amp;quot; (*ecx)&lt;br /&gt;
 	    : &amp;quot;memory&amp;quot;);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 static inline void cpuid(unsigned int op,&lt;br /&gt;
 			 unsigned int *eax, unsigned int *ebx,&lt;br /&gt;
 			 unsigned int *ecx, unsigned int *edx)&lt;br /&gt;
 {&lt;br /&gt;
 	*eax = op;&lt;br /&gt;
 	*ecx = 0;&lt;br /&gt;
 	native_cpuid(eax, ebx, ecx, edx);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 static inline void cpuid_count(unsigned int op, int count,&lt;br /&gt;
 			       unsigned int *eax, unsigned int *ebx,&lt;br /&gt;
 			       unsigned int *ecx, unsigned int *edx)&lt;br /&gt;
 {&lt;br /&gt;
 	*eax = op;&lt;br /&gt;
 	*ecx = count;&lt;br /&gt;
 	native_cpuid(eax, ebx, ecx, edx);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== Frame size ===&lt;br /&gt;
&lt;br /&gt;
Run &amp;lt;code&amp;gt; cpuid(0x1, &amp;amp;eax, &amp;amp;ebx, &amp;amp;ecx, &amp;amp;edx)&amp;lt;/code&amp;gt; and bits 26 and 27 are both set in &amp;lt;code&amp;gt;ecx&amp;lt;/code&amp;gt; if &amp;lt;code&amp;gt;xsave&amp;lt;/code&amp;gt; is supported (strictly speaking bit 27 is reserved for operating system which can clear it to indicate that instruction is disabled).&lt;br /&gt;
&lt;br /&gt;
After that we can fetch maximal frame size which applications may use via &amp;lt;code&amp;gt;cpuid_count(0xd, 0, &amp;amp;eax, &amp;amp;ebx, &amp;amp;ecx, &amp;amp;edx)&amp;lt;/code&amp;gt;, in result &amp;lt;code&amp;gt;ebx&amp;lt;/code&amp;gt; will contain the size to keep currently enabled components of the frame and &amp;lt;code&amp;gt;ecx&amp;lt;/code&amp;gt; will keep the value of maximal frame size. The maximal here means the size needed when all components are enabled (OS may disable some of components).&lt;br /&gt;
&lt;br /&gt;
=== Enumerating frame components ===&lt;br /&gt;
&lt;br /&gt;
To enumerate which components of the frame are enabled execute &amp;lt;code&amp;gt;cpuid_count(0xd, 0, &amp;amp;eax, &amp;amp;ebx, &amp;amp;ecx, &amp;amp;edx)&amp;lt;/code&amp;gt;. Each component will have bit set to 1 in 64 bit mask &amp;lt;code&amp;gt;eax + ((uint64_t)edx &amp;lt;&amp;lt; 32)&amp;lt;/code&amp;gt; if enabled.&lt;br /&gt;
&lt;br /&gt;
Current list of known components is the following (numbers are the bit position):&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;: x87 floating point registers&lt;br /&gt;
* &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;: SSE registers&lt;br /&gt;
* &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;: AVX registers&lt;br /&gt;
* &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt;: MPX bounds registers&lt;br /&gt;
* &amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt;: MPX CSR&lt;br /&gt;
* &amp;lt;code&amp;gt;5&amp;lt;/code&amp;gt;: AVX-512 opmask&lt;br /&gt;
* &amp;lt;code&amp;gt;6&amp;lt;/code&amp;gt;: AVX-512 Hi256&lt;br /&gt;
* &amp;lt;code&amp;gt;7&amp;lt;/code&amp;gt;: AVX-512 ZMM_Hi256&lt;br /&gt;
* &amp;lt;code&amp;gt;8&amp;lt;/code&amp;gt;: Processor Trace&lt;br /&gt;
* &amp;lt;code&amp;gt;9&amp;lt;/code&amp;gt;: Protection Keys User registers&lt;br /&gt;
* &amp;lt;code&amp;gt;10&amp;lt;/code&amp;gt;: Hardware Duty Cycling&lt;br /&gt;
&lt;br /&gt;
Once the bit mask is obtained we have to walk over each bit set and call &amp;lt;code&amp;gt;cpuid_count(0xd, component, &amp;amp;eax, &amp;amp;ebx, &amp;amp;ecx, &amp;amp;edx)&amp;lt;/code&amp;gt;, where &amp;lt;code&amp;gt;component&amp;lt;/code&amp;gt; is the *bit* position we are interested in. In other words it should be from 0 to 10. The result of this call is sitting in &amp;lt;code&amp;gt;ebx&amp;lt;/code&amp;gt; which represent offset of the component from the frame base address and &amp;lt;code&amp;gt;eax&amp;lt;/code&amp;gt; which shows component size.&lt;/div&gt;</summary>
		<author><name>Cyrillos</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=Xsave&amp;diff=4632</id>
		<title>Xsave</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=Xsave&amp;diff=4632"/>
		<updated>2018-08-12T20:26:54Z</updated>

		<summary type="html">&lt;p&gt;Cyrillos: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
&lt;br /&gt;
XSAVE stands for similar x86 instruction [https://hjlebbink.github.io/x86doc/html/XSAVE.html &amp;lt;code&amp;gt;xsave&amp;lt;/code&amp;gt;] which places extended processor state into a memory area. The saving can be initiated by any userspace application at any moment and size of the memory frame depends on processor features and may vary between different models. Thus if checkpoint and restore are done on different processors the next call to &amp;lt;code&amp;gt;xsave&amp;lt;/code&amp;gt; may corrupt memory if sizes mismatch.&lt;br /&gt;
&lt;br /&gt;
=== Helpers ===&lt;br /&gt;
&lt;br /&gt;
There are several helpers we will refer on in this page&lt;br /&gt;
&lt;br /&gt;
 static inline void native_cpuid(unsigned int *eax, unsigned int *ebx,&lt;br /&gt;
 				unsigned int *ecx, unsigned int *edx)&lt;br /&gt;
 {&lt;br /&gt;
 	/* ecx is often an input as well as an output. */&lt;br /&gt;
 	asm volatile(&amp;quot;cpuid&amp;quot;&lt;br /&gt;
 	    : &amp;quot;=a&amp;quot; (*eax),&lt;br /&gt;
 	      &amp;quot;=b&amp;quot; (*ebx),&lt;br /&gt;
 	      &amp;quot;=c&amp;quot; (*ecx),&lt;br /&gt;
 	      &amp;quot;=d&amp;quot; (*edx)&lt;br /&gt;
 	    : &amp;quot;0&amp;quot; (*eax), &amp;quot;2&amp;quot; (*ecx)&lt;br /&gt;
 	    : &amp;quot;memory&amp;quot;);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 static inline void cpuid(unsigned int op,&lt;br /&gt;
 			 unsigned int *eax, unsigned int *ebx,&lt;br /&gt;
 			 unsigned int *ecx, unsigned int *edx)&lt;br /&gt;
 {&lt;br /&gt;
 	*eax = op;&lt;br /&gt;
 	*ecx = 0;&lt;br /&gt;
 	native_cpuid(eax, ebx, ecx, edx);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 static inline void cpuid_count(unsigned int op, int count,&lt;br /&gt;
 			       unsigned int *eax, unsigned int *ebx,&lt;br /&gt;
 			       unsigned int *ecx, unsigned int *edx)&lt;br /&gt;
 {&lt;br /&gt;
 	*eax = op;&lt;br /&gt;
 	*ecx = count;&lt;br /&gt;
 	native_cpuid(eax, ebx, ecx, edx);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== Frame size ===&lt;br /&gt;
&lt;br /&gt;
Run &amp;lt;code&amp;gt; cpuid(0x1, &amp;amp;eax, &amp;amp;ebx, &amp;amp;ecx, &amp;amp;edx)&amp;lt;/code&amp;gt; and bits 26 and 27 are both set in &amp;lt;code&amp;gt;ecx&amp;lt;/code&amp;gt; if &amp;lt;code&amp;gt;xsave&amp;lt;/code&amp;gt; is supported (strictly speaking bit 27 is reserved for operating system which can clear it to indicate that instruction is disabled).&lt;br /&gt;
&lt;br /&gt;
After that we can fetch maximal frame size which applications may use via &amp;lt;code&amp;gt;cpuid_count(0xd, 0, &amp;amp;eax, &amp;amp;ebx, &amp;amp;ecx, &amp;amp;edx)&amp;lt;/code&amp;gt;, in result &amp;lt;code&amp;gt;ebx&amp;lt;/code&amp;gt; will contain the size to keep currently enabled components of the frame and &amp;lt;code&amp;gt;ecx&amp;lt;/code&amp;gt; will keep the value of maximal frame size. The maximal here means the size needed when all components are enabled (OS may disable some of components).&lt;br /&gt;
&lt;br /&gt;
=== Enumerating frame components ===&lt;br /&gt;
&lt;br /&gt;
To enumerate which components of the frame are enabled execute &amp;lt;code&amp;gt;cpuid_count(0xd, 0, &amp;amp;eax, &amp;amp;ebx, &amp;amp;ecx, &amp;amp;edx)&amp;lt;/code&amp;gt;. Each component will have bit set to 1 in 64 bit mask &amp;lt;code&amp;gt;eax + ((uint64_t)edx &amp;lt;&amp;lt; 32)&amp;lt;/code&amp;gt; if enabled.&lt;br /&gt;
&lt;br /&gt;
Current list of known components are the following (numbers are the bit position):&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;: x87 floating point registers&lt;br /&gt;
* &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;: SSE registers&lt;br /&gt;
* &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;: AVX registers&lt;br /&gt;
* &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt;: MPX bounds registers&lt;br /&gt;
* &amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt;: MPX CSR&lt;br /&gt;
* &amp;lt;code&amp;gt;5&amp;lt;/code&amp;gt;: AVX-512 opmask&lt;br /&gt;
* &amp;lt;code&amp;gt;6&amp;lt;/code&amp;gt;: AVX-512 Hi256&lt;br /&gt;
* &amp;lt;code&amp;gt;7&amp;lt;/code&amp;gt;: AVX-512 ZMM_Hi256&lt;br /&gt;
* &amp;lt;code&amp;gt;8&amp;lt;/code&amp;gt;: Processor Trace&lt;br /&gt;
* &amp;lt;code&amp;gt;9&amp;lt;/code&amp;gt;: Protection Keys User registers&lt;br /&gt;
* &amp;lt;code&amp;gt;10&amp;lt;/code&amp;gt;: Hardware Duty Cycling&lt;/div&gt;</summary>
		<author><name>Cyrillos</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=Xsave&amp;diff=4631</id>
		<title>Xsave</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=Xsave&amp;diff=4631"/>
		<updated>2018-08-12T20:10:50Z</updated>

		<summary type="html">&lt;p&gt;Cyrillos: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
&lt;br /&gt;
XSAVE stands for similar x86 instruction [https://hjlebbink.github.io/x86doc/html/XSAVE.html &amp;lt;code&amp;gt;xsave&amp;lt;/code&amp;gt;] which places extended processor state into a memory area. The saving can be initiated by any userspace application at any moment and size of the memory frame depends on processor features and may vary between different models. Thus if checkpoint and restore are done on different processors the next call to &amp;lt;code&amp;gt;xsave&amp;lt;/code&amp;gt; may corrupt memory if sizes mismatch.&lt;br /&gt;
&lt;br /&gt;
=== XSAVE frame size ===&lt;br /&gt;
&lt;br /&gt;
Before fetching frame sizes one need to figure out if &amp;lt;code&amp;gt;xsave&amp;lt;/code&amp;gt; is supported at all. There are several helpers we will refer on&lt;br /&gt;
&lt;br /&gt;
 static inline void native_cpuid(unsigned int *eax, unsigned int *ebx,&lt;br /&gt;
 				unsigned int *ecx, unsigned int *edx)&lt;br /&gt;
 {&lt;br /&gt;
 	/* ecx is often an input as well as an output. */&lt;br /&gt;
 	asm volatile(&amp;quot;cpuid&amp;quot;&lt;br /&gt;
 	    : &amp;quot;=a&amp;quot; (*eax),&lt;br /&gt;
 	      &amp;quot;=b&amp;quot; (*ebx),&lt;br /&gt;
 	      &amp;quot;=c&amp;quot; (*ecx),&lt;br /&gt;
 	      &amp;quot;=d&amp;quot; (*edx)&lt;br /&gt;
 	    : &amp;quot;0&amp;quot; (*eax), &amp;quot;2&amp;quot; (*ecx)&lt;br /&gt;
 	    : &amp;quot;memory&amp;quot;);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 static inline void cpuid(unsigned int op,&lt;br /&gt;
 			 unsigned int *eax, unsigned int *ebx,&lt;br /&gt;
 			 unsigned int *ecx, unsigned int *edx)&lt;br /&gt;
 {&lt;br /&gt;
 	*eax = op;&lt;br /&gt;
 	*ecx = 0;&lt;br /&gt;
 	native_cpuid(eax, ebx, ecx, edx);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 static inline void cpuid_count(unsigned int op, int count,&lt;br /&gt;
 			       unsigned int *eax, unsigned int *ebx,&lt;br /&gt;
 			       unsigned int *ecx, unsigned int *edx)&lt;br /&gt;
 {&lt;br /&gt;
 	*eax = op;&lt;br /&gt;
 	*ecx = count;&lt;br /&gt;
 	native_cpuid(eax, ebx, ecx, edx);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Run &amp;lt;code&amp;gt; cpuid(0x1, &amp;amp;eax, &amp;amp;ebx, &amp;amp;ecx, &amp;amp;edx)&amp;lt;/code&amp;gt; and bits 26 and 27 are both set in &amp;lt;code&amp;gt;ecx&amp;lt;/code&amp;gt; if &amp;lt;code&amp;gt;xsave&amp;lt;/code&amp;gt; is supported (strictly speaking bit 27 is reserved for operating system which can clear it to indicate that instruction is disabled).&lt;br /&gt;
&lt;br /&gt;
After that we can fetch maximal frame size which applications may use via &amp;lt;code&amp;gt;cpuid_count(0xd, 0, &amp;amp;eax, &amp;amp;ebx, &amp;amp;ecx, &amp;amp;edx)&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Cyrillos</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=Xsave&amp;diff=4630</id>
		<title>Xsave</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=Xsave&amp;diff=4630"/>
		<updated>2018-08-12T20:02:38Z</updated>

		<summary type="html">&lt;p&gt;Cyrillos: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
&lt;br /&gt;
XSAVE stands for similar x86 instruction [https://hjlebbink.github.io/x86doc/html/XSAVE.html &amp;lt;code&amp;gt;xsave&amp;lt;/code&amp;gt;] which places extended processor state into a memory area. The saving can be initiated by any userspace application at any moment and size of the memory frame depends on processor features and may vary between different models. Thus if checkpoint and restore are done on different processors the next call to &amp;lt;code&amp;gt;xsave&amp;lt;/code&amp;gt; may corrupt memory if sizes mismatch.&lt;br /&gt;
&lt;br /&gt;
=== XSAVE frame sizes ===&lt;br /&gt;
&lt;br /&gt;
Before fetching frame sizes one need to figure out if &amp;lt;code&amp;gt;xsave&amp;lt;/code&amp;gt; is supported at all. This should be done by &amp;lt;code&amp;gt;&lt;br /&gt;
cpuid(0x00000001, &amp;amp;eax, &amp;amp;ebx, &amp;amp;ecx, &amp;amp;edx)&amp;lt;/code&amp;gt; and bits 26 and 27 are both set in &amp;lt;code&amp;gt;ecx&amp;lt;/code&amp;gt; if &amp;lt;code&amp;gt;xsave&amp;lt;/code&amp;gt; is supported (strictly speaking bit 27 is reserved for operating system which can clear it to indicate that instruction is disabled).&lt;/div&gt;</summary>
		<author><name>Cyrillos</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=Xsave&amp;diff=4629</id>
		<title>Xsave</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=Xsave&amp;diff=4629"/>
		<updated>2018-08-12T19:24:50Z</updated>

		<summary type="html">&lt;p&gt;Cyrillos: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
&lt;br /&gt;
XSAVE stands for similar x86 instruction [https://hjlebbink.github.io/x86doc/html/XSAVE.html &amp;lt;code&amp;gt;xsave&amp;lt;/code&amp;gt;] which places extended processor state into a memory area. The saving can be initiated by any userspace application at any moment and size of the memory frame depends on processor features and may vary between different models. Thus if checkpoint and restore are done on different processors the next call to &amp;lt;code&amp;gt;xsave&amp;lt;/code&amp;gt; may corrupt memory if sizes mismatch.&lt;/div&gt;</summary>
		<author><name>Cyrillos</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=Xsave&amp;diff=4628</id>
		<title>Xsave</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=Xsave&amp;diff=4628"/>
		<updated>2018-08-12T19:19:16Z</updated>

		<summary type="html">&lt;p&gt;Cyrillos: Description of saving xsave frame&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
&lt;br /&gt;
XSAVE stands for similar x86 instruction [https://hjlebbink.github.io/x86doc/html/XSAVE.html xsave] which places extended processor state into the memory area. The saving can be initiated by any userspace application, where the size of the frame being written to memory upon the instruction depends on processor capabilities and may vary between different models. This aspect may cause a problem in a case of images migration.&lt;/div&gt;</summary>
		<author><name>Cyrillos</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=Download/criu/2.12&amp;diff=4107</id>
		<title>Download/criu/2.12</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=Download/criu/2.12&amp;diff=4107"/>
		<updated>2017-03-16T09:39:17Z</updated>

		<summary type="html">&lt;p&gt;Cyrillos: Drop multiple devtps, they are not here&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Release|2.12}}&lt;br /&gt;
&lt;br /&gt;
=== New features ===&lt;br /&gt;
* C/R of &lt;br /&gt;
** external [[TTYs]] (for Docker C/R)&lt;br /&gt;
&lt;br /&gt;
=== Optimizations/improvements ===&lt;br /&gt;
* Sanitized the way the {{Opt|-v}} works&lt;br /&gt;
&lt;br /&gt;
=== Fixes ===&lt;br /&gt;
* Checking features via [[RPC]] crashed&lt;br /&gt;
* Resting pipes in user-namespaces could fail on modern kernels&lt;br /&gt;
* Shutdown state for UNIX sockets could be lost on restore&lt;br /&gt;
* Dump of huge (over 2Gb) SysV shmem segments didn't work&lt;/div&gt;</summary>
		<author><name>Cyrillos</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=Upstream_kernel_commits&amp;diff=4026</id>
		<title>Upstream kernel commits</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=Upstream_kernel_commits&amp;diff=4026"/>
		<updated>2017-03-01T21:34:45Z</updated>

		<summary type="html">&lt;p&gt;Cyrillos: /* Pending 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/2/14/493 v5] || Fix compatible mmap() return pointer over 4Gb || ?&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;
|{{net-next.git|ba94f3088b}} || unix: add ioctl to open a unix socket file with O_PATH ||&lt;br /&gt;
|-&lt;br /&gt;
|[https://patchwork.kernel.org/patch/9545023/ patchwork] || [PATCHv4,1/5] x86/mm: split arch_mmap_rnd() on compat/native versions || &lt;br /&gt;
|-&lt;br /&gt;
|[https://patchwork.kernel.org/patch/9545021/ patchwork] || [PATCHv4,2/5] x86/mm: introduce mmap{,_legacy}_base || &lt;br /&gt;
|-&lt;br /&gt;
|[https://patchwork.kernel.org/patch/9545027/ patchwork] || [PATCHv4,3/5] x86/mm: fix 32-bit mmap() for 64-bit ELF || &lt;br /&gt;
|-&lt;br /&gt;
|[https://patchwork.kernel.org/patch/9545025/ patchwork] || [PATCHv4,4/5] x86/mm: check in_compat_syscall() instead TIF_ADDR32 for mmap(MAP_32BIT) || &lt;br /&gt;
|-&lt;br /&gt;
|[https://patchwork.kernel.org/patch/9545153/ patchwork] || [PATCHv4,5/5] selftests/x86: add test to check compat mmap() return addr || &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|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;
&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>Cyrillos</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=Upstream_kernel_commits&amp;diff=4018</id>
		<title>Upstream kernel commits</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=Upstream_kernel_commits&amp;diff=4018"/>
		<updated>2017-02-22T12:40:09Z</updated>

		<summary type="html">&lt;p&gt;Cyrillos: /* Merged 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/2/14/493 v5] || Fix compatible mmap() return pointer over 4Gb || ?&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;
|{{net-next.git|ba94f3088b}} || unix: add ioctl to open a unix socket file with O_PATH ||&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|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;
&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>Cyrillos</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=Upstream_kernel_commits&amp;diff=4013</id>
		<title>Upstream kernel commits</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=Upstream_kernel_commits&amp;diff=4013"/>
		<updated>2017-02-22T09:08:16Z</updated>

		<summary type="html">&lt;p&gt;Cyrillos: /* Merged 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/2/14/493 v5] || Fix compatible mmap() return pointer over 4Gb || ?&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;
|{{net-next.git|ba94f3088b}} || unix: add ioctl to open a unix socket file with O_PATH ||&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|432490f9d}} || net: ip, diag -- Add diag interface for raw sockets || v4.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|cd05a0eca}} || net: ip, raw_diag -- Fix socket leaking for destroy request || v4.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|3de864f8c}} || net: ip, diag -- Adjust raw_abort to use unlocked __udp_disconnect || v4.9&lt;br /&gt;
|-&lt;br /&gt;
|{{torvalds.git|9999370fa}} || net: ip, raw_diag -- Use jump for exiting from nested loop || v4.9&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;
&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>Cyrillos</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=Debugging&amp;diff=3853</id>
		<title>Debugging</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=Debugging&amp;diff=3853"/>
		<updated>2017-01-10T14:53:54Z</updated>

		<summary type="html">&lt;p&gt;Cyrillos: /* Getting core files */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Raise verbosity ==&lt;br /&gt;
&lt;br /&gt;
Make sure you use the &amp;lt;code&amp;gt;-v4&amp;lt;/code&amp;gt; option for extended [[logging]] and find logs in the work/images [[directories]].&lt;br /&gt;
&lt;br /&gt;
== Getting core files ==&lt;br /&gt;
&lt;br /&gt;
If CRIU crashes it's useful to build it with debug info and look into core file.&lt;br /&gt;
&lt;br /&gt;
* build CRIU with debug info &amp;lt;code&amp;gt;make DEBUG=1&amp;lt;/code&amp;gt;&lt;br /&gt;
* setup core file generation which depends on distro settings, usually the core generation template is sitting in /proc/sys/kernel/core_pattern, see more details at [http://man7.org/linux/man-pages/man5/core.5.html core.5]&lt;br /&gt;
&lt;br /&gt;
Then upload core file into debugger &amp;lt;code&amp;gt;gdb criu core-file&amp;lt;/code&amp;gt; and type &amp;lt;code&amp;gt;bt&amp;lt;/code&amp;gt; command to fetch a backtrace.&lt;br /&gt;
&lt;br /&gt;
== Docker C/R ==&lt;br /&gt;
&lt;br /&gt;
Docker keeps images in ... and logs in ...&lt;br /&gt;
&lt;br /&gt;
== strace ==&lt;br /&gt;
&lt;br /&gt;
CRIU uses ptrace, so strace can't be used in some cases. perf trace is an alternative way. It isn't so informative, but it is still better than nothing.&lt;br /&gt;
&lt;br /&gt;
== Images ==&lt;br /&gt;
&lt;br /&gt;
The crit tool can help to decode image files into a human readable format.&lt;br /&gt;
&lt;br /&gt;
[[Category:Using]]&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Category:HOWTO]]&lt;/div&gt;</summary>
		<author><name>Cyrillos</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=Upstream_kernel_commits&amp;diff=3767</id>
		<title>Upstream kernel commits</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=Upstream_kernel_commits&amp;diff=3767"/>
		<updated>2016-11-17T11:08:14Z</updated>

		<summary type="html">&lt;p&gt;Cyrillos: /* Merged 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;
|[http://lists.openvz.org/pipermail/criu/2014-April/013655.html 013655] || tcp: allow to repair a tcp connections in closing states || ?&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://git.kernel.org/cgit/linux/kernel/git/davem/net-next.git/commit/?id=c62cce2caee558e18aa05c01c2fd3b40f07174f2 net-next/c62cce2caee558] || net: add an ioctl to get a socket network namespace&lt;br /&gt;
|-&lt;br /&gt;
| [http://lists.openvz.org/pipermail/criu/2014-April/013655.html netdev] || tcp: allow to enable the repair mode for non-listening sockets&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|640708a2cff}} || 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;
|{{net-next.git|432490f9d}} || net: ip, diag -- Add diag interface for raw sockets || -&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|f8da97798}} || net: ip, diag: include net/inet_sock.h || -&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|9999370fa}} || net: ip, raw_diag -- Use jump for exiting from nested loop || -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>Cyrillos</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=Upstream_kernel_commits&amp;diff=3766</id>
		<title>Upstream kernel commits</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=Upstream_kernel_commits&amp;diff=3766"/>
		<updated>2016-11-17T10:59:42Z</updated>

		<summary type="html">&lt;p&gt;Cyrillos: Net raw diag 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;
|[http://lists.openvz.org/pipermail/criu/2014-April/013655.html 013655] || tcp: allow to repair a tcp connections in closing states || ?&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://git.kernel.org/cgit/linux/kernel/git/davem/net-next.git/commit/?id=c62cce2caee558e18aa05c01c2fd3b40f07174f2 net-next/c62cce2caee558] || net: add an ioctl to get a socket network namespace&lt;br /&gt;
|-&lt;br /&gt;
| [http://lists.openvz.org/pipermail/criu/2014-April/013655.html netdev] || tcp: allow to enable the repair mode for non-listening sockets&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|640708a2cff}} || 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;
|{{net-next.git|432490f9d}} || net: ip, diag -- Add diag interface for raw sockets || 4.9&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|f8da97798}} || net: ip, diag: include net/inet_sock.h || 4.9&lt;br /&gt;
|-&lt;br /&gt;
|{{net-next.git|9999370fa}} || net: ip, raw_diag -- Use jump for exiting from nested loop || 4.9&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>Cyrillos</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=OpenVZ&amp;diff=3649</id>
		<title>OpenVZ</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=OpenVZ&amp;diff=3649"/>
		<updated>2016-10-07T18:31:27Z</updated>

		<summary type="html">&lt;p&gt;Cyrillos: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[https://openvz.org OpenVZ] (Open Virtuozzo) is an operating system-level virtualization technology for Linux. It uses CRIU and [[P.Haul]] to live-migrate containers.&lt;br /&gt;
&lt;br /&gt;
== Virtuozzo's CRIU ==&lt;br /&gt;
&lt;br /&gt;
Because not all features implemented in Open Virtuozzo are merged into vanilla kernel yet, it's been adopted to create a fork of CRIU with Virtuozzo specific patched on top of vanilla instance. The [https://src.openvz.org/scm/ovz/criu.git CRIU-VZ] is open project of course with the following branches:&lt;br /&gt;
&lt;br /&gt;
* '''master''' — is a copy of the vanilla master branch&lt;br /&gt;
* '''vz7-rtm''' — Virtuozzo 7 criu instance&lt;br /&gt;
* '''vz7-u1''' — current stable branch of Virtuozzo 7 with patches which will come into next Virtuozzo update&lt;br /&gt;
&lt;br /&gt;
The vanilla CRIU is a fast pacing project so for the Virtuozzo instance we take a version behind as a base (currently it is v2.5). We sacrifice functionality for stability reason - all the problems found during intensive testing are fixed in the Virtuozzo instance first, while merging them upstream may take up to months.&lt;br /&gt;
&lt;br /&gt;
== Virtuozzo's P.Haul ==&lt;br /&gt;
&lt;br /&gt;
[https://src.openvz.org/projects/OVZ/repos/p.haul/browse The P.Haul fork]&lt;/div&gt;</summary>
		<author><name>Cyrillos</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=OpenVZ&amp;diff=3648</id>
		<title>OpenVZ</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=OpenVZ&amp;diff=3648"/>
		<updated>2016-10-07T18:20:24Z</updated>

		<summary type="html">&lt;p&gt;Cyrillos: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[https://openvz.org OpenVZ] (Open Virtuozzo) is an operating system-level virtualization technology for Linux. It uses CRIU and [[P.Haul]] to live-migrate containers.&lt;br /&gt;
&lt;br /&gt;
== Virtuozzo's CRIU ==&lt;br /&gt;
&lt;br /&gt;
Because not all features implemented in Open Virtuozzo are merged into vanilla kernel yet, it's been adopted to create a fork of CRIU with Virtuozzo specific patched on top of vanilla instance. The [https://src.openvz.org/scm/ovz/criu.git CRIU-VZ] is open project of course with the following branches:&lt;br /&gt;
&lt;br /&gt;
* '''master''' — is a copy of vanilla master branch&lt;br /&gt;
* '''vz7-rtm''' — Virtuozzo 7 criu instance&lt;br /&gt;
* '''vz7-u1''' — current stable branch of Virtuozzo 7 with patches which will come into next Virtuozzo update&lt;br /&gt;
&lt;br /&gt;
While vanilla CRIU is a fast pacing project the Virtuozzo instance is usually slightly behind. In particular currently v2.5 is used as a stable base.&lt;br /&gt;
&lt;br /&gt;
== Virtuozzo's P.Haul ==&lt;br /&gt;
&lt;br /&gt;
[https://src.openvz.org/projects/OVZ/repos/p.haul/browse The P.Haul fork]&lt;/div&gt;</summary>
		<author><name>Cyrillos</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=Freezing_the_tree&amp;diff=3424</id>
		<title>Freezing the tree</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=Freezing_the_tree&amp;diff=3424"/>
		<updated>2016-09-19T16:44:52Z</updated>

		<summary type="html">&lt;p&gt;Cyrillos: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Under the hood]]&lt;br /&gt;
[[Category:Empty articles]]&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
&lt;br /&gt;
Before we can start checkpointing processes we have to be sure that they will not produce new children processes which would escaped from dumping procedure. In other words the process tree must be persistent while we are dumping it. While sounds trivial in became problematic in real life. The checkpoint it supposed to be transparent to the application we are dumping thus it must not notice any change in process state transition. Traditionally processes are stopped with stop signal. But we have a better choise - [https://www.kernel.org/doc/Documentation/cgroup-v1/freezer-subsystem.txt a freezer cgroup].&lt;/div&gt;</summary>
		<author><name>Cyrillos</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=User:H4ck3rm1k3&amp;diff=3221</id>
		<title>User:H4ck3rm1k3</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=User:H4ck3rm1k3&amp;diff=3221"/>
		<updated>2016-09-11T13:40:09Z</updated>

		<summary type="html">&lt;p&gt;Cyrillos: Creating user page for new user.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Cyrillos</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=TTYs&amp;diff=3174</id>
		<title>TTYs</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=TTYs&amp;diff=3174"/>
		<updated>2016-09-08T15:39:18Z</updated>

		<summary type="html">&lt;p&gt;Cyrillos: /* Supported terminal types */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category: Under the hood]]&lt;br /&gt;
[[Category: Empty articles]]&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
&lt;br /&gt;
Terminals are one of the most important parts of how programs interact with users. Usually programs print output into them and read user input from. For example when one executes any program from a shell, the shell provides terminal peer into it, so the program output will be seen in a calling shell and a user can do additional processing (say grepping and etc).&lt;br /&gt;
&lt;br /&gt;
== Supported terminal types ==&lt;br /&gt;
&lt;br /&gt;
There are wide range of terminals exist in linux world: ''unix98'' psesudoterminals ('''pty'''), ''bsd'' terminals, ''virtual'' terminals ('''vt''') and etc. In CRIU we support the '''pty''' completely and '''vt''' in a way full enough for work. By full support we mean complete save of '''pty''' internal state including queued data. In turn for '''vt''' only plain restoration supported which means it is complete enough to do a traditional operations with terminals after restore but if there was some data queued and not yet delivered to a terminal user it will be lost. It is worth to mention that such situation should not be treated as any kind of error - the terminal transport layer never ever be one with guaranteed data delivery.&lt;br /&gt;
&lt;br /&gt;
Overall CRIU supports the following terminals:&lt;br /&gt;
&lt;br /&gt;
* console&lt;br /&gt;
* current&lt;br /&gt;
* virtual&lt;br /&gt;
* external&lt;br /&gt;
* serial&lt;br /&gt;
* unix98&lt;br /&gt;
&lt;br /&gt;
=== Console terminal ===&lt;br /&gt;
&lt;br /&gt;
'''console''' terminal is the most simple one. Its restore is just literally &amp;lt;code&amp;gt;open(/dev/console)&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Current terminal ===&lt;br /&gt;
&lt;br /&gt;
'''current''' terminal is rather an abstraction over real terminal an application uses. Upon its opening the kernel simply provides back the reference to the real one thus the same way as for '''console''' its restore is just &amp;lt;code&amp;gt;open(/dev/tty)&amp;lt;/code&amp;gt; with one exception - it must be restored last, ie after all other terminals are restored.&lt;br /&gt;
&lt;br /&gt;
=== Virtual terminal ===&lt;br /&gt;
&lt;br /&gt;
'''vt''' stands for ''ttyN'' devices for which restore we simply do &amp;lt;code&amp;gt;open(/dev/ttyN)&amp;lt;/code&amp;gt;, where N is a number.&lt;br /&gt;
&lt;br /&gt;
=== External terminal ===&lt;br /&gt;
&lt;br /&gt;
'''external''' terminals stands for cases when file descriptors known to be changing between checkpoint/restore cycles and passed from command line options, see [[Inheriting_FDs_on_restore]] for details. For this kind of terminals we are relying the file descriptors already opened and passed available so on restore we simply reuse them.&lt;br /&gt;
&lt;br /&gt;
=== Serial terminal ===&lt;br /&gt;
&lt;br /&gt;
'''serial''' terminals are supported for debug purpose mostly, in particular some developers pass through into virtual machine with this terminals. Its restore as simple as plain &amp;lt;code&amp;gt;open()&amp;lt;/code&amp;gt; call.&lt;br /&gt;
&lt;br /&gt;
=== Unix98 terminal ===&lt;br /&gt;
&lt;br /&gt;
'''pty''' terminals are most commonly used over all other kinds. The '''pty''' represent a pair of peers: upon &amp;lt;code&amp;gt;open(/dev/ptmx)&amp;lt;/code&amp;gt; the kernel automatically create &amp;lt;code&amp;gt;/dev/pts/N&amp;lt;/code&amp;gt; slave peer, where N is a numeric index of the pair opened. Thus on restore we simply need ''ptmx'' device and give process master and slave descriptors.&lt;/div&gt;</summary>
		<author><name>Cyrillos</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=TTYs&amp;diff=3173</id>
		<title>TTYs</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=TTYs&amp;diff=3173"/>
		<updated>2016-09-08T15:17:17Z</updated>

		<summary type="html">&lt;p&gt;Cyrillos: /* Supported terminal types */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category: Under the hood]]&lt;br /&gt;
[[Category: Empty articles]]&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
&lt;br /&gt;
Terminals are one of the most important parts of how programs interact with users. Usually programs print output into them and read user input from. For example when one executes any program from a shell, the shell provides terminal peer into it, so the program output will be seen in a calling shell and a user can do additional processing (say grepping and etc).&lt;br /&gt;
&lt;br /&gt;
== Supported terminal types ==&lt;br /&gt;
&lt;br /&gt;
There are wide range of terminals exist in linux world: ''unix98'' psesudoterminals ('''pty'''), ''bsd'' terminals, ''virtual'' terminals ('''vt''') and etc. In CRIU we support the '''pty''' completely and '''vt''' in a way full enough for work. By full support we mean complete save of '''pty''' internal state including queued data. In turn for '''vt''' only plain restoration supported which means it is complete enough to do a traditional operations with terminals after restore but if there was some data queued and not yet delivered to a terminal user it will be lost. It is worth to mention that such situation should not be treated as any kind of error - the terminal transport layer never ever be one with guaranteed data delivery.&lt;br /&gt;
&lt;br /&gt;
Overall CRIU supports the following terminals:&lt;br /&gt;
&lt;br /&gt;
* console&lt;br /&gt;
* current&lt;br /&gt;
* virtual&lt;br /&gt;
* external&lt;br /&gt;
* serial&lt;br /&gt;
* unix98&lt;br /&gt;
&lt;br /&gt;
=== Console terminal ===&lt;br /&gt;
&lt;br /&gt;
'''console''' terminal is the most simple one. Its restore is just literally &amp;lt;code&amp;gt;open(/dev/console)&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Current terminal ===&lt;br /&gt;
&lt;br /&gt;
'''current''' terminal is rather an abstraction over real terminal an application uses. Upon its opening the kernel simply provides back the reference to the real one thus the same way as for '''console''' its restore is just &amp;lt;code&amp;gt;open(/dev/tty)&amp;lt;/code&amp;gt; with one exception - it must be restored last, ie after all other terminals are restored.&lt;/div&gt;</summary>
		<author><name>Cyrillos</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=TTYs&amp;diff=3172</id>
		<title>TTYs</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=TTYs&amp;diff=3172"/>
		<updated>2016-09-08T15:16:41Z</updated>

		<summary type="html">&lt;p&gt;Cyrillos: /* Supported terminal types */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category: Under the hood]]&lt;br /&gt;
[[Category: Empty articles]]&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
&lt;br /&gt;
Terminals are one of the most important parts of how programs interact with users. Usually programs print output into them and read user input from. For example when one executes any program from a shell, the shell provides terminal peer into it, so the program output will be seen in a calling shell and a user can do additional processing (say grepping and etc).&lt;br /&gt;
&lt;br /&gt;
== Supported terminal types ==&lt;br /&gt;
&lt;br /&gt;
There are wide range of terminals exist in linux world: ''unix98'' psesudoterminals ('''pty'''), ''bsd'' terminals, ''virtual'' terminals ('''vt''') and etc. In CRIU we support the '''pty''' completely and '''vt''' in a way full enough for work. By full support we mean complete save of '''pty''' internal state including queued data. In turn for '''vt''' only plain restoration supported which means it is complete enough to do a traditional operations with terminals after restore but if there was some data queued and not yet delivered to a terminal user it will be lost. It is worth to mention that such situation should not be treated as any kind of error - the terminal transport layer never ever be one with guaranteed data delivery.&lt;br /&gt;
&lt;br /&gt;
Overall CRIU supports the following terminals:&lt;br /&gt;
&lt;br /&gt;
* console&lt;br /&gt;
* current&lt;br /&gt;
* virtual&lt;br /&gt;
* external&lt;br /&gt;
* serial&lt;br /&gt;
* unix98&lt;br /&gt;
&lt;br /&gt;
=== Console terminal ===&lt;br /&gt;
&lt;br /&gt;
'''console''' terminal is the most simple one. It represents &amp;lt;code&amp;gt;/dev/console&amp;lt;/code&amp;gt; device and its restore is just literally &amp;lt;code&amp;gt;open(/dev/console)&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Current terminal ===&lt;br /&gt;
&lt;br /&gt;
'''current''' terminal is rather an abstraction over real terminal an application uses. Upon its opening the kernel simply provides back the reference to the real one thus the same way as for '''console''' its restore is just &amp;lt;code&amp;gt;open(/dev/tty)&amp;lt;/code&amp;gt; with one exception - it must be restored last, ie after all other terminals are restored.&lt;/div&gt;</summary>
		<author><name>Cyrillos</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=TTYs&amp;diff=3171</id>
		<title>TTYs</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=TTYs&amp;diff=3171"/>
		<updated>2016-09-08T15:16:24Z</updated>

		<summary type="html">&lt;p&gt;Cyrillos: /* Supported terminal types */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category: Under the hood]]&lt;br /&gt;
[[Category: Empty articles]]&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
&lt;br /&gt;
Terminals are one of the most important parts of how programs interact with users. Usually programs print output into them and read user input from. For example when one executes any program from a shell, the shell provides terminal peer into it, so the program output will be seen in a calling shell and a user can do additional processing (say grepping and etc).&lt;br /&gt;
&lt;br /&gt;
== Supported terminal types ==&lt;br /&gt;
&lt;br /&gt;
There are wide range of terminals exist in linux world: ''unix98'' psesudoterminals ('''pty'''), ''bsd'' terminals, ''virtual'' terminals ('''vt''') and etc. In CRIU we support the '''pty''' completely and '''vt''' in a way full enough for work. By full support we mean complete save of '''pty''' internal state including queued data. In turn for '''vt''' only plain restoration supported which means it is complete enough to do a traditional operations with terminals after restore but if there was some data queued and not yet delivered to a terminal user it will be lost. It is worth to mention that such situation should not be treated as any kind of error - the terminal transport layer never ever be one with guaranteed data delivery.&lt;br /&gt;
&lt;br /&gt;
Overall CRIU supports the following terminals:&lt;br /&gt;
&lt;br /&gt;
* console&lt;br /&gt;
* current&lt;br /&gt;
* virtual&lt;br /&gt;
* external&lt;br /&gt;
* serial&lt;br /&gt;
* unix98&lt;br /&gt;
&lt;br /&gt;
=== Console terminal ===&lt;br /&gt;
&lt;br /&gt;
'''console''' terminal is the most simple one. It represents &amp;lt;code&amp;gt;/dev/console&amp;lt;/code&amp;gt; device and its restore is just literally &amp;lt;code&amp;gt;open(/dev/console)&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Current terminal ===&lt;br /&gt;
&lt;br /&gt;
''current''' terminal is rather an abstraction over real terminal an application uses. Upon its opening the kernel simply provides back the reference to the real one thus the same way as for '''console''' its restore is just &amp;lt;code&amp;gt;open(/dev/tty)&amp;lt;/code&amp;gt; with one exception - it must be restored last, ie after all other terminals are restored.&lt;/div&gt;</summary>
		<author><name>Cyrillos</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=TTYs&amp;diff=3170</id>
		<title>TTYs</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=TTYs&amp;diff=3170"/>
		<updated>2016-09-08T14:47:30Z</updated>

		<summary type="html">&lt;p&gt;Cyrillos: /* Console terminal */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category: Under the hood]]&lt;br /&gt;
[[Category: Empty articles]]&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
&lt;br /&gt;
Terminals are one of the most important parts of how programs interact with users. Usually programs print output into them and read user input from. For example when one executes any program from a shell, the shell provides terminal peer into it, so the program output will be seen in a calling shell and a user can do additional processing (say grepping and etc).&lt;br /&gt;
&lt;br /&gt;
== Supported terminal types ==&lt;br /&gt;
&lt;br /&gt;
There are wide range of terminals exist in linux world: ''unix98'' psesudoterminals ('''pty'''), ''bsd'' terminals, ''virtual'' terminals ('''vt''') and etc. In CRIU we support the '''pty''' completely and '''vt''' in a way full enough for work. By full support we mean complete save of '''pty''' internal state including queued data. In turn for '''vt''' only plain restoration supported which means it is complete enough to do a traditional operations with terminals after restore but if there was some data queued and not yet delivered to a terminal user it will be lost. It is worth to mention that such situation should not be treated as any kind of error - the terminal transport layer never ever be one with guaranteed data delivery.&lt;br /&gt;
&lt;br /&gt;
Overall CRIU supports the following terminals:&lt;br /&gt;
&lt;br /&gt;
* console&lt;br /&gt;
* current&lt;br /&gt;
* virtual&lt;br /&gt;
* external&lt;br /&gt;
* serial&lt;br /&gt;
* unix98&lt;br /&gt;
&lt;br /&gt;
=== Console terminal ===&lt;br /&gt;
&lt;br /&gt;
'''console''' terminal is the most simple one. It represents &amp;lt;code&amp;gt;/dev/console&amp;lt;/code&amp;gt; device and its restore is just literally &amp;lt;code&amp;gt;open(/dev/console)&amp;lt;/code&amp;gt;.&lt;/div&gt;</summary>
		<author><name>Cyrillos</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=TTYs&amp;diff=3169</id>
		<title>TTYs</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=TTYs&amp;diff=3169"/>
		<updated>2016-09-08T14:17:20Z</updated>

		<summary type="html">&lt;p&gt;Cyrillos: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category: Under the hood]]&lt;br /&gt;
[[Category: Empty articles]]&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
&lt;br /&gt;
Terminals are one of the most important parts of how programs interact with users. Usually programs print output into them and read user input from. For example when one executes any program from a shell, the shell provides terminal peer into it, so the program output will be seen in a calling shell and a user can do additional processing (say grepping and etc).&lt;br /&gt;
&lt;br /&gt;
== Supported terminal types ==&lt;br /&gt;
&lt;br /&gt;
There are wide range of terminals exist in linux world: ''unix98'' psesudoterminals ('''pty'''), ''bsd'' terminals, ''virtual'' terminals ('''vt''') and etc. In CRIU we support the '''pty''' completely and '''vt''' in a way full enough for work. By full support we mean complete save of '''pty''' internal state including queued data. In turn for '''vt''' only plain restoration supported which means it is complete enough to do a traditional operations with terminals after restore but if there was some data queued and not yet delivered to a terminal user it will be lost. It is worth to mention that such situation should not be treated as any kind of error - the terminal transport layer never ever be one with guaranteed data delivery.&lt;br /&gt;
&lt;br /&gt;
Overall CRIU supports the following terminals:&lt;br /&gt;
&lt;br /&gt;
* console&lt;br /&gt;
* current&lt;br /&gt;
* virtual&lt;br /&gt;
* external&lt;br /&gt;
* serial&lt;br /&gt;
* unix98&lt;br /&gt;
&lt;br /&gt;
=== Console terminal ===&lt;br /&gt;
&lt;br /&gt;
'''console''' terminal represents &amp;lt;code&amp;gt;/dev/console&amp;lt;/code&amp;gt; device and its restore is simply do &amp;lt;code&amp;gt;open(/dev/console)&amp;lt;/code&amp;gt;.&lt;/div&gt;</summary>
		<author><name>Cyrillos</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=TTYs&amp;diff=3168</id>
		<title>TTYs</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=TTYs&amp;diff=3168"/>
		<updated>2016-09-08T14:08:16Z</updated>

		<summary type="html">&lt;p&gt;Cyrillos: /* Supported terminal types */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category: Under the hood]]&lt;br /&gt;
[[Category: Empty articles]]&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
&lt;br /&gt;
Terminals are one of the most important parts of how programs interact with users. Usually programs print output into them and read user input from. For example when one executes any program from a shell, the shell provides terminal peer into it, so the program output will be seen in a calling shell and a user can do additional processing (say grepping and etc).&lt;br /&gt;
&lt;br /&gt;
== Supported terminal types ==&lt;br /&gt;
&lt;br /&gt;
There are wide range of terminals exist in linux world: ''unix98'' psesudoterminals ('''pty'''), ''bsd'' terminals, ''virtual'' terminals ('''vt''') and etc. In CRIU we support the '''pty''' completely and '''vt''' in a way full enough for work. By full support we mean complete save of '''pty''' internal state including queued data. In turn for '''vt''' only plain restoration supported which means it is complete enough to do a traditional operations with terminals after restore but if there was some data queued and not yet delivered to a terminal user it will be lost. It is worth to mention that such situation should not be treated as any kind of error - the terminal transport layer never ever be one with guaranteed data delivery.&lt;br /&gt;
&lt;br /&gt;
Overall CRIU supports the following terminals:&lt;br /&gt;
&lt;br /&gt;
* console&lt;br /&gt;
* current&lt;br /&gt;
* virtual&lt;br /&gt;
* external&lt;br /&gt;
* serial&lt;br /&gt;
* unix98&lt;br /&gt;
&lt;br /&gt;
'''console''' terminal represents &amp;lt;mono&amp;gt;/dev/console&amp;lt;/mono&amp;gt;&lt;/div&gt;</summary>
		<author><name>Cyrillos</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=TTYs&amp;diff=3167</id>
		<title>TTYs</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=TTYs&amp;diff=3167"/>
		<updated>2016-09-08T14:04:06Z</updated>

		<summary type="html">&lt;p&gt;Cyrillos: /* Supported terminal types */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category: Under the hood]]&lt;br /&gt;
[[Category: Empty articles]]&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
&lt;br /&gt;
Terminals are one of the most important parts of how programs interact with users. Usually programs print output into them and read user input from. For example when one executes any program from a shell, the shell provides terminal peer into it, so the program output will be seen in a calling shell and a user can do additional processing (say grepping and etc).&lt;br /&gt;
&lt;br /&gt;
== Supported terminal types ==&lt;br /&gt;
&lt;br /&gt;
There are wide range of terminals exist in linux world: ''unix98'' psesudoterminals ('''pty'''), ''bsd'' terminals, ''virtual'' terminals ('''vt''') and etc. In CRIU we support the '''pty''' completely and '''vt''' in a way full enough for work. By full support we mean complete save of '''pty''' internal state including queued data. In turn for '''vt''' only plain restoration supported which means it is complete enough to do a traditional operations with terminals after restore but if there was some data queued and not yet delivered to a terminal user it will be lost. It is worth to mention that such situation should not be treated as any kind of error - the terminal transport layer never ever be one with guaranteed data delivery.&lt;br /&gt;
&lt;br /&gt;
Overall CRIU supports the following terminals:&lt;br /&gt;
&lt;br /&gt;
* console&lt;br /&gt;
* current&lt;br /&gt;
* virtual&lt;br /&gt;
* external&lt;br /&gt;
* serial&lt;br /&gt;
* unix98&lt;/div&gt;</summary>
		<author><name>Cyrillos</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=TTYs&amp;diff=3166</id>
		<title>TTYs</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=TTYs&amp;diff=3166"/>
		<updated>2016-09-08T14:01:03Z</updated>

		<summary type="html">&lt;p&gt;Cyrillos: /* Supported terminal types */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category: Under the hood]]&lt;br /&gt;
[[Category: Empty articles]]&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
&lt;br /&gt;
Terminals are one of the most important parts of how programs interact with users. Usually programs print output into them and read user input from. For example when one executes any program from a shell, the shell provides terminal peer into it, so the program output will be seen in a calling shell and a user can do additional processing (say grepping and etc).&lt;br /&gt;
&lt;br /&gt;
== Supported terminal types ==&lt;br /&gt;
&lt;br /&gt;
There are wide range of terminals exist in linux world: ''unix98'' psesudoterminals ('''pty'''), ''bsd'' terminals, ''virtual'' terminals ('''vt''') and etc. In CRIU we support the '''pty''' completely and '''vt''' in a way full enough for enough for work. By full support we mean complete save of '''pty''' internal state including queued data. In turn for '''vt''' only plain restoration supported which means it is complete enough to do a traditional operations with terminals after restore but if there was some data queued and not yet delivered to a terminal user it will be lost. It is worth to mention that such situation should not be treated as any kind of error - the terminal transport layer never ever be one with guaranteed data delivery.&lt;br /&gt;
&lt;br /&gt;
Overall CRIU supports the following terminals:&lt;br /&gt;
&lt;br /&gt;
* console&lt;br /&gt;
* current&lt;br /&gt;
* virtual&lt;br /&gt;
* external&lt;br /&gt;
* serial&lt;br /&gt;
* unix98&lt;/div&gt;</summary>
		<author><name>Cyrillos</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=TTYs&amp;diff=3165</id>
		<title>TTYs</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=TTYs&amp;diff=3165"/>
		<updated>2016-09-08T13:50:26Z</updated>

		<summary type="html">&lt;p&gt;Cyrillos: /* Terminals */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category: Under the hood]]&lt;br /&gt;
[[Category: Empty articles]]&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
&lt;br /&gt;
Terminals are one of the most important parts of how programs interact with users. Usually programs print output into them and read user input from. For example when one executes any program from a shell, the shell provides terminal peer into it, so the program output will be seen in a calling shell and a user can do additional processing (say grepping and etc).&lt;br /&gt;
&lt;br /&gt;
== Supported terminal types ==&lt;br /&gt;
&lt;br /&gt;
There are wide range of terminals exist in linux world: ''unix98'' psesudoterminals ('''pty'''), ''bsd'' terminals, ''virtual'' terminals ('''vt''') and etc. In CRIU we support the '''pty''' completely and '''vt''' in a way full enough for enough for work. By full support we mean complete save of pty internal state including queued data. In turn for '''vt''' only plain restoration supported which means it is complete enough to do a traditional operations with terminals after restore but if there was some data queued and not yet delivered to a terminal user it will be lost. It is worth to mention that such situation should not be treated as any kind of error -- the terminal transport layer never ever be one with guaranteed data delivery.&lt;/div&gt;</summary>
		<author><name>Cyrillos</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=TTYs&amp;diff=3164</id>
		<title>TTYs</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=TTYs&amp;diff=3164"/>
		<updated>2016-09-08T13:44:06Z</updated>

		<summary type="html">&lt;p&gt;Cyrillos: Start describing terminals&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category: Under the hood]]&lt;br /&gt;
[[Category: Empty articles]]&lt;br /&gt;
&lt;br /&gt;
= Terminals =&lt;br /&gt;
&lt;br /&gt;
Terminals are one of the most important parts of how programs interact with users. Usually programs print output into them and read user input from. &lt;br /&gt;
&lt;br /&gt;
== Supported terminal types ==&lt;br /&gt;
&lt;br /&gt;
There are wide range of terminals exist in linux world: ''unix98'' psesudoterminals ('''pty'''), ''bsd'' terminals, ''virtual'' terminals ('''vt''') and etc. In CRIU we support the '''pty''' completely and '''vt''' in a way full enough for enough for work. By full support we mean complete save of pty internal state including queued data. In turn for '''vt''' only plain restoration supported which means it is complete enough to do a traditional operations with terminals after restore but if there was some data queued and not yet delivered to a terminal user it will be lost. It is worth to mention that such situation should not be treated as any kind of error -- the terminal transport layer never ever be one with guaranteed data delivery.&lt;/div&gt;</summary>
		<author><name>Cyrillos</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=User:Ebatalov&amp;diff=3030</id>
		<title>User:Ebatalov</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=User:Ebatalov&amp;diff=3030"/>
		<updated>2016-08-25T16:27:41Z</updated>

		<summary type="html">&lt;p&gt;Cyrillos: Creating user page for new user.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Cyrillos</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=User:OpenGridSchedulerGridEngine&amp;diff=3021</id>
		<title>User:OpenGridSchedulerGridEngine</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=User:OpenGridSchedulerGridEngine&amp;diff=3021"/>
		<updated>2016-08-22T06:39:48Z</updated>

		<summary type="html">&lt;p&gt;Cyrillos: Creating user page for new user.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Cyrillos</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=User:Boucher&amp;diff=2976</id>
		<title>User:Boucher</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=User:Boucher&amp;diff=2976"/>
		<updated>2016-07-18T16:29:27Z</updated>

		<summary type="html">&lt;p&gt;Cyrillos: Creating user page for new user.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Cyrillos</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=User:Kkolias&amp;diff=2974</id>
		<title>User:Kkolias</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=User:Kkolias&amp;diff=2974"/>
		<updated>2016-07-16T11:43:38Z</updated>

		<summary type="html">&lt;p&gt;Cyrillos: Creating user page for new user.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Cyrillos</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=User:Sanjuroy1&amp;diff=2945</id>
		<title>User:Sanjuroy1</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=User:Sanjuroy1&amp;diff=2945"/>
		<updated>2016-06-23T14:11:44Z</updated>

		<summary type="html">&lt;p&gt;Cyrillos: Creating user page for new user.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Cyrillos</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=User:Anujkr3&amp;diff=2944</id>
		<title>User:Anujkr3</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=User:Anujkr3&amp;diff=2944"/>
		<updated>2016-06-23T07:05:36Z</updated>

		<summary type="html">&lt;p&gt;Cyrillos: Creating user page for new user.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Cyrillos</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=User:Ayourtch&amp;diff=2943</id>
		<title>User:Ayourtch</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=User:Ayourtch&amp;diff=2943"/>
		<updated>2016-06-23T07:05:19Z</updated>

		<summary type="html">&lt;p&gt;Cyrillos: Creating user page for new user.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Cyrillos</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=User:LFaraone&amp;diff=2910</id>
		<title>User:LFaraone</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=User:LFaraone&amp;diff=2910"/>
		<updated>2016-05-02T05:42:02Z</updated>

		<summary type="html">&lt;p&gt;Cyrillos: Creating user page for new user.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Cyrillos</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=User:Federico.reghenzani&amp;diff=2872</id>
		<title>User:Federico.reghenzani</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=User:Federico.reghenzani&amp;diff=2872"/>
		<updated>2016-03-30T09:54:43Z</updated>

		<summary type="html">&lt;p&gt;Cyrillos: Creating user page for new user.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Cyrillos</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=User:Dsafonov&amp;diff=2870</id>
		<title>User:Dsafonov</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=User:Dsafonov&amp;diff=2870"/>
		<updated>2016-03-29T13:17:01Z</updated>

		<summary type="html">&lt;p&gt;Cyrillos: Creating user page for new user.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Cyrillos</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=User:Rppt&amp;diff=2845</id>
		<title>User:Rppt</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=User:Rppt&amp;diff=2845"/>
		<updated>2016-03-24T12:06:00Z</updated>

		<summary type="html">&lt;p&gt;Cyrillos: Creating user page for new user.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Cyrillos</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=User:Smurf&amp;diff=2838</id>
		<title>User:Smurf</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=User:Smurf&amp;diff=2838"/>
		<updated>2016-03-15T21:17:18Z</updated>

		<summary type="html">&lt;p&gt;Cyrillos: Creating user page for new user.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Cyrillos</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=Installation&amp;diff=2837</id>
		<title>Installation</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=Installation&amp;diff=2837"/>
		<updated>2016-03-10T17:57:40Z</updated>

		<summary type="html">&lt;p&gt;Cyrillos: libcap needed for tests 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;
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;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;
* Debian package names&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;
&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;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;
* 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; and &amp;lt;code&amp;gt;libcap-devel&amp;lt;/code&amp;gt;.&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;
* Other options&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_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;
== 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 --ms&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&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 you're using our custom kernel, then the &amp;lt;code&amp;gt;--ms&amp;lt;/code&amp;gt; option should not 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;
Please see [[Usage]] and [[Advanced usage]], as well as [[:Category:HOWTO]].&lt;br /&gt;
&lt;br /&gt;
[[Category:HOWTO]]&lt;/div&gt;</summary>
		<author><name>Cyrillos</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=User:Mikeatlas&amp;diff=2836</id>
		<title>User:Mikeatlas</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=User:Mikeatlas&amp;diff=2836"/>
		<updated>2016-03-10T08:11:00Z</updated>

		<summary type="html">&lt;p&gt;Cyrillos: Creating user page for new user.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Cyrillos</name></author>
	</entry>
	<entry>
		<id>https://criu.org/index.php?title=Installation&amp;diff=2835</id>
		<title>Installation</title>
		<link rel="alternate" type="text/html" href="https://criu.org/index.php?title=Installation&amp;diff=2835"/>
		<updated>2016-03-09T21:18:41Z</updated>

		<summary type="html">&lt;p&gt;Cyrillos: libcap already here&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;
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;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;
* Debian package names&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;
&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;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;libcap&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;libcap-devel&amp;lt;/code&amp;gt; (RPM distros) or &amp;lt;code&amp;gt;libcap-dev&amp;lt;/code&amp;gt; (DEB distros) for work with capabilities.&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;
* 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;.&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;
* Other options&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_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;
== 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 --ms&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&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 you're using our custom kernel, then the &amp;lt;code&amp;gt;--ms&amp;lt;/code&amp;gt; option should not 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;
Please see [[Usage]] and [[Advanced usage]], as well as [[:Category:HOWTO]].&lt;br /&gt;
&lt;br /&gt;
[[Category:HOWTO]]&lt;/div&gt;</summary>
		<author><name>Cyrillos</name></author>
	</entry>
</feed>