€•Œsphinx.addnodes”Œdocument”“”)�”}”(Œ rawsource”Œ”Œchildren”]”(Œ translations”Œ LanguagesNode”“”)�”}”(hhh]”(hŒ pending_xref”“”)�”}”(hhh]”Œdocutils.nodes”ŒText”“”ŒChinese (Simplified)”…”�”}”Œparent”hsbaŒ attributes”}”(Œids”]”Œclasses”]”Œnames”]”Œdupnames”]”Œbackrefs”]”Œ refdomain”Œstd”Œreftype”Œdoc”Œ reftarget”Œ,/translations/zh_CN/userspace-api/liveupdate”Œmodname”NŒ classname”NŒ refexplicit”ˆuŒtagname”hhh ubh)�”}”(hhh]”hŒChinese (Traditional)”…”�”}”hh2sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ,/translations/zh_TW/userspace-api/liveupdate”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒItalian”…”�”}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ,/translations/it_IT/userspace-api/liveupdate”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒJapanese”…”�”}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ,/translations/ja_JP/userspace-api/liveupdate”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒKorean”…”�”}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ,/translations/ko_KR/userspace-api/liveupdate”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒPortuguese (Brazilian)”…”�”}”hh‚sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ,/translations/pt_BR/userspace-api/liveupdate”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒSpanish”…”�”}”hh–sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ,/translations/sp_SP/userspace-api/liveupdate”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubeh}”(h]”h ]”h"]”h$]”h&]”Œcurrent_language”ŒEnglish”uh1h hhŒ _document”hŒsource”NŒline”NubhŒcomment”“”)�”}”(hŒ SPDX-License-Identifier: GPL-2.0”h]”hŒ SPDX-License-Identifier: GPL-2.0”…”�”}”hh·sbah}”(h]”h ]”h"]”h$]”h&]”Œ xml:space”Œpreserve”uh1hµhhh²hh³ŒF/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate.rst”h´KubhŒsection”“”)�”}”(hhh]”(hŒtitle”“”)�”}”(hŒLive Update uAPI”h]”hŒLive Update uAPI”…”�”}”(hhÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhhÊh²hh³hÇh´KubhŒ field_list”“”)�”}”(hhh]”hŒfield”“”)�”}”(hhh]”(hŒ field_name”“”)�”}”(hŒAuthor”h]”hŒAuthor”…”�”}”(hhéh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hçhhäh³hÇh´KubhŒ field_body”“”)�”}”(hŒ+Pasha Tatashin ”h]”hŒ paragraph”“”)�”}”(hŒ*Pasha Tatashin ”h]”(hŒPasha Tatashin <”…”�”}”(hhÿh²hh³Nh´NubhŒ reference”“”)�”}”(hŒpasha.tatashin@soleen.com”h]”hŒpasha.tatashin@soleen.com”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefuri”Œ mailto:pasha.tatashin@soleen.com”uh1jhhÿubhŒ>”…”�”}”(hhÿh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hýh³hÇh´Khhùubah}”(h]”h ]”h"]”h$]”h&]”uh1h÷hhäubeh}”(h]”h ]”h"]”h$]”h&]”uh1hâh³hÇh´Khhßh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝhhÊh²hh³hÇh´KubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒioctl interface”h]”hŒioctl interface”…”�”}”(hj8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhj5h²hh³hÇh´K ubhþ)�”}”(hX The IOCTL user-space control interface for the LUO subsystem. It registers a character device, typically found at ``/dev/liveupdate``, which allows a userspace agent to manage the LUO state machine and its associated resources, such as preservable file descriptors.”h]”(hŒrThe IOCTL user-space control interface for the LUO subsystem. It registers a character device, typically found at ”…”�”}”(hjFh²hh³Nh´NubhŒliteral”“”)�”}”(hŒ``/dev/liveupdate``”h]”hŒ/dev/liveupdate”…”�”}”(hjPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jNhjFubhŒ„, which allows a userspace agent to manage the LUO state machine and its associated resources, such as preservable file descriptors.”…”�”}”(hjFh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hýh³Œe/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:10: ./kernel/liveupdate/luo_core.c”h´Kúhj5h²hubhþ)�”}”(hX�To ensure that the state machine is controlled by a single entity, access to this device is exclusive: only one process is permitted to have ``/dev/liveupdate`` open at any given time. Subsequent open attempts will fail with -EBUSY until the first process closes its file descriptor. This singleton model simplifies state management by preventing conflicting commands from multiple userspace agents.”h]”(hŒ�To ensure that the state machine is controlled by a single entity, access to this device is exclusive: only one process is permitted to have ”…”�”}”(hjih²hh³Nh´NubjO)�”}”(hŒ``/dev/liveupdate``”h]”hŒ/dev/liveupdate”…”�”}”(hjqh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jNhjiubhŒï open at any given time. Subsequent open attempts will fail with -EBUSY until the first process closes its file descriptor. This singleton model simplifies state management by preventing conflicting commands from multiple userspace agents.”…”�”}”(hjih²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hýh³Œe/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:10: ./kernel/liveupdate/luo_core.c”h´Kÿhj5h²hubeh}”(h]”Œioctl-interface”ah ]”h"]”Œioctl interface”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´K ubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒ ioctl uAPI”h]”hŒ ioctl uAPI”…”�”}”(hj•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhj’h²hh³hÇh´KubhŒtarget”“”)�”}”(hŒ.. _General ioctl format:”h]”h}”(h]”h ]”h"]”h$]”h&]”Œrefid”Œgeneral-ioctl-format”uh1j£h´Khj’h²hh³Œh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.h”ubhþ)�”}”(hŒ**General ioctl format**”h]”hŒstrong”“”)�”}”(hj´h]”hŒGeneral ioctl format”…”�”}”(hj¸h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j¶hj²ubah}”(h]”j°ah ]”h"]”Œgeneral ioctl format”ah$]”h&]”uh1hýh³Œh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.h”h´Khj’h²hŒexpect_referenced_by_name”}”jÉj¥sŒexpect_referenced_by_id”}”j°j¥subhþ)�”}”(hX{The ioctl interface follows a general format to allow for extensibility. Each ioctl is passed in a structure pointer as the argument providing the size of the structure in the first u32. The kernel checks that any structure space beyond what it understands is 0. This allows userspace to use the backward compatible portion while consistently using the newer, larger, structures.”h]”hX{The ioctl interface follows a general format to allow for extensibility. Each ioctl is passed in a structure pointer as the argument providing the size of the structure in the first u32. The kernel checks that any structure space beyond what it understands is 0. This allows userspace to use the backward compatible portion while consistently using the newer, larger, structures.”…”�”}”(hjÑh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³Œh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.h”h´Khj’h²hubhþ)�”}”(hŒ0ioctls use a standard meaning for common errnos:”h]”hŒ0ioctls use a standard meaning for common errnos:”…”�”}”(hjàh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³Œh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.h”h´Khj’h²hubhŒ block_quote”“”)�”}”(hX- ENOTTY: The IOCTL number itself is not supported at all - E2BIG: The IOCTL number is supported, but the provided structure has non-zero in a part the kernel does not understand. - EOPNOTSUPP: The IOCTL number is supported, and the structure is understood, however a known field has a value the kernel does not understand or support. - EINVAL: Everything about the IOCTL was understood, but a field is not correct. - ENOENT: A provided token does not exist. - ENOMEM: Out of memory. - EOVERFLOW: Mathematics overflowed. ”h]”hŒ bullet_list”“”)�”}”(hhh]”(hŒ list_item”“”)�”}”(hŒ7ENOTTY: The IOCTL number itself is not supported at all”h]”hþ)�”}”(hjþh]”hŒ7ENOTTY: The IOCTL number itself is not supported at all”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³Œh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.h”h´Khjüubah}”(h]”h ]”h"]”h$]”h&]”uh1júhj÷ubjû)�”}”(hŒwE2BIG: The IOCTL number is supported, but the provided structure has non-zero in a part the kernel does not understand.”h]”hþ)�”}”(hŒwE2BIG: The IOCTL number is supported, but the provided structure has non-zero in a part the kernel does not understand.”h]”hŒwE2BIG: The IOCTL number is supported, but the provided structure has non-zero in a part the kernel does not understand.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³Œh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.h”h´Khjubah}”(h]”h ]”h"]”h$]”h&]”uh1júhj÷ubjû)�”}”(hŒ˜EOPNOTSUPP: The IOCTL number is supported, and the structure is understood, however a known field has a value the kernel does not understand or support.”h]”hþ)�”}”(hŒ˜EOPNOTSUPP: The IOCTL number is supported, and the structure is understood, however a known field has a value the kernel does not understand or support.”h]”hŒ˜EOPNOTSUPP: The IOCTL number is supported, and the structure is understood, however a known field has a value the kernel does not understand or support.”…”�”}”(hj1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³Œh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.h”h´Khj-ubah}”(h]”h ]”h"]”h$]”h&]”uh1júhj÷ubjû)�”}”(hŒNEINVAL: Everything about the IOCTL was understood, but a field is not correct.”h]”hþ)�”}”(hŒNEINVAL: Everything about the IOCTL was understood, but a field is not correct.”h]”hŒNEINVAL: Everything about the IOCTL was understood, but a field is not correct.”…”�”}”(hjJh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³Œh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.h”h´K hjFubah}”(h]”h ]”h"]”h$]”h&]”uh1júhj÷ubjû)�”}”(hŒ(ENOENT: A provided token does not exist.”h]”hþ)�”}”(hjah]”hŒ(ENOENT: A provided token does not exist.”…”�”}”(hjch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³Œh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.h”h´K"hj_ubah}”(h]”h ]”h"]”h$]”h&]”uh1júhj÷ubjû)�”}”(hŒENOMEM: Out of memory.”h]”hþ)�”}”(hjyh]”hŒENOMEM: Out of memory.”…”�”}”(hj{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³Œh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.h”h´K#hjwubah}”(h]”h ]”h"]”h$]”h&]”uh1júhj÷ubjû)�”}”(hŒ#EOVERFLOW: Mathematics overflowed. ”h]”hþ)�”}”(hŒ"EOVERFLOW: Mathematics overflowed.”h]”hŒ"EOVERFLOW: Mathematics overflowed.”…”�”}”(hj“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³Œh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.h”h´K$hj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1júhj÷ubeh}”(h]”h ]”h"]”h$]”h&]”Œbullet”Œ-”uh1jõh³j h´Khjñubah}”(h]”h ]”h"]”h$]”h&]”uh1jïh³j h´Khj’h²hubhþ)�”}”(hŒ5As well as additional errnos, within specific ioctls.”h]”hŒ5As well as additional errnos, within specific ioctls.”…”�”}”(hj¶h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³Œh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.h”h´K&hj’h²hubhŒindex”“”)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(Œsingle”Œ*liveupdate_ioctl_create_session (C struct)”Œ!c.liveupdate_ioctl_create_session”hNt”auh1jÅhj’h²hh³j±h´NubhŒdesc”“”)�”}”(hhh]”(hŒdesc_signature”“”)�”}”(hŒliveupdate_ioctl_create_session”h]”hŒdesc_signature_line”“”)�”}”(hŒ&struct liveupdate_ioctl_create_session”h]”(hŒdesc_sig_keyword”“”)�”}”(hŒstruct”h]”hŒstruct”…”�”}”(hjéh²hh³Nh´Nubah}”(h]”h ]”Œk”ah"]”h$]”h&]”uh1jçhjãh²hh³Œh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.h”h´K+ubhŒdesc_sig_space”“”)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjûh²hh³Nh´Nubah}”(h]”h ]”Œw”ah"]”h$]”h&]”uh1jùhjãh²hh³jøh´K+ubhŒ desc_name”“”)�”}”(hŒliveupdate_ioctl_create_session”h]”hŒ desc_sig_name”“”)�”}”(hjßh]”hŒliveupdate_ioctl_create_session”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”Œn”ah"]”h$]”h&]”uh1jhj ubah}”(h]”h ]”(Œsig-name”Œdescname”eh"]”h$]”h&]”hÅhÆuh1j hjãh²hh³jøh´K+ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆŒ add_permalink”ˆuh1jáŒsphinx_line_type”Œ declarator”hjÝh²hh³jøh´K+ubah}”(h]”jÔah ]”(Œsig”Œ sig-object”eh"]”h$]”h&]”Œ is_multiline”ˆŒ _toc_parts”)Œ _toc_name”huh1jÛh³jøh´K+hjØh²hubhŒ desc_content”“”)�”}”(hhh]”hþ)�”}”(hŒ&ioctl(LIVEUPDATE_IOCTL_CREATE_SESSION)”h]”hŒ&ioctl(LIVEUPDATE_IOCTL_CREATE_SESSION)”…”�”}”(hjAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³Œh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.h”h´KBhj>h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j<hjØh²hh³jøh´K+ubeh}”(h]”h ]”(Œc”Œstruct”eh"]”h$]”h&]”Œdomain”jYŒobjtype”jZŒdesctype”jZŒnoindex”‰Œ noindexentry”‰Œnocontentsentry”‰uh1jÖh²hhj’h³j±h´NubhŒ container”“”)�”}”(hX»**Definition**:: struct liveupdate_ioctl_create_session { __u32 size; __s32 fd; __u8 name[LIVEUPDATE_SESSION_NAME_LENGTH]; }; **Members** ``size`` Input; sizeof(struct liveupdate_ioctl_create_session) ``fd`` Output; The new file descriptor for the created session. ``name`` Input; A null-terminated string for the session name, max length ``LIVEUPDATE_SESSION_NAME_LENGTH`` including termination character.”h]”(hþ)�”}”(hŒ**Definition**::”h]”(j·)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hjnh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j¶hjjubhŒ:”…”�”}”(hjjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hýh³Œh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.h”h´KFhjfubhŒ literal_block”“”)�”}”(hŒxstruct liveupdate_ioctl_create_session { __u32 size; __s32 fd; __u8 name[LIVEUPDATE_SESSION_NAME_LENGTH]; };”h]”hŒxstruct liveupdate_ioctl_create_session { __u32 size; __s32 fd; __u8 name[LIVEUPDATE_SESSION_NAME_LENGTH]; };”…”�”}”hj‰sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j‡h³Œh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.h”h´KHhjfubhþ)�”}”(hŒ **Members**”h]”j·)�”}”(hjšh]”hŒMembers”…”�”}”(hjœh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j¶hj˜ubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³Œh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.h”h´KNhjfubhŒdefinition_list”“”)�”}”(hhh]”(hŒdefinition_list_item”“”)�”}”(hŒ?``size`` Input; sizeof(struct liveupdate_ioctl_create_session) ”h]”(hŒterm”“”)�”}”(hŒ``size``”h]”jO)�”}”(hj¿h]”hŒsize”…”�”}”(hjÁh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jNhj½ubah}”(h]”h ]”h"]”h$]”h&]”uh1j»h³Œh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.h”h´KDhj·ubhŒ definition”“”)�”}”(hhh]”hþ)�”}”(hŒ5Input; sizeof(struct liveupdate_ioctl_create_session)”h]”hŒ5Input; sizeof(struct liveupdate_ioctl_create_session)”…”�”}”(hjÚh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³jÔh´KDhj×ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÕhj·ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jµh³jÔh´KDhj²ubj¶)�”}”(hŒ@``fd`` Output; The new file descriptor for the created session. ”h]”(j¼)�”}”(hŒ``fd``”h]”jO)�”}”(hjúh]”hŒfd”…”�”}”(hjüh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jNhjøubah}”(h]”h ]”h"]”h$]”h&]”uh1j»h³Œh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.h”h´KEhjôubjÖ)�”}”(hhh]”hþ)�”}”(hŒ8Output; The new file descriptor for the created session.”h]”hŒ8Output; The new file descriptor for the created session.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³jh´KEhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jÕhjôubeh}”(h]”h ]”h"]”h$]”h&]”uh1jµh³jh´KEhj²ubj¶)�”}”(hŒ�``name`` Input; A null-terminated string for the session name, max length ``LIVEUPDATE_SESSION_NAME_LENGTH`` including termination character.”h]”(j¼)�”}”(hŒ``name``”h]”jO)�”}”(hj3h]”hŒname”…”�”}”(hj5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jNhj1ubah}”(h]”h ]”h"]”h$]”h&]”uh1j»h³Œh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.h”h´KGhj-ubjÖ)�”}”(hhh]”hþ)�”}”(hŒ„Input; A null-terminated string for the session name, max length ``LIVEUPDATE_SESSION_NAME_LENGTH`` including termination character.”h]”(hŒAInput; A null-terminated string for the session name, max length ”…”�”}”(hjLh²hh³Nh´NubjO)�”}”(hŒ"``LIVEUPDATE_SESSION_NAME_LENGTH``”h]”hŒLIVEUPDATE_SESSION_NAME_LENGTH”…”�”}”(hjTh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jNhjLubhŒ! including termination character.”…”�”}”(hjLh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hýh³Œh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.h”h´KFhjIubah}”(h]”h ]”h"]”h$]”h&]”uh1jÕhj-ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jµh³jHh´KGhj²ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j°hjfubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jdhj’h²hh³j±h´Nubhþ)�”}”(hŒ**Description**”h]”j·)�”}”(hjˆh]”hŒ Description”…”�”}”(hjŠh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j¶hj†ubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³Œh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.h”h´KKhj’h²hubhþ)�”}”(hŒ…Creates a new live update session for managing preserved resources. This ioctl can only be called on the main /dev/liveupdate device.”h]”hŒ…Creates a new live update session for managing preserved resources. This ioctl can only be called on the main /dev/liveupdate device.”…”�”}”(hjžh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³Œh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.h”h´KHhj’h²hubhþ)�”}”(hŒ **Return**”h]”j·)�”}”(hj¯h]”hŒReturn”…”�”}”(hj±h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j¶hj­ubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³Œh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.h”h´KKhj’h²hubhþ)�”}”(hŒ-0 on success, negative error code on failure.”h]”hŒ-0 on success, negative error code on failure.”…”�”}”(hjÅh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³Œh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.h”h´KLhj’h²hubjÆ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÒŒ,liveupdate_ioctl_retrieve_session (C struct)”Œ#c.liveupdate_ioctl_retrieve_session”hNt”auh1jÅhj’h²hh³j±h´Nubj×)�”}”(hhh]”(jÜ)�”}”(hŒ!liveupdate_ioctl_retrieve_session”h]”jâ)�”}”(hŒ(struct liveupdate_ioctl_retrieve_session”h]”(jè)�”}”(hjëh]”hŒstruct”…”�”}”(hjíh²hh³Nh´Nubah}”(h]”h ]”jôah"]”h$]”h&]”uh1jçhjéh²hh³Œh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.h”h´KQubjú)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjûh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jùhjéh²hh³júh´KQubj )�”}”(hŒ!liveupdate_ioctl_retrieve_session”h]”j)�”}”(hjçh]”hŒ!liveupdate_ioctl_retrieve_session”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj ubah}”(h]”h ]”(j#j$eh"]”h$]”h&]”hÅhÆuh1j hjéh²hh³júh´KQubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj.ˆuh1jáj/j0hjåh²hh³júh´KQubah}”(h]”jàah ]”(j4j5eh"]”h$]”h&]”j9ˆj:)j;huh1jÛh³júh´KQhjâh²hubj=)�”}”(hhh]”hþ)�”}”(hŒ(ioctl(LIVEUPDATE_IOCTL_RETRIEVE_SESSION)”h]”hŒ(ioctl(LIVEUPDATE_IOCTL_RETRIEVE_SESSION)”…”�”}”(hj/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³Œh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.h”h´KXhj,h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j<hjâh²hh³júh´KQubeh}”(h]”h ]”(jYŒstruct”eh"]”h$]”h&]”j^jYj_jGj`jGja‰jb‰jc‰uh1jÖh²hhj’h³j±h´Nubje)�”}”(hXà**Definition**:: struct liveupdate_ioctl_retrieve_session { __u32 size; __s32 fd; __u8 name[LIVEUPDATE_SESSION_NAME_LENGTH]; }; **Members** ``size`` Input; sizeof(struct liveupdate_ioctl_retrieve_session) ``fd`` Output; The new file descriptor for the retrieved session. ``name`` Input; A null-terminated string identifying the session to retrieve. The name must exactly match the name used when the session was created in the previous kernel.”h]”(hþ)�”}”(hŒ**Definition**::”h]”(j·)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hjSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j¶hjOubhŒ:”…”�”}”(hjOh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hýh³Œh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.h”h´K\hjKubjˆ)�”}”(hŒzstruct liveupdate_ioctl_retrieve_session { __u32 size; __s32 fd; __u8 name[LIVEUPDATE_SESSION_NAME_LENGTH]; };”h]”hŒzstruct liveupdate_ioctl_retrieve_session { __u32 size; __s32 fd; __u8 name[LIVEUPDATE_SESSION_NAME_LENGTH]; };”…”�”}”hjlsbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j‡h³Œh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.h”h´K^hjKubhþ)�”}”(hŒ **Members**”h]”j·)�”}”(hj}h]”hŒMembers”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j¶hj{ubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³Œh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.h”h´KdhjKubj±)�”}”(hhh]”(j¶)�”}”(hŒA``size`` Input; sizeof(struct liveupdate_ioctl_retrieve_session) ”h]”(j¼)�”}”(hŒ``size``”h]”jO)�”}”(hjœh]”hŒsize”…”�”}”(hjžh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jNhjšubah}”(h]”h ]”h"]”h$]”h&]”uh1j»h³Œh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.h”h´KZhj–ubjÖ)�”}”(hhh]”hþ)�”}”(hŒ7Input; sizeof(struct liveupdate_ioctl_retrieve_session)”h]”hŒ7Input; sizeof(struct liveupdate_ioctl_retrieve_session)”…”�”}”(hjµh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³j±h´KZhj²ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÕhj–ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jµh³j±h´KZhj“ubj¶)�”}”(hŒB``fd`` Output; The new file descriptor for the retrieved session. ”h]”(j¼)�”}”(hŒ``fd``”h]”jO)�”}”(hjÕh]”hŒfd”…”�”}”(hj×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jNhjÓubah}”(h]”h ]”h"]”h$]”h&]”uh1j»h³Œh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.h”h´K[hjÏubjÖ)�”}”(hhh]”hþ)�”}”(hŒ:Output; The new file descriptor for the retrieved session.”h]”hŒ:Output; The new file descriptor for the retrieved session.”…”�”}”(hjîh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³jêh´K[hjëubah}”(h]”h ]”h"]”h$]”h&]”uh1jÕhjÏubeh}”(h]”h ]”h"]”h$]”h&]”uh1jµh³jêh´K[hj“ubj¶)�”}”(hŒ¬``name`` Input; A null-terminated string identifying the session to retrieve. The name must exactly match the name used when the session was created in the previous kernel.”h]”(j¼)�”}”(hŒ``name``”h]”jO)�”}”(hjh]”hŒname”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jNhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j»h³Œh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.h”h´K]hjubjÖ)�”}”(hhh]”hþ)�”}”(hŒ£Input; A null-terminated string identifying the session to retrieve. The name must exactly match the name used when the session was created in the previous kernel.”h]”hŒ£Input; A null-terminated string identifying the session to retrieve. The name must exactly match the name used when the session was created in the previous kernel.”…”�”}”(hj'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³Œh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.h”h´K\hj$ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÕhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jµh³j#h´K]hj“ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j°hjKubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jdhj’h²hh³j±h´Nubhþ)�”}”(hŒ**Description**”h]”j·)�”}”(hjQh]”hŒ Description”…”�”}”(hjSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j¶hjOubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³Œh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.h”h´Kahj’h²hubhþ)�”}”(hŒÅRetrieves a handle (a new file descriptor) for a preserved session by its name. This is the primary mechanism for a userspace agent to regain control of its preserved resources after a live update.”h]”hŒÅRetrieves a handle (a new file descriptor) for a preserved session by its name. This is the primary mechanism for a userspace agent to regain control of its preserved resources after a live update.”…”�”}”(hjgh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³Œh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.h”h´K^hj’h²hubhþ)�”}”(hX�The userspace application provides the null-terminated `name` of a session it created before the live update. If a preserved session with a matching name is found, the kernel instantiates it and returns a new file descriptor in the `fd` field. This new session FD can then be used for all file-specific operations, such as restoring individual file descriptors with LIVEUPDATE_SESSION_RETRIEVE_FD.”h]”(hŒ7The userspace application provides the null-terminated ”…”�”}”(hjvh²hh³Nh´NubhŒtitle_reference”“”)�”}”(hŒ`name`”h]”hŒname”…”�”}”(hj€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j~hjvubhŒ« of a session it created before the live update. If a preserved session with a matching name is found, the kernel instantiates it and returns a new file descriptor in the ”…”�”}”(hjvh²hh³Nh´Nubj)�”}”(hŒ`fd`”h]”hŒfd”…”�”}”(hj’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j~hjvubhŒ¡ field. This new session FD can then be used for all file-specific operations, such as restoring individual file descriptors with LIVEUPDATE_SESSION_RETRIEVE_FD.”…”�”}”(hjvh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hýh³Œh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.h”h´Kbhj’h²hubhþ)�”}”(hŒ»It is the responsibility of the userspace application to know the names of the sessions it needs to retrieve. If no session with the given name is found, the ioctl will fail with -ENOENT.”h]”hŒ»It is the responsibility of the userspace application to know the names of the sessions it needs to retrieve. If no session with the given name is found, the ioctl will fail with -ENOENT.”…”�”}”(hj«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³Œh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.h”h´Kihj’h²hubhþ)�”}”(hŒzThis ioctl can only be called on the main /dev/liveupdate device when the system is in the LIVEUPDATE_STATE_UPDATED state.”h]”hŒzThis ioctl can only be called on the main /dev/liveupdate device when the system is in the LIVEUPDATE_STATE_UPDATED state.”…”�”}”(hjºh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³Œh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.h”h´Kmhj’h²hubjÆ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÒŒ)liveupdate_session_preserve_fd (C struct)”Œ c.liveupdate_session_preserve_fd”hNt”auh1jÅhj’h²hh³j±h´Nubj×)�”}”(hhh]”(jÜ)�”}”(hŒliveupdate_session_preserve_fd”h]”jâ)�”}”(hŒ%struct liveupdate_session_preserve_fd”h]”(jè)�”}”(hjëh]”hŒstruct”…”�”}”(hjâh²hh³Nh´Nubah}”(h]”h ]”jôah"]”h$]”h&]”uh1jçhjÞh²hh³Œh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.h”h´Ksubjú)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjðh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jùhjÞh²hh³jïh´Ksubj )�”}”(hŒliveupdate_session_preserve_fd”h]”j)�”}”(hjÜh]”hŒliveupdate_session_preserve_fd”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjþubah}”(h]”h ]”(j#j$eh"]”h$]”h&]”hÅhÆuh1j hjÞh²hh³jïh´Ksubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj.ˆuh1jáj/j0hjÚh²hh³jïh´Ksubah}”(h]”jÕah ]”(j4j5eh"]”h$]”h&]”j9ˆj:)j;huh1jÛh³jïh´Kshj×h²hubj=)�”}”(hhh]”hþ)�”}”(hŒ%ioctl(LIVEUPDATE_SESSION_PRESERVE_FD)”h]”hŒ%ioctl(LIVEUPDATE_SESSION_PRESERVE_FD)”…”�”}”(hj$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³Œh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.h”h´K}hj!h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j<hj×h²hh³jïh´Ksubeh}”(h]”h ]”(jYŒstruct”eh"]”h$]”h&]”j^jYj_j<j`j<ja‰jb‰jc‰uh1jÖh²hhj’h³j±h´Nubje)�”}”(hXP**Definition**:: struct liveupdate_session_preserve_fd { __u32 size; __s32 fd; __aligned_u64 token; }; **Members** ``size`` Input; sizeof(struct liveupdate_session_preserve_fd) ``fd`` Input; The user-space file descriptor to be preserved. ``token`` Input; An opaque, unique token for preserved resource.”h]”(hþ)�”}”(hŒ**Definition**::”h]”(j·)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hjHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j¶hjDubhŒ:”…”�”}”(hjDh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hýh³Œh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.h”h´K�hj@ubjˆ)�”}”(hŒastruct liveupdate_session_preserve_fd { __u32 size; __s32 fd; __aligned_u64 token; };”h]”hŒastruct liveupdate_session_preserve_fd { __u32 size; __s32 fd; __aligned_u64 token; };”…”�”}”hjasbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j‡h³Œh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.h”h´Kƒhj@ubhþ)�”}”(hŒ **Members**”h]”j·)�”}”(hjrh]”hŒMembers”…”�”}”(hjth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j¶hjpubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³Œh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.h”h´K‰hj@ubj±)�”}”(hhh]”(j¶)�”}”(hŒ>``size`` Input; sizeof(struct liveupdate_session_preserve_fd) ”h]”(j¼)�”}”(hŒ``size``”h]”jO)�”}”(hj‘h]”hŒsize”…”�”}”(hj“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jNhj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j»h³Œh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.h”h´Khj‹ubjÖ)�”}”(hhh]”hþ)�”}”(hŒ4Input; sizeof(struct liveupdate_session_preserve_fd)”h]”hŒ4Input; sizeof(struct liveupdate_session_preserve_fd)”…”�”}”(hjªh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³j¦h´Khj§ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÕhj‹ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jµh³j¦h´Khjˆubj¶)�”}”(hŒ>``fd`` Input; The user-space file descriptor to be preserved. ”h]”(j¼)�”}”(hŒ``fd``”h]”jO)�”}”(hjÊh]”hŒfd”…”�”}”(hjÌh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jNhjÈubah}”(h]”h ]”h"]”h$]”h&]”uh1j»h³Œh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.h”h´K€hjÄubjÖ)�”}”(hhh]”hþ)�”}”(hŒ6Input; The user-space file descriptor to be preserved.”h]”hŒ6Input; The user-space file descriptor to be preserved.”…”�”}”(hjãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³jßh´K€hjàubah}”(h]”h ]”h"]”h$]”h&]”uh1jÕhjÄubeh}”(h]”h ]”h"]”h$]”h&]”uh1jµh³jßh´K€hjˆubj¶)�”}”(hŒ@``token`` Input; An opaque, unique token for preserved resource.”h]”(j¼)�”}”(hŒ ``token``”h]”jO)�”}”(hjh]”hŒtoken”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jNhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j»h³Œh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.h”h´K€hjýubjÖ)�”}”(hhh]”hþ)�”}”(hŒ6Input; An opaque, unique token for preserved resource.”h]”hŒ6Input; An opaque, unique token for preserved resource.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³Œh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.h”h´K�hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jÕhjýubeh}”(h]”h ]”h"]”h$]”h&]”uh1jµh³jh´K€hjˆubeh}”(h]”h ]”h"]”h$]”h&]”uh1j°hj@ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jdhj’h²hh³j±h´Nubhþ)�”}”(hŒ**Description**”h]”j·)�”}”(hjFh]”hŒ Description”…”�”}”(hjHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j¶hjDubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³Œh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.h”h´K„hj’h²hubhþ)�”}”(hŒ2Holds parameters for preserving a file descriptor.”h]”hŒ2Holds parameters for preserving a file descriptor.”…”�”}”(hj\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³Œh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.h”h´K�hj’h²hubhþ)�”}”(hXUser sets the **fd** field identifying the file descriptor to preserve (e.g., memfd, kvm, iommufd, VFIO). The kernel validates if this FD type and its dependencies are supported for preservation. If validation passes, the kernel marks the FD internally and *initiates the process* of preparing its state for saving. The actual snapshotting of the state typically occurs during the subsequent ``LIVEUPDATE_IOCTL_PREPARE`` execution phase, though some finalization might occur during freeze. On successful validation and initiation, the kernel uses the **token** field with an opaque identifier representing the resource being preserved. This token confirms the FD is targeted for preservation and is required for the subsequent ``LIVEUPDATE_SESSION_RETRIEVE_FD`` call after the live update.”h]”(hŒUser sets the ”…”�”}”(hjkh²hh³Nh´Nubj·)�”}”(hŒ**fd**”h]”hŒfd”…”�”}”(hjsh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j¶hjkubhŒí field identifying the file descriptor to preserve (e.g., memfd, kvm, iommufd, VFIO). The kernel validates if this FD type and its dependencies are supported for preservation. If validation passes, the kernel marks the FD internally and ”…”�”}”(hjkh²hh³Nh´NubhŒemphasis”“”)�”}”(hŒ*initiates the process*”h]”hŒinitiates the process”…”�”}”(hj‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j…hjkubhŒp of preparing its state for saving. The actual snapshotting of the state typically occurs during the subsequent ”…”�”}”(hjkh²hh³Nh´NubjO)�”}”(hŒ``LIVEUPDATE_IOCTL_PREPARE``”h]”hŒLIVEUPDATE_IOCTL_PREPARE”…”�”}”(hj™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jNhjkubhŒƒ execution phase, though some finalization might occur during freeze. On successful validation and initiation, the kernel uses the ”…”�”}”(hjkh²hh³Nh´Nubj·)�”}”(hŒ **token**”h]”hŒtoken”…”�”}”(hj«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j¶hjkubhŒ§ field with an opaque identifier representing the resource being preserved. This token confirms the FD is targeted for preservation and is required for the subsequent ”…”�”}”(hjkh²hh³Nh´NubjO)�”}”(hŒ"``LIVEUPDATE_SESSION_RETRIEVE_FD``”h]”hŒLIVEUPDATE_SESSION_RETRIEVE_FD”…”�”}”(hj½h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jNhjkubhŒ call after the live update.”…”�”}”(hjkh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hýh³Œh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.h”h´Kƒhj’h²hubhþ)�”}”(hŒ **Return**”h]”j·)�”}”(hjØh]”hŒReturn”…”�”}”(hjÚh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j¶hjÖubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³Œh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.h”h´K�hj’h²hubhþ)�”}”(hŒš0 on success (validation passed, preservation initiated), negative error code on failure (e.g., unsupported FD type, dependency issue, validation failed).”h]”hŒš0 on success (validation passed, preservation initiated), negative error code on failure (e.g., unsupported FD type, dependency issue, validation failed).”…”�”}”(hjîh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³Œh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.h”h´K�hj’h²hubjÆ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÒŒ)liveupdate_session_retrieve_fd (C struct)”Œ c.liveupdate_session_retrieve_fd”hNt”auh1jÅhj’h²hh³j±h´Nubj×)�”}”(hhh]”(jÜ)�”}”(hŒliveupdate_session_retrieve_fd”h]”jâ)�”}”(hŒ%struct liveupdate_session_retrieve_fd”h]”(jè)�”}”(hjëh]”hŒstruct”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jôah"]”h$]”h&]”uh1jçhj h²hh³Œh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.h”h´K—ubjú)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj$ h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jùhj h²hh³j# h´K—ubj )�”}”(hŒliveupdate_session_retrieve_fd”h]”j)�”}”(hj h]”hŒliveupdate_session_retrieve_fd”…”�”}”(hj6 h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj2 ubah}”(h]”h ]”(j#j$eh"]”h$]”h&]”hÅhÆuh1j hj h²hh³j# h´K—ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj.ˆuh1jáj/j0hj h²hh³j# h´K—ubah}”(h]”j ah ]”(j4j5eh"]”h$]”h&]”j9ˆj:)j;huh1jÛh³j# h´K—hj h²hubj=)�”}”(hhh]”hþ)�”}”(hŒ%ioctl(LIVEUPDATE_SESSION_RETRIEVE_FD)”h]”hŒ%ioctl(LIVEUPDATE_SESSION_RETRIEVE_FD)”…”�”}”(hjX h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³Œh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.h”h´KžhjU h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j<hj h²hh³j# h´K—ubeh}”(h]”h ]”(jYŒstruct”eh"]”h$]”h&]”j^jYj_jp j`jp ja‰jb‰jc‰uh1jÖh²hhj’h³j±h´Nubje)�”}”(hXu**Definition**:: struct liveupdate_session_retrieve_fd { __u32 size; __s32 fd; __aligned_u64 token; }; **Members** ``size`` Input; sizeof(struct liveupdate_session_retrieve_fd) ``fd`` Output; The new file descriptor representing the fully restored kernel resource. ``token`` Input; An opaque, token that was used to preserve the resource.”h]”(hþ)�”}”(hŒ**Definition**::”h]”(j·)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hj| h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j¶hjx ubhŒ:”…”�”}”(hjx h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hýh³Œh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.h”h´K¢hjt ubjˆ)�”}”(hŒastruct liveupdate_session_retrieve_fd { __u32 size; __s32 fd; __aligned_u64 token; };”h]”hŒastruct liveupdate_session_retrieve_fd { __u32 size; __s32 fd; __aligned_u64 token; };”…”�”}”hj• sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j‡h³Œh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.h”h´K¤hjt ubhþ)�”}”(hŒ **Members**”h]”j·)�”}”(hj¦ h]”hŒMembers”…”�”}”(hj¨ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j¶hj¤ ubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³Œh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.h”h´Kªhjt ubj±)�”}”(hhh]”(j¶)�”}”(hŒ>``size`` Input; sizeof(struct liveupdate_session_retrieve_fd) ”h]”(j¼)�”}”(hŒ``size``”h]”jO)�”}”(hjÅ h]”hŒsize”…”�”}”(hjÇ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jNhjà ubah}”(h]”h ]”h"]”h$]”h&]”uh1j»h³Œh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.h”h´K hj¿ ubjÖ)�”}”(hhh]”hþ)�”}”(hŒ4Input; sizeof(struct liveupdate_session_retrieve_fd)”h]”hŒ4Input; sizeof(struct liveupdate_session_retrieve_fd)”…”�”}”(hjÞ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³jÚ h´K hjÛ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÕhj¿ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jµh³jÚ h´K hj¼ ubj¶)�”}”(hŒX``fd`` Output; The new file descriptor representing the fully restored kernel resource. ”h]”(j¼)�”}”(hŒ``fd``”h]”jO)�”}”(hjþ h]”hŒfd”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jNhjü ubah}”(h]”h ]”h"]”h$]”h&]”uh1j»h³Œh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.h”h´K¢hjø ubjÖ)�”}”(hhh]”hþ)�”}”(hŒPOutput; The new file descriptor representing the fully restored kernel resource.”h]”hŒPOutput; The new file descriptor representing the fully restored kernel resource.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³Œh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.h”h´K¡hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÕhjø ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jµh³j h´K¢hj¼ ubj¶)�”}”(hŒI``token`` Input; An opaque, token that was used to preserve the resource.”h]”(j¼)�”}”(hŒ ``token``”h]”jO)�”}”(hj8 h]”hŒtoken”…”�”}”(hj: h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jNhj6 ubah}”(h]”h ]”h"]”h$]”h&]”uh1j»h³Œh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.h”h´K¢hj2 ubjÖ)�”}”(hhh]”hþ)�”}”(hŒ?Input; An opaque, token that was used to preserve the resource.”h]”hŒ?Input; An opaque, token that was used to preserve the resource.”…”�”}”(hjQ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³Œh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.h”h´K£hjN ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÕhj2 ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jµh³jM h´K¢hj¼ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j°hjt ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jdhj’h²hh³j±h´Nubhþ)�”}”(hŒ**Description**”h]”j·)�”}”(hj{ h]”hŒ Description”…”�”}”(hj} h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j¶hjy ubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³Œh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.h”h´K¦hj’h²hubhþ)�”}”(hŒ0Retrieve a previously preserved file descriptor.”h]”hŒ0Retrieve a previously preserved file descriptor.”…”�”}”(hj‘ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³Œh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.h”h´K£hj’h²hubhþ)�”}”(hXTUser sets the **token** field to the value obtained from a successful ``LIVEUPDATE_IOCTL_FD_PRESERVE`` call before the live update. On success, the kernel restores the state (saved during the PREPARE/FREEZE phases) associated with the token and populates the **fd** field with a new file descriptor referencing the restored resource in the current (new) kernel. This operation must be performed *before* signaling completion via ``LIVEUPDATE_IOCTL_FINISH``. If a retrieve of a token fails, subsequent attempts to retrieve the token fail with the same error code. Failed retrieves are not retried.”h]”(hŒUser sets the ”…”�”}”(hj  h²hh³Nh´Nubj·)�”}”(hŒ **token**”h]”hŒtoken”…”�”}”(hj¨ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j¶hj  ubhŒ/ field to the value obtained from a successful ”…”�”}”(hj  h²hh³Nh´NubjO)�”}”(hŒ ``LIVEUPDATE_IOCTL_FD_PRESERVE``”h]”hŒLIVEUPDATE_IOCTL_FD_PRESERVE”…”�”}”(hjº h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jNhj  ubhŒ� call before the live update. On success, the kernel restores the state (saved during the PREPARE/FREEZE phases) associated with the token and populates the ”…”�”}”(hj  h²hh³Nh´Nubj·)�”}”(hŒ**fd**”h]”hŒfd”…”�”}”(hjÌ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j¶hj  ubhŒ‚ field with a new file descriptor referencing the restored resource in the current (new) kernel. This operation must be performed ”…”�”}”(hj  h²hh³Nh´Nubj†)�”}”(hŒ*before*”h]”hŒbefore”…”�”}”(hjÞ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j…hj  ubhŒ signaling completion via ”…”�”}”(hj  h²hh³Nh´NubjO)�”}”(hŒ``LIVEUPDATE_IOCTL_FINISH``”h]”hŒLIVEUPDATE_IOCTL_FINISH”…”�”}”(hjð h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jNhj  ubhŒŒ. If a retrieve of a token fails, subsequent attempts to retrieve the token fail with the same error code. Failed retrieves are not retried.”…”�”}”(hj  h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hýh³Œh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.h”h´K¥hj’h²hubhþ)�”}”(hŒ **Return**”h]”j·)�”}”(hj h]”hŒReturn”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j¶hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³Œh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.h”h´K¯hj’h²hubhþ)�”}”(hŒC0 on success, negative error code on failure (e.g., invalid token).”h]”hŒC0 on success, negative error code on failure (e.g., invalid token).”…”�”}”(hj! h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³Œh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.h”h´K°hj’h²hubjÆ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÒŒ$liveupdate_session_finish (C struct)”Œc.liveupdate_session_finish”hNt”auh1jÅhj’h²hh³j±h´Nubj×)�”}”(hhh]”(jÜ)�”}”(hŒliveupdate_session_finish”h]”jâ)�”}”(hŒ struct liveupdate_session_finish”h]”(jè)�”}”(hjëh]”hŒstruct”…”�”}”(hjI h²hh³Nh´Nubah}”(h]”h ]”jôah"]”h$]”h&]”uh1jçhjE h²hh³Œh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.h”h´Kµubjú)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjW h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jùhjE h²hh³jV h´Kµubj )�”}”(hŒliveupdate_session_finish”h]”j)�”}”(hjC h]”hŒliveupdate_session_finish”…”�”}”(hji h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhje ubah}”(h]”h ]”(j#j$eh"]”h$]”h&]”hÅhÆuh1j hjE h²hh³jV h´Kµubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj.ˆuh1jáj/j0hjA h²hh³jV h´Kµubah}”(h]”j< ah ]”(j4j5eh"]”h$]”h&]”j9ˆj:)j;huh1jÛh³jV h´Kµhj> h²hubj=)�”}”(hhh]”hþ)�”}”(hŒ ioctl(LIVEUPDATE_SESSION_FINISH)”h]”hŒ ioctl(LIVEUPDATE_SESSION_FINISH)”…”�”}”(hj‹ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³Œh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.h”h´K¼hjˆ h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j<hj> h²hh³jV h´Kµubeh}”(h]”h ]”(jYŒstruct”eh"]”h$]”h&]”j^jYj_j£ j`j£ ja‰jb‰jc‰uh1jÖh²hhj’h³j±h´Nubje)�”}”(hŒê**Definition**:: struct liveupdate_session_finish { __u32 size; __u32 reserved; }; **Members** ``size`` Input; sizeof(struct liveupdate_session_finish) ``reserved`` Input; Must be zero. Reserved for future use.”h]”(hþ)�”}”(hŒ**Definition**::”h]”(j·)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hj¯ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j¶hj« ubhŒ:”…”�”}”(hj« h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hýh³Œh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.h”h´KÀhj§ ubjˆ)�”}”(hŒIstruct liveupdate_session_finish { __u32 size; __u32 reserved; };”h]”hŒIstruct liveupdate_session_finish { __u32 size; __u32 reserved; };”…”�”}”hjÈ sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j‡h³Œh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.h”h´KÂhj§ ubhþ)�”}”(hŒ **Members**”h]”j·)�”}”(hjÙ h]”hŒMembers”…”�”}”(hjÛ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j¶hj× ubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³Œh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.h”h´KÇhj§ ubj±)�”}”(hhh]”(j¶)�”}”(hŒ9``size`` Input; sizeof(struct liveupdate_session_finish) ”h]”(j¼)�”}”(hŒ``size``”h]”jO)�”}”(hjø h]”hŒsize”…”�”}”(hjú h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jNhjö ubah}”(h]”h ]”h"]”h$]”h&]”uh1j»h³Œh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.h”h´K¾hjò ubjÖ)�”}”(hhh]”hþ)�”}”(hŒ/Input; sizeof(struct liveupdate_session_finish)”h]”hŒ/Input; sizeof(struct liveupdate_session_finish)”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³j h´K¾hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÕhjò ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jµh³j h´K¾hjï ubj¶)�”}”(hŒ:``reserved`` Input; Must be zero. Reserved for future use.”h]”(j¼)�”}”(hŒ ``reserved``”h]”jO)�”}”(hj1 h]”hŒreserved”…”�”}”(hj3 h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jNhj/ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j»h³Œh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.h”h´K¾hj+ ubjÖ)�”}”(hhh]”hþ)�”}”(hŒ-Input; Must be zero. Reserved for future use.”h]”hŒ-Input; Must be zero. Reserved for future use.”…”�”}”(hjJ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³Œh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.h”h´K¿hjG ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÕhj+ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jµh³jF h´K¾hjï ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j°hj§ ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jdhj’h²hh³j±h´Nubhþ)�”}”(hŒ**Description**”h]”j·)�”}”(hjt h]”hŒ Description”…”�”}”(hjv h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j¶hjr ubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³Œh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.h”h´KÂhj’h²hubhþ)�”}”(hŒ±Signals the completion of the restoration process for a retrieved session. This is the final operation that should be performed on a session file descriptor after a live update.”h]”hŒ±Signals the completion of the restoration process for a retrieved session. This is the final operation that should be performed on a session file descriptor after a live update.”…”�”}”(hjŠ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³Œh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.h”h´K¿hj’h²hubhþ)�”}”(hŒÚThis ioctl must be called once all required file descriptors for the session have been successfully retrieved (using ``LIVEUPDATE_SESSION_RETRIEVE_FD``) and are fully restored from the userspace and kernel perspective.”h]”(hŒuThis ioctl must be called once all required file descriptors for the session have been successfully retrieved (using ”…”�”}”(hj™ h²hh³Nh´NubjO)�”}”(hŒ"``LIVEUPDATE_SESSION_RETRIEVE_FD``”h]”hŒLIVEUPDATE_SESSION_RETRIEVE_FD”…”�”}”(hj¡ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jNhj™ ubhŒC) and are fully restored from the userspace and kernel perspective.”…”�”}”(hj™ h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hýh³Œh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.h”h´KÃhj’h²hubhþ)�”}”(hŒäUpon success, the kernel releases its ownership of the preserved resources associated with this session. This allows internal resources to be freed, typically by decrementing reference counts on the underlying preserved objects.”h]”hŒäUpon success, the kernel releases its ownership of the preserved resources associated with this session. This allows internal resources to be freed, typically by decrementing reference counts on the underlying preserved objects.”…”�”}”(hjº h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³Œh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.h”h´KÇhj’h²hubhþ)�”}”(hŒ·If this operation fails, the resources remain preserved in memory. Userspace may attempt to call finish again. The resources will otherwise be reset during the next live update cycle.”h]”hŒ·If this operation fails, the resources remain preserved in memory. Userspace may attempt to call finish again. The resources will otherwise be reset during the next live update cycle.”…”�”}”(hjÉ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³Œh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.h”h´KÌhj’h²hubhþ)�”}”(hŒ **Return**”h]”j·)�”}”(hjÚ h]”hŒReturn”…”�”}”(hjÜ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j¶hjØ ubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³Œh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.h”h´KÐhj’h²hubhþ)�”}”(hŒ-0 on success, negative error code on failure.”h]”hŒ-0 on success, negative error code on failure.”…”�”}”(hjð h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³Œh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.h”h´KÑhj’h²hubjÆ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÒŒ&liveupdate_session_get_name (C struct)”Œc.liveupdate_session_get_name”hNt”auh1jÅhj’h²hh³j±h´Nubj×)�”}”(hhh]”(jÜ)�”}”(hŒliveupdate_session_get_name”h]”jâ)�”}”(hŒ"struct liveupdate_session_get_name”h]”(jè)�”}”(hjëh]”hŒstruct”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jôah"]”h$]”h&]”uh1jçhj h²hh³Œh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.h”h´KÖubjú)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj& h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jùhj h²hh³j% h´KÖubj )�”}”(hŒliveupdate_session_get_name”h]”j)�”}”(hj h]”hŒliveupdate_session_get_name”…”�”}”(hj8 h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj4 ubah}”(h]”h ]”(j#j$eh"]”h$]”h&]”hÅhÆuh1j hj h²hh³j% h´KÖubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj.ˆuh1jáj/j0hj h²hh³j% h´KÖubah}”(h]”j ah ]”(j4j5eh"]”h$]”h&]”j9ˆj:)j;huh1jÛh³j% h´KÖhj h²hubj=)�”}”(hhh]”hþ)�”}”(hŒ"ioctl(LIVEUPDATE_SESSION_GET_NAME)”h]”hŒ"ioctl(LIVEUPDATE_SESSION_GET_NAME)”…”�”}”(hjZ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³Œh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.h”h´KÜhjW h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j<hj h²hh³j% h´KÖubeh}”(h]”h ]”(jYŒstruct”eh"]”h$]”h&]”j^jYj_jr j`jr ja‰jb‰jc‰uh1jÖh²hhj’h³j±h´Nubje)�”}”(hXh**Definition**:: struct liveupdate_session_get_name { __u32 size; __u32 reserved; __u8 name[LIVEUPDATE_SESSION_NAME_LENGTH]; }; **Members** ``size`` Input; sizeof(struct liveupdate_session_get_name) ``reserved`` Input; Must be zero. Reserved for future use. ``name`` Output; A null-terminated string with the full session name.”h]”(hþ)�”}”(hŒ**Definition**::”h]”(j·)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hj~ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j¶hjz ubhŒ:”…”�”}”(hjz h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hýh³Œh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.h”h´Kàhjv ubjˆ)�”}”(hŒzstruct liveupdate_session_get_name { __u32 size; __u32 reserved; __u8 name[LIVEUPDATE_SESSION_NAME_LENGTH]; };”h]”hŒzstruct liveupdate_session_get_name { __u32 size; __u32 reserved; __u8 name[LIVEUPDATE_SESSION_NAME_LENGTH]; };”…”�”}”hj— sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j‡h³Œh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.h”h´Kâhjv ubhþ)�”}”(hŒ **Members**”h]”j·)�”}”(hj¨ h]”hŒMembers”…”�”}”(hjª h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j¶hj¦ ubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³Œh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.h”h´Kèhjv ubj±)�”}”(hhh]”(j¶)�”}”(hŒ;``size`` Input; sizeof(struct liveupdate_session_get_name) ”h]”(j¼)�”}”(hŒ``size``”h]”jO)�”}”(hjÇ h]”hŒsize”…”�”}”(hjÉ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jNhjÅ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j»h³Œh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.h”h´KÞhjÁ ubjÖ)�”}”(hhh]”hþ)�”}”(hŒ1Input; sizeof(struct liveupdate_session_get_name)”h]”hŒ1Input; sizeof(struct liveupdate_session_get_name)”…”�”}”(hjà h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³jÜ h´KÞhjÝ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÕhjÁ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jµh³jÜ h´KÞhj¾ ubj¶)�”}”(hŒ;``reserved`` Input; Must be zero. Reserved for future use. ”h]”(j¼)�”}”(hŒ ``reserved``”h]”jO)�”}”(hjh]”hŒreserved”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jNhjþ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j»h³Œh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.h”h´Kßhjú ubjÖ)�”}”(hhh]”hþ)�”}”(hŒ-Input; Must be zero. Reserved for future use.”h]”hŒ-Input; Must be zero. Reserved for future use.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³jh´Kßhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jÕhjú ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jµh³jh´Kßhj¾ ubj¶)�”}”(hŒE``name`` Output; A null-terminated string with the full session name.”h]”(j¼)�”}”(hŒ``name``”h]”jO)�”}”(hj9h]”hŒname”…”�”}”(hj;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jNhj7ubah}”(h]”h ]”h"]”h$]”h&]”uh1j»h³Œh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.h”h´Kßhj3ubjÖ)�”}”(hhh]”hþ)�”}”(hŒ`_”h]”hþ)�”}”(hjh]”(j)�”}”(hjh]”hŒFile Descriptor Store”…”�”}”(hj„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”ŒFile Descriptor Store”Œrefuri”Œ)https://systemd.io/FILE_DESCRIPTOR_STORE/”uh1jhj�ubj¤)�”}”(hŒ, ”h]”h}”(h]”Œfile-descriptor-store”ah ]”h"]”Œfile descriptor store”ah$]”h&]”Œrefuri”j”uh1j£Œ referenced”Khj�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hýh³hÇh´K*hj}ubah}”(h]”h ]”h"]”h$]”h&]”uh1júhjzh²hh³hÇh´Nubjû)�”}”(hŒž`systemd.service(5) FileDescriptorStorePreserve= `_”h]”hþ)�”}”(hŒž`systemd.service(5) FileDescriptorStorePreserve= `_”h]”(j)�”}”(hjµh]”hŒ/systemd.service(5) FileDescriptorStorePreserve=”…”�”}”(hj·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”Œ/systemd.service(5) FileDescriptorStorePreserve=”j“Œihttps://www.freedesktop.org/software/systemd/man/latest/systemd.service.html#FileDescriptorStorePreserve=”uh1jhj³ubj¤)�”}”(hŒl ”h]”h}”(h]”Œ-systemd-service-5-filedescriptorstorepreserve”ah ]”h"]”Œ/systemd.service(5) filedescriptorstorepreserve=”ah$]”h&]”Œrefuri”jÆuh1j£j¢Khj³ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hýh³hÇh´K+hj¯ubah}”(h]”h ]”h"]”h$]”h&]”uh1júhjzh²hh³hÇh´Nubjû)�”}”(h•dŒs`sd_pid_notify_with_fds(3) `_ ”h]”hþ)�”}”(hŒr`sd_pid_notify_with_fds(3) `_”h]”(j)�”}”(hjæh]”hŒsd_pid_notify_with_fds(3)”…”�”}”(hjèh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”Œsd_pid_notify_with_fds(3)”j“ŒShttps://www.freedesktop.org/software/systemd/man/latest/sd_pid_notify_with_fds.html”uh1jhjäubj¤)�”}”(hŒV ”h]”h}”(h]”Œsd-pid-notify-with-fds-3”ah ]”h"]”Œsd_pid_notify_with_fds(3)”ah$]”h&]”Œrefuri”j÷uh1j£j¢Khjäubeh}”(h]”h ]”h"]”h$]”h&]”uh1hýh³hÇh´K-hjàubah}”(h]”h ]”h"]”h$]”h&]”uh1júhjzh²hh³hÇh´Nubeh}”(h]”h ]”h"]”h$]”h&]”j®j¯uh1jõh³hÇh´K*hj÷h²hubeh}”(h]”Œuserspace-integration”ah ]”h"]”Œuserspace integration”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´KubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒSee Also”h]”hŒSee Also”…”�”}”(hj"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjh²hh³hÇh´K1ubjö)�”}”(hhh]”jû)�”}”(hŒ6:doc:`Live Update Orchestrator `”h]”hþ)�”}”(hj5h]”h)�”}”(hj5h]”hŒinline”“”)�”}”(hj5h]”hŒLive Update Orchestrator”…”�”}”(hj?h²hh³Nh´Nubah}”(h]”h ]”(Œxref”Œstd”Œstd-doc”eh"]”h$]”h&]”uh1j=hj:ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”Œuserspace-api/liveupdate”Œ refdomain”jJŒreftype”Œdoc”Œ refexplicit”ˆŒrefwarn”ˆŒ reftarget”Œ/core-api/liveupdate”uh1hh³hÇh´K3hj7ubah}”(h]”h ]”h"]”h$]”h&]”uh1hýh³hÇh´K3hj3ubah}”(h]”h ]”h"]”h$]”h&]”uh1júhj0h²hh³hÇh´Nubah}”(h]”h ]”h"]”h$]”h&]”j®j¯uh1jõh³hÇh´K3hjh²hubeh}”(h]”Œsee-also”ah ]”h"]”Œsee also”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´K1ubeh}”(h]”Œlive-update-uapi”ah ]”h"]”Œlive update uapi”ah$]”h&]”uh1hÈhhh²hh³hÇh´Kubeh}”(h]”h ]”h"]”h$]”h&]”Œsource”hÇuh1hŒcurrent_source”NŒ current_line”NŒsettings”Œdocutils.frontend”ŒValues”“”)�”}”(hÍNŒ generator”NŒ datestamp”NŒ source_link”NŒ source_url”NŒ toc_backlinks”Œentry”Œfootnote_backlinks”KŒ sectnum_xform”KŒstrip_comments”NŒstrip_elements_with_classes”NŒ strip_classes”NŒ report_level”KŒ halt_level”KŒexit_status_level”KŒdebug”NŒwarning_stream”NŒ traceback”ˆŒinput_encoding”Œ utf-8-sig”Œinput_encoding_error_handler”Œstrict”Œoutput_encoding”Œutf-8”Œoutput_encoding_error_handler”j£Œerror_encoding”Œutf-8”Œerror_encoding_error_handler”Œbackslashreplace”Œ language_code”Œen”Œrecord_dependencies”NŒconfig”NŒ id_prefix”hŒauto_id_prefix”Œid”Œ dump_settings”NŒdump_internals”NŒdump_transforms”NŒdump_pseudo_xml”NŒexpose_internals”NŒstrict_visitor”NŒ_disable_config”NŒ_source”hÇŒ _destination”NŒ _config_files”]”Œ7/var/lib/git/docbuild/linux/Documentation/docutils.conf”aŒfile_insertion_enabled”ˆŒ raw_enabled”KŒline_length_limit”M'Œpep_references”NŒ pep_base_url”Œhttps://peps.python.org/”Œpep_file_url_template”Œpep-%04d”Œrfc_references”NŒ rfc_base_url”Œ&https://datatracker.ietf.org/doc/html/”Œ tab_width”KŒtrim_footnote_reference_space”‰Œsyntax_highlight”Œlong”Œ smart_quotes”ˆŒsmartquotes_locales”]”Œcharacter_level_inline_markup”‰Œdoctitle_xform”‰Œ docinfo_xform”KŒsectsubtitle_xform”‰Œ image_loading”Œlink”Œembed_stylesheet”‰Œcloak_email_addresses”ˆŒsection_self_link”‰Œenv”NubŒreporter”NŒindirect_targets”]”Œsubstitution_defs”}”Œsubstitution_names”}”Œrefnames”}”Œrefids”}”j°]”j¥asŒnameids”}”(j}jzj�jŒjÍjÊjÉj°jôjñjjjžj›jÐjÍjjþjujruŒ nametypes”}”(j}‰j�‰j͉jɈjô‰j‰jžˆjЈjˆju‰uh}”(jzhÊjŒj5jÊj’j°j²jÔjÝjàjåjÕjÚj j j< jA j j jñjÐjj÷j›j•jÍjÇjþjøjrjuŒ footnote_refs”}”Œ citation_refs”}”Œ autofootnotes”]”Œautofootnote_refs”]”Œsymbol_footnotes”]”Œsymbol_footnote_refs”]”Œ footnotes”]”Œ citations”]”Œautofootnote_start”KŒsymbol_footnote_start”KŒ id_counter”Œ collections”ŒCounter”“”}”…”R”Œparse_messages”]”Œtransform_messages”]”hŒsystem_message”“”)�”}”(hhh]”hþ)�”}”(hhh]”hŒ:Hyperlink target "general-ioctl-format" is not referenced.”…”�”}”hj sbah}”(h]”h ]”h"]”h$]”h&]”uh1hýhj ubah}”(h]”h ]”h"]”h$]”h&]”Œlevel”KŒtype”ŒINFO”Œsource”j±Œline”Kuh1jubaŒ transformer”NŒ include_log”]”Œ decoration”Nh²hub.