[sphinx.addnodesdocument)}( rawsourcechildren]( translations LanguagesNode)}(hhh](h pending_xref)}(hhh]docutils.nodesTextChinese (Simplified)}parenthsba attributes}(ids]classes]names]dupnames]backrefs] refdomainstdreftypedoc reftarget,/translations/zh_CN/userspace-api/liveupdatemodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget,/translations/zh_TW/userspace-api/liveupdatemodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget,/translations/it_IT/userspace-api/liveupdatemodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget,/translations/ja_JP/userspace-api/liveupdatemodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget,/translations/ko_KR/userspace-api/liveupdatemodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget,/translations/sp_SP/userspace-api/liveupdatemodnameN classnameN refexplicituh1hhh ubeh}(h]h ]h"]h$]h&]current_languageEnglishuh1h hh _documenthsourceNlineNubhcomment)}(h SPDX-License-Identifier: GPL-2.0h]h SPDX-License-Identifier: GPL-2.0}hhsbah}(h]h ]h"]h$]h&] xml:spacepreserveuh1hhhhhhF/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate.rsthKubhsection)}(hhh](htitle)}(hLive Update uAPIh]hLive Update uAPI}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhhhKubh field_list)}(hhh]hfield)}(hhh](h field_name)}(hAuthorh]hAuthor}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhKubh field_body)}(h+Pasha Tatashin h]h paragraph)}(h*Pasha Tatashin h](hPasha Tatashin <}(hhhhhNhNubh reference)}(hpasha.tatashin@soleen.comh]hpasha.tatashin@soleen.com}(hhhhhNhNubah}(h]h ]h"]h$]h&]refuri mailto:pasha.tatashin@soleen.comuh1hhhubh>}(hhhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhhubah}(h]h ]h"]h$]h&]uh1hhhubeh}(h]h ]h"]h$]h&]uh1hhhhKhhhhubah}(h]h ]h"]h$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(hioctl interfaceh]hioctl interface}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj!hhhhhK 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](hrThe IOCTL user-space control interface for the LUO subsystem. It registers a character device, typically found at }(hj2hhhNhNubhliteral)}(h``/dev/liveupdate``h]h/dev/liveupdate}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1j:hj2ubh, which allows a userspace agent to manage the LUO state machine and its associated resources, such as preservable file descriptors.}(hj2hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:10: ./kernel/liveupdate/luo_core.chMhj!hhubh)}(hXTo 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](hTo ensure that the state machine is controlled by a single entity, access to this device is exclusive: only one process is permitted to have }(hjUhhhNhNubj;)}(h``/dev/liveupdate``h]h/dev/liveupdate}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j:hjUubh 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.}(hjUhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhe/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:10: ./kernel/liveupdate/luo_core.chMhj!hhubeh}(h]ioctl-interfaceah ]h"]ioctl interfaceah$]h&]uh1hhhhhhhhK ubh)}(hhh](h)}(h ioctl uAPIh]h ioctl uAPI}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj~hhhhhKubhtarget)}(h.. _General ioctl format:h]h}(h]h ]h"]h$]h&]refidgeneral-ioctl-formatuh1jhKhj~hhhh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.hubh)}(h**General ioctl format**h]hstrong)}(hjh]hGeneral ioctl format}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]jah ]h"]general ioctl formatah$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.hhKhj~hhexpect_referenced_by_name}jjsexpect_referenced_by_id}jjsubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.hhKhj~hhubh)}(h0ioctls use a standard meaning for common errnos:h]h0ioctls use a standard meaning for common errnos:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.hhKhj~hhubh 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)}(h7ENOTTY: The IOCTL number itself is not supported at allh]h)}(hjh]h7ENOTTY: The IOCTL number itself is not supported at all}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.hhKhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hwE2BIG: The IOCTL number is supported, but the provided structure has non-zero in a part the kernel does not understand.h]h)}(hwE2BIG: The IOCTL number is supported, but the provided structure has non-zero in a part the kernel does not understand.h]hwE2BIG: The IOCTL number is supported, but the provided structure has non-zero in a part the kernel does not understand.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.hhKhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hEOPNOTSUPP: 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)}(hEOPNOTSUPP: 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]hEOPNOTSUPP: The IOCTL number is supported, and the structure is understood, however a known field has a value the kernel does not understand or support.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.hhKhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hNEINVAL: Everything about the IOCTL was understood, but a field is not correct.h]h)}(hNEINVAL: Everything about the IOCTL was understood, but a field is not correct.h]hNEINVAL: Everything about the IOCTL was understood, but a field is not correct.}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.hhK hj2ubah}(h]h ]h"]h$]h&]uh1jhjubj)}(h(ENOENT: A provided token does not exist.h]h)}(hjMh]h(ENOENT: A provided token does not exist.}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.hhK"hjKubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hENOMEM: Out of memory.h]h)}(hjeh]hENOMEM: Out of memory.}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.hhK#hjcubah}(h]h ]h"]h$]h&]uh1jhjubj)}(h#EOVERFLOW: Mathematics overflowed. h]h)}(h"EOVERFLOW: Mathematics overflowed.h]h"EOVERFLOW: Mathematics overflowed.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.hhK$hj{ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]bullet-uh1jhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjhKhj~hhubh)}(h5As well as additional errnos, within specific ioctls.h]h5As well as additional errnos, within specific ioctls.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.hhK&hj~hhubhindex)}(hhh]h}(h]h ]h"]h$]h&]entries](single*liveupdate_ioctl_create_session (C struct)!c.liveupdate_ioctl_create_sessionhNtauh1jhj~hhhjhNubhdesc)}(hhh](hdesc_signature)}(hliveupdate_ioctl_create_sessionh]hdesc_signature_line)}(h&struct liveupdate_ioctl_create_sessionh](hdesc_sig_keyword)}(hstructh]hstruct}(hjhhhNhNubah}(h]h ]kah"]h$]h&]uh1jhjhhhh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.hhK+ubhdesc_sig_space)}(h h]h }(hjhhhNhNubah}(h]h ]wah"]h$]h&]uh1jhjhhhjhK+ubh desc_name)}(hliveupdate_ioctl_create_sessionh]h desc_sig_name)}(hjh]hliveupdate_ioctl_create_session}(hjhhhNhNubah}(h]h ]nah"]h$]h&]uh1jhjubah}(h]h ](sig-namedescnameeh"]h$]h&]hhuh1jhjhhhjhK+ubeh}(h]h ]h"]h$]h&]hh add_permalinkuh1jsphinx_line_type declaratorhjhhhjhK+ubah}(h]jah ](sig sig-objecteh"]h$]h&] is_multiline _toc_parts) _toc_namehuh1jhjhK+hjhhubh desc_content)}(hhh]h)}(h&ioctl(LIVEUPDATE_IOCTL_CREATE_SESSION)h]h&ioctl(LIVEUPDATE_IOCTL_CREATE_SESSION)}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.hhKAhj*hhubah}(h]h ]h"]h$]h&]uh1j(hjhhhjhK+ubeh}(h]h ](cstructeh"]h$]h&]domainjEobjtypejFdesctypejFnoindex noindexentrynocontentsentryuh1jhhhj~hjhNubh 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}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubh:}(hjVhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.hhKEhjRubh literal_block)}(hxstruct liveupdate_ioctl_create_session { __u32 size; __s32 fd; __u8 name[LIVEUPDATE_SESSION_NAME_LENGTH]; };h]hxstruct liveupdate_ioctl_create_session { __u32 size; __s32 fd; __u8 name[LIVEUPDATE_SESSION_NAME_LENGTH]; };}hjusbah}(h]h ]h"]h$]h&]hhuh1jshh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.hhKGhjRubh)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.hhKMhjRubhdefinition_list)}(hhh](hdefinition_list_item)}(h?``size`` Input; sizeof(struct liveupdate_ioctl_create_session) h](hterm)}(h``size``h]j;)}(hjh]hsize}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j:hjubah}(h]h ]h"]h$]h&]uh1jhh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.hhKChjubh definition)}(hhh]h)}(h5Input; sizeof(struct liveupdate_ioctl_create_session)h]h5Input; sizeof(struct liveupdate_ioctl_create_session)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKChjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKChjubj)}(h@``fd`` Output; The new file descriptor for the created session. h](j)}(h``fd``h]j;)}(hjh]hfd}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j:hjubah}(h]h ]h"]h$]h&]uh1jhh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.hhKDhjubj)}(hhh]h)}(h8Output; The new file descriptor for the created session.h]h8Output; The new file descriptor for the created session.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKDhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKDhjubj)}(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]j;)}(hjh]hname}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1j:hjubah}(h]h ]h"]h$]h&]uh1jhh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.hhKFhjubj)}(hhh]h)}(hInput; A null-terminated string for the session name, max length ``LIVEUPDATE_SESSION_NAME_LENGTH`` including termination character.h](hAInput; A null-terminated string for the session name, max length }(hj8hhhNhNubj;)}(h"``LIVEUPDATE_SESSION_NAME_LENGTH``h]hLIVEUPDATE_SESSION_NAME_LENGTH}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1j:hj8ubh! including termination character.}(hj8hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.hhKEhj5ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj4hKFhjubeh}(h]h ]h"]h$]h&]uh1jhjRubeh}(h]h ] kernelindentah"]h$]h&]uh1jPhj~hhhjhNubh)}(h**Description**h]j)}(hjth]h Description}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.hhKJhj~hhubh)}(hCreates a new live update session for managing preserved resources. This ioctl can only be called on the main /dev/liveupdate device.h]hCreates a new live update session for managing preserved resources. This ioctl can only be called on the main /dev/liveupdate device.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.hhKGhj~hhubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.hhKJhj~hhubh)}(h-0 on success, negative error code on failure.h]h-0 on success, negative error code on failure.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.hhKKhj~hhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j,liveupdate_ioctl_retrieve_session (C struct)#c.liveupdate_ioctl_retrieve_sessionhNtauh1jhj~hhhjhNubj)}(hhh](j)}(h!liveupdate_ioctl_retrieve_sessionh]j)}(h(struct liveupdate_ioctl_retrieve_sessionh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.hhKPubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKPubj)}(h!liveupdate_ioctl_retrieve_sessionh]j)}(hjh]h!liveupdate_ioctl_retrieve_session}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]hhuh1jhjhhhjhKPubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjhhhjhKPubah}(h]jah ](j j!eh"]h$]h&]j%j&)j'huh1jhjhKPhjhhubj))}(hhh]h)}(h(ioctl(LIVEUPDATE_IOCTL_RETRIEVE_SESSION)h]h(ioctl(LIVEUPDATE_IOCTL_RETRIEVE_SESSION)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.hhKWhjhhubah}(h]h ]h"]h$]h&]uh1j(hjhhhjhKPubeh}(h]h ](jEstructeh"]h$]h&]jJjEjKj3jLj3jMjNjOuh1jhhhj~hjhNubjQ)}(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}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubh:}(hj;hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.hhK[hj7ubjt)}(hzstruct liveupdate_ioctl_retrieve_session { __u32 size; __s32 fd; __u8 name[LIVEUPDATE_SESSION_NAME_LENGTH]; };h]hzstruct liveupdate_ioctl_retrieve_session { __u32 size; __s32 fd; __u8 name[LIVEUPDATE_SESSION_NAME_LENGTH]; };}hjXsbah}(h]h ]h"]h$]h&]hhuh1jshh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.hhK]hj7ubh)}(h **Members**h]j)}(hjih]hMembers}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjgubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.hhKchj7ubj)}(hhh](j)}(hA``size`` Input; sizeof(struct liveupdate_ioctl_retrieve_session) h](j)}(h``size``h]j;)}(hjh]hsize}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j:hjubah}(h]h ]h"]h$]h&]uh1jhh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.hhKYhjubj)}(hhh]h)}(h7Input; sizeof(struct liveupdate_ioctl_retrieve_session)h]h7Input; sizeof(struct liveupdate_ioctl_retrieve_session)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKYhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKYhjubj)}(hB``fd`` Output; The new file descriptor for the retrieved session. h](j)}(h``fd``h]j;)}(hjh]hfd}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j:hjubah}(h]h ]h"]h$]h&]uh1jhh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.hhKZhjubj)}(hhh]h)}(h:Output; The new file descriptor for the retrieved session.h]h:Output; The new file descriptor for the retrieved session.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKZhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKZhjubj)}(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]j;)}(hjh]hname}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j:hjubah}(h]h ]h"]h$]h&]uh1jhh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.hhK\hjubj)}(hhh]h)}(hInput; 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]hInput; 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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.hhK[hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK\hjubeh}(h]h ]h"]h$]h&]uh1jhj7ubeh}(h]h ] kernelindentah"]h$]h&]uh1jPhj~hhhjhNubh)}(h**Description**h]j)}(hj=h]h Description}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.hhK`hj~hhubh)}(hRetrieves 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]hRetrieves 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.}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.hhK]hj~hhubh)}(hXThe 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](h7The userspace application provides the null-terminated }(hjbhhhNhNubhtitle_reference)}(h`name`h]hname}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjbubh 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 }(hjbhhhNhNubjk)}(h`fd`h]hfd}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjbubh 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.}(hjbhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.hhKahj~hhubh)}(hIt 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]hIt 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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.hhKhhj~hhubh)}(hzThis ioctl can only be called on the main /dev/liveupdate device when the system is in the LIVEUPDATE_STATE_UPDATED state.h]hzThis ioctl can only be called on the main /dev/liveupdate device when the system is in the LIVEUPDATE_STATE_UPDATED state.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.hhKlhj~hhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j)liveupdate_session_preserve_fd (C struct) c.liveupdate_session_preserve_fdhNtauh1jhj~hhhjhNubj)}(hhh](j)}(hliveupdate_session_preserve_fdh]j)}(h%struct liveupdate_session_preserve_fdh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.hhKrubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKrubj)}(hliveupdate_session_preserve_fdh]j)}(hjh]hliveupdate_session_preserve_fd}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]hhuh1jhjhhhjhKrubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjhhhjhKrubah}(h]jah ](j j!eh"]h$]h&]j%j&)j'huh1jhjhKrhjhhubj))}(hhh]h)}(h%ioctl(LIVEUPDATE_SESSION_PRESERVE_FD)h]h%ioctl(LIVEUPDATE_SESSION_PRESERVE_FD)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.hhK|hj hhubah}(h]h ]h"]h$]h&]uh1j(hjhhhjhKrubeh}(h]h ](jEstructeh"]h$]h&]jJjEjKj(jLj(jMjNjOuh1jhhhj~hjhNubjQ)}(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}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubh:}(hj0hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.hhKhj,ubjt)}(hastruct liveupdate_session_preserve_fd { __u32 size; __s32 fd; __aligned_u64 token; };h]hastruct liveupdate_session_preserve_fd { __u32 size; __s32 fd; __aligned_u64 token; };}hjMsbah}(h]h ]h"]h$]h&]hhuh1jshh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.hhKhj,ubh)}(h **Members**h]j)}(hj^h]hMembers}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\ubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.hhKhj,ubj)}(hhh](j)}(h>``size`` Input; sizeof(struct liveupdate_session_preserve_fd) h](j)}(h``size``h]j;)}(hj}h]hsize}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j:hj{ubah}(h]h ]h"]h$]h&]uh1jhh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.hhK~hjwubj)}(hhh]h)}(h4Input; sizeof(struct liveupdate_session_preserve_fd)h]h4Input; sizeof(struct liveupdate_session_preserve_fd)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK~hjubah}(h]h ]h"]h$]h&]uh1jhjwubeh}(h]h ]h"]h$]h&]uh1jhjhK~hjtubj)}(h>``fd`` Input; The user-space file descriptor to be preserved. h](j)}(h``fd``h]j;)}(hjh]hfd}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j:hjubah}(h]h ]h"]h$]h&]uh1jhh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.hhKhjubj)}(hhh]h)}(h6Input; The user-space file descriptor to be preserved.h]h6Input; The user-space file descriptor to be preserved.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjtubj)}(h@``token`` Input; An opaque, unique token for preserved resource.h](j)}(h ``token``h]j;)}(hjh]htoken}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j:hjubah}(h]h ]h"]h$]h&]uh1jhh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.hhKhjubj)}(hhh]h)}(h6Input; An opaque, unique token for preserved resource.h]h6Input; An opaque, unique token for preserved resource.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.hhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjtubeh}(h]h ]h"]h$]h&]uh1jhj,ubeh}(h]h ] kernelindentah"]h$]h&]uh1jPhj~hhhjhNubh)}(h**Description**h]j)}(hj2h]h Description}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.hhKhj~hhubh)}(h2Holds parameters for preserving a file descriptor.h]h2Holds parameters for preserving a file descriptor.}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.hhKhj~hhubh)}(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](hUser sets the }(hjWhhhNhNubj)}(h**fd**h]hfd}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWubh 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 }(hjWhhhNhNubhemphasis)}(h*initiates the process*h]hinitiates the process}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jqhjWubhp of preparing its state for saving. The actual snapshotting of the state typically occurs during the subsequent }(hjWhhhNhNubj;)}(h``LIVEUPDATE_IOCTL_PREPARE``h]hLIVEUPDATE_IOCTL_PREPARE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j:hjWubh execution phase, though some finalization might occur during freeze. On successful validation and initiation, the kernel uses the }(hjWhhhNhNubj)}(h **token**h]htoken}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWubh 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 }(hjWhhhNhNubj;)}(h"``LIVEUPDATE_SESSION_RETRIEVE_FD``h]hLIVEUPDATE_SESSION_RETRIEVE_FD}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j:hjWubh call after the live update.}(hjWhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.hhKhj~hhubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.hhKhj~hhubh)}(h0 on success (validation passed, preservation initiated), negative error code on failure (e.g., unsupported FD type, dependency issue, validation failed).h]h0 on success (validation passed, preservation initiated), negative error code on failure (e.g., unsupported FD type, dependency issue, validation failed).}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.hhKhj~hhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j)liveupdate_session_retrieve_fd (C struct) c.liveupdate_session_retrieve_fdhNtauh1jhj~hhhjhNubj)}(hhh](j)}(hliveupdate_session_retrieve_fdh]j)}(h%struct liveupdate_session_retrieve_fdh](j)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.hhKubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj hKubj)}(hliveupdate_session_retrieve_fdh]j)}(hjh]hliveupdate_session_retrieve_fd}(hj" hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](jjeh"]h$]h&]hhuh1jhjhhhj hKubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjhhhj hKubah}(h]jah ](j j!eh"]h$]h&]j%j&)j'huh1jhj hKhjhhubj))}(hhh]h)}(h%ioctl(LIVEUPDATE_SESSION_RETRIEVE_FD)h]h%ioctl(LIVEUPDATE_SESSION_RETRIEVE_FD)}(hjD hhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.hhKhjA hhubah}(h]h ]h"]h$]h&]uh1j(hjhhhj hKubeh}(h]h ](jEstructeh"]h$]h&]jJjEjKj\ jLj\ jMjNjOuh1jhhhj~hjhNubjQ)}(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}(hjh hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjd ubh:}(hjd hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.hhKhj` ubjt)}(hastruct liveupdate_session_retrieve_fd { __u32 size; __s32 fd; __aligned_u64 token; };h]hastruct liveupdate_session_retrieve_fd { __u32 size; __s32 fd; __aligned_u64 token; };}hj sbah}(h]h ]h"]h$]h&]hhuh1jshh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.hhKhj` ubh)}(h **Members**h]j)}(hj h]hMembers}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.hhKhj` ubj)}(hhh](j)}(h>``size`` Input; sizeof(struct liveupdate_session_retrieve_fd) h](j)}(h``size``h]j;)}(hj h]hsize}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j:hj ubah}(h]h ]h"]h$]h&]uh1jhh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.hhKhj ubj)}(hhh]h)}(h4Input; sizeof(struct liveupdate_session_retrieve_fd)h]h4Input; sizeof(struct liveupdate_session_retrieve_fd)}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hKhj ubj)}(hX``fd`` Output; The new file descriptor representing the fully restored kernel resource. h](j)}(h``fd``h]j;)}(hj h]hfd}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j:hj ubah}(h]h ]h"]h$]h&]uh1jhh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.hhKhj ubj)}(hhh]h)}(hPOutput; The new file descriptor representing the fully restored kernel resource.h]hPOutput; The new file descriptor representing the fully restored kernel resource.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.hhKhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hKhj ubj)}(hI``token`` Input; An opaque, token that was used to preserve the resource.h](j)}(h ``token``h]j;)}(hj$ h]htoken}(hj& hhhNhNubah}(h]h ]h"]h$]h&]uh1j:hj" ubah}(h]h ]h"]h$]h&]uh1jhh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.hhKhj 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.}(hj= hhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.hhKhj: ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj9 hKhj ubeh}(h]h ]h"]h$]h&]uh1jhj` ubeh}(h]h ] kernelindentah"]h$]h&]uh1jPhj~hhhjhNubh)}(h**Description**h]j)}(hjg h]h Description}(hji hhhNhNubah}(h]h ]h"]h$]h&]uh1jhje ubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.hhKhj~hhubh)}(h0Retrieve a previously preserved file descriptor.h]h0Retrieve a previously preserved file descriptor.}(hj} hhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.hhKhj~hhubh)}(hXUser 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``.h](hUser sets the }(hj hhhNhNubj)}(h **token**h]htoken}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh/ field to the value obtained from a successful }(hj hhhNhNubj;)}(h ``LIVEUPDATE_IOCTL_FD_PRESERVE``h]hLIVEUPDATE_IOCTL_FD_PRESERVE}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j:hj 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 hhhNhNubj)}(h**fd**h]hfd}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh field with a new file descriptor referencing the restored resource in the current (new) kernel. This operation must be performed }(hj hhhNhNubjr)}(h*before*h]hbefore}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jqhj ubh signaling completion via }(hj hhhNhNubj;)}(h``LIVEUPDATE_IOCTL_FINISH``h]hLIVEUPDATE_IOCTL_FINISH}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j:hj ubh.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.hhKhj~hhubh)}(h **Return**h]j)}(hj h]hReturn}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.hhKhj~hhubh)}(hC0 on success, negative error code on failure (e.g., invalid token).h]hC0 on success, negative error code on failure (e.g., invalid token).}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.hhKhj~hhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j$liveupdate_session_finish (C struct)c.liveupdate_session_finishhNtauh1jhj~hhhjhNubj)}(hhh](j)}(hliveupdate_session_finishh]j)}(h struct liveupdate_session_finishh](j)}(hjh]hstruct}(hj5 hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1 hhhh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.hhKubj)}(h h]h }(hjC hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1 hhhjB hKubj)}(hliveupdate_session_finishh]j)}(hj/ h]hliveupdate_session_finish}(hjU hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQ ubah}(h]h ](jjeh"]h$]h&]hhuh1jhj1 hhhjB hKubeh}(h]h ]h"]h$]h&]hhjuh1jjjhj- hhhjB hKubah}(h]j( ah ](j j!eh"]h$]h&]j%j&)j'huh1jhjB hKhj* hhubj))}(hhh]h)}(h ioctl(LIVEUPDATE_SESSION_FINISH)h]h ioctl(LIVEUPDATE_SESSION_FINISH)}(hjw hhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.hhKhjt hhubah}(h]h ]h"]h$]h&]uh1j(hj* hhhjB hKubeh}(h]h ](jEstructeh"]h$]h&]jJjEjKj jLj jMjNjOuh1jhhhj~hjhNubjQ)}(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 hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh:}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.hhKhj ubjt)}(hIstruct liveupdate_session_finish { __u32 size; __u32 reserved; };h]hIstruct liveupdate_session_finish { __u32 size; __u32 reserved; };}hj sbah}(h]h ]h"]h$]h&]hhuh1jshh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.hhKhj ubh)}(h **Members**h]j)}(hj h]hMembers}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.hhKhj ubj)}(hhh](j)}(h9``size`` Input; sizeof(struct liveupdate_session_finish) h](j)}(h``size``h]j;)}(hj h]hsize}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j:hj ubah}(h]h ]h"]h$]h&]uh1jhh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.hhKhj ubj)}(hhh]h)}(h/Input; sizeof(struct liveupdate_session_finish)h]h/Input; sizeof(struct liveupdate_session_finish)}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hKhj ubj)}(h:``reserved`` Input; Must be zero. Reserved for future use.h](j)}(h ``reserved``h]j;)}(hj h]hreserved}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j:hj ubah}(h]h ]h"]h$]h&]uh1jhh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.hhKhj ubj)}(hhh]h)}(h-Input; Must be zero. Reserved for future use.h]h-Input; Must be zero. Reserved for future use.}(hj6 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.hhKhj3 ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj2 hKhj ubeh}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jPhj~hhhjhNubh)}(h**Description**h]j)}(hj` h]h Description}(hjb hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^ ubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.hhKhj~hhubh)}(hSignals 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]hSignals 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.}(hjv hhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.hhKhj~hhubh)}(hThis 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](huThis ioctl must be called once all required file descriptors for the session have been successfully retrieved (using }(hj hhhNhNubj;)}(h"``LIVEUPDATE_SESSION_RETRIEVE_FD``h]hLIVEUPDATE_SESSION_RETRIEVE_FD}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j:hj ubhC) and are fully restored from the userspace and kernel perspective.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.hhKhj~hhubh)}(hUpon 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]hUpon 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 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.hhKhj~hhubh)}(hIf 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]hIf 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 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.hhKhj~hhubh)}(h **Return**h]j)}(hj h]hReturn}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.hhKhj~hhubh)}(h-0 on success, negative error code on failure.h]h-0 on success, negative error code on failure.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/userspace-api/liveupdate:15: ./include/uapi/linux/liveupdate.hhKhj~hhubeh}(h] ioctl-uapiah ]h"] ioctl uapiah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(hSee Alsoh]hSee Also}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hhhhhKubj)}(hhh]j)}(h6:doc:`Live Update Orchestrator `h]h)}(hj h]h)}(hj h]hinline)}(hj h]hLive Update Orchestrator}(hj hhhNhNubah}(h]h ](xrefstdstd-doceh"]h$]h&]uh1j hj ubah}(h]h ]h"]h$]h&]refdocuserspace-api/liveupdate refdomainj reftypedoc refexplicitrefwarn reftarget/core-api/liveupdateuh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1jhj hhhhhNubah}(h]h ]h"]h$]h&]jjuh1jhhhKhj hhubeh}(h]see-alsoah ]h"]see alsoah$]h&]uh1hhhhhhhhKubeh}(h]live-update-uapiah ]h"]live update uapiah$]h&]uh1hhhhhhhhKubeh}(h]h ]h"]h$]h&]sourcehuh1hcurrent_sourceN current_lineNsettingsdocutils.frontendValues)}(hN generatorN datestampN source_linkN source_urlN toc_backlinksentryfootnote_backlinksK sectnum_xformKstrip_commentsNstrip_elements_with_classesN strip_classesN report_levelK halt_levelKexit_status_levelKdebugNwarning_streamN tracebackinput_encoding utf-8-siginput_encoding_error_handlerstrictoutput_encodingutf-8output_encoding_error_handlerjw error_encodingutf-8error_encoding_error_handlerbackslashreplace language_codeenrecord_dependenciesNconfigN id_prefixhauto_id_prefixid dump_settingsNdump_internalsNdump_transformsNdump_pseudo_xmlNexpose_internalsNstrict_visitorN_disable_configN_sourceh _destinationN _config_files]7/var/lib/git/docbuild/linux/Documentation/docutils.confafile_insertion_enabled raw_enabledKline_length_limitM'pep_referencesN pep_base_urlhttps://peps.python.org/pep_file_url_templatepep-%04drfc_referencesN rfc_base_url&https://datatracker.ietf.org/doc/html/ tab_widthKtrim_footnote_reference_spacesyntax_highlightlong smart_quotessmartquotes_locales]character_level_inline_markupdoctitle_xform docinfo_xformKsectsubtitle_xform image_loadinglinkembed_stylesheetcloak_email_addressessection_self_linkenvNubreporterNindirect_targets]substitution_defs}substitution_names}refnames}refids}j]jasnameids}(jQ jN j{jxj j jjjI jF u nametypes}(jQ j{j jjI uh}(jN hjxj!j j~jjjjjjjjjjj( j- jF j u footnote_refs} citation_refs} autofootnotes]autofootnote_refs]symbol_footnotes]symbol_footnote_refs] footnotes] citations]autofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}Rparse_messages]transform_messages]hsystem_message)}(hhh]h)}(hhh]h:Hyperlink target "general-ioctl-format" is not referenced.}hj sbah}(h]h ]h"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&]levelKtypeINFOsourcejlineKuh1j uba transformerN include_log] decorationNhhub.