&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](singlexe_devcoredump (C function)c.xe_devcoredumphNtauh1jhjhhhNhNubhdesc)}(hhh](hdesc_signature)}(h]void xe_devcoredump (struct xe_exec_queue *q, struct xe_sched_job *job, const char *fmt, ...)h]hdesc_signature_line)}(h\void xe_devcoredump(struct xe_exec_queue *q, struct xe_sched_job *job, const char *fmt, ...)h](hdesc_sig_keyword_type)}(hvoidh]hvoid}(hj<hhhNhNubah}(h]h ]ktah"]h$]h&]uh1j:hj6hhhi/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_devcoredump:13: ./drivers/gpu/drm/xe/xe_devcoredump.chMOubhdesc_sig_space)}(h h]h }(hjNhhhNhNubah}(h]h ]wah"]h$]h&]uh1jLhj6hhhjKhMOubh desc_name)}(hxe_devcoredumph]h desc_sig_name)}(hxe_devcoredumph]hxe_devcoredump}(hjehhhNhNubah}(h]h ]nah"]h$]h&]uh1jchj_ubah}(h]h ](sig-namedescnameeh"]h$]h&]hhuh1j]hj6hhhjKhMOubhdesc_parameterlist)}(hI(struct xe_exec_queue *q, struct xe_sched_job *job, const char *fmt, ...)h](hdesc_parameter)}(hstruct xe_exec_queue *qh](hdesc_sig_keyword)}(hstructh]hstruct}(hjhhhNhNubah}(h]h ]kah"]h$]h&]uh1jhjubjM)}(h h]h }(hjhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjubh)}(hhh]jd)}(h xe_exec_queueh]h xe_exec_queue}(hjhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjubah}(h]h ]h"]h$]h&] refdomaincreftype identifier reftargetjmodnameN classnameN c:parent_keysphinx.domains.c LookupKey)}data]j ASTIdentifier)}jjgsbc.xe_devcoredumpasbuh1hhjubjM)}(h h]h }(hjhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjubhdesc_sig_punctuation)}(h*h]h*}(hjhhhNhNubah}(h]h ]pah"]h$]h&]uh1jhjubjd)}(hqh]hq}(hjhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj~ubj)}(hstruct xe_sched_job *jobh](j)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjM)}(h h]h }(hjhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjubh)}(hhh]jd)}(h xe_sched_jobh]h xe_sched_job}(hj)hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj&ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj+modnameN classnameNjj)}j]jc.xe_devcoredumpasbuh1hhjubjM)}(h h]h }(hjGhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjubj)}(hjh]h*}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjd)}(hjobh]hjob}(hjbhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj~ubj)}(hconst char *fmth](j)}(hconsth]hconst}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubjM)}(h h]h }(hjhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjwubj;)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjwubjM)}(h h]h }(hjhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjwubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubjd)}(hfmth]hfmt}(hjhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjwubeh}(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&]hhuh1j|hj6hhhjKhMOubeh}(h]h ]h"]h$]h&]hh add_permalinkuh1j4sphinx_line_type declaratorhj0hhhjKhMOubah}(h]j'ah ](sig sig-objecteh"]h$]h&] is_multiline _toc_parts) _toc_namehuh1j.hjKhMOhj+hhubh desc_content)}(hhh]h)}(h;Take the required snapshots and initialize coredump device.h]h;Take the required snapshots and initialize coredump device.}(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.chMFhj hhubah}(h]h ]h"]h$]h&]uh1jhj+hhhjKhMOubeh}(h]h ](jfunctioneh"]h$]h&]domainjobjtypej%desctypej%noindex noindexentrynocontentsentryuh1j)hhhjhNhNubh container)}(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)}(hj7h]h Parameters}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j2hj5ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_devcoredump:13: ./drivers/gpu/drm/xe/xe_devcoredump.chMJhj1ubj")}(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)}(hjVh]hstruct xe_exec_queue *q}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjTubah}(h]h ]h"]h$]h&]uh1j,hi/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_devcoredump:13: ./drivers/gpu/drm/xe/xe_devcoredump.chMGhjPubjN)}(hhh]h)}(h7The faulty xe_exec_queue, where the issue was detected.h]h7The faulty xe_exec_queue, where the issue was detected.}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1hhjkhMGhjlubah}(h]h ]h"]h$]h&]uh1jMhjPubeh}(h]h ]h"]h$]h&]uh1j&hjkhMGhjMubj')}(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.chMHhjubjN)}(hhh]h)}(h6The faulty xe_sched_job, where the issue was detected.h]h6The faulty xe_sched_job, where the issue was detected.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMHhjubah}(h]h ]h"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]uh1j&hjhMHhjMubj')}(hR``const char *fmt`` Printf format + args to describe the reason for the core dump h](j-)}(h``const char *fmt``h]h)}(hjh]hconst char *fmt}(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.chMIhjubjN)}(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&]uh1hhjhMIhjubah}(h]h ]h"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]uh1j&hjhMIhjMubj')}(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.chMLhjubjN)}(hhh]h)}(hvariable argumentsh]hvariable arguments}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMLhjubah}(h]h ]h"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]uh1j&hjhMLhjMubeh}(h]h ]h"]h$]h&]uh1j!hj1ubh)}(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.chMNhj1ubh)}(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.}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_devcoredump:13: ./drivers/gpu/drm/xe/xe_devcoredump.chMKhj1ubeh}(h]h ] kernelindentah"]h$]h&]uh1j/hjhhhNhNubj)}(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}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj}hhhi/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_devcoredump:13: ./drivers/gpu/drm/xe/xe_devcoredump.chMubjM)}(h h]h }(hjhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj}hhhjhMubj^)}(hxe_print_blob_ascii85h]jd)}(hxe_print_blob_ascii85h]hxe_print_blob_ascii85}(hjhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjubah}(h]h ](jwjxeh"]h$]h&]hhuh1j]hj}hhhjhMubj})}(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](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjM)}(h h]h }(hjhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjubh)}(hhh]jd)}(h drm_printerh]h drm_printer}(hjhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjsbc.xe_print_blob_ascii85asbuh1hhjubjM)}(h h]h }(hjhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjd)}(hjh]hp}(hjhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubj)}(hconst char *prefixh](j)}(hj}h]hconst}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubjM)}(h h]h }(hj<hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj+ubj;)}(hcharh]hchar}(hjJhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hj+ubjM)}(h h]h }(hjXhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhj+ubj)}(hjh]h*}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubjd)}(hprefixh]hprefix}(hjshhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchj+ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubj)}(h char suffixh](j;)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubjM)}(h h]h }(hjhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjubjd)}(hsuffixh]hsuffix}(hjhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubj)}(hconst void *blobh](j)}(hj}h]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjM)}(h h]h }(hjhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjubj;)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jGah"]h$]h&]uh1j:hjubjM)}(h h]h }(hjhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjd)}(hblobh]hblob}(hjhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubj)}(h size_t offseth](h)}(hhh]jd)}(hsize_th]hsize_t}(hj!hhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj#modnameN classnameNjj)}j]jc.xe_print_blob_ascii85asbuh1hhjubjM)}(h h]h }(hj?hhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjubjd)}(hoffseth]hoffset}(hjMhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubj)}(h size_t sizeh](h)}(hhh]jd)}(hsize_th]hsize_t}(hjihhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjfubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjkmodnameN classnameNjj)}j]jc.xe_print_blob_ascii85asbuh1hhjbubjM)}(h h]h }(hjhhhNhNubah}(h]h ]jYah"]h$]h&]uh1jLhjbubjd)}(hsizeh]hsize}(hjhhhNhNubah}(h]h ]jpah"]h$]h&]uh1jchjbubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubeh}(h]h ]h"]h$]h&]hhuh1j|hj}hhhjhMubeh}(h]h ]h"]h$]h&]hhjuh1j4jjhjyhhhjhMubah}(h]jtah ](jjeh"]h$]h&]jj)jhuh1j.hjhMhjvhhubj )}(hhh]h)}(h/print a BLOB to some useful location in ASCII85h]h/print a BLOB to some useful location in ASCII85}(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&]uh1jhjvhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]j)jj*jj+jj,j-j.uh1j)hhhjhNhNubj0)}(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)}(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')}(h:``struct drm_printer *p`` the printer object to output to h](j-)}(h``struct drm_printer *p``h]h)}(hjh]hstruct drm_printer *p}(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)}(hthe printer object to output toh]hthe printer object to output to}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]uh1j&hjhMhjubj')}(h?``const char *prefix`` optional prefix to add to output string h](j-)}(h``const char *prefix``h]h)}(hj9h]hconst char *prefix}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj7ubah}(h]h ]h"]h$]h&]uh1j,hi/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_devcoredump:13: ./drivers/gpu/drm/xe/xe_devcoredump.chMhj3ubjN)}(hhh]h)}(h'optional prefix to add to output stringh]h'optional prefix to add to output string}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjNhMhjOubah}(h]h ]h"]h$]h&]uh1jMhj3ubeh}(h]h ]h"]h$]h&]uh1j&hjNhMhjubj')}(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)}(hjrh]h char suffix}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1hhjpubah}(h]h ]h"]h$]h&]uh1j,hi/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_devcoredump:13: ./drivers/gpu/drm/xe/xe_devcoredump.chMhjlubjN)}(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 }(hjhhhNhNubj3)}(h**p**h]hp}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j2hjubeh}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_devcoredump:13: ./drivers/gpu/drm/xe/xe_devcoredump.chMhjubah}(h]h ]h"]h$]h&]uh1jMhjlubeh}(h]h ]h"]h$]h&]uh1j&hjhMhjubj')}(h9``const void *blob`` the Binary Large OBject to dump out h](j-)}(h``const void *blob``h]h)}(hjh]hconst void *blob}(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)}(h#the Binary Large OBject to dump outh]h#the Binary Large OBject to dump out}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]uh1j&hjhMhjubj')}(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)}(hjh]h size_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.chMhjubjN)}(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&]uh1jMhjubeh}(h]h ]h"]h$]h&]uh1j&hj hMhjubj')}(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)}(hjE hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjA hMhjB ubah}(h]h ]h"]h$]h&]uh1jMhj& ubeh}(h]h ]h"]h$]h&]uh1j&hjA hMhjubeh}(h]h ]h"]h$]h&]uh1j!hjubh)}(h**Description**h]j3)}(hjg h]h Description}(hji hhhNhNubah}(h]h ]h"]h$]h&]uh1j2hje ubah}(h]h ]h"]h$]h&]uh1hhi/var/lib/git/docbuild/linux/Documentation/gpu/xe/xe_devcoredump:13: ./drivers/gpu/drm/xe/xe_devcoredump.chMhjubh)}(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.chMhjubh)}(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.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j/hjhhhNhNubeh}(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 j j j u nametypes}(j j uh}(j hj jj'j0jtjyu 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.