€•¿®Œ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/trace/coresight/panic”Œ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/trace/coresight/panic”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒItalian”…””}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ)/translations/it_IT/trace/coresight/panic”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒJapanese”…””}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ)/translations/ja_JP/trace/coresight/panic”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒKorean”…””}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ)/translations/ko_KR/trace/coresight/panic”Œ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/trace/coresight/panic”Œ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/trace/coresight/panic”Œ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Œ3Using Coresight for Kernel panic and Watchdog reset”h]”hŒ3Using Coresight for Kernel panic and Watchdog reset”…””}”(hh¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhh·h²hh³ŒC/var/lib/git/docbuild/linux/Documentation/trace/coresight/panic.rst”h´Kubh¶)”}”(hhh]”(h»)”}”(hŒ Introduction”h]”hŒ Introduction”…””}”(hhÎh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhhËh²hh³hÊh´KubhŒ paragraph”“”)”}”(hŒsThis documentation is about using Linux coresight trace support to debug kernel panic and watchdog reset scenarios.”h]”hŒsThis documentation is about using Linux coresight trace support to debug kernel panic and watchdog reset scenarios.”…””}”(hhÞh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´KhhËh²hubeh}”(h]”Œ introduction”ah ]”h"]”Œ introduction”ah$]”h&]”uh1hµhh·h²hh³hÊh´Kubh¶)”}”(hhh]”(h»)”}”(hŒ#Coresight trace during Kernel panic”h]”hŒ#Coresight trace during Kernel panic”…””}”(hh÷h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhhôh²hh³hÊh´K ubhÝ)”}”(hŒjFrom the coresight driver point of view, addressing the kernel panic situation has four main requirements.”h]”hŒjFrom the coresight driver point of view, addressing the kernel panic situation has four main requirements.”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´K hhôh²hubhŒenumerated_list”“”)”}”(hhh]”(hŒ list_item”“”)”}”(hŒ¨Support for allocation of trace buffer pages from reserved memory area. Platform can advertise this using a new device tree property added to relevant coresight nodes. ”h]”hÝ)”}”(hŒ§Support for allocation of trace buffer pages from reserved memory area. Platform can advertise this using a new device tree property added to relevant coresight nodes.”h]”hŒ§Support for allocation of trace buffer pages from reserved memory area. Platform can advertise this using a new device tree property added to relevant coresight nodes.”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´Khjubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjh²hh³hÊh´Nubj)”}”(hŒ;Support for stopping coresight blocks at the time of panic ”h]”hÝ)”}”(hŒ:Support for stopping coresight blocks at the time of panic”h]”hŒ:Support for stopping coresight blocks at the time of panic”…””}”(hj6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´Khj2ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjh²hh³hÊh´Nubj)”}”(hŒ1Saving required metadata in the specified format ”h]”hÝ)”}”(hŒ0Saving required metadata in the specified format”h]”hŒ0Saving required metadata in the specified format”…””}”(hjNh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´KhjJubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjh²hh³hÊh´Nubj)”}”(hŒ=Support for reading trace data captured at the time of panic ”h]”hÝ)”}”(hŒExternal out --->CTI -->External In---->ETR/ETF stop”h]”hŒ[ Trigger on panic Comparator --->External out --->CTI -->External In---->ETR/ETF stop”…””}”hj÷sbah}”(h]”h ]”h"]”h$]”h&]”Œ xml:space”Œpreserve”uh1jõh³hÊh´K4hjÈh²hubeh}”(h]”Œ/disabling-coresight-blocks-at-the-time-of-panic”ah ]”h"]”Œ/disabling coresight blocks at the time of panic”ah$]”h&]”uh1hµhhôh²hh³hÊh´K,ubh¶)”}”(hhh]”(h»)”}”(hŒ+Saving metadata at the time of kernel panic”h]”hŒ+Saving metadata at the time of kernel panic”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjh²hh³hÊh´K8ubhÝ)”}”(hŒ¯Coresight metadata involves all additional data that are required for a successful trace decode in addition to the trace data. This involves ETR/ETF/ETB register snapshot etc.”h]”hŒ¯Coresight metadata involves all additional data that are required for a successful trace decode in addition to the trace data. This involves ETR/ETF/ETB register snapshot etc.”…””}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´K9hjh²hubhÝ)”}”(hŒaA new optional device property "memory-region" is added to the ETR/ETF/ETB device nodes for this.”h]”hŒeA new optional device property “memory-region†is added to the ETR/ETF/ETB device nodes for this.”…””}”(hj.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´K=hjh²hubeh}”(h]”Œ+saving-metadata-at-the-time-of-kernel-panic”ah ]”h"]”Œ+saving metadata at the time of kernel panic”ah$]”h&]”uh1hµhhôh²hh³hÊh´K8ubh¶)”}”(hhh]”(h»)”}”(hŒ0Reading trace data captured at the time of panic”h]”hŒ0Reading trace data captured at the time of panic”…””}”(hjGh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjDh²hh³hÊh´KAubhÝ)”}”(hŒßTrace data captured at the time of panic, can be read from rebooted kernel or from crashdump kernel using a special device file /dev/crash_tmc_xxx. This device file is created only when there is a valid crashdata available.”h]”hŒßTrace data captured at the time of panic, can be read from rebooted kernel or from crashdump kernel using a special device file /dev/crash_tmc_xxx. This device file is created only when there is a valid crashdata available.”…””}”(hjUh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´KBhjDh²hubeh}”(h]”Œ0reading-trace-data-captured-at-the-time-of-panic”ah ]”h"]”Œ0reading trace data captured at the time of panic”ah$]”h&]”uh1hµhhôh²hh³hÊh´KAubh¶)”}”(hhh]”(h»)”}”(hŒ@General flow of trace capture and decode in case of kernel panic”h]”hŒ@General flow of trace capture and decode in case of kernel panic”…””}”(hjnh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjkh²hh³hÊh´KGubj)”}”(hhh]”(j)”}”(hŒ´Enable source and sink on all the cores using the sysfs interface. ETR sinks should have trace buffers allocated from reserved memory, by selecting "resrv" buffer mode from sysfs. ”h]”hÝ)”}”(hŒ³Enable source and sink on all the cores using the sysfs interface. ETR sinks should have trace buffers allocated from reserved memory, by selecting "resrv" buffer mode from sysfs.”h]”hŒ·Enable source and sink on all the cores using the sysfs interface. ETR sinks should have trace buffers allocated from reserved memory, by selecting “resrv†buffer mode from sysfs.”…””}”(hjƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´KHhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj|h²hh³hÊh´Nubj)”}”(hŒRun relevant tests. ”h]”hÝ)”}”(hŒRun relevant tests.”h]”hŒRun relevant tests.”…””}”(hj›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´KLhj—ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj|h²hh³hÊh´Nubj)”}”(hŒ¨On a kernel panic, all coresight blocks are disabled, necessary metadata is synced by kernel panic handler. System would eventually reboot or boot a crashdump kernel. ”h]”(hÝ)”}”(hŒkOn a kernel panic, all coresight blocks are disabled, necessary metadata is synced by kernel panic handler.”h]”hŒkOn a kernel panic, all coresight blocks are disabled, necessary metadata is synced by kernel panic handler.”…””}”(hj³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´KNhj¯ubhÝ)”}”(hŒ:System would eventually reboot or boot a crashdump kernel.”h]”hŒ:System would eventually reboot or boot a crashdump kernel.”…””}”(hjÁh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´KQhj¯ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj|h²hh³hÊh´Nubj)”}”(hŒÄFor platforms that supports crashdump kernel, raw trace data can be dumped using the coresight sysfs interface from the crashdump kernel itself. Persistent RAM is not a requirement in this case. ”h]”hÝ)”}”(hŒÃFor platforms that supports crashdump kernel, raw trace data can be dumped using the coresight sysfs interface from the crashdump kernel itself. Persistent RAM is not a requirement in this case.”h]”hŒÃFor platforms that supports crashdump kernel, raw trace data can be dumped using the coresight sysfs interface from the crashdump kernel itself. Persistent RAM is not a requirement in this case.”…””}”(hjÙh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´KShjÕubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj|h²hh³hÊh´Nubj)”}”(hŒûFor platforms that supports persistent RAM, trace data can be dumped using the coresight sysfs interface in the subsequent Linux boot. Crashdump kernel is not a requirement in this case. Persistent RAM ensures that trace data is intact across reboot. ”h]”hÝ)”}”(hŒúFor platforms that supports persistent RAM, trace data can be dumped using the coresight sysfs interface in the subsequent Linux boot. Crashdump kernel is not a requirement in this case. Persistent RAM ensures that trace data is intact across reboot.”h]”hŒúFor platforms that supports persistent RAM, trace data can be dumped using the coresight sysfs interface in the subsequent Linux boot. Crashdump kernel is not a requirement in this case. Persistent RAM ensures that trace data is intact across reboot.”…””}”(hjñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´KWhjíubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj|h²hh³hÊh´Nubeh}”(h]”h ]”h"]”h$]”h&]”j€Œarabic”j‚hjƒj„uh1jhjkh²hh³hÊh´KHubeh}”(h]”Œ@general-flow-of-trace-capture-and-decode-in-case-of-kernel-panic”ah ]”h"]”Œ@general flow of trace capture and decode in case of kernel panic”ah$]”h&]”uh1hµhhôh²hh³hÊh´KGubeh}”(h]”Œ#coresight-trace-during-kernel-panic”ah ]”h"]”Œ#coresight trace during kernel panic”ah$]”h&]”uh1hµhh·h²hh³hÊh´K ubh¶)”}”(hhh]”(h»)”}”(hŒ%Coresight trace during Watchdog reset”h]”hŒ%Coresight trace during Watchdog reset”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjh²hh³hÊh´K]ubhÝ)”}”(hŒZThe main difference between addressing the watchdog reset and kernel panic case are below,”h]”hŒZThe main difference between addressing the watchdog reset and kernel panic case are below,”…””}”(hj-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´K^hjh²hubj)”}”(hhh]”(j)”}”(hŒŠSaving coresight metadata need to be taken care by the SCP(system control processor) firmware in the specified format, instead of kernel. ”h]”hÝ)”}”(hŒ‰Saving coresight metadata need to be taken care by the SCP(system control processor) firmware in the specified format, instead of kernel.”h]”hŒ‰Saving coresight metadata need to be taken care by the SCP(system control processor) firmware in the specified format, instead of kernel.”…””}”(hjBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´Kahj>ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj;h²hh³hÊh´Nubj)”}”(hŒ»Reserved memory region given by firmware for trace buffer and metadata has to be in persistent RAM. Note: This is a requirement for watchdog reset case but optional in kernel panic case. ”h]”hÝ)”}”(hŒºReserved memory region given by firmware for trace buffer and metadata has to be in persistent RAM. Note: This is a requirement for watchdog reset case but optional in kernel panic case.”h]”hŒºReserved memory region given by firmware for trace buffer and metadata has to be in persistent RAM. Note: This is a requirement for watchdog reset case but optional in kernel panic case.”…””}”(hjZh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´KehjVubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj;h²hh³hÊh´Nubeh}”(h]”h ]”h"]”h$]”h&]”j€jj‚hjƒj„uh1jhjh²hh³hÊh´KaubhÝ)”}”(hŒWWatchdog reset can be supported only on platforms that meet the above two requirements.”h]”hŒWWatchdog reset can be supported only on platforms that meet the above two requirements.”…””}”(hjth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´Kjhjh²hubeh}”(h]”Œ%coresight-trace-during-watchdog-reset”ah ]”h"]”Œ%coresight trace during watchdog reset”ah$]”h&]”uh1hµhh·h²hh³hÊh´K]ubh¶)”}”(hhh]”(h»)”}”(hŒ=Sample commands for testing a Kernel panic case with ETR sink”h]”hŒ=Sample commands for testing a Kernel panic case with ETR sink”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjŠh²hh³hÊh´Knubj)”}”(hhh]”(j)”}”(hŒ¬Boot Linux kernel with "crash_kexec_post_notifiers" added to the kernel bootargs. This is mandatory if the user would like to read the tracedata from the crashdump kernel. ”h]”hÝ)”}”(hŒ«Boot Linux kernel with "crash_kexec_post_notifiers" added to the kernel bootargs. This is mandatory if the user would like to read the tracedata from the crashdump kernel.”h]”hŒ¯Boot Linux kernel with “crash_kexec_post_notifiers†added to the kernel bootargs. This is mandatory if the user would like to read the tracedata from the crashdump kernel.”…””}”(hj¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´Kphjžubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj›h²hh³hÊh´Nubj)”}”(hŒrEnable the preloaded ETM configuration:: #echo 1 > /sys/kernel/config/cs-syscfg/configurations/panicstop/enable ”h]”(hÝ)”}”(hŒ(Enable the preloaded ETM configuration::”h]”hŒ'Enable the preloaded ETM configuration:”…””}”(hjºh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´Kthj¶ubjö)”}”(hŒF#echo 1 > /sys/kernel/config/cs-syscfg/configurations/panicstop/enable”h]”hŒF#echo 1 > /sys/kernel/config/cs-syscfg/configurations/panicstop/enable”…””}”hjÈsbah}”(h]”h ]”h"]”h$]”h&]”jjuh1jõh³hÊh´Kvhj¶ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj›h²hh³hÊh´Nubj)”}”(hXoConfigure CTI using sysfs interface:: #./cti_setup.sh #cat cti_setup.sh cd /sys/bus/coresight/devices/ ap_cti_config () { #ETM trig out[0] trigger to Channel 0 echo 0 4 > channels/trigin_attach } etf_cti_config () { #ETF Flush in trigger from Channel 0 echo 0 1 > channels/trigout_attach echo 1 > channels/trig_filter_enable } etr_cti_config () { #ETR Flush in from Channel 0 echo 0 1 > channels/trigout_attach echo 1 > channels/trig_filter_enable } ctidevs=`find . -name "cti*"` for i in $ctidevs do cd $i connection=`find . -name "ete*"` if [ ! -z "$connection" ] then echo "AP CTI config for $i" ap_cti_config fi connection=`find . -name "tmc_etf*"` if [ ! -z "$connection" ] then echo "ETF CTI config for $i" etf_cti_config fi connection=`find . -name "tmc_etr*"` if [ ! -z "$connection" ] then echo "ETR CTI config for $i" etr_cti_config fi cd .. done ”h]”(hÝ)”}”(hŒ%Configure CTI using sysfs interface::”h]”hŒ$Configure CTI using sysfs interface:”…””}”(hjàh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´KxhjÜubjö)”}”(hX#./cti_setup.sh #cat cti_setup.sh cd /sys/bus/coresight/devices/ ap_cti_config () { #ETM trig out[0] trigger to Channel 0 echo 0 4 > channels/trigin_attach } etf_cti_config () { #ETF Flush in trigger from Channel 0 echo 0 1 > channels/trigout_attach echo 1 > channels/trig_filter_enable } etr_cti_config () { #ETR Flush in from Channel 0 echo 0 1 > channels/trigout_attach echo 1 > channels/trig_filter_enable } ctidevs=`find . -name "cti*"` for i in $ctidevs do cd $i connection=`find . -name "ete*"` if [ ! -z "$connection" ] then echo "AP CTI config for $i" ap_cti_config fi connection=`find . -name "tmc_etf*"` if [ ! -z "$connection" ] then echo "ETF CTI config for $i" etf_cti_config fi connection=`find . -name "tmc_etr*"` if [ ! -z "$connection" ] then echo "ETR CTI config for $i" etr_cti_config fi cd .. done”h]”hX#./cti_setup.sh #cat cti_setup.sh cd /sys/bus/coresight/devices/ ap_cti_config () { #ETM trig out[0] trigger to Channel 0 echo 0 4 > channels/trigin_attach } etf_cti_config () { #ETF Flush in trigger from Channel 0 echo 0 1 > channels/trigout_attach echo 1 > channels/trig_filter_enable } etr_cti_config () { #ETR Flush in from Channel 0 echo 0 1 > channels/trigout_attach echo 1 > channels/trig_filter_enable } ctidevs=`find . -name "cti*"` for i in $ctidevs do cd $i connection=`find . -name "ete*"` if [ ! -z "$connection" ] then echo "AP CTI config for $i" ap_cti_config fi connection=`find . -name "tmc_etf*"` if [ ! -z "$connection" ] then echo "ETF CTI config for $i" etf_cti_config fi connection=`find . -name "tmc_etr*"` if [ ! -z "$connection" ] then echo "ETR CTI config for $i" etr_cti_config fi cd .. done”…””}”hjîsbah}”(h]”h ]”h"]”h$]”h&]”jjuh1jõh³hÊh´KzhjÜubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj›h²hh³hÊh´Nubeh}”(h]”h ]”h"]”h$]”h&]”j€j j‚hjƒj„uh1jhjŠh²hh³hÊh´KpubhÝ)”}”(hŒ^Note: CTI connections are SOC specific and hence the above script is added just for reference.”h]”hŒ^Note: CTI connections are SOC specific and hence the above script is added just for reference.”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´K°hjŠh²hubj)”}”(hhh]”(j)”}”(hŒvChoose reserved buffer mode for ETR buffer:: #echo "resrv" > /sys/bus/coresight/devices/tmc_etr0/buf_mode_preferred ”h]”(hÝ)”}”(hŒ,Choose reserved buffer mode for ETR buffer::”h]”hŒ+Choose reserved buffer mode for ETR buffer:”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´K³hjubjö)”}”(hŒF#echo "resrv" > /sys/bus/coresight/devices/tmc_etr0/buf_mode_preferred”h]”hŒF#echo "resrv" > /sys/bus/coresight/devices/tmc_etr0/buf_mode_preferred”…””}”hj+sbah}”(h]”h ]”h"]”h$]”h&]”jjuh1jõh³hÊh´Kµhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhjh²hh³hÊh´Nubj)”}”(hŒkEnable stop on flush trigger configuration:: #echo 1 > /sys/bus/coresight/devices/tmc_etr0/stop_on_flush ”h]”(hÝ)”}”(hŒ,Enable stop on flush trigger configuration::”h]”hŒ+Enable stop on flush trigger configuration:”…””}”(hjCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´K·hj?ubjö)”}”(hŒ;#echo 1 > /sys/bus/coresight/devices/tmc_etr0/stop_on_flush”h]”hŒ;#echo 1 > /sys/bus/coresight/devices/tmc_etr0/stop_on_flush”…””}”hjQsbah}”(h]”h ]”h"]”h$]”h&]”jjuh1jõh³hÊh´K¹hj?ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhjh²hh³hÊh´Nubj)”}”(hŒ?Start Coresight tracing on cores 1 and 2 using sysfs interface ”h]”hÝ)”}”(hŒ>Start Coresight tracing on cores 1 and 2 using sysfs interface”h]”hŒ>Start Coresight tracing on cores 1 and 2 using sysfs interface”…””}”(hjih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´K»hjeubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjh²hh³hÊh´Nubj)”}”(hŒSRun some application on core 1:: #taskset -c 1 dd if=/dev/urandom of=/dev/null & ”h]”(hÝ)”}”(hŒ Run some application on core 1::”h]”hŒRun some application on core 1:”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´K½hj}ubjö)”}”(hŒ/#taskset -c 1 dd if=/dev/urandom of=/dev/null &”h]”hŒ/#taskset -c 1 dd if=/dev/urandom of=/dev/null &”…””}”hjsbah}”(h]”h ]”h"]”h$]”h&]”jjuh1jõh³hÊh´K¿hj}ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhjh²hh³hÊh´Nubj)”}”(hŒoInvoke kernel panic on core 2:: #echo 1 > /proc/sys/kernel/panic #taskset -c 2 echo c > /proc/sysrq-trigger ”h]”(hÝ)”}”(hŒInvoke kernel panic on core 2::”h]”hŒInvoke kernel panic on core 2:”…””}”(hj§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´KÁhj£ubjö)”}”(hŒK#echo 1 > /proc/sys/kernel/panic #taskset -c 2 echo c > /proc/sysrq-trigger”h]”hŒK#echo 1 > /proc/sys/kernel/panic #taskset -c 2 echo c > /proc/sysrq-trigger”…””}”hjµsbah}”(h]”h ]”h"]”h$]”h&]”jjuh1jõh³hÊh´KÃhj£ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhjh²hh³hÊh´Nubj)”}”(hŒnFrom rebooted kernel or crashdump kernel, read crashdata:: #dd if=/dev/crash_tmc_etr0 of=/trace/cstrace.bin ”h]”(hÝ)”}”(hŒ:From rebooted kernel or crashdump kernel, read crashdata::”h]”hŒ9From rebooted kernel or crashdump kernel, read crashdata:”…””}”(hjÍh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´KÆhjÉubjö)”}”(hŒ0#dd if=/dev/crash_tmc_etr0 of=/trace/cstrace.bin”h]”hŒ0#dd if=/dev/crash_tmc_etr0 of=/trace/cstrace.bin”…””}”hjÛsbah}”(h]”h ]”h"]”h$]”h&]”jjuh1jõh³hÊh´KÈhjÉubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhjh²hh³hÊh´Nubj)”}”(hŒERun opencsd decoder tools/scripts to generate the instruction trace. ”h]”hÝ)”}”(hŒDRun opencsd decoder tools/scripts to generate the instruction trace.”h]”hŒDRun opencsd decoder tools/scripts to generate the instruction trace.”…””}”(hjóh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´KÊhjïubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjh²hh³hÊh´Nubeh}”(h]”h ]”h"]”h$]”h&]”j€j j‚hjƒj„Œstart”Kuh1jhjŠh²hh³hÊh´K³ubh¶)”}”(hhh]”(h»)”}”(hŒSample instruction trace dump”h]”hŒSample instruction trace dump”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjh²hh³hÊh´KÍubhÝ)”}”(hŒ Core1 dump::”h]”hŒ Core1 dump:”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´KÏhjh²hubjö)”}”(hX A etm4_enable_hw: ffff800008ae1dd4 CONTEXT EL2 etm4_enable_hw: ffff800008ae1dd4 I etm4_enable_hw: ffff800008ae1dd4: d503201f nop I etm4_enable_hw: ffff800008ae1dd8: d503201f nop I etm4_enable_hw: ffff800008ae1ddc: d503201f nop I etm4_enable_hw: ffff800008ae1de0: d503201f nop I etm4_enable_hw: ffff800008ae1de4: d503201f nop I etm4_enable_hw: ffff800008ae1de8: d503233f paciasp I etm4_enable_hw: ffff800008ae1dec: a9be7bfd stp x29, x30, [sp, #-32]! I etm4_enable_hw: ffff800008ae1df0: 910003fd mov x29, sp I etm4_enable_hw: ffff800008ae1df4: a90153f3 stp x19, x20, [sp, #16] I etm4_enable_hw: ffff800008ae1df8: 2a0003f4 mov w20, w0 I etm4_enable_hw: ffff800008ae1dfc: 900085b3 adrp x19, ffff800009b95000 I etm4_enable_hw: ffff800008ae1e00: 910f4273 add x19, x19, #0x3d0 I etm4_enable_hw: ffff800008ae1e04: f8747a60 ldr x0, [x19, x20, lsl #3] E etm4_enable_hw: ffff800008ae1e08: b4000140 cbz x0, ffff800008ae1e30 I 149.039572921 etm4_enable_hw: ffff800008ae1e30: a94153f3 ldp x19, x20, [sp, #16] I 149.039572921 etm4_enable_hw: ffff800008ae1e34: 52800000 mov w0, #0x0 // #0 I 149.039572921 etm4_enable_hw: ffff800008ae1e38: a8c27bfd ldp x29, x30, [sp], #32 ..snip 149.052324811 chacha_block_generic: ffff800008642d80: 9100a3e0 add x0, I 149.052324811 chacha_block_generic: ffff800008642d84: b86178a2 ldr w2, [x5, x1, lsl #2] I 149.052324811 chacha_block_generic: ffff800008642d88: 8b010803 add x3, x0, x1, lsl #2 I 149.052324811 chacha_block_generic: ffff800008642d8c: b85fc063 ldur w3, [x3, #-4] I 149.052324811 chacha_block_generic: ffff800008642d90: 0b030042 add w2, w2, w3 I 149.052324811 chacha_block_generic: ffff800008642d94: b8217882 str w2, [x4, x1, lsl #2] I 149.052324811 chacha_block_generic: ffff800008642d98: 91000421 add x1, x1, #0x1 I 149.052324811 chacha_block_generic: ffff800008642d9c: f100443f cmp x1, #0x11”h]”hX A etm4_enable_hw: ffff800008ae1dd4 CONTEXT EL2 etm4_enable_hw: ffff800008ae1dd4 I etm4_enable_hw: ffff800008ae1dd4: d503201f nop I etm4_enable_hw: ffff800008ae1dd8: d503201f nop I etm4_enable_hw: ffff800008ae1ddc: d503201f nop I etm4_enable_hw: ffff800008ae1de0: d503201f nop I etm4_enable_hw: ffff800008ae1de4: d503201f nop I etm4_enable_hw: ffff800008ae1de8: d503233f paciasp I etm4_enable_hw: ffff800008ae1dec: a9be7bfd stp x29, x30, [sp, #-32]! I etm4_enable_hw: ffff800008ae1df0: 910003fd mov x29, sp I etm4_enable_hw: ffff800008ae1df4: a90153f3 stp x19, x20, [sp, #16] I etm4_enable_hw: ffff800008ae1df8: 2a0003f4 mov w20, w0 I etm4_enable_hw: ffff800008ae1dfc: 900085b3 adrp x19, ffff800009b95000 I etm4_enable_hw: ffff800008ae1e00: 910f4273 add x19, x19, #0x3d0 I etm4_enable_hw: ffff800008ae1e04: f8747a60 ldr x0, [x19, x20, lsl #3] E etm4_enable_hw: ffff800008ae1e08: b4000140 cbz x0, ffff800008ae1e30 I 149.039572921 etm4_enable_hw: ffff800008ae1e30: a94153f3 ldp x19, x20, [sp, #16] I 149.039572921 etm4_enable_hw: ffff800008ae1e34: 52800000 mov w0, #0x0 // #0 I 149.039572921 etm4_enable_hw: ffff800008ae1e38: a8c27bfd ldp x29, x30, [sp], #32 ..snip 149.052324811 chacha_block_generic: ffff800008642d80: 9100a3e0 add x0, I 149.052324811 chacha_block_generic: ffff800008642d84: b86178a2 ldr w2, [x5, x1, lsl #2] I 149.052324811 chacha_block_generic: ffff800008642d88: 8b010803 add x3, x0, x1, lsl #2 I 149.052324811 chacha_block_generic: ffff800008642d8c: b85fc063 ldur w3, [x3, #-4] I 149.052324811 chacha_block_generic: ffff800008642d90: 0b030042 add w2, w2, w3 I 149.052324811 chacha_block_generic: ffff800008642d94: b8217882 str w2, [x4, x1, lsl #2] I 149.052324811 chacha_block_generic: ffff800008642d98: 91000421 add x1, x1, #0x1 I 149.052324811 chacha_block_generic: ffff800008642d9c: f100443f cmp x1, #0x11”…””}”hj-sbah}”(h]”h ]”h"]”h$]”h&]”jjuh1jõh³hÊh´KÑhjh²hubhÝ)”}”(hŒ Core 2 dump::”h]”hŒ Core 2 dump:”…””}”(hj;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´M hjh²hubjö)”}”(hXdA etm4_enable_hw: ffff800008ae1dd4 CONTEXT EL2 etm4_enable_hw: ffff800008ae1dd4 I etm4_enable_hw: ffff800008ae1dd4: d503201f nop I etm4_enable_hw: ffff800008ae1dd8: d503201f nop I etm4_enable_hw: ffff800008ae1ddc: d503201f nop I etm4_enable_hw: ffff800008ae1de0: d503201f nop I etm4_enable_hw: ffff800008ae1de4: d503201f nop I etm4_enable_hw: ffff800008ae1de8: d503233f paciasp I etm4_enable_hw: ffff800008ae1dec: a9be7bfd stp x29, x30, [sp, #-32]! I etm4_enable_hw: ffff800008ae1df0: 910003fd mov x29, sp I etm4_enable_hw: ffff800008ae1df4: a90153f3 stp x19, x20, [sp, #16] I etm4_enable_hw: ffff800008ae1df8: 2a0003f4 mov w20, w0 I etm4_enable_hw: ffff800008ae1dfc: 900085b3 adrp x19, ffff800009b95000 I etm4_enable_hw: ffff800008ae1e00: 910f4273 add x19, x19, #0x3d0 I etm4_enable_hw: ffff800008ae1e04: f8747a60 ldr x0, [x19, x20, lsl #3] E etm4_enable_hw: ffff800008ae1e08: b4000140 cbz x0, ffff800008ae1e30 I 149.046243445 etm4_enable_hw: ffff800008ae1e30: a94153f3 ldp x19, x20, [sp, #16] I 149.046243445 etm4_enable_hw: ffff800008ae1e34: 52800000 mov w0, #0x0 // #0 I 149.046243445 etm4_enable_hw: ffff800008ae1e38: a8c27bfd ldp x29, x30, [sp], #32 I 149.046243445 etm4_enable_hw: ffff800008ae1e3c: d50323bf autiasp E 149.046243445 etm4_enable_hw: ffff800008ae1e40: d65f03c0 ret A ete_sysreg_write: ffff800008adfa18 ..snip I 149.05422547 panic: ffff800008096300: a90363f7 stp x23, x24, [sp, #48] I 149.05422547 panic: ffff800008096304: 6b00003f cmp w1, w0 I 149.05422547 panic: ffff800008096308: 3a411804 ccmn w0, #0x1, #0x4, ne // ne = any N 149.05422547 panic: ffff80000809630c: 540001e0 b.eq ffff800008096348 // b.none I 149.05422547 panic: ffff800008096310: f90023f9 str x25, [sp, #64] E 149.05422547 panic: ffff800008096314: 97fe44ef bl ffff8000080276d0 A panic: ffff80000809634c I 149.05422547 panic: ffff80000809634c: 910102d5 add x21, x22, #0x40 I 149.05422547 panic: ffff800008096350: 52800020 mov w0, #0x1 // #1 E 149.05422547 panic: ffff800008096354: 94166b8b bl ffff800008631180 N 149.054225518 bust_spinlocks: ffff800008631180: 340000c0 cbz w0, ffff800008631198 I 149.054225518 bust_spinlocks: ffff800008631184: f000a321 adrp x1, ffff800009a98000 I 149.054225518 bust_spinlocks: ffff800008631188: b9405c20 ldr w0, [x1, #92] I 149.054225518 bust_spinlocks: ffff80000863118c: 11000400 add w0, w0, #0x1 I 149.054225518 bust_spinlocks: ffff800008631190: b9005c20 str w0, [x1, #92] E 149.054225518 bust_spinlocks: ffff800008631194: d65f03c0 ret A panic: ffff800008096358”h]”hXdA etm4_enable_hw: ffff800008ae1dd4 CONTEXT EL2 etm4_enable_hw: ffff800008ae1dd4 I etm4_enable_hw: ffff800008ae1dd4: d503201f nop I etm4_enable_hw: ffff800008ae1dd8: d503201f nop I etm4_enable_hw: ffff800008ae1ddc: d503201f nop I etm4_enable_hw: ffff800008ae1de0: d503201f nop I etm4_enable_hw: ffff800008ae1de4: d503201f nop I etm4_enable_hw: ffff800008ae1de8: d503233f paciasp I etm4_enable_hw: ffff800008ae1dec: a9be7bfd stp x29, x30, [sp, #-32]! I etm4_enable_hw: ffff800008ae1df0: 910003fd mov x29, sp I etm4_enable_hw: ffff800008ae1df4: a90153f3 stp x19, x20, [sp, #16] I etm4_enable_hw: ffff800008ae1df8: 2a0003f4 mov w20, w0 I etm4_enable_hw: ffff800008ae1dfc: 900085b3 adrp x19, ffff800009b95000 I etm4_enable_hw: ffff800008ae1e00: 910f4273 add x19, x19, #0x3d0 I etm4_enable_hw: ffff800008ae1e04: f8747a60 ldr x0, [x19, x20, lsl #3] E etm4_enable_hw: ffff800008ae1e08: b4000140 cbz x0, ffff800008ae1e30 I 149.046243445 etm4_enable_hw: ffff800008ae1e30: a94153f3 ldp x19, x20, [sp, #16] I 149.046243445 etm4_enable_hw: ffff800008ae1e34: 52800000 mov w0, #0x0 // #0 I 149.046243445 etm4_enable_hw: ffff800008ae1e38: a8c27bfd ldp x29, x30, [sp], #32 I 149.046243445 etm4_enable_hw: ffff800008ae1e3c: d50323bf autiasp E 149.046243445 etm4_enable_hw: ffff800008ae1e40: d65f03c0 ret A ete_sysreg_write: ffff800008adfa18 ..snip I 149.05422547 panic: ffff800008096300: a90363f7 stp x23, x24, [sp, #48] I 149.05422547 panic: ffff800008096304: 6b00003f cmp w1, w0 I 149.05422547 panic: ffff800008096308: 3a411804 ccmn w0, #0x1, #0x4, ne // ne = any N 149.05422547 panic: ffff80000809630c: 540001e0 b.eq ffff800008096348 // b.none I 149.05422547 panic: ffff800008096310: f90023f9 str x25, [sp, #64] E 149.05422547 panic: ffff800008096314: 97fe44ef bl ffff8000080276d0 A panic: ffff80000809634c I 149.05422547 panic: ffff80000809634c: 910102d5 add x21, x22, #0x40 I 149.05422547 panic: ffff800008096350: 52800020 mov w0, #0x1 // #1 E 149.05422547 panic: ffff800008096354: 94166b8b bl ffff800008631180 N 149.054225518 bust_spinlocks: ffff800008631180: 340000c0 cbz w0, ffff800008631198 I 149.054225518 bust_spinlocks: ffff800008631184: f000a321 adrp x1, ffff800009a98000 I 149.054225518 bust_spinlocks: ffff800008631188: b9405c20 ldr w0, [x1, #92] I 149.054225518 bust_spinlocks: ffff80000863118c: 11000400 add w0, w0, #0x1 I 149.054225518 bust_spinlocks: ffff800008631190: b9005c20 str w0, [x1, #92] E 149.054225518 bust_spinlocks: ffff800008631194: d65f03c0 ret A panic: ffff800008096358”…””}”hjIsbah}”(h]”h ]”h"]”h$]”h&]”jjuh1jõh³hÊh´M hjh²hubeh}”(h]”Œsample-instruction-trace-dump”ah ]”h"]”Œsample instruction trace dump”ah$]”h&]”uh1hµhjŠh²hh³hÊh´KÍubeh}”(h]”Œ=sample-commands-for-testing-a-kernel-panic-case-with-etr-sink”ah ]”h"]”Œ=sample commands for testing a kernel panic case with etr sink”ah$]”h&]”uh1hµhh·h²hh³hÊh´Knubh¶)”}”(hhh]”(h»)”}”(hŒPerf based testing”h]”hŒPerf based testing”…””}”(hjjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjgh²hh³hÊh´MZubh¶)”}”(hhh]”(h»)”}”(hŒStarting perf session”h]”hŒStarting perf session”…””}”(hj{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjxh²hh³hÊh´M]ubhÝ)”}”(hŒETF::”h]”hŒETF:”…””}”(hj‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´M^hjxh²hubjö)”}”(hŒ_perf record -e cs_etm/panicstop,@tmc_etf1/ -C 1 perf record -e cs_etm/panicstop,@tmc_etf2/ -C 2”h]”hŒ_perf record -e cs_etm/panicstop,@tmc_etf1/ -C 1 perf record -e cs_etm/panicstop,@tmc_etf2/ -C 2”…””}”hj—sbah}”(h]”h ]”h"]”h$]”h&]”jjuh1jõh³hÊh´M`hjxh²hubhÝ)”}”(hŒETR::”h]”hŒETR:”…””}”(hj¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´Mchjxh²hubjö)”}”(hŒ1perf record -e cs_etm/panicstop,@tmc_etr0/ -C 1,2”h]”hŒ1perf record -e cs_etm/panicstop,@tmc_etr0/ -C 1,2”…””}”hj³sbah}”(h]”h ]”h"]”h$]”h&]”jjuh1jõh³hÊh´Mehjxh²hubeh}”(h]”Œstarting-perf-session”ah ]”h"]”Œstarting perf session”ah$]”h&]”uh1hµhjgh²hh³hÊh´M]ubh¶)”}”(hhh]”(h»)”}”(hŒReading trace data after panic”h]”hŒReading trace data after panic”…””}”(hjÌh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjÉh²hh³hÊh´MhubhÝ)”}”(hŒ{Same sysfs based method explained above can be used to retrieve and decode the trace data after the reboot on kernel panic.”h]”hŒ{Same sysfs based method explained above can be used to retrieve and decode the trace data after the reboot on kernel panic.”…””}”(hjÚh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´MihjÉh²hubeh}”(h]”Œreading-trace-data-after-panic”ah ]”h"]”Œreading trace data after panic”ah$]”h&]”uh1hµhjgh²hh³hÊh´Mhubeh}”(h]”Œperf-based-testing”ah ]”h"]”Œperf based testing”ah$]”h&]”uh1hµhh·h²hh³hÊh´MZubeh}”(h]”Œ3using-coresight-for-kernel-panic-and-watchdog-reset”ah ]”h"]”Œ3using coresight for kernel panic and watchdog reset”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îjjjÅjÂj j jAj>jhjejjj‡j„jdjaj\jYjõjòjÆjÃjíjêuŒ nametypes”}”(jý‰hñ‰j‰jʼnj ‰jA‰jh‰j‰j‡‰jd‰j\‰jõ‰jƉjí‰uh}”(júh·hîhËjhôjÂj…j jÈj>jjejDjjkj„jjajŠjYjjòjgjÃjxjê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”“”}”…”R”Œparse_messages”]”hŒsystem_message”“”)”}”(hhh]”hÝ)”}”(hŒ:Enumerated list start value not ordinal-1: "4" (ordinal 4)”h]”hŒ>Enumerated list start value not ordinal-1: “4†(ordinal 4)”…””}”(hjŠh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜhj‡ubah}”(h]”h ]”h"]”h$]”h&]”Œlevel”KŒtype”ŒINFO”Œsource”hÊŒline”Kuh1j…hjŠh²hh³hÊh´K³ubaŒtransform_messages”]”Œ transformer”NŒ include_log”]”Œ decoration”Nh²hub.