€• FŒsphinx.addnodes”Œdocument”“”)”}”(Œ rawsource”Œ”Œchildren”]”(Œ translations”Œ LanguagesNode”“”)”}”(hhh]”(hŒ pending_xref”“”)”}”(hhh]”Œdocutils.nodes”ŒText”“”ŒChinese (Simplified)”…””}”Œparent”hsbaŒ attributes”}”(Œids”]”Œclasses”]”Œnames”]”Œdupnames”]”Œbackrefs”]”Œ refdomain”Œstd”Œreftype”Œdoc”Œ reftarget”Œ(/translations/zh_CN/gpu/amdgpu/debugging”Œmodname”NŒ classname”NŒ refexplicit”ˆuŒtagname”hhh ubh)”}”(hhh]”hŒChinese (Traditional)”…””}”hh2sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ(/translations/zh_TW/gpu/amdgpu/debugging”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒItalian”…””}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ(/translations/it_IT/gpu/amdgpu/debugging”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒJapanese”…””}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ(/translations/ja_JP/gpu/amdgpu/debugging”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒKorean”…””}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ(/translations/ko_KR/gpu/amdgpu/debugging”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒPortuguese (Brazilian)”…””}”hh‚sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ(/translations/pt_BR/gpu/amdgpu/debugging”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒSpanish”…””}”hh–sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ(/translations/sp_SP/gpu/amdgpu/debugging”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubeh}”(h]”h ]”h"]”h$]”h&]”Œcurrent_language”ŒEnglish”uh1h hhŒ _document”hŒsource”NŒline”NubhŒsection”“”)”}”(hhh]”(hŒtitle”“”)”}”(hŒ GPU Debugging”h]”hŒ GPU Debugging”…””}”(hh¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhh·h²hh³ŒB/var/lib/git/docbuild/linux/Documentation/gpu/amdgpu/debugging.rst”h´Kubh¶)”}”(hhh]”(h»)”}”(hŒGeneral Debugging Options”h]”hŒGeneral Debugging Options”…””}”(hhÎh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhhËh²hh³hÊh´KubhŒ paragraph”“”)”}”(hŒcThe DebugFS section provides documentation on a number files to aid in debugging issues on the GPU.”h]”hŒcThe DebugFS section provides documentation on a number files to aid in debugging issues on the GPU.”…””}”(hhÞh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´KhhËh²hubeh}”(h]”Œgeneral-debugging-options”ah ]”h"]”Œgeneral debugging options”ah$]”h&]”uh1hµhh·h²hh³hÊh´Kubh¶)”}”(hhh]”(h»)”}”(hŒGPUVM Debugging”h]”hŒGPUVM Debugging”…””}”(hh÷h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhhôh²hh³hÊh´K ubhÝ)”}”(hŒsTo aid in debugging GPU virtual memory related problems, the driver supports a number of options module parameters:”h]”hŒsTo aid in debugging GPU virtual memory related problems, the driver supports a number of options module parameters:”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´Khhôh²hubhÝ)”}”(hŒO`vm_fault_stop` - If non-0, halt the GPU memory controller on a GPU page fault.”h]”(hŒtitle_reference”“”)”}”(hŒ`vm_fault_stop`”h]”hŒ vm_fault_stop”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubhŒ@ - If non-0, halt the GPU memory controller on a GPU page fault.”…””}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´Khhôh²hubhÝ)”}”(hŒW`vm_update_mode` - If non-0, use the CPU to update GPU page tables rather than the GPU.”h]”(j)”}”(hŒ`vm_update_mode`”h]”hŒvm_update_mode”…””}”(hj5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj1ubhŒG - If non-0, use the CPU to update GPU page tables rather than the GPU.”…””}”(hj1h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´Khhôh²hubeh}”(h]”Œgpuvm-debugging”ah ]”h"]”Œgpuvm debugging”ah$]”h&]”uh1hµhh·h²hh³hÊh´K ubh¶)”}”(hhh]”(h»)”}”(hŒDecoding a GPUVM Page Fault”h]”hŒDecoding a GPUVM Page Fault”…””}”(hjXh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjUh²hh³hÊh´KubhÝ)”}”(hŒ¶If you see a GPU page fault in the kernel log, you can decode it to figure out what is going wrong in your application. A page fault in your kernel log may look something like this:”h]”hŒ¶If you see a GPU page fault in the kernel log, you can decode it to figure out what is going wrong in your application. A page fault in your kernel log may look something like this:”…””}”(hjfh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´KhjUh²hubhŒ literal_block”“”)”}”(hX”[gfxhub0] no-retry page fault (src_id:0 ring:24 vmid:3 pasid:32777, for process glxinfo pid 2424 thread glxinfo:cs0 pid 2425) in page starting at address 0x0000800102800000 from IH client 0x1b (UTCL2) VM_L2_PROTECTION_FAULT_STATUS:0x00301030 Faulty UTCL2 client ID: TCP (0x8) MORE_FAULTS: 0x0 WALKER_ERROR: 0x0 PERMISSION_FAULTS: 0x3 MAPPING_ERROR: 0x0 RW: 0x0”h]”hX”[gfxhub0] no-retry page fault (src_id:0 ring:24 vmid:3 pasid:32777, for process glxinfo pid 2424 thread glxinfo:cs0 pid 2425) in page starting at address 0x0000800102800000 from IH client 0x1b (UTCL2) VM_L2_PROTECTION_FAULT_STATUS:0x00301030 Faulty UTCL2 client ID: TCP (0x8) MORE_FAULTS: 0x0 WALKER_ERROR: 0x0 PERMISSION_FAULTS: 0x3 MAPPING_ERROR: 0x0 RW: 0x0”…””}”hjvsbah}”(h]”h ]”h"]”h$]”h&]”Œ xml:space”Œpreserve”uh1jth³hÊh´K!hjUh²hubhÝ)”}”(hŒÄFirst you have the memory hub, gfxhub and mmhub. gfxhub is the memory hub used for graphics, compute, and sdma on some chips. mmhub is the memory hub used for multi-media and sdma on some chips.”h]”hŒÄFirst you have the memory hub, gfxhub and mmhub. gfxhub is the memory hub used for graphics, compute, and sdma on some chips. mmhub is the memory hub used for multi-media and sdma on some chips.”…””}”(hj†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´K+hjUh²hubhÝ)”}”(hXNNext you have the vmid and pasid. If the vmid is 0, this fault was likely caused by the kernel driver or firmware. If the vmid is non-0, it is generally a fault in a user application. The pasid is used to link a vmid to a system process id. If the process is active when the fault happens, the process information will be printed.”h]”hXNNext you have the vmid and pasid. If the vmid is 0, this fault was likely caused by the kernel driver or firmware. If the vmid is non-0, it is generally a fault in a user application. The pasid is used to link a vmid to a system process id. If the process is active when the fault happens, the process information will be printed.”…””}”(hj”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´K/hjUh²hubhÝ)”}”(hŒ9The GPU virtual address that caused the fault comes next.”h]”hŒ9The GPU virtual address that caused the fault comes next.”…””}”(hj¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´K5hjUh²hubhÝ)”}”(hŒTThe client ID indicates the GPU block that caused the fault. Some common client IDs:”h]”hŒTThe client ID indicates the GPU block that caused the fault. Some common client IDs:”…””}”(hj°h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´K7hjUh²hubhŒ bullet_list”“”)”}”(hhh]”(hŒ list_item”“”)”}”(hŒ3CB/DB: The color/depth backend of the graphics pipe”h]”hÝ)”}”(hjÇh]”hŒ3CB/DB: The color/depth backend of the graphics pipe”…””}”(hjÉh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´K:hjÅubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhjÀh²hh³hÊh´NubjÄ)”}”(hŒCPF: Command Processor Frontend”h]”hÝ)”}”(hjÞh]”hŒCPF: Command Processor Frontend”…””}”(hjàh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´K;hjÜubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhjÀh²hh³hÊh´NubjÄ)”}”(hŒCPC: Command Processor Compute”h]”hÝ)”}”(hjõh]”hŒCPC: Command Processor Compute”…””}”(hj÷h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´Khj!ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhjÀh²hh³hÊh´NubjÄ)”}”(hŒSDMA: SDMA engines”h]”hÝ)”}”(hj:h]”hŒSDMA: SDMA engines”…””}”(hj<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´K?hj8ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhjÀh²hh³hÊh´NubjÄ)”}”(hŒ VCN: Video encode/decode engines”h]”hÝ)”}”(hjQh]”hŒ VCN: Video encode/decode engines”…””}”(hjSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´K@hjOubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhjÀh²hh³hÊh´NubjÄ)”}”(hŒJPEG: JPEG engines ”h]”hÝ)”}”(hŒJPEG: JPEG engines”h]”hŒJPEG: JPEG engines”…””}”(hjjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´KAhjfubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhjÀh²hh³hÊh´Nubeh}”(h]”h ]”h"]”h$]”h&]”Œbullet”Œ-”uh1j¾h³hÊh´K:hjUh²hubhÝ)”}”(hŒ8PERMISSION_FAULTS describe what faults were encountered:”h]”hŒ8PERMISSION_FAULTS describe what faults were encountered:”…””}”(hj†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´KChjUh²hubj¿)”}”(hhh]”(jÄ)”}”(hŒbit 0: the PTE was not valid”h]”hÝ)”}”(hj™h]”hŒbit 0: the PTE was not valid”…””}”(hj›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´KEhj—ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhj”h²hh³hÊh´NubjÄ)”}”(hŒ#bit 1: the PTE read bit was not set”h]”hÝ)”}”(hj°h]”hŒ#bit 1: the PTE read bit was not set”…””}”(hj²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´KFhj®ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhj”h²hh³hÊh´NubjÄ)”}”(hŒ$bit 2: the PTE write bit was not set”h]”hÝ)”}”(hjÇh]”hŒ$bit 2: the PTE write bit was not set”…””}”(hjÉh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´KGhjÅubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhj”h²hh³hÊh´NubjÄ)”}”(hŒ'bit 3: the PTE execute bit was not set ”h]”hÝ)”}”(hŒ&bit 3: the PTE execute bit was not set”h]”hŒ&bit 3: the PTE execute bit was not set”…””}”(hjàh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´KHhjÜubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhj”h²hh³hÊh´Nubeh}”(h]”h ]”h"]”h$]”h&]”j„j…uh1j¾h³hÊh´KEhjUh²hubhÝ)”}”(hŒHFinally, RW, indicates whether the access was a read (0) or a write (1).”h]”hŒHFinally, RW, indicates whether the access was a read (0) or a write (1).”…””}”(hjúh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´KJhjUh²hubhÝ)”}”(hXIn the example above, a shader (cliend id = TCP) generated a read (RW = 0x0) to an invalid page (PERMISSION_FAULTS = 0x3) at GPU virtual address 0x0000800102800000. The user can then inspect their shader code and resource descriptor state to determine what caused the GPU page fault.”h]”hXIn the example above, a shader (cliend id = TCP) generated a read (RW = 0x0) to an invalid page (PERMISSION_FAULTS = 0x3) at GPU virtual address 0x0000800102800000. The user can then inspect their shader code and resource descriptor state to determine what caused the GPU page fault.”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´KLhjUh²hubeh}”(h]”Œdecoding-a-gpuvm-page-fault”ah ]”h"]”Œdecoding a gpuvm page fault”ah$]”h&]”uh1hµhh·h²hh³hÊh´Kubh¶)”}”(hhh]”(h»)”}”(hŒUMR”h]”hŒUMR”…””}”(hj!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjh²hh³hÊh´KRubhÝ)”}”(hŒç`umr `_ is a general purpose GPU debugging and diagnostics tool. Please see the umr `documentation `_ for more information about its capabilities.”h]”(hŒ reference”“”)”}”(hŒ6`umr `_”h]”hŒumr”…””}”(hj5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”Œumr”Œrefuri”Œ-https://gitlab.freedesktop.org/tomstdenis/umr”uh1j3hj/ubhŒtarget”“”)”}”(hŒ0 ”h]”h}”(h]”Œid1”ah ]”h"]”Œumr”ah$]”h&]”Œrefuri”jFuh1jGŒ referenced”Khj/ubhŒN is a general purpose GPU debugging and diagnostics tool. Please see the umr ”…””}”(hj/h²hh³Nh´Nubj4)”}”(hŒ6`documentation `_”h]”hŒ documentation”…””}”(hj[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”Œ documentation”jEŒ#https://umr.readthedocs.io/en/main/”uh1j3hj/ubjH)”}”(hŒ& ”h]”h}”(h]”Œ documentation”ah ]”h"]”Œ documentation”ah$]”h&]”Œrefuri”jkuh1jGjVKhj/ubhŒ- for more information about its capabilities.”…””}”(hj/h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´KThjh²hubeh}”(h]”Œumr”ah ]”h"]”h$]”jRah&]”uh1hµhh·h²hh³hÊh´KRjVKubh¶)”}”(hhh]”(h»)”}”(hŒDebugging backlight brightness”h]”hŒDebugging backlight brightness”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjŠh²hh³hÊh´KZubhÝ)”}”(hXDefault backlight brightness is intended to be set via the policy advertised by the firmware. Firmware will often provide different defaults for AC or DC. Furthermore, some userspace software will save backlight brightness during the previous boot and attempt to restore it.”h]”hXDefault backlight brightness is intended to be set via the policy advertised by the firmware. Firmware will often provide different defaults for AC or DC. Furthermore, some userspace software will save backlight brightness during the previous boot and attempt to restore it.”…””}”(hj›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´K[hjŠh²hubhÝ)”}”(hŒßSome firmware also has support for a feature called "Custom Backlight Curves" where an input value for brightness is mapped along a linearly interpolated curve of brightness values that better match display characteristics.”h]”hŒãSome firmware also has support for a feature called “Custom Backlight Curves†where an input value for brightness is mapped along a linearly interpolated curve of brightness values that better match display characteristics.”…””}”(hj©h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´K`hjŠh²hubhÝ)”}”(hXIn the event of problems happening with backlight, there is a trace event that can be enabled at bootup to log every brightness change request. This can help isolate where the problem is. To enable the trace event add the following to the kernel command line:”h]”hXIn the event of problems happening with backlight, there is a trace event that can be enabled at bootup to log every brightness change request. This can help isolate where the problem is. To enable the trace event add the following to the kernel command line:”…””}”(hj·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´KdhjŠh²hubhŒ block_quote”“”)”}”(hŒQtp_printk trace_event=amdgpu_dm:amdgpu_dm_brightness:mod:amdgpu trace_buf_size=1M”h]”hÝ)”}”(hjÉh]”hŒQtp_printk trace_event=amdgpu_dm:amdgpu_dm_brightness:mod:amdgpu trace_buf_size=1M”…””}”(hjËh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´KihjÇubah}”(h]”h ]”h"]”h$]”h&]”uh1jÅh³hÊh´KihjŠh²hubeh}”(h]”Œdebugging-backlight-brightness”ah ]”h"]”Œdebugging backlight brightness”ah$]”h&]”uh1hµhh·h²hh³hÊh´KZubeh}”(h]”Œ gpu-debugging”ah ]”h"]”Œ gpu debugging”ah$]”h&]”uh1hµhhh²hh³hÊh´Kubeh}”(h]”h ]”h"]”h$]”h&]”Œsource”hÊuh1hŒcurrent_source”NŒ current_line”NŒsettings”Œdocutils.frontend”ŒValues”“”)”}”(hºNŒ generator”NŒ datestamp”NŒ source_link”NŒ source_url”NŒ toc_backlinks”Œentry”Œfootnote_backlinks”KŒ sectnum_xform”KŒstrip_comments”NŒstrip_elements_with_classes”NŒ strip_classes”NŒ report_level”KŒ halt_level”KŒexit_status_level”KŒdebug”NŒwarning_stream”NŒ traceback”ˆŒinput_encoding”Œ utf-8-sig”Œinput_encoding_error_handler”Œstrict”Œoutput_encoding”Œutf-8”Œoutput_encoding_error_handler”jŒerror_encoding”Œutf-8”Œerror_encoding_error_handler”Œbackslashreplace”Œ language_code”Œen”Œrecord_dependencies”NŒconfig”NŒ id_prefix”hŒauto_id_prefix”Œid”Œ dump_settings”NŒdump_internals”NŒdump_transforms”NŒdump_pseudo_xml”NŒexpose_internals”NŒstrict_visitor”NŒ_disable_config”NŒ_source”hÊŒ _destination”NŒ _config_files”]”Œ7/var/lib/git/docbuild/linux/Documentation/docutils.conf”aŒfile_insertion_enabled”ˆŒ raw_enabled”KŒline_length_limit”M'Œpep_references”NŒ pep_base_url”Œhttps://peps.python.org/”Œpep_file_url_template”Œpep-%04d”Œrfc_references”NŒ rfc_base_url”Œ&https://datatracker.ietf.org/doc/html/”Œ tab_width”KŒtrim_footnote_reference_space”‰Œsyntax_highlight”Œlong”Œ smart_quotes”ˆŒsmartquotes_locales”]”Œcharacter_level_inline_markup”‰Œdoctitle_xform”‰Œ docinfo_xform”KŒsectsubtitle_xform”‰Œ image_loading”Œlink”Œembed_stylesheet”‰Œcloak_email_addresses”ˆŒsection_self_link”‰Œenv”NubŒreporter”NŒindirect_targets”]”Œsubstitution_defs”}”Œsubstitution_names”}”Œrefnames”}”Œrefids”}”Œnameids”}”(jëjèhñhîjRjOjjŒumr”jOjujrjãjàuŒ nametypes”}”(jë‰hñ‰jR‰j‰jUˆjuˆjã‰uh}”(jèh·hîhËjOhôjjUj…jjOjIjrjljàjŠuŒ footnote_refs”}”Œ citation_refs”}”Œ autofootnotes”]”Œautofootnote_refs”]”Œsymbol_footnotes”]”Œsymbol_footnote_refs”]”Œ footnotes”]”Œ citations”]”Œautofootnote_start”KŒsymbol_footnote_start”KŒ id_counter”Œ collections”ŒCounter”“”}”jKs…”R”Œparse_messages”]”hŒsystem_message”“”)”}”(hhh]”hÝ)”}”(hŒ&Duplicate implicit target name: "umr".”h]”hŒ*Duplicate implicit target name: “umrâ€.”…””}”(hjyh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜhjvubah}”(h]”h ]”h"]”h$]”h&]”jOaŒlevel”KŒtype”ŒINFO”Œsource”hÊŒline”Kuh1jthjh²hh³hÊh´KWubaŒtransform_messages”]”Œ transformer”NŒ include_log”]”Œ decoration”Nh²hub.