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]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}(hhhhhNhNubah}(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:}(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&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}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1j2hj.ubh:}(hj.hhhNhNubeh}(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.}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_devcoredump:7: ./drivers/gpu/drm/xe/xe_devcoredump.chK*hjOubah}(h]h ]h"]h$]h&]uh1jMhj(ubeh}(h]h ]h"]h$]h&]uh1j&hjLhK-hj#ubj')}(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](j-)}(h**Coredump release**:h](j3)}(h**Coredump release**h]hCoredump release}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1j2hjqubh:}(hjqhhhNhNubeh}(h]h ]h"]h$]h&]uh1j,hh/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_devcoredump:7: ./drivers/gpu/drm/xe/xe_devcoredump.chK7hjmubjN)}(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.chK0hjubh literal_block)}(h0$ > /sys/class/drm/card0/device/devcoredump/datah]h0$ > /sys/class/drm/card0/device/devcoredump/data}hjsbah}(h]h ]h"]h$]h&]hhforcelanguageshellhighlight_args}uh1jhh/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_devcoredump:7: ./drivers/gpu/drm/xe/xe_devcoredump.chK5hjubeh}(h]h ]h"]h$]h&]uh1jMhjmubeh}(h]h ]h"]h$]h&]uh1j&hjhK7hj#ubj')}(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](j-)}(h**First failure only**:h](j3)}(h**First failure only**h]hFirst failure only}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j2hjubh:}(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@hjubjN)}(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.chK:hjubah}(h]h ]h"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]uh1j&hjhK@hj#ubeh}(h]h ]h"]h$]h&]uh1j!hhhhhNhNubh)}(hhh](h)}(h Internal APIh]h Internal API}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhK ubhindex)}(hhh]h}(h]h ]h"]h$]h&]entries](single xe_devcoredump_read (C function)c.xe_devcoredump_readhNtauh1jhjhhhNhNubhdesc)}(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}(hj?hhhNhNubah}(h]h ]nah"]h$]h&]uh1j=hj:ubah}(h]h ]h"]h$]h&] refdomaincreftype identifier reftargetjAmodnameN classnameN c:parent_keysphinx.domains.c LookupKey)}data]j\ ASTIdentifier)}jWxe_devcoredump_readsbc.xe_devcoredump_readasbuh1hhj6hhhi/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_devcoredump:13: ./drivers/gpu/drm/xe/xe_devcoredump.chKubhdesc_sig_space)}(h h]h }(hjmhhhNhNubah}(h]h ]wah"]h$]h&]uh1jkhj6hhhjjhKubh desc_name)}(hxe_devcoredump_readh]j>)}(hjgh]hxe_devcoredump_read}(hjhhhNhNubah}(h]h ]jJah"]h$]h&]uh1j=hj~ubah}(h]h ](sig-namedescnameeh"]h$]h&]hhuh1j|hj6hhhjjhKubhdesc_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&]uh1jhjubjl)}(h h]h }(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jkhjubhdesc_sig_punctuation)}(h*h]h*}(hjhhhNhNubah}(h]h ]pah"]h$]h&]uh1jhjubj>)}(hbufferh]hbuffer}(hjhhhNhNubah}(h]h ]jJah"]h$]h&]uh1j=hjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubj)}(h loff_t offseth](h)}(hhh]j>)}(hloff_th]hloff_t}(hjhhhNhNubah}(h]h ]jJah"]h$]h&]uh1j=hjubah}(h]h ]h"]h$]h&] refdomainjUreftypejW reftargetjmodnameN classnameNj[j^)}ja]jec.xe_devcoredump_readasbuh1hhjubjl)}(h h]h }(hj hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jkhjubj>)}(hoffseth]hoffset}(hjhhhNhNubah}(h]h ]jJah"]h$]h&]uh1j=hjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubj)}(h size_t counth](h)}(hhh]j>)}(hsize_th]hsize_t}(hj7hhhNhNubah}(h]h ]jJah"]h$]h&]uh1j=hj4ubah}(h]h ]h"]h$]h&] refdomainjUreftypejW reftargetj9modnameN classnameNj[j^)}ja]jec.xe_devcoredump_readasbuh1hhj0ubjl)}(h h]h }(hjUhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jkhj0ubj>)}(hcounth]hcount}(hjchhhNhNubah}(h]h ]jJah"]h$]h&]uh1j=hj0ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubj)}(h void *datah](j)}(hvoidh]hvoid}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubjl)}(h h]h }(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jkhjxubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubj>)}(hdatah]hdata}(hjhhhNhNubah}(h]h ]jJah"]h$]h&]uh1j=hjxubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubj)}(hsize_t datalenh](h)}(hhh]j>)}(hsize_th]hsize_t}(hjhhhNhNubah}(h]h ]jJah"]h$]h&]uh1j=hjubah}(h]h ]h"]h$]h&] refdomainjUreftypejW reftargetjmodnameN classnameNj[j^)}ja]jec.xe_devcoredump_readasbuh1hhjubjl)}(h h]h }(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jkhjubj>)}(hdatalenh]hdatalen}(hjhhhNhNubah}(h]h ]jJah"]h$]h&]uh1j=hjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubeh}(h]h ]h"]h$]h&]hhuh1jhj6hhhjjhKubeh}(h]h ]h"]h$]h&]hh add_permalinkuh1j4sphinx_line_type declaratorhj0hhhjjhKubah}(h]j'ah ](sig sig-objecteh"]h$]h&] is_multiline _toc_parts) _toc_namehuh1j.hjjhKhj+hhubh desc_content)}(hhh]h)}(h.Read data from the Xe device coredump snapshoth]h.Read data from the Xe device coredump snapshot}(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.chKhjhhubah}(h]h ]h"]h$]h&]uh1jhj+hhhjjhKubeh}(h]h ](jUfunctioneh"]h$]h&]domainjUobjtypej9desctypej9noindex 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]j3)}(hjKh]h Parameters}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1j2hjIubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_devcoredump:13: ./drivers/gpu/drm/xe/xe_devcoredump.chKhjEubj")}(hhh](j')}(hC``char *buffer`` Destination buffer to copy the coredump data into h](j-)}(h``char *buffer``h]h)}(hjjh]h char *buffer}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhubah}(h]h ]h"]h$]h&]uh1j,hi/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_devcoredump:13: ./drivers/gpu/drm/xe/xe_devcoredump.chKhjdubjN)}(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&]uh1jMhjdubeh}(h]h ]h"]h$]h&]uh1j&hjhKhjaubj')}(hD``loff_t offset`` Offset in the coredump data to start reading from h](j-)}(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.chKhjubjN)}(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&]uh1jMhjubeh}(h]h ]h"]h$]h&]uh1j&hjhKhjaubj')}(h)``size_t count`` Number of bytes to read h](j-)}(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.chKhjubjN)}(hhh]h)}(hNumber of bytes to readh]hNumber of bytes to read}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]uh1j&hjhKhjaubj')}(h7``void *data`` Pointer to the xe_devcoredump structure h](j-)}(h``void *data``h]h)}(hjh]h void *data}(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.chKhjubjN)}(hhh]h)}(h'Pointer to the xe_devcoredump structureh]h'Pointer to the xe_devcoredump structure}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj*hKhj+ubah}(h]h ]h"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]uh1j&hj*hKhjaubj')}(h/``size_t datalen`` Length of the data (unused) h](j-)}(h``size_t datalen``h]h)}(hjNh]hsize_t datalen}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjLubah}(h]h ]h"]h$]h&]uh1j,hi/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_devcoredump:13: ./drivers/gpu/drm/xe/xe_devcoredump.chKhjHubjN)}(hhh]h)}(hLength of the data (unused)h]hLength of the data (unused)}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1hhjchKhjdubah}(h]h ]h"]h$]h&]uh1jMhjHubeh}(h]h ]h"]h$]h&]uh1j&hjchKhjaubeh}(h]h ]h"]h$]h&]uh1j!hjEubh)}(h**Description**h]j3)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j2hjubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_devcoredump:13: ./drivers/gpu/drm/xe/xe_devcoredump.chKhjEubh)}(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.chKhjEubh)}(h **Return**h]j3)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j2hjubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_devcoredump:13: ./drivers/gpu/drm/xe/xe_devcoredump.chKhjEubh)}(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.chKhjEubeh}(h]h ] kernelindentah"]h$]h&]uh1jChjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j%xe_devcoredump (C function)c.xe_devcoredumphNtauh1jhjhhhNhNubj*)}(hhh](j/)}(h]void xe_devcoredump (struct xe_exec_queue *q, struct xe_sched_job *job, const char *fmt, ...)h]j5)}(h\void xe_devcoredump(struct xe_exec_queue *q, struct xe_sched_job *job, const char *fmt, ...)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhi/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_devcoredump:13: ./drivers/gpu/drm/xe/xe_devcoredump.chMubjl)}(h h]h }(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jkhjhhhjhMubj})}(hxe_devcoredumph]j>)}(hxe_devcoredumph]hxe_devcoredump}(hjhhhNhNubah}(h]h ]jJah"]h$]h&]uh1j=hjubah}(h]h ](jjeh"]h$]h&]hhuh1j|hjhhhjhMubj)}(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}(hj4hhhNhNubah}(h]h ]kah"]h$]h&]uh1j2hj.ubjl)}(h h]h }(hjChhhNhNubah}(h]h ]jxah"]h$]h&]uh1jkhj.ubh)}(hhh]j>)}(h xe_exec_queueh]h xe_exec_queue}(hjThhhNhNubah}(h]h ]jJah"]h$]h&]uh1j=hjQubah}(h]h ]h"]h$]h&] refdomainjUreftypejW reftargetjVmodnameN classnameNj[j^)}ja]jd)}jWjsbc.xe_devcoredumpasbuh1hhj.ubjl)}(h h]h }(hjthhhNhNubah}(h]h ]jxah"]h$]h&]uh1jkhj.ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubj>)}(hqh]hq}(hjhhhNhNubah}(h]h ]jJah"]h$]h&]uh1j=hj.ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj*ubj)}(hstruct xe_sched_job *jobh](j3)}(hj6h]hstruct}(hjhhhNhNubah}(h]h ]j?ah"]h$]h&]uh1j2hjubjl)}(h h]h }(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jkhjubh)}(hhh]j>)}(h xe_sched_jobh]h xe_sched_job}(hjhhhNhNubah}(h]h ]jJah"]h$]h&]uh1j=hjubah}(h]h ]h"]h$]h&] refdomainjUreftypejW reftargetjmodnameN classnameNj[j^)}ja]jpc.xe_devcoredumpasbuh1hhjubjl)}(h h]h }(hjhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jkhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj>)}(hjobh]hjob}(hjhhhNhNubah}(h]h ]jJah"]h$]h&]uh1j=hjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj*ubj)}(hconst char *fmth](j3)}(hconsth]hconst}(hjhhhNhNubah}(h]h ]j?ah"]h$]h&]uh1j2hjubjl)}(h h]h }(hj&hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jkhjubj)}(hcharh]hchar}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjl)}(h h]h }(hjBhhhNhNubah}(h]h ]jxah"]h$]h&]uh1jkhjubj)}(hjh]h*}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj>)}(hfmth]hfmt}(hj]hhhNhNubah}(h]h ]jJah"]h$]h&]uh1j=hjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj*ubj)}(h...h]j)}(h...h]h...}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubah}(h]h ]h"]h$]h&]noemphhhuh1jhj*ubeh}(h]h ]h"]h$]h&]hhuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]hhjuh1j4jjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j.hjhMhjhhubj)}(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.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jUfunctioneh"]h$]h&]j=jUj>jj?jj@jAjBuh1j)hhhjhNhNubjD)}(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]j3)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j2hjubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_devcoredump:13: ./drivers/gpu/drm/xe/xe_devcoredump.chMhjubj")}(hhh](j')}(hT``struct xe_exec_queue *q`` The faulty xe_exec_queue, where the issue was detected. h](j-)}(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.chMhjubjN)}(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&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]uh1j&hjhMhjubj')}(hT``struct xe_sched_job *job`` The faulty xe_sched_job, where the issue was detected. h](j-)}(h``struct xe_sched_job *job``h]h)}(hjh]hstruct xe_sched_job *job}(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.chMhjubjN)}(hhh]h)}(h6The faulty xe_sched_job, where the issue was detected.h]h6The faulty xe_sched_job, where the issue was detected.}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/hMhj0ubah}(h]h ]h"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]uh1j&hj/hMhjubj')}(hR``const char *fmt`` Printf format + args to describe the reason for the core dump h](j-)}(h``const char *fmt``h]h)}(hjSh]hconst char *fmt}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjQubah}(h]h ]h"]h$]h&]uh1j,hi/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_devcoredump:13: ./drivers/gpu/drm/xe/xe_devcoredump.chMhjMubjN)}(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}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhMhjiubah}(h]h ]h"]h$]h&]uh1jMhjMubeh}(h]h ]h"]h$]h&]uh1j&hjhhMhjubj')}(h``...`` variable arguments h](j-)}(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.chKhjubjN)}(hhh]h)}(hvariable argumentsh]hvariable arguments}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]uh1j&hjhKhjubeh}(h]h ]h"]h$]h&]uh1j!hjubh)}(h**Description**h]j3)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j2hjubah}(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.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jChjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j%"xe_print_blob_ascii85 (C function)c.xe_print_blob_ascii85hNtauh1jhjhhhNhNubj*)}(hhh](j/)}(hvoid xe_print_blob_ascii85 (struct drm_printer *p, const char *prefix, char suffix, const void *blob, size_t offset, size_t size)h]j5)}(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.chMubjl)}(h h]h }(hj hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jkhj hhhj hMubj})}(hxe_print_blob_ascii85h]j>)}(hxe_print_blob_ascii85h]hxe_print_blob_ascii85}(hj- hhhNhNubah}(h]h ]jJah"]h$]h&]uh1j=hj) ubah}(h]h ](jjeh"]h$]h&]hhuh1j|hj 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](j3)}(hj6h]hstruct}(hjI hhhNhNubah}(h]h ]j?ah"]h$]h&]uh1j2hjE ubjl)}(h h]h }(hjV hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jkhjE ubh)}(hhh]j>)}(h drm_printerh]h drm_printer}(hjg hhhNhNubah}(h]h ]jJah"]h$]h&]uh1j=hjd ubah}(h]h ]h"]h$]h&] refdomainjUreftypejW reftargetji modnameN classnameNj[j^)}ja]jd)}jWj/ sbc.xe_print_blob_ascii85asbuh1hhjE ubjl)}(h h]h }(hj hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jkhjE ubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjE ubj>)}(hjh]hp}(hj hhhNhNubah}(h]h ]jJah"]h$]h&]uh1j=hjE ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjA ubj)}(hconst char *prefixh](j3)}(hjh]hconst}(hj hhhNhNubah}(h]h ]j?ah"]h$]h&]uh1j2hj ubjl)}(h h]h }(hj hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jkhj ubj)}(hcharh]hchar}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubjl)}(h h]h }(hj hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jkhj ubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj>)}(hprefixh]hprefix}(hj hhhNhNubah}(h]h ]jJah"]h$]h&]uh1j=hj ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjA ubj)}(h char suffixh](j)}(hcharh]hchar}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubjl)}(h h]h }(hj% hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jkhj ubj>)}(hsuffixh]hsuffix}(hj3 hhhNhNubah}(h]h ]jJah"]h$]h&]uh1j=hj ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjA ubj)}(hconst void *blobh](j3)}(hjh]hconst}(hjL hhhNhNubah}(h]h ]j?ah"]h$]h&]uh1j2hjH ubjl)}(h h]h }(hjY hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jkhjH ubj)}(hvoidh]hvoid}(hjg hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjH ubjl)}(h h]h }(hju hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jkhjH ubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjH ubj>)}(hblobh]hblob}(hj hhhNhNubah}(h]h ]jJah"]h$]h&]uh1j=hjH ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjA ubj)}(h size_t offseth](h)}(hhh]j>)}(hsize_th]hsize_t}(hj hhhNhNubah}(h]h ]jJah"]h$]h&]uh1j=hj ubah}(h]h ]h"]h$]h&] refdomainjUreftypejW reftargetj modnameN classnameNj[j^)}ja]j c.xe_print_blob_ascii85asbuh1hhj ubjl)}(h h]h }(hj hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jkhj ubj>)}(hoffseth]hoffset}(hj hhhNhNubah}(h]h ]jJah"]h$]h&]uh1j=hj ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjA ubj)}(h size_t sizeh](h)}(hhh]j>)}(hsize_th]hsize_t}(hj hhhNhNubah}(h]h ]jJah"]h$]h&]uh1j=hj ubah}(h]h ]h"]h$]h&] refdomainjUreftypejW reftargetj modnameN classnameNj[j^)}ja]j c.xe_print_blob_ascii85asbuh1hhj ubjl)}(h h]h }(hj hhhNhNubah}(h]h ]jxah"]h$]h&]uh1jkhj ubj>)}(hsizeh]hsize}(hj hhhNhNubah}(h]h ]jJah"]h$]h&]uh1j=hj ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjA ubeh}(h]h ]h"]h$]h&]hhuh1jhj hhhj hMubeh}(h]h ]h"]h$]h&]hhjuh1j4jjhj hhhj hMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j.hj hMhj hhubj)}(hhh]h)}(h/print a BLOB to some useful location in ASCII85h]h/print a BLOB to some useful location in ASCII85}(hjJ hhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_devcoredump:13: ./drivers/gpu/drm/xe/xe_devcoredump.chMhjG hhubah}(h]h ]h"]h$]h&]uh1jhj hhhj hMubeh}(h]h ](jUfunctioneh"]h$]h&]j=jUj>jb j?jb j@jAjBuh1j)hhhjhNhNubjD)}(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]j3)}(hjl h]h Parameters}(hjn hhhNhNubah}(h]h ]h"]h$]h&]uh1j2hjj ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_devcoredump:13: ./drivers/gpu/drm/xe/xe_devcoredump.chMhjf ubj")}(hhh](j')}(h:``struct drm_printer *p`` the printer object to output to h](j-)}(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 ubjN)}(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&]uh1jMhj ubeh}(h]h ]h"]h$]h&]uh1j&hj hMhj ubj')}(h?``const char *prefix`` optional prefix to add to output string h](j-)}(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 ubjN)}(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&]uh1jMhj 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](j-)}(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 ubjN)}(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 hhhNhNubj3)}(h**p**h]hp}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j2hj 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&]uh1jMhj ubeh}(h]h ]h"]h$]h&]uh1j&hj hMhj ubj')}(h9``const void *blob`` the Binary Large OBject to dump out h](j-)}(h``const void *blob``h]h)}(hjE h]hconst void *blob}(hjG hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjC 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? ubjN)}(hhh]h)}(h#the Binary Large OBject to dump outh]h#the Binary Large OBject to dump out}(hj^ hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjZ hMhj[ ubah}(h]h ]h"]h$]h&]uh1jMhj? ubeh}(h]h ]h"]h$]h&]uh1j&hjZ 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](j-)}(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.chMhjx ubjN)}(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&]uh1jMhjx 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](j-)}(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 ubjN)}(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&]uh1jMhj ubeh}(h]h ]h"]h$]h&]uh1j&hj hMhj ubeh}(h]h ]h"]h$]h&]uh1j!hjf ubh)}(h**Description**h]j3)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j2hj ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_devcoredump:13: ./drivers/gpu/drm/xe/xe_devcoredump.chMhjf 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.chMhjf 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.chMhjf ubeh}(h]h ] kernelindentah"]h$]h&]uh1jChjhhhNhNubeh}(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_handlerj` 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}nameids}(j: j7 j2 j/ u nametypes}(j: j2 uh}(j7 hj/ jj'j0jjjj 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.