€•°{Œ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”ŒD/translations/zh_CN/process/debugging/media_specific_debugging_guide”Œmodname”NŒ classname”NŒ refexplicit”ˆuŒtagname”hhh ubh)�”}”(hhh]”hŒChinese (Traditional)”…”�”}”hh2sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”ŒD/translations/zh_TW/process/debugging/media_specific_debugging_guide”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒItalian”…”�”}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”ŒD/translations/it_IT/process/debugging/media_specific_debugging_guide”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒJapanese”…”�”}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”ŒD/translations/ja_JP/process/debugging/media_specific_debugging_guide”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒKorean”…”�”}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”ŒD/translations/ko_KR/process/debugging/media_specific_debugging_guide”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒPortuguese (Brazilian)”…”�”}”hh‚sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”ŒD/translations/pt_BR/process/debugging/media_specific_debugging_guide”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒSpanish”…”�”}”hh–sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”ŒD/translations/sp_SP/process/debugging/media_specific_debugging_guide”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubeh}”(h]”h ]”h"]”h$]”h&]”Œcurrent_language”ŒEnglish”uh1h hhŒ _document”hŒsource”NŒline”NubhŒcomment”“”)�”}”(hŒ SPDX-License-Identifier: GPL-2.0”h]”hŒ SPDX-License-Identifier: GPL-2.0”…”�”}”hh·sbah}”(h]”h ]”h"]”h$]”h&]”Œ xml:space”Œpreserve”uh1hµhhh²hh³Œ^/var/lib/git/docbuild/linux/Documentation/process/debugging/media_specific_debugging_guide.rst”h´KubhŒsection”“”)�”}”(hhh]”(hŒtitle”“”)�”}”(hŒ,Debugging and tracing in the media subsystem”h]”hŒ,Debugging and tracing in the media subsystem”…”�”}”(hhÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefid”Œid1”uh1hÍhhÊh²hh³hÇh´KubhŒ paragraph”“”)�”}”(hŒ’This document serves as a starting point and lookup for debugging device drivers in the media subsystem and to debug these drivers from userspace.”h]”hŒ’This document serves as a starting point and lookup for debugging device drivers in the media subsystem and to debug these drivers from userspace.”…”�”}”(hháh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hßh³hÇh´KhhÊh²hubhŒtopic”“”)�”}”(hŒ Contents ”h]”(hÎ)�”}”(hŒContents”h]”hŒContents”…”�”}”(hhõh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhhñh³hÇh´K ubhŒ bullet_list”“”)�”}”(hhh]”hŒ list_item”“”)�”}”(hhh]”(hà)�”}”(hhh]”hŒ reference”“”)�”}”(hhh]”hŒ,Debugging and tracing in the media subsystem”…”�”}”(hjh²hh³Nh´Nubah}”(h]”hÞah ]”h"]”h$]”h&]”Œrefid”Œ,debugging-and-tracing-in-the-media-subsystem”uh1jhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1hßhj ubj)�”}”(hhh]”(j )�”}”(hhh]”hà)�”}”(hhh]”j)�”}”(hhh]”hŒGeneral debugging advice”…”�”}”(hj0h²hh³Nh´Nubah}”(h]”Œid2”ah ]”h"]”h$]”h&]”Œrefid”Œgeneral-debugging-advice”uh1jhj-ubah}”(h]”h ]”h"]”h$]”h&]”uh1hßhj*ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj'ubj )�”}”(hhh]”hà)�”}”(hhh]”j)�”}”(hhh]”hŒdev_debug module parameter”…”�”}”(hjRh²hh³Nh´Nubah}”(h]”Œid3”ah ]”h"]”h$]”h&]”Œrefid”Œdev-debug-module-parameter”uh1jhjOubah}”(h]”h ]”h"]”h$]”h&]”uh1hßhjLubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj'ubj )�”}”(hhh]”hà)�”}”(hhh]”j)�”}”(hhh]”hŒdev_dbg() / v4l2_dbg()”…”�”}”(hjth²hh³Nh´Nubah}”(h]”Œid4”ah ]”h"]”h$]”h&]”Œrefid”Œdev-dbg-v4l2-dbg”uh1jhjqubah}”(h]”h ]”h"]”h$]”h&]”uh1hßhjnubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj'ubj )�”}”(hhh]”hà)�”}”(hhh]”j)�”}”(hhh]”hŒ Dynamic debug”…”�”}”(hj–h²hh³Nh´Nubah}”(h]”Œid5”ah ]”h"]”h$]”h&]”Œrefid”Œ dynamic-debug”uh1jhj“ubah}”(h]”h ]”h"]”h$]”h&]”uh1hßhj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj'ubj )�”}”(hhh]”hà)�”}”(hhh]”j)�”}”(hhh]”hŒFtrace”…”�”}”(hj¸h²hh³Nh´Nubah}”(h]”Œid6”ah ]”h"]”h$]”h&]”Œrefid”Œftrace”uh1jhjµubah}”(h]”h ]”h"]”h$]”h&]”uh1hßhj²ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj'ubj )�”}”(hhh]”hà)�”}”(hhh]”j)�”}”(hhh]”hŒDebugFS”…”�”}”(hjÚh²hh³Nh´Nubah}”(h]”Œid7”ah ]”h"]”h$]”h&]”Œrefid”Œdebugfs”uh1jhj×ubah}”(h]”h ]”h"]”h$]”h&]”uh1hßhjÔubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj'ubj )�”}”(hhh]”hà)�”}”(hhh]”j)�”}”(hhh]”hŒPerf & alternatives”…”�”}”(hjüh²hh³Nh´Nubah}”(h]”Œid8”ah ]”h"]”h$]”h&]”Œrefid”Œperf-alternatives”uh1jhjùubah}”(h]”h ]”h"]”h$]”h&]”uh1hßhjöubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj'ubj )�”}”(hhh]”hà)�”}”(hhh]”j)�”}”(hhh]”hŒError checking & panic analysis”…”�”}”(hjh²hh³Nh´Nubah}”(h]”Œid9”ah ]”h"]”h$]”h&]”Œrefid”Œerror-checking-panic-analysis”uh1jhjubah}”(h]”h ]”h"]”h$]”h&]”uh1hßhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj'ubj )�”}”(hhh]”hà)�”}”(hhh]”j)�”}”(hhh]”hŒ(Driver verification with v4l2-compliance”…”�”}”(hj@h²hh³Nh´Nubah}”(h]”Œid10”ah ]”h"]”h$]”h&]”Œrefid”Œ(driver-verification-with-v4l2-compliance”uh1jhj=ubah}”(h]”h ]”h"]”h$]”h&]”uh1hßhj:ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj'ubj )�”}”(hhh]”hà)�”}”(hhh]”j)�”}”(hhh]”hŒ'Debugging problems with receiving video”…”�”}”(hjbh²hh³Nh´Nubah}”(h]”Œid11”ah ]”h"]”h$]”h&]”Œrefid”Œ'debugging-problems-with-receiving-video”uh1jhj_ubah}”(h]”h ]”h"]”h$]”h&]”uh1hßhj\ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj'ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhñh²hh³Nh´Nubeh}”(h]”Œcontents”ah ]”Œcontents”ah"]”Œcontents”ah$]”h&]”uh1hïh³hÇh´K hhÊh²hubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒGeneral debugging advice”h]”hŒGeneral debugging advice”…”�”}”(hjœh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”hÝj9uh1hÍhj™h²hh³hÇh´Kubhà)�”}”(hŒUFor general advice see the :doc:`general advice document `.”h]”(hŒFor general advice see the ”…”�”}”(hjªh²hh³Nh´Nubh)�”}”(hŒ9:doc:`general advice document `”h]”hŒinline”“”)�”}”(hj´h]”hŒgeneral advice document”…”�”}”(hj¸h²hh³Nh´Nubah}”(h]”h ]”(Œxref”Œstd”Œstd-doc”eh"]”h$]”h&]”uh1j¶hj²ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”Œ0process/debugging/media_specific_debugging_guide”Œ refdomain”jÃŒreftype”Œdoc”Œ refexplicit”ˆŒrefwarn”ˆŒ reftarget”Œ/process/debugging/index”uh1hh³hÇh´KhjªubhŒ.”…”�”}”(hjªh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hßh³hÇh´Khj™h²hubhà)�”}”(hŒ /sys/class/video4linux/video3/dev_debug # dmesg -wH [...] videodev: v4l2_open: video3: open (0) [ +0.000036] video3: VIDIOC_QUERYCAP: driver=rkvdec, card=rkvdec, bus=platform:rkvdec, version=0x00060900, capabilities=0x84204000, device_caps=0x04204000”h]”hX9# cat /sys/class/video4linux/video3/name rkvdec # echo 0xff > /sys/class/video4linux/video3/dev_debug # dmesg -wH [...] videodev: v4l2_open: video3: open (0) [ +0.000036] video3: VIDIOC_QUERYCAP: driver=rkvdec, card=rkvdec, bus=platform:rkvdec, version=0x00060900, capabilities=0x84204000, device_caps=0x04204000”…”�”}”hj+sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j)h³hÇh´Khjöh²hubhà)�”}”(hŒVFor the full documentation see :ref:`driver-api/media/v4l2-dev:video device debugging`”h]”(hŒFor the full documentation see ”…”�”}”(hj9h²hh³Nh´Nubh)�”}”(hŒ7:ref:`driver-api/media/v4l2-dev:video device debugging`”h]”j·)�”}”(hjCh]”hŒ0driver-api/media/v4l2-dev:video device debugging”…”�”}”(hjEh²hh³Nh´Nubah}”(h]”h ]”(jÂŒstd”Œstd-ref”eh"]”h$]”h&]”uh1j¶hjAubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jÏŒ refdomain”jOŒreftype”Œref”Œ refexplicit”‰Œrefwarn”ˆjÕŒ0driver-api/media/v4l2-dev:video device debugging”uh1hh³hÇh´K$hj9ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hßh³hÇh´K$hjöh²hubeh}”(h]”jaah ]”h"]”Œdev_debug module parameter”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´KubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒdev_dbg() / v4l2_dbg()”h]”hŒdev_dbg() / v4l2_dbg()”…”�”}”(hjqh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”hÝj}uh1hÍhjnh²hh³hÇh´K(ubhà)�”}”(hŒ·Two debug print statements, which are specific for devices and for the v4l2 subsystem, avoid adding these to your final submission unless they have long-term value for investigations.”h]”hŒ·Two debug print statements, which are specific for devices and for the v4l2 subsystem, avoid adding these to your final submission unless they have long-term value for investigations.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hßh³hÇh´K*hjnh²hubhà)�”}”(hŒ{For a general overview please see the :ref:`process/debugging/driver_development_debugging_guide:printk() & friends` guide.”h]”(hŒ&For a general overview please see the ”…”�”}”(hj�h²hh³Nh´Nubh)�”}”(hŒN:ref:`process/debugging/driver_development_debugging_guide:printk() & friends`”h]”j·)�”}”(hj—h]”hŒGprocess/debugging/driver_development_debugging_guide:printk() & friends”…”�”}”(hj™h²hh³Nh´Nubah}”(h]”h ]”(jÂŒstd”Œstd-ref”eh"]”h$]”h&]”uh1j¶hj•ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jÏŒ refdomain”j£Œreftype”Œref”Œ refexplicit”‰Œrefwarn”ˆjÕŒGprocess/debugging/driver_development_debugging_guide:printk() & friends”uh1hh³hÇh´K.hj�ubhŒ guide.”…”�”}”(hj�h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hßh³hÇh´K.hjnh²hubj)�”}”(hhh]”j )�”}”(hXcDifference between both? - v4l2_dbg() utilizes v4l2_printk() under the hood, which further uses printk() directly, thus it cannot be targeted by dynamic debug - dev_dbg() can be targeted by dynamic debug - v4l2_dbg() has a more specific prefix format for the media subsystem, while dev_dbg only highlights the driver name and the location of the log ”h]”(hà)�”}”(hŒDifference between both?”h]”hŒDifference between both?”…”�”}”(hjÆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hßh³hÇh´K2hjÂubj)�”}”(hhh]”(j )�”}”(hŒƒv4l2_dbg() utilizes v4l2_printk() under the hood, which further uses printk() directly, thus it cannot be targeted by dynamic debug”h]”hà)�”}”(hŒƒv4l2_dbg() utilizes v4l2_printk() under the hood, which further uses printk() directly, thus it cannot be targeted by dynamic debug”h]”hŒƒv4l2_dbg() utilizes v4l2_printk() under the hood, which further uses printk() directly, thus it cannot be targeted by dynamic debug”…”�”}”(hjÛh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hßh³hÇh´K4hj×ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÔubj )�”}”(hŒ*dev_dbg() can be targeted by dynamic debug”h]”hà)�”}”(hjñh]”hŒ*dev_dbg() can be targeted by dynamic debug”…”�”}”(hjóh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hßh³hÇh´K6hjïubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÔubj )�”}”(hŒ�v4l2_dbg() has a more specific prefix format for the media subsystem, while dev_dbg only highlights the driver name and the location of the log ”h]”hà)�”}”(hŒ�v4l2_dbg() has a more specific prefix format for the media subsystem, while dev_dbg only highlights the driver name and the location of the log”h]”hŒ�v4l2_dbg() has a more specific prefix format for the media subsystem, while dev_dbg only highlights the driver name and the location of the log”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hßh³hÇh´K7hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÔubeh}”(h]”h ]”h"]”h$]”h&]”Œbullet”Œ-”uh1jh³hÇh´K4hjÂubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj¿h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”j$j%uh1jh³hÇh´K2hjnh²hubeh}”(h]”jƒah ]”h"]”Œdev_dbg() / v4l2_dbg()”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´K(ubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒ Dynamic debug”h]”hŒ Dynamic debug”…”�”}”(hj<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”hÝjŸuh1hÍhj9h²hh³hÇh´K;ubhà)�”}”(hŒ5A method to trim down the debug output to your needs.”h]”hŒ5A method to trim down the debug output to your needs.”…”�”}”(hjJh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hßh³hÇh´K=hj9h²hubhà)�”}”(hŒbFor general advice see the :ref:`process/debugging/userspace_debugging_guide:dynamic debug` guide.”h]”(hŒFor general advice see the ”…”�”}”(hjXh²hh³Nh´Nubh)�”}”(hŒ@:ref:`process/debugging/userspace_debugging_guide:dynamic debug`”h]”j·)�”}”(hjbh]”hŒ9process/debugging/userspace_debugging_guide:dynamic debug”…”�”}”(hjdh²hh³Nh´Nubah}”(h]”h ]”(jÂŒstd”Œstd-ref”eh"]”h$]”h&]”uh1j¶hj`ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jÏŒ refdomain”jnŒreftype”Œref”Œ refexplicit”‰Œrefwarn”ˆjÕŒ9process/debugging/userspace_debugging_guide:dynamic debug”uh1hh³hÇh´K?hjXubhŒ guide.”…”�”}”(hjXh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hßh³hÇh´K?hj9h²hubhà)�”}”(hŒNHere is one example, that enables all available pr_debug()'s within the file::”h]”hŒOHere is one example, that enables all available pr_debug()’s within the file:”…”�”}”(hjŠh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hßh³hÇh´KBhj9h²hubj*)�”}”(hXY$ alias ddcmd='echo $* > /proc/dynamic_debug/control' $ ddcmd '-p; file v4l2-h264.c +p' $ grep =p /proc/dynamic_debug/control drivers/media/v4l2-core/v4l2-h264.c:372 [v4l2_h264]print_ref_list_b =p "ref_pic_list_b%u (cur_poc %u%c) %s" drivers/media/v4l2-core/v4l2-h264.c:333 [v4l2_h264]print_ref_list_p =p "ref_pic_list_p (cur_poc %u%c) %s\n"”h]”hXY$ alias ddcmd='echo $* > /proc/dynamic_debug/control' $ ddcmd '-p; file v4l2-h264.c +p' $ grep =p /proc/dynamic_debug/control drivers/media/v4l2-core/v4l2-h264.c:372 [v4l2_h264]print_ref_list_b =p "ref_pic_list_b%u (cur_poc %u%c) %s" drivers/media/v4l2-core/v4l2-h264.c:333 [v4l2_h264]print_ref_list_p =p "ref_pic_list_p (cur_poc %u%c) %s\n"”…”�”}”hj˜sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j)h³hÇh´KDhj9h²hubeh}”(h]”j¥ah ]”h"]”Œ dynamic debug”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´K;ubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒFtrace”h]”hŒFtrace”…”�”}”(hj°h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”hÝjÁuh1hÍhj­h²hh³hÇh´KMubhà)�”}”(hŒÄAn internal kernel tracer that can trace static predefined events, function calls, etc. Very useful for debugging problems without changing the kernel and understanding the behavior of subsystems.”h]”hŒÄAn internal kernel tracer that can trace static predefined events, function calls, etc. Very useful for debugging problems without changing the kernel and understanding the behavior of subsystems.”…”�”}”(hj¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hßh³hÇh´KOhj­h²hubhà)�”}”(hŒ[For general advice see the :ref:`process/debugging/userspace_debugging_guide:ftrace` guide.”h]”(hŒFor general advice see the ”…”�”}”(hjÌh²hh³Nh´Nubh)�”}”(hŒ9:ref:`process/debugging/userspace_debugging_guide:ftrace`”h]”j·)�”}”(hjÖh]”hŒ2process/debugging/userspace_debugging_guide:ftrace”…”�”}”(hjØh²hh³Nh´Nubah}”(h]”h ]”(jÂŒstd”Œstd-ref”eh"]”h$]”h&]”uh1j¶hjÔubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jÏŒ refdomain”jâŒreftype”Œref”Œ refexplicit”‰Œrefwarn”ˆjÕŒ2process/debugging/userspace_debugging_guide:ftrace”uh1hh³hÇh´KShjÌubhŒ guide.”…”�”}”(hjÌh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hßh³hÇh´KShj­h²hubeh}”(h]”jÇah ]”h"]”Œftrace”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´KMubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒDebugFS”h]”hŒDebugFS”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”hÝjãuh1hÍhjh²hh³hÇh´KWubhà)�”}”(hŒfThis tool allows you to dump or modify internal values of your driver to files in a custom filesystem.”h]”hŒfThis tool allows you to dump or modify internal values of your driver to files in a custom filesystem.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hßh³hÇh´KYhjh²hubhà)�”}”(hŒeFor general advice see the :ref:`process/debugging/driver_development_debugging_guide:debugfs` guide.”h]”(hŒFor general advice see the ”…”�”}”(hj$h²hh³Nh´Nubh)�”}”(hŒC:ref:`process/debugging/driver_development_debugging_guide:debugfs`”h]”j·)�”}”(hj.h]”hŒ`__)::”h]”(hŒsGather statistics data for a decoding job: (This example is on a RK3399 SoC with the rkvdec codec driver using the ”…”�”}”(hj¼h²hh³Nh´Nubj)�”}”(hŒ;`fluster test suite `__”h]”hŒfluster test suite”…”�”}”(hjÄh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”Œfluster test suite”Œrefuri”Œ"https://github.com/fluendo/fluster”uh1jhj¼ubhŒ):”…”�”}”(hj¼h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hßh³hÇh´Kihj]h²hubj*)�”}”(hX perf stat -d python3 fluster.py run -d GStreamer-H.264-V4L2SL-Gst1.0 -ts JVT-AVC_V1 -tv AUD_MW_E -j1 ... Performance counter stats for 'python3 fluster.py run -d GStreamer-H.264-V4L2SL-Gst1.0 -ts JVT-AVC_V1 -tv AUD_MW_E -j1 -v': 7794.23 msec task-clock:u # 0.697 CPUs utilized 0 context-switches:u # 0.000 /sec 0 cpu-migrations:u # 0.000 /sec 11901 page-faults:u # 1.527 K/sec 882671556 cycles:u # 0.113 GHz (95.79%) 711708695 instructions:u # 0.81 insn per cycle (95.79%) 10581935 branches:u # 1.358 M/sec (15.13%) 6871144 branch-misses:u # 64.93% of all branches (95.79%) 281716547 L1-dcache-loads:u # 36.144 M/sec (95.79%) 9019581 L1-dcache-load-misses:u # 3.20% of all L1-dcache accesses (95.79%) LLC-loads:u LLC-load-misses:u 11.180830431 seconds time elapsed 1.502318000 seconds user 6.377221000 seconds sys”h]”hX perf stat -d python3 fluster.py run -d GStreamer-H.264-V4L2SL-Gst1.0 -ts JVT-AVC_V1 -tv AUD_MW_E -j1 ... Performance counter stats for 'python3 fluster.py run -d GStreamer-H.264-V4L2SL-Gst1.0 -ts JVT-AVC_V1 -tv AUD_MW_E -j1 -v': 7794.23 msec task-clock:u # 0.697 CPUs utilized 0 context-switches:u # 0.000 /sec 0 cpu-migrations:u # 0.000 /sec 11901 page-faults:u # 1.527 K/sec 882671556 cycles:u # 0.113 GHz (95.79%) 711708695 instructions:u # 0.81 insn per cycle (95.79%) 10581935 branches:u # 1.358 M/sec (15.13%) 6871144 branch-misses:u # 64.93% of all branches (95.79%) 281716547 L1-dcache-loads:u # 36.144 M/sec (95.79%) 9019581 L1-dcache-load-misses:u # 3.20% of all L1-dcache accesses (95.79%) LLC-loads:u LLC-load-misses:u 11.180830431 seconds time elapsed 1.502318000 seconds user 6.377221000 seconds sys”…”�”}”hjàsbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j)h³hÇh´Kmhj]h²hubhà)�”}”(hŒMThe availability of events and metrics depends on the system you are running.”h]”hŒMThe availability of events and metrics depends on the system you are running.”…”�”}”(hjîh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hßh³hÇh´K…hj]h²hubeh}”(h]”j ah ]”h"]”Œperf & alternatives”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´K`ubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒError checking & panic analysis”h]”hŒError checking & panic analysis”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”hÝj'uh1hÍhjh²hh³hÇh´Kˆubhà)�”}”(hŒzVarious Kernel configuration options to enhance error detection of the Linux Kernel with the cost of lowering performance.”h]”hŒzVarious Kernel configuration options to enhance error detection of the Linux Kernel with the cost of lowering performance.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hßh³hÇh´KŠhjh²hubhà)�”}”(hŒŒFor general advice see the :ref:`process/debugging/driver_development_debugging_guide:kasan, ubsan, lockdep and other error checkers` guide.”h]”(hŒFor general advice see the ”…”�”}”(hj"h²hh³Nh´Nubh)�”}”(hŒj:ref:`process/debugging/driver_development_debugging_guide:kasan, ubsan, lockdep and other error checkers`”h]”j·)�”}”(hj,h]”hŒcprocess/debugging/driver_development_debugging_guide:kasan, ubsan, lockdep and other error checkers”…”�”}”(hj.h²hh³Nh´Nubah}”(h]”h ]”(jÂŒstd”Œstd-ref”eh"]”h$]”h&]”uh1j¶hj*ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jÏŒ refdomain”j8Œreftype”Œref”Œ refexplicit”‰Œrefwarn”ˆjÕŒcprocess/debugging/driver_development_debugging_guide:kasan, ubsan, lockdep and other error checkers”uh1hh³hÇh´K�hj"ubhŒ guide.”…”�”}”(hj"h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hßh³hÇh´K�hjh²hubeh}”(h]”j-ah ]”h"]”Œerror checking & panic analysis”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´KˆubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒ(Driver verification with v4l2-compliance”h]”hŒ(Driver verification with v4l2-compliance”…”�”}”(hj^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”hÝjIuh1hÍhj[h²hh³hÇh´K’ubhà)�”}”(hŒÜTo verify, that a driver adheres to the v4l2 API, the tool v4l2-compliance is used, which is part of the `v4l_utils `__, a suite of userspace tools to work with the media subsystem.”h]”(hŒiTo verify, that a driver adheres to the v4l2 API, the tool v4l2-compliance is used, which is part of the ”…”�”}”(hjlh²hh³Nh´Nubj)�”}”(hŒ5`v4l_utils `__”h]”hŒ v4l_utils”…”�”}”(hjth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”Œ v4l_utils”jÔŒ%https://git.linuxtv.org/v4l-utils.git”uh1jhjlubhŒ>, a suite of userspace tools to work with the media subsystem.”…”�”}”(hjlh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hßh³hÇh´K”hj[h²hubhà)�”}”(hŒ7To see the detailed media topology (and check it) use::”h]”hŒ6To see the detailed media topology (and check it) use:”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hßh³hÇh´K™hj[h²hubj*)�”}”(hŒ(v4l2-compliance -M /dev/mediaX --verbose”h]”hŒ(v4l2-compliance -M /dev/mediaX --verbose”…”�”}”hj�sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j)h³hÇh´K›hj[h²hubhà)�”}”(hŒ`You can also run a full compliance check for all devices referenced in the media topology with::”h]”hŒ_You can also run a full compliance check for all devices referenced in the media topology with:”…”�”}”(hj«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hßh³hÇh´K�hj[h²hubj*)�”}”(hŒv4l2-compliance -m /dev/mediaX”h]”hŒv4l2-compliance -m /dev/mediaX”…”�”}”hj¹sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j)h³hÇh´K hj[h²hubeh}”(h]”jOah ]”h"]”Œ(driver verification with v4l2-compliance”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´K’ubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒ'Debugging problems with receiving video”h]”hŒ'Debugging problems with receiving video”…”�”}”(hjÑh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”hÝjkuh1hÍhjÎh²hh³hÇh´K£ubhà)�”}”(hXjImplementing vidioc_log_status in the driver: this can log the current status to the kernel log. It's called by v4l2-ctl --log-status. Very useful for debugging problems with receiving video (TV/S-Video/HDMI/etc) since the video signal is external (so unpredictable). Less useful with camera sensor inputs since you have control over what the camera sensor does.”h]”hXlImplementing vidioc_log_status in the driver: this can log the current status to the kernel log. It’s called by v4l2-ctl --log-status. Very useful for debugging problems with receiving video (TV/S-Video/HDMI/etc) since the video signal is external (so unpredictable). Less useful with camera sensor inputs since you have control over what the camera sensor does.”…”�”}”(hjßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hßh³hÇh´K¥hjÎh²hubhà)�”}”(hŒ)Usually you can just assign the default::”h]”hŒ(Usually you can just assign the default:”…”�”}”(hjíh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hßh³hÇh´K«hjÎh²hubj*)�”}”(hŒ+.vidioc_log_status = v4l2_ctrl_log_status,”h]”hŒ+.vidioc_log_status = v4l2_ctrl_log_status,”…”�”}”hjûsbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j)h³hÇh´K­hjÎh²hubhà)�”}”(hŒIBut you can also create your own callback, to create a custom status log.”h]”hŒIBut you can also create your own callback, to create a custom status log.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hßh³hÇh´K¯hjÎh²hubhà)�”}”(hŒ¸You can find an example in the cobalt driver (`drivers/media/pci/cobalt/cobalt-v4l2.c `__).”h]”(hŒ.You can find an example in the cobalt driver (”…”�”}”(hjh²hh³Nh´Nubj)�”}”(hŒˆ`drivers/media/pci/cobalt/cobalt-v4l2.c `__”h]”hŒ&drivers/media/pci/cobalt/cobalt-v4l2.c”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”Œ&drivers/media/pci/cobalt/cobalt-v4l2.c”jÔŒ[https://elixir.bootlin.com/linux/v6.11.6/source/drivers/media/pci/cobalt/cobalt-v4l2.c#L567”uh1jhjubhŒ).”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hßh³hÇh´K±hjÎh²hubhà)�”}”(hŒ **Copyright** ©2024 : Collabora”h]”(hŒstrong”“”)�”}”(hŒ **Copyright**”h]”hŒ Copyright”…”�”}”(hj@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hj:ubhŒ ©2024 : Collabora”…”�”}”(hj:h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hßh³hÇh´K´hjÎh²hubeh}”(h]”jqah ]”h"]”Œ'debugging problems with receiving video”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´K£ubeh}”(h]”j ah ]”h"]”Œ,debugging and tracing in the media subsystem”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”}”(jcj j–j’jój?jkjaj6jƒjªj¥jjÇjZjéjj jXj-jËjOj\jquŒ nametypes”}”(jc‰j–‰jó‰jk‰j6‰jª‰j‰jZ‰j‰jX‰jˉj\‰uh}”(j hÊj’hñj?j™jajöjƒjnj¥j9jÇj­jéjj j]j-jjOj[jqjÎhÞjj9j0j[jRj}jtjŸj–jÁj¸jãjÚjjüj'jjIj@jkjbuŒ 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”“”}”j—K s…”R”Œparse_messages”]”Œtransform_messages”]”Œ transformer”NŒ include_log”]”Œ decoration”Nh²hub.