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/gpu/xe/xe_devcoredumpmodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget)/translations/zh_TW/gpu/xe/xe_devcoredumpmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget)/translations/it_IT/gpu/xe/xe_devcoredumpmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget)/translations/ja_JP/gpu/xe/xe_devcoredumpmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget)/translations/ko_KR/gpu/xe/xe_devcoredumpmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hPortuguese (Brazilian)}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget)/translations/pt_BR/gpu/xe/xe_devcoredumpmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget)/translations/sp_SP/gpu/xe/xe_devcoredumpmodnameN classnameN refexplicituh1hhh ubeh}(h]h ]h"]h$]h&]current_languageEnglishuh1h hh _documenthsourceNlineNubhcomment)}(h*SPDX-License-Identifier: (GPL-2.0+ OR MIT)h]h*SPDX-License-Identifier: (GPL-2.0+ OR MIT)}hhsbah}(h]h ]h"]h$]h&] xml:spacepreserveuh1hhhhhhC/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_devcoredump.rsthKubhsection)}(hhh](htitle)}(hXe Device Coredumph]hXe Device Coredump}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhhhKubh paragraph)}(hXmXe uses dev_coredump infrastructure for exposing the crash errors in a standardized way. Once a crash occurs, devcoredump exposes a temporary node under ``/sys/class/devcoredump/devcd/``. The same node is also accessible in ``/sys/class/drm/card/device/devcoredump/``. The ``failing_device`` symlink points to the device that crashed and created the coredump.h](hXe uses dev_coredump infrastructure for exposing the crash errors in a standardized way. Once a crash occurs, devcoredump exposes a temporary node under }(hhhhhNhNubhliteral)}(h$``/sys/class/devcoredump/devcd/``h]h /sys/class/devcoredump/devcd/}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhubh&. The same node is also accessible in }(hhhhhNhNubh)}(h.``/sys/class/drm/card/device/devcoredump/``h]h*/sys/class/drm/card/device/devcoredump/}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhubh. The }(hhhhhNhNubh)}(h``failing_device``h]hfailing_device}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhubhD symlink points to the device that crashed and created the coredump.}(hhhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_devcoredump:7: ./drivers/gpu/drm/xe/xe_devcoredump.chKhhhhubh)}(hQThe following characteristics are observed by xe when creating a device coredump:h]hQThe following characteristics are observed by xe when creating a device coredump:}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_devcoredump:7: ./drivers/gpu/drm/xe/xe_devcoredump.chK%hhhhubhdefinition_list)}(hhh](hdefinition_list_item)}(h**Snapshot at hang**: The 'data' file contains a snapshot of the HW and driver states at the time the hang happened. Due to the driver recovering from resets/crashes, it may not correspond to the state of the system when the file is read by userspace. h](hterm)}(h**Snapshot at hang**:h](hstrong)}(h**Snapshot at hang**h]hSnapshot at hang}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjBubh:}(hjBhhhNhNubeh}(h]h ]h"]h$]h&]uh1j@hh/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_devcoredump:7: ./drivers/gpu/drm/xe/xe_devcoredump.chK,hj<ubh definition)}(hhh]h)}(hThe 'data' file contains a snapshot of the HW and driver states at the time the hang happened. Due to the driver recovering from resets/crashes, it may not correspond to the state of the system when the file is read by userspace.h]hThe ‘data’ file contains a snapshot of the HW and driver states at the time the hang happened. Due to the driver recovering from resets/crashes, it may not correspond to the state of the system when the file is read by userspace.}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_devcoredump:7: ./drivers/gpu/drm/xe/xe_devcoredump.chK)hjcubah}(h]h ]h"]h$]h&]uh1jahj<ubeh}(h]h ]h"]h$]h&]uh1j:hj`hK,hj7ubj;)}(hXO**Coredump release**: After a coredump is generated, it stays in kernel memory until released by userspace by writing anything to it, or after an internal timer expires. The exact timeout may vary and should not be relied upon. Example to release a coredump: .. code-block:: shell $ > /sys/class/drm/card0/device/devcoredump/data h](jA)}(h**Coredump release**:h](jG)}(h**Coredump release**h]hCoredump release}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j@hh/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_devcoredump:7: ./drivers/gpu/drm/xe/xe_devcoredump.chK6hjubjb)}(hhh](h)}(hAfter a coredump is generated, it stays in kernel memory until released by userspace by writing anything to it, or after an internal timer expires. The exact timeout may vary and should not be relied upon. Example to release a coredump:h]hAfter a coredump is generated, it stays in kernel memory until released by userspace by writing anything to it, or after an internal timer expires. The exact timeout may vary and should not be relied upon. Example to release a coredump:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_devcoredump:7: ./drivers/gpu/drm/xe/xe_devcoredump.chK/hjubh literal_block)}(h0$ > /sys/class/drm/card0/device/devcoredump/datah]h0$ > /sys/class/drm/card0/device/devcoredump/data}hjsbah}(h]h ]h"]h$]h&]hhƌforcelanguageshellhighlight_args}uh1jhh/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_devcoredump:7: ./drivers/gpu/drm/xe/xe_devcoredump.chK4hjubeh}(h]h ]h"]h$]h&]uh1jahjubeh}(h]h ]h"]h$]h&]uh1j:hjhK6hj7ubj;)}(hX**First failure only**: In general, the first hang is the most critical one since the following hangs can be a consequence of the initial hang. For this reason a snapshot is taken only for the first failure. Until the devcoredump is released by userspace or kernel, all subsequent hangs do not override the snapshot nor create new ones. Devcoredump has a delayed work queue that will eventually delete the file node and free all the dump information. h](jA)}(h**First failure only**:h](jG)}(h**First failure only**h]hFirst failure only}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1j@hh/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_devcoredump:7: ./drivers/gpu/drm/xe/xe_devcoredump.chK?hjubjb)}(hhh]h)}(hXIn general, the first hang is the most critical one since the following hangs can be a consequence of the initial hang. For this reason a snapshot is taken only for the first failure. Until the devcoredump is released by userspace or kernel, all subsequent hangs do not override the snapshot nor create new ones. Devcoredump has a delayed work queue that will eventually delete the file node and free all the dump information.h]hXIn general, the first hang is the most critical one since the following hangs can be a consequence of the initial hang. For this reason a snapshot is taken only for the first failure. Until the devcoredump is released by userspace or kernel, all subsequent hangs do not override the snapshot nor create new ones. Devcoredump has a delayed work queue that will eventually delete the file node and free all the dump information.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_devcoredump:7: ./drivers/gpu/drm/xe/xe_devcoredump.chK9hjubah}(h]h ]h"]h$]h&]uh1jahjubeh}(h]h ]h"]h$]h&]uh1j:hjhK?hj7ubeh}(h]h ]h"]h$]h&]uh1j5hhhhhNhNubh)}(hhh](h)}(h Internal APIh]h Internal API}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhK ubhindex)}(hhh]h}(h]h ]h"]h$]h&]entries](single xe_devcoredump_read (C function)c.xe_devcoredump_readhNtauh1j,hjhhhNhNubhdesc)}(hhh](hdesc_signature)}(hcssize_t xe_devcoredump_read (char *buffer, loff_t offset, size_t count, void *data, size_t datalen)h]hdesc_signature_line)}(hbssize_t xe_devcoredump_read(char *buffer, loff_t offset, size_t count, void *data, size_t datalen)h](h)}(hhh]h desc_sig_name)}(hssize_th]hssize_t}(hjShhhNhNubah}(h]h ]nah"]h$]h&]uh1jQhjNubah}(h]h ]h"]h$]h&] refdomaincreftype identifier reftargetjUmodnameN classnameN c:parent_keysphinx.domains.c LookupKey)}data]jp ASTIdentifier)}jkxe_devcoredump_readsbc.xe_devcoredump_readasbuh1hhjJhhhi/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_devcoredump:13: ./drivers/gpu/drm/xe/xe_devcoredump.chKubhdesc_sig_space)}(h h]h }(hjhhhNhNubah}(h]h ]wah"]h$]h&]uh1jhjJhhhj~hKubh desc_name)}(hxe_devcoredump_readh]jR)}(hj{h]hxe_devcoredump_read}(hjhhhNhNubah}(h]h ]j^ah"]h$]h&]uh1jQhjubah}(h]h ](sig-namedescnameeh"]h$]h&]hhuh1jhjJhhhj~hKubhdesc_parameterlist)}(hG(char *buffer, loff_t offset, size_t count, void *data, size_t datalen)h](hdesc_parameter)}(h char *bufferh](hdesc_sig_keyword_type)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]ktah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubhdesc_sig_punctuation)}(h*h]h*}(hjhhhNhNubah}(h]h ]pah"]h$]h&]uh1jhjubjR)}(hbufferh]hbuffer}(hjhhhNhNubah}(h]h ]j^ah"]h$]h&]uh1jQhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubj)}(h loff_t offseth](h)}(hhh]jR)}(hloff_th]hloff_t}(hjhhhNhNubah}(h]h ]j^ah"]h$]h&]uh1jQhjubah}(h]h ]h"]h$]h&] refdomainjireftypejk reftargetjmodnameN classnameNjojr)}ju]jyc.xe_devcoredump_readasbuh1hhjubj)}(h h]h }(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjR)}(hoffseth]hoffset}(hj/hhhNhNubah}(h]h ]j^ah"]h$]h&]uh1jQhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubj)}(h size_t counth](h)}(hhh]jR)}(hsize_th]hsize_t}(hjKhhhNhNubah}(h]h ]j^ah"]h$]h&]uh1jQhjHubah}(h]h ]h"]h$]h&] refdomainjireftypejk reftargetjMmodnameN classnameNjojr)}ju]jyc.xe_devcoredump_readasbuh1hhjDubj)}(h h]h }(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubjR)}(hcounth]hcount}(hjwhhhNhNubah}(h]h ]j^ah"]h$]h&]uh1jQhjDubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubj)}(h void *datah](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjR)}(hdatah]hdata}(hjhhhNhNubah}(h]h ]j^ah"]h$]h&]uh1jQhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubj)}(hsize_t datalenh](h)}(hhh]jR)}(hsize_th]hsize_t}(hjhhhNhNubah}(h]h ]j^ah"]h$]h&]uh1jQhjubah}(h]h ]h"]h$]h&] refdomainjireftypejk reftargetjmodnameN classnameNjojr)}ju]jyc.xe_devcoredump_readasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjR)}(hdatalenh]hdatalen}(hjhhhNhNubah}(h]h ]j^ah"]h$]h&]uh1jQhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubeh}(h]h ]h"]h$]h&]hhuh1jhjJhhhj~hKubeh}(h]h ]h"]h$]h&]hhƌ add_permalinkuh1jHsphinx_line_type declaratorhjDhhhj~hKubah}(h]j;ah ](sig sig-objecteh"]h$]h&] is_multiline _toc_parts) _toc_namehuh1jBhj~hKhj?hhubh desc_content)}(hhh]h)}(h.Read data from the Xe device coredump snapshoth]h.Read data from the Xe device coredump snapshot}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_devcoredump:13: ./drivers/gpu/drm/xe/xe_devcoredump.chKhj2hhubah}(h]h ]h"]h$]h&]uh1j0hj?hhhj~hKubeh}(h]h ](jifunctioneh"]h$]h&]domainjiobjtypejMdesctypejMnoindex noindexentrynocontentsentryuh1j=hhhjhNhNubh container)}(hX**Parameters** ``char *buffer`` Destination buffer to copy the coredump data into ``loff_t offset`` Offset in the coredump data to start reading from ``size_t count`` Number of bytes to read ``void *data`` Pointer to the xe_devcoredump structure ``size_t datalen`` Length of the data (unused) **Description** Reads a chunk of the coredump snapshot data into the provided buffer. If the devcoredump is smaller than 1.5 GB (XE_DEVCOREDUMP_CHUNK_MAX), it is read directly from a pre-written buffer. For larger devcoredumps, the pre-written buffer must be periodically repopulated from the snapshot state due to kmalloc size limitations. **Return** Number of bytes copied on success, or a negative error code on failure.h](h)}(h**Parameters**h]jG)}(hj_h]h Parameters}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj]ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_devcoredump:13: ./drivers/gpu/drm/xe/xe_devcoredump.chKhjYubj6)}(hhh](j;)}(hC``char *buffer`` Destination buffer to copy the coredump data into h](jA)}(h``char *buffer``h]h)}(hj~h]h char *buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj|ubah}(h]h ]h"]h$]h&]uh1j@hi/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_devcoredump:13: ./drivers/gpu/drm/xe/xe_devcoredump.chKhjxubjb)}(hhh]h)}(h1Destination buffer to copy the coredump data intoh]h1Destination buffer to copy the coredump data into}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jahjxubeh}(h]h ]h"]h$]h&]uh1j:hjhKhjuubj;)}(hD``loff_t offset`` Offset in the coredump data to start reading from h](jA)}(h``loff_t offset``h]h)}(hjh]h loff_t offset}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1j@hi/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_devcoredump:13: ./drivers/gpu/drm/xe/xe_devcoredump.chKhjubjb)}(hhh]h)}(h1Offset in the coredump data to start reading fromh]h1Offset in the coredump data to start reading from}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jahjubeh}(h]h ]h"]h$]h&]uh1j:hjhKhjuubj;)}(h)``size_t count`` Number of bytes to read h](jA)}(h``size_t count``h]h)}(hjh]h size_t count}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1j@hi/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_devcoredump:13: ./drivers/gpu/drm/xe/xe_devcoredump.chKhjubjb)}(hhh]h)}(hNumber of bytes to readh]hNumber of bytes to read}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jahjubeh}(h]h ]h"]h$]h&]uh1j:hjhKhjuubj;)}(h7``void *data`` Pointer to the xe_devcoredump structure h](jA)}(h``void *data``h]h)}(hj)h]h void *data}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj'ubah}(h]h ]h"]h$]h&]uh1j@hi/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_devcoredump:13: ./drivers/gpu/drm/xe/xe_devcoredump.chKhj#ubjb)}(hhh]h)}(h'Pointer to the xe_devcoredump structureh]h'Pointer to the xe_devcoredump structure}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj>hKhj?ubah}(h]h ]h"]h$]h&]uh1jahj#ubeh}(h]h ]h"]h$]h&]uh1j:hj>hKhjuubj;)}(h/``size_t datalen`` Length of the data (unused) h](jA)}(h``size_t datalen``h]h)}(hjbh]hsize_t datalen}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj`ubah}(h]h ]h"]h$]h&]uh1j@hi/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_devcoredump:13: ./drivers/gpu/drm/xe/xe_devcoredump.chKhj\ubjb)}(hhh]h)}(hLength of the data (unused)h]hLength of the data (unused)}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjwhKhjxubah}(h]h ]h"]h$]h&]uh1jahj\ubeh}(h]h ]h"]h$]h&]uh1j:hjwhKhjuubeh}(h]h ]h"]h$]h&]uh1j5hjYubh)}(h**Description**h]jG)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_devcoredump:13: ./drivers/gpu/drm/xe/xe_devcoredump.chKhjYubh)}(hXDReads a chunk of the coredump snapshot data into the provided buffer. If the devcoredump is smaller than 1.5 GB (XE_DEVCOREDUMP_CHUNK_MAX), it is read directly from a pre-written buffer. For larger devcoredumps, the pre-written buffer must be periodically repopulated from the snapshot state due to kmalloc size limitations.h]hXDReads a chunk of the coredump snapshot data into the provided buffer. If the devcoredump is smaller than 1.5 GB (XE_DEVCOREDUMP_CHUNK_MAX), it is read directly from a pre-written buffer. For larger devcoredumps, the pre-written buffer must be periodically repopulated from the snapshot state due to kmalloc size limitations.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_devcoredump:13: ./drivers/gpu/drm/xe/xe_devcoredump.chKhjYubh)}(h **Return**h]jG)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_devcoredump:13: ./drivers/gpu/drm/xe/xe_devcoredump.chKhjYubh)}(hGNumber of bytes copied on success, or a negative error code on failure.h]hGNumber of bytes copied on success, or a negative error code on failure.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_devcoredump:13: ./drivers/gpu/drm/xe/xe_devcoredump.chKhjYubeh}(h]h ] kernelindentah"]h$]h&]uh1jWhjhhhNhNubj-)}(hhh]h}(h]h ]h"]h$]h&]entries](j9xe_devcoredump (C function)c.xe_devcoredumphNtauh1j,hjhhhNhNubj>)}(hhh](jC)}(h]void xe_devcoredump (struct xe_exec_queue *q, struct xe_sched_job *job, const char *fmt, ...)h]jI)}(h\void xe_devcoredump(struct xe_exec_queue *q, struct xe_sched_job *job, const char *fmt, ...)h](j)}(hvoidh]hvoid}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhi/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_devcoredump:13: ./drivers/gpu/drm/xe/xe_devcoredump.chMmubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMmubj)}(hxe_devcoredumph]jR)}(hxe_devcoredumph]hxe_devcoredump}(hj*hhhNhNubah}(h]h ]j^ah"]h$]h&]uh1jQhj&ubah}(h]h ](jjeh"]h$]h&]hhuh1jhjhhhjhMmubj)}(hI(struct xe_exec_queue *q, struct xe_sched_job *job, const char *fmt, ...)h](j)}(hstruct xe_exec_queue *qh](hdesc_sig_keyword)}(hstructh]hstruct}(hjHhhhNhNubah}(h]h ]kah"]h$]h&]uh1jFhjBubj)}(h h]h }(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubh)}(hhh]jR)}(h xe_exec_queueh]h xe_exec_queue}(hjhhhhNhNubah}(h]h ]j^ah"]h$]h&]uh1jQhjeubah}(h]h ]h"]h$]h&] refdomainjireftypejk reftargetjjmodnameN classnameNjojr)}ju]jx)}jkj,sbc.xe_devcoredumpasbuh1hhjBubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubjR)}(hqh]hq}(hjhhhNhNubah}(h]h ]j^ah"]h$]h&]uh1jQhjBubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj>ubj)}(hstruct xe_sched_job *jobh](jG)}(hjJh]hstruct}(hjhhhNhNubah}(h]h ]jSah"]h$]h&]uh1jFhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]jR)}(h xe_sched_jobh]h xe_sched_job}(hjhhhNhNubah}(h]h ]j^ah"]h$]h&]uh1jQhjubah}(h]h ]h"]h$]h&] refdomainjireftypejk reftargetjmodnameN classnameNjojr)}ju]jc.xe_devcoredumpasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjR)}(hjobh]hjob}(hjhhhNhNubah}(h]h ]j^ah"]h$]h&]uh1jQhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj>ubj)}(hconst char *fmth](jG)}(hconsth]hconst}(hj,hhhNhNubah}(h]h ]jSah"]h$]h&]uh1jFhj(ubj)}(h h]h }(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubj)}(hcharh]hchar}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubj)}(h h]h }(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubj)}(hjh]h*}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubjR)}(hfmth]hfmt}(hjqhhhNhNubah}(h]h ]j^ah"]h$]h&]uh1jQhj(ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj>ubj)}(h...h]j)}(h...h]h...}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]noemphhhuh1jhj>ubeh}(h]h ]h"]h$]h&]hhuh1jhjhhhjhMmubeh}(h]h ]h"]h$]h&]hhj"uh1jHj#j$hjhhhjhMmubah}(h]jah ](j(j)eh"]h$]h&]j-j.)j/huh1jBhjhMmhjhhubj1)}(hhh]h)}(h;Take the required snapshots and initialize coredump device.h]h;Take the required snapshots and initialize coredump device.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_devcoredump:13: ./drivers/gpu/drm/xe/xe_devcoredump.chMmhjhhubah}(h]h ]h"]h$]h&]uh1j0hjhhhjhMmubeh}(h]h ](jifunctioneh"]h$]h&]jQjijRjjSjjTjUjVuh1j=hhhjhNhNubjX)}(hX**Parameters** ``struct xe_exec_queue *q`` The faulty xe_exec_queue, where the issue was detected. ``struct xe_sched_job *job`` The faulty xe_sched_job, where the issue was detected. ``const char *fmt`` Printf format + args to describe the reason for the core dump ``...`` variable arguments **Description** This function should be called at the crash time within the serialized gt_reset. It is skipped if we still have the core dump device available with the information of the 'first' snapshot.h](h)}(h**Parameters**h]jG)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_devcoredump:13: ./drivers/gpu/drm/xe/xe_devcoredump.chMqhjubj6)}(hhh](j;)}(hT``struct xe_exec_queue *q`` The faulty xe_exec_queue, where the issue was detected. h](jA)}(h``struct xe_exec_queue *q``h]h)}(hjh]hstruct xe_exec_queue *q}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1j@hi/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_devcoredump:13: ./drivers/gpu/drm/xe/xe_devcoredump.chMnhjubjb)}(hhh]h)}(h7The faulty xe_exec_queue, where the issue was detected.h]h7The faulty xe_exec_queue, where the issue was detected.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMnhj ubah}(h]h ]h"]h$]h&]uh1jahjubeh}(h]h ]h"]h$]h&]uh1j:hj hMnhjubj;)}(hT``struct xe_sched_job *job`` The faulty xe_sched_job, where the issue was detected. h](jA)}(h``struct xe_sched_job *job``h]h)}(hj.h]hstruct xe_sched_job *job}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj,ubah}(h]h ]h"]h$]h&]uh1j@hi/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_devcoredump:13: ./drivers/gpu/drm/xe/xe_devcoredump.chMohj(ubjb)}(hhh]h)}(h6The faulty xe_sched_job, where the issue was detected.h]h6The faulty xe_sched_job, where the issue was detected.}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjChMohjDubah}(h]h ]h"]h$]h&]uh1jahj(ubeh}(h]h ]h"]h$]h&]uh1j:hjChMohjubj;)}(hR``const char *fmt`` Printf format + args to describe the reason for the core dump h](jA)}(h``const char *fmt``h]h)}(hjgh]hconst char *fmt}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hhjeubah}(h]h ]h"]h$]h&]uh1j@hi/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_devcoredump:13: ./drivers/gpu/drm/xe/xe_devcoredump.chMphjaubjb)}(hhh]h)}(h=Printf format + args to describe the reason for the core dumph]h=Printf format + args to describe the reason for the core dump}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj|hMphj}ubah}(h]h ]h"]h$]h&]uh1jahjaubeh}(h]h ]h"]h$]h&]uh1j:hj|hMphjubj;)}(h``...`` variable arguments h](jA)}(h``...``h]h)}(hjh]h...}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1j@hi/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_devcoredump:13: ./drivers/gpu/drm/xe/xe_devcoredump.chKhjubjb)}(hhh]h)}(hvariable argumentsh]hvariable arguments}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jahjubeh}(h]h ]h"]h$]h&]uh1j:hjhKhjubeh}(h]h ]h"]h$]h&]uh1j5hjubh)}(h**Description**h]jG)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jFhjubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_devcoredump:13: ./drivers/gpu/drm/xe/xe_devcoredump.chKhjubh)}(hThis function should be called at the crash time within the serialized gt_reset. It is skipped if we still have the core dump device available with the information of the 'first' snapshot.h]hThis function should be called at the crash time within the serialized gt_reset. It is skipped if we still have the core dump device available with the information of the ‘first’ snapshot.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_devcoredump:13: ./drivers/gpu/drm/xe/xe_devcoredump.chMqhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jWhjhhhNhNubj-)}(hhh]h}(h]h ]h"]h$]h&]entries](j9"xe_print_blob_ascii85 (C function)c.xe_print_blob_ascii85hNtauh1j,hjhhhNhNubj>)}(hhh](jC)}(hvoid xe_print_blob_ascii85 (struct drm_printer *p, const char *prefix, char suffix, const void *blob, size_t offset, size_t size)h]jI)}(hvoid xe_print_blob_ascii85(struct drm_printer *p, const char *prefix, char suffix, const void *blob, size_t offset, size_t size)h](j)}(hvoidh]hvoid}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhi/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_devcoredump:13: ./drivers/gpu/drm/xe/xe_devcoredump.chMubj)}(h h]h }(hj/ hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhj. hMubj)}(hxe_print_blob_ascii85h]jR)}(hxe_print_blob_ascii85h]hxe_print_blob_ascii85}(hjA hhhNhNubah}(h]h ]j^ah"]h$]h&]uh1jQhj= ubah}(h]h ](jjeh"]h$]h&]hhuh1jhj hhhj. hMubj)}(hf(struct drm_printer *p, const char *prefix, char suffix, const void *blob, size_t offset, size_t size)h](j)}(hstruct drm_printer *ph](jG)}(hjJh]hstruct}(hj] hhhNhNubah}(h]h ]jSah"]h$]h&]uh1jFhjY ubj)}(h h]h }(hjj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjY ubh)}(hhh]jR)}(h drm_printerh]h drm_printer}(hj{ hhhNhNubah}(h]h ]j^ah"]h$]h&]uh1jQhjx ubah}(h]h ]h"]h$]h&] refdomainjireftypejk reftargetj} modnameN classnameNjojr)}ju]jx)}jkjC sbc.xe_print_blob_ascii85asbuh1hhjY ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjY ubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjY ubjR)}(hjh]hp}(hj hhhNhNubah}(h]h ]j^ah"]h$]h&]uh1jQhjY ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjU ubj)}(hconst char *prefixh](jG)}(hj.h]hconst}(hj hhhNhNubah}(h]h ]jSah"]h$]h&]uh1jFhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hcharh]hchar}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubjR)}(hprefixh]hprefix}(hj hhhNhNubah}(h]h ]j^ah"]h$]h&]uh1jQhj ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjU ubj)}(h char suffixh](j)}(hcharh]hchar}(hj+ hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj' ubj)}(h h]h }(hj9 hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj' ubjR)}(hsuffixh]hsuffix}(hjG hhhNhNubah}(h]h ]j^ah"]h$]h&]uh1jQhj' ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjU ubj)}(hconst void *blobh](jG)}(hj.h]hconst}(hj` hhhNhNubah}(h]h ]jSah"]h$]h&]uh1jFhj\ ubj)}(h h]h }(hjm hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ ubj)}(hvoidh]hvoid}(hj{ hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ ubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ ubjR)}(hblobh]hblob}(hj hhhNhNubah}(h]h ]j^ah"]h$]h&]uh1jQhj\ ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjU ubj)}(h size_t offseth](h)}(hhh]jR)}(hsize_th]hsize_t}(hj hhhNhNubah}(h]h ]j^ah"]h$]h&]uh1jQhj ubah}(h]h ]h"]h$]h&] refdomainjireftypejk reftargetj modnameN classnameNjojr)}ju]j c.xe_print_blob_ascii85asbuh1hhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubjR)}(hoffseth]hoffset}(hj hhhNhNubah}(h]h ]j^ah"]h$]h&]uh1jQhj ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjU ubj)}(h size_t sizeh](h)}(hhh]jR)}(hsize_th]hsize_t}(hj hhhNhNubah}(h]h ]j^ah"]h$]h&]uh1jQhj ubah}(h]h ]h"]h$]h&] refdomainjireftypejk reftargetj modnameN classnameNjojr)}ju]j c.xe_print_blob_ascii85asbuh1hhj ubj)}(h h]h }(hj& hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubjR)}(hsizeh]hsize}(hj4 hhhNhNubah}(h]h ]j^ah"]h$]h&]uh1jQhj ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjU ubeh}(h]h ]h"]h$]h&]hhuh1jhj hhhj. hMubeh}(h]h ]h"]h$]h&]hhj"uh1jHj#j$hj hhhj. hMubah}(h]j ah ](j(j)eh"]h$]h&]j-j.)j/huh1jBhj. hMhj hhubj1)}(hhh]h)}(h/print a BLOB to some useful location in ASCII85h]h/print a BLOB to some useful location in ASCII85}(hj^ hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_devcoredump:13: ./drivers/gpu/drm/xe/xe_devcoredump.chMhj[ hhubah}(h]h ]h"]h$]h&]uh1j0hj hhhj. hMubeh}(h]h ](jifunctioneh"]h$]h&]jQjijRjv jSjv jTjUjVuh1j=hhhjhNhNubjX)}(hX**Parameters** ``struct drm_printer *p`` the printer object to output to ``const char *prefix`` optional prefix to add to output string ``char suffix`` optional suffix to add at the end. 0 disables it and is not added to the output, which is useful when using multiple calls to dump data to **p** ``const void *blob`` the Binary Large OBject to dump out ``size_t offset`` offset in bytes to skip from the front of the BLOB, must be a multiple of sizeof(u32) ``size_t size`` the size in bytes of the BLOB, must be a multiple of sizeof(u32) **Description** The output is split into multiple calls to drm_puts() because some print targets, e.g. dmesg, cannot handle arbitrarily long lines. These targets may add newlines, as is the case with dmesg: each drm_puts() call creates a separate line. There is also a scheduler yield call to prevent the 'task has been stuck for 120s' kernel hang check feature from firing when printing to a slow target such as dmesg over a serial port.h](h)}(h**Parameters**h]jG)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj~ ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_devcoredump:13: ./drivers/gpu/drm/xe/xe_devcoredump.chMhjz ubj6)}(hhh](j;)}(h:``struct drm_printer *p`` the printer object to output to h](jA)}(h``struct drm_printer *p``h]h)}(hj h]hstruct drm_printer *p}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&]uh1j@hi/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_devcoredump:13: ./drivers/gpu/drm/xe/xe_devcoredump.chMhj ubjb)}(hhh]h)}(hthe printer object to output toh]hthe printer object to output to}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1jahj ubeh}(h]h ]h"]h$]h&]uh1j:hj hMhj ubj;)}(h?``const char *prefix`` optional prefix to add to output string h](jA)}(h``const char *prefix``h]h)}(hj h]hconst char *prefix}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&]uh1j@hi/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_devcoredump:13: ./drivers/gpu/drm/xe/xe_devcoredump.chMhj ubjb)}(hhh]h)}(h'optional prefix to add to output stringh]h'optional prefix to add to output string}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1jahj ubeh}(h]h ]h"]h$]h&]uh1j:hj hMhj ubj;)}(h``char suffix`` optional suffix to add at the end. 0 disables it and is not added to the output, which is useful when using multiple calls to dump data to **p** h](jA)}(h``char suffix``h]h)}(hj h]h char suffix}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&]uh1j@hi/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_devcoredump:13: ./drivers/gpu/drm/xe/xe_devcoredump.chMhj ubjb)}(hhh]h)}(hoptional suffix to add at the end. 0 disables it and is not added to the output, which is useful when using multiple calls to dump data to **p**h](hoptional suffix to add at the end. 0 disables it and is not added to the output, which is useful when using multiple calls to dump data to }(hj* hhhNhNubjG)}(h**p**h]hp}(hj2 hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj* ubeh}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_devcoredump:13: ./drivers/gpu/drm/xe/xe_devcoredump.chMhj' ubah}(h]h ]h"]h$]h&]uh1jahj ubeh}(h]h ]h"]h$]h&]uh1j:hj& hMhj ubj;)}(h9``const void *blob`` the Binary Large OBject to dump out h](jA)}(h``const void *blob``h]h)}(hjY h]hconst void *blob}(hj[ hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjW ubah}(h]h ]h"]h$]h&]uh1j@hi/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_devcoredump:13: ./drivers/gpu/drm/xe/xe_devcoredump.chMhjS ubjb)}(hhh]h)}(h#the Binary Large OBject to dump outh]h#the Binary Large OBject to dump out}(hjr hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjn hMhjo ubah}(h]h ]h"]h$]h&]uh1jahjS ubeh}(h]h ]h"]h$]h&]uh1j:hjn hMhj ubj;)}(hh``size_t offset`` offset in bytes to skip from the front of the BLOB, must be a multiple of sizeof(u32) h](jA)}(h``size_t offset``h]h)}(hj h]h size_t offset}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&]uh1j@hi/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_devcoredump:13: ./drivers/gpu/drm/xe/xe_devcoredump.chMhj ubjb)}(hhh]h)}(hUoffset in bytes to skip from the front of the BLOB, must be a multiple of sizeof(u32)h]hUoffset in bytes to skip from the front of the BLOB, must be a multiple of sizeof(u32)}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1jahj ubeh}(h]h ]h"]h$]h&]uh1j:hj hMhj ubj;)}(hQ``size_t size`` the size in bytes of the BLOB, must be a multiple of sizeof(u32) h](jA)}(h``size_t size``h]h)}(hj h]h size_t size}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&]uh1j@hi/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_devcoredump:13: ./drivers/gpu/drm/xe/xe_devcoredump.chMhj ubjb)}(hhh]h)}(h@the size in bytes of the BLOB, must be a multiple of sizeof(u32)h]h@the size in bytes of the BLOB, must be a multiple of sizeof(u32)}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1jahj ubeh}(h]h ]h"]h$]h&]uh1j:hj hMhj ubeh}(h]h ]h"]h$]h&]uh1j5hjz ubh)}(h**Description**h]jG)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jFhj ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_devcoredump:13: ./drivers/gpu/drm/xe/xe_devcoredump.chMhjz ubh)}(hThe output is split into multiple calls to drm_puts() because some print targets, e.g. dmesg, cannot handle arbitrarily long lines. These targets may add newlines, as is the case with dmesg: each drm_puts() call creates a separate line.h]hThe output is split into multiple calls to drm_puts() because some print targets, e.g. dmesg, cannot handle arbitrarily long lines. These targets may add newlines, as is the case with dmesg: each drm_puts() call creates a separate line.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_devcoredump:13: ./drivers/gpu/drm/xe/xe_devcoredump.chMhjz ubh)}(hThere is also a scheduler yield call to prevent the 'task has been stuck for 120s' kernel hang check feature from firing when printing to a slow target such as dmesg over a serial port.h]hThere is also a scheduler yield call to prevent the ‘task has been stuck for 120s’ kernel hang check feature from firing when printing to a slow target such as dmesg over a serial port.}(hj+ hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_devcoredump:13: ./drivers/gpu/drm/xe/xe_devcoredump.chMhjz ubeh}(h]h ] kernelindentah"]h$]h&]uh1jWhjhhhNhNubeh}(h] internal-apiah ]h"] internal apiah$]h&]uh1hhhhhhhhK ubeh}(h]xe-device-coredumpah ]h"]xe device coredumpah$]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_handlerjt error_encodingutf-8error_encoding_error_handlerbackslashreplace language_codeenrecord_dependenciesNconfigN id_prefixhauto_id_prefixid dump_settingsNdump_internalsNdump_transformsNdump_pseudo_xmlNexpose_internalsNstrict_visitorN_disable_configN_sourcehnj _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}nameids}(jN jK jF jC u nametypes}(jN jF uh}(jK hjC jj;jDjjj 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] transformerN include_log] decorationNhhub.