Csphinx.addnodesdocument)}( rawsourcechildren]( translations LanguagesNode)}(hhh](h pending_xref)}(hhh]docutils.nodesTextChinese (Simplified)}(hhparenthuba attributes}(ids]classes]names]dupnames]backrefs] refdomainstdreftypedoc reftarget+/translations/zh_CN/admin-guide/bug-huntingmodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}(hhhh2ubah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget+/translations/zh_TW/admin-guide/bug-huntingmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}(hhhhFubah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget+/translations/it_IT/admin-guide/bug-huntingmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}(hhhhZubah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget+/translations/ja_JP/admin-guide/bug-huntingmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}(hhhhnubah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget+/translations/ko_KR/admin-guide/bug-huntingmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}(hhhhubah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget+/translations/sp_SP/admin-guide/bug-huntingmodnameN classnameN refexplicituh1hhh ubeh}(h]h ]h"]h$]h&]current_languageEnglishuh1h hh _documenthsourceNlineNubhsection)}(hhh](htitle)}(h Bug huntingh]h Bug hunting}(hhhhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhE/var/lib/git/docbuild/linux/Documentation/admin-guide/bug-hunting.rsthKubh paragraph)}(hDKernel bug reports often come with a stack dump like the one below::h]hCKernel bug reports often come with a stack dump like the one below:}(hCKernel bug reports often come with a stack dump like the one below:hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh literal_block)}(hX------------[ cut here ]------------ WARNING: CPU: 1 PID: 28102 at kernel/module.c:1108 module_put+0x57/0x70 Modules linked in: dvb_usb_gp8psk(-) dvb_usb dvb_core nvidia_drm(PO) nvidia_modeset(PO) snd_hda_codec_hdmi snd_hda_intel snd_hda_codec snd_hwdep snd_hda_core snd_pcm snd_timer snd soundcore nvidia(PO) [last unloaded: rc_core] CPU: 1 PID: 28102 Comm: rmmod Tainted: P WC O 4.8.4-build.1 #1 Hardware name: MSI MS-7309/MS-7309, BIOS V1.12 02/23/2009 00000000 c12ba080 00000000 00000000 c103ed6a c1616014 00000001 00006dc6 c1615862 00000454 c109e8a7 c109e8a7 00000009 ffffffff 00000000 f13f6a10 f5f5a600 c103ee33 00000009 00000000 00000000 c109e8a7 f80ca4d0 c109f617 Call Trace: [] ? dump_stack+0x44/0x64 [] ? __warn+0xfa/0x120 [] ? module_put+0x57/0x70 [] ? module_put+0x57/0x70 [] ? warn_slowpath_null+0x23/0x30 [] ? module_put+0x57/0x70 [] ? gp8psk_fe_set_frontend+0x460/0x460 [dvb_usb_gp8psk] [] ? symbol_put_addr+0x27/0x50 [] ? dvb_usb_adapter_frontend_exit+0x3a/0x70 [dvb_usb] [] ? dvb_usb_exit+0x2f/0xd0 [dvb_usb] [] ? usb_disable_endpoint+0x7c/0xb0 [] ? dvb_usb_device_exit+0x2a/0x50 [dvb_usb] [] ? usb_unbind_interface+0x62/0x250 [] ? __pm_runtime_idle+0x44/0x70 [] ? __device_release_driver+0x78/0x120 [] ? driver_detach+0x87/0x90 [] ? bus_remove_driver+0x38/0x90 [] ? usb_deregister+0x58/0xb0 [] ? SyS_delete_module+0x130/0x1f0 [] ? task_work_run+0x64/0x80 [] ? exit_to_usermode_loop+0x85/0x90 [] ? do_fast_syscall_32+0x80/0x130 [] ? sysenter_past_esp+0x40/0x6a ---[ end trace 6ebc60ef3981792f ]---h]hX------------[ cut here ]------------ WARNING: CPU: 1 PID: 28102 at kernel/module.c:1108 module_put+0x57/0x70 Modules linked in: dvb_usb_gp8psk(-) dvb_usb dvb_core nvidia_drm(PO) nvidia_modeset(PO) snd_hda_codec_hdmi snd_hda_intel snd_hda_codec snd_hwdep snd_hda_core snd_pcm snd_timer snd soundcore nvidia(PO) [last unloaded: rc_core] CPU: 1 PID: 28102 Comm: rmmod Tainted: P WC O 4.8.4-build.1 #1 Hardware name: MSI MS-7309/MS-7309, BIOS V1.12 02/23/2009 00000000 c12ba080 00000000 00000000 c103ed6a c1616014 00000001 00006dc6 c1615862 00000454 c109e8a7 c109e8a7 00000009 ffffffff 00000000 f13f6a10 f5f5a600 c103ee33 00000009 00000000 00000000 c109e8a7 f80ca4d0 c109f617 Call Trace: [] ? dump_stack+0x44/0x64 [] ? __warn+0xfa/0x120 [] ? module_put+0x57/0x70 [] ? module_put+0x57/0x70 [] ? warn_slowpath_null+0x23/0x30 [] ? module_put+0x57/0x70 [] ? gp8psk_fe_set_frontend+0x460/0x460 [dvb_usb_gp8psk] [] ? symbol_put_addr+0x27/0x50 [] ? dvb_usb_adapter_frontend_exit+0x3a/0x70 [dvb_usb] [] ? dvb_usb_exit+0x2f/0xd0 [dvb_usb] [] ? usb_disable_endpoint+0x7c/0xb0 [] ? dvb_usb_device_exit+0x2a/0x50 [dvb_usb] [] ? usb_unbind_interface+0x62/0x250 [] ? __pm_runtime_idle+0x44/0x70 [] ? __device_release_driver+0x78/0x120 [] ? driver_detach+0x87/0x90 [] ? bus_remove_driver+0x38/0x90 [] ? usb_deregister+0x58/0xb0 [] ? SyS_delete_module+0x130/0x1f0 [] ? task_work_run+0x64/0x80 [] ? exit_to_usermode_loop+0x85/0x90 [] ? do_fast_syscall_32+0x80/0x130 [] ? sysenter_past_esp+0x40/0x6a ---[ end trace 6ebc60ef3981792f ]---}(hhhhubah}(h]h ]h"]h$]h&] xml:spacepreserveuh1hhhhKhhhhubh)}(hSuch stack traces provide enough information to identify the line inside the Kernel's source code where the bug happened. Depending on the severity of the issue, it may also contain the word **Oops**, as on this one::h](hSuch stack traces provide enough information to identify the line inside the Kernel’s source code where the bug happened. Depending on the severity of the issue, it may also contain the word }(hSuch stack traces provide enough information to identify the line inside the Kernel's source code where the bug happened. Depending on the severity of the issue, it may also contain the word hhhhhNhNubhstrong)}(h**Oops**h]hOops}(hhhhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhubh, as on this one:}(h, as on this one:hhhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK(hhhhubh)}(hBUG: unable to handle kernel NULL pointer dereference at (null) IP: [] iret_exc+0x7d0/0xa59 *pdpt = 000000002258a001 *pde = 0000000000000000 Oops: 0002 [#1] PREEMPT SMP ...h]hBUG: unable to handle kernel NULL pointer dereference at (null) IP: [] iret_exc+0x7d0/0xa59 *pdpt = 000000002258a001 *pde = 0000000000000000 Oops: 0002 [#1] PREEMPT SMP ...}(hhhhubah}(h]h ]h"]h$]h&]hhuh1hhhhK,hhhhubh)}(hDespite being an **Oops** or some other sort of stack trace, the offended line is usually required to identify and handle the bug. Along this chapter, we'll refer to "Oops" for all kinds of stack traces that need to be analyzed.h](hDespite being an }(hDespite being an hj hhhNhNubh)}(h**Oops**h]hOops}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj ubh or some other sort of stack trace, the offended line is usually required to identify and handle the bug. Along this chapter, we’ll refer to “Oops” for all kinds of stack traces that need to be analyzed.}(h or some other sort of stack trace, the offended line is usually required to identify and handle the bug. Along this chapter, we'll refer to "Oops" for all kinds of stack traces that need to be analyzed.hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK2hhhhubh)}(hIf the kernel is compiled with ``CONFIG_DEBUG_INFO``, you can enhance the quality of the stack trace by using file:`scripts/decode_stacktrace.sh`.h](hIf the kernel is compiled with }(hIf the kernel is compiled with hj.hhhNhNubhliteral)}(h``CONFIG_DEBUG_INFO``h]hCONFIG_DEBUG_INFO}(hhhj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j7hj.ubh?, you can enhance the quality of the stack trace by using file:}(h?, you can enhance the quality of the stack trace by using file:hj.hhhNhNubhtitle_reference)}(h`scripts/decode_stacktrace.sh`h]hscripts/decode_stacktrace.sh}(hhhjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj.ubh.}(h.hj.hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK6hhhhubh)}(hhh](h)}(hModules linked inh]hModules linked in}(hjlhjjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjghhhhhK:ubh)}(hXModules that are tainted or are being loaded or unloaded are marked with "(...)", where the taint flags are described in file:`Documentation/admin-guide/tainted-kernels.rst`, "being loaded" is annotated with "+", and "being unloaded" is annotated with "-".h](hModules that are tainted or are being loaded or unloaded are marked with “(...)”, where the taint flags are described in file:}(h~Modules that are tainted or are being loaded or unloaded are marked with "(...)", where the taint flags are described in file:hjxhhhNhNubjM)}(h/`Documentation/admin-guide/tainted-kernels.rst`h]h-Documentation/admin-guide/tainted-kernels.rst}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjxubhc, “being loaded” is annotated with “+”, and “being unloaded” is annotated with “-“.}(hS, "being loaded" is annotated with "+", and "being unloaded" is annotated with "-".hjxhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK file`` to read the data from the kernel buffers and save it. Or you can ``cat /proc/kmsg > file``, however you have to break in to stop the transfer, since ``kmsg`` is a "never ending file".h](h Sometimes }(h Sometimes hj!hhhNhNubj8)}(h ``klogd``h]hklogd}(hhhj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j7hj!ubh! dies, in which case you can run }(h! dies, in which case you can run hj!hhhNhNubj8)}(h``dmesg > file``h]h dmesg > file}(hhhj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j7hj!ubhC to read the data from the kernel buffers and save it. Or you can }(hC to read the data from the kernel buffers and save it. Or you can hj!hhhNhNubj8)}(h``cat /proc/kmsg > file``h]hcat /proc/kmsg > file}(hhhjPhhhNhNubah}(h]h ]h"]h$]h&]uh1j7hj!ubh;, however you have to break in to stop the transfer, since }(h;, however you have to break in to stop the transfer, since hj!hhhNhNubj8)}(h``kmsg``h]hkmsg}(hhhjchhhNhNubah}(h]h ]h"]h$]h&]uh1j7hj!ubh is a “never ending file”.}(h is a "never ending file".hj!hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKKhjhhubh)}(h|If the machine has crashed so badly that you cannot enter commands or the disk is not available then you have three options:h]h|If the machine has crashed so badly that you cannot enter commands or the disk is not available then you have three options:}(hj~hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKPhjhhubhenumerated_list)}(hhh](h list_item)}(hXHand copy the text from the screen and type it in after the machine has restarted. Messy but it is the only option if you have not planned for a crash. Alternatively, you can take a picture of the screen with a digital camera - not nice, but better than nothing. If the messages scroll off the top of the console, you may find that booting with a higher resolution (e.g., ``vga=791``) will allow you to read more of the text. (Caveat: This needs ``vesafb``, so won't help for 'early' oopses.) h]h)}(hXHand copy the text from the screen and type it in after the machine has restarted. Messy but it is the only option if you have not planned for a crash. Alternatively, you can take a picture of the screen with a digital camera - not nice, but better than nothing. If the messages scroll off the top of the console, you may find that booting with a higher resolution (e.g., ``vga=791``) will allow you to read more of the text. (Caveat: This needs ``vesafb``, so won't help for 'early' oopses.)h](hXvHand copy the text from the screen and type it in after the machine has restarted. Messy but it is the only option if you have not planned for a crash. Alternatively, you can take a picture of the screen with a digital camera - not nice, but better than nothing. If the messages scroll off the top of the console, you may find that booting with a higher resolution (e.g., }(hXvHand copy the text from the screen and type it in after the machine has restarted. Messy but it is the only option if you have not planned for a crash. Alternatively, you can take a picture of the screen with a digital camera - not nice, but better than nothing. If the messages scroll off the top of the console, you may find that booting with a higher resolution (e.g., hjhhhNhNubj8)}(h ``vga=791``h]hvga=791}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j7hjubh?) will allow you to read more of the text. (Caveat: This needs }(h?) will allow you to read more of the text. (Caveat: This needs hjhhhNhNubj8)}(h ``vesafb``h]hvesafb}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j7hjubh*, so won’t help for ‘early’ oopses.)}(h$, so won't help for 'early' oopses.)hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKShjubah}(h]h ]h"]h$]h&]uh1jhjhhhhhNubj)}(hBoot with a serial console (see :ref:`Documentation/admin-guide/serial-console.rst `), run a null modem to a second machine and capture the output there using your favourite communication program. Minicom works well. h]h)}(hBoot with a serial console (see :ref:`Documentation/admin-guide/serial-console.rst `), run a null modem to a second machine and capture the output there using your favourite communication program. Minicom works well.h](h Boot with a serial console (see }(h Boot with a serial console (see hjhhhNhNubh)}(hD:ref:`Documentation/admin-guide/serial-console.rst `h]hinline)}(hjh]h,Documentation/admin-guide/serial-console.rst}(hhhjhhhNhNubah}(h]h ](xrefstdstd-refeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocadmin-guide/bug-hunting refdomainjreftyperef refexplicitrefwarn reftargetserial_consoleuh1hhhhK\hjubh), run a null modem to a second machine and capture the output there using your favourite communication program. Minicom works well.}(h), run a null modem to a second machine and capture the output there using your favourite communication program. Minicom works well.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK\hjubah}(h]h ]h"]h$]h&]uh1jhjhhhhhNubj)}(hUse Kdump (see Documentation/admin-guide/kdump/kdump.rst), extract the kernel ring buffer from old memory with using dmesg gdbmacro in Documentation/admin-guide/kdump/gdbmacros.txt. h]h)}(hUse Kdump (see Documentation/admin-guide/kdump/kdump.rst), extract the kernel ring buffer from old memory with using dmesg gdbmacro in Documentation/admin-guide/kdump/gdbmacros.txt.h]hUse Kdump (see Documentation/admin-guide/kdump/kdump.rst), extract the kernel ring buffer from old memory with using dmesg gdbmacro in Documentation/admin-guide/kdump/gdbmacros.txt.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKahjubah}(h]h ]h"]h$]h&]uh1jhjhhhhhNubeh}(h]h ]h"]h$]h&]enumtypearabicprefix(suffix)uh1jhjhhhhhKSubeh}(h]$where-is-the-oops-message-is-locatedah ]h"]%where is the oops message is located?ah$]h&]uh1hhhhhhhhKCubh)}(hhh](h)}(hFinding the bug's locationh]hFinding the bug’s location}(hjDhjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj?hhhhhKfubh)}(hReporting a bug works best if you point the location of the bug at the Kernel source file. There are two methods for doing that. Usually, using ``gdb`` is easier, but the Kernel should be pre-compiled with debug info.h](hReporting a bug works best if you point the location of the bug at the Kernel source file. There are two methods for doing that. Usually, using }(hReporting a bug works best if you point the location of the bug at the Kernel source file. There are two methods for doing that. Usually, using hjPhhhNhNubj8)}(h``gdb``h]hgdb}(hhhjYhhhNhNubah}(h]h ]h"]h$]h&]uh1j7hjPubhB is easier, but the Kernel should be pre-compiled with debug info.}(hB is easier, but the Kernel should be pre-compiled with debug info.hjPhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhhj?hhubh)}(hhh](h)}(hgdbh]hgdb}(hjwhjuhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjrhhhhhKmubh)}(h~The GNU debugger (``gdb``) is the best way to figure out the exact file and line number of the OOPS from the ``vmlinux`` file.h](hThe GNU debugger (}(hThe GNU debugger (hjhhhNhNubj8)}(h``gdb``h]hgdb}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j7hjubhT) is the best way to figure out the exact file and line number of the OOPS from the }(hT) is the best way to figure out the exact file and line number of the OOPS from the hjhhhNhNubj8)}(h ``vmlinux``h]hvmlinux}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j7hjubh file.}(h file.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKohjrhhubh)}(hiThe usage of gdb works best on a kernel compiled with ``CONFIG_DEBUG_INFO``. This can be set by running::h](h6The usage of gdb works best on a kernel compiled with }(h6The usage of gdb works best on a kernel compiled with hjhhhNhNubj8)}(h``CONFIG_DEBUG_INFO``h]hCONFIG_DEBUG_INFO}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j7hjubh. This can be set by running:}(h. This can be set by running:hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKrhjrhhubh)}(h@$ ./scripts/config -d COMPILE_TEST -e DEBUG_KERNEL -e DEBUG_INFOh]h@$ ./scripts/config -d COMPILE_TEST -e DEBUG_KERNEL -e DEBUG_INFO}(hhhjubah}(h]h ]h"]h$]h&]hhuh1hhhhKuhjrhhubh)}(hbOn a kernel compiled with ``CONFIG_DEBUG_INFO``, you can simply copy the EIP value from the OOPS::h](hOn a kernel compiled with }(hOn a kernel compiled with hjhhhNhNubj8)}(h``CONFIG_DEBUG_INFO``h]hCONFIG_DEBUG_INFO}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j7hjubh2, you can simply copy the EIP value from the OOPS:}(h2, you can simply copy the EIP value from the OOPS:hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKwhjrhhubh)}(h,EIP: 0060:[] Not tainted VLIh]h,EIP: 0060:[] Not tainted VLI}(hhhj ubah}(h]h ]h"]h$]h&]hhuh1hhhhKzhjrhhubh)}(h6And use GDB to translate that to human-readable form::h]h5And use GDB to translate that to human-readable form:}(h5And use GDB to translate that to human-readable form:hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK|hjrhhubh)}(h!$ gdb vmlinux (gdb) l *0xc021e50eh]h!$ gdb vmlinux (gdb) l *0xc021e50e}(hhhj'ubah}(h]h ]h"]h$]h&]hhuh1hhhhK~hjrhhubh)}(h\If you don't have ``CONFIG_DEBUG_INFO`` enabled, you use the function offset from the OOPS::h](hIf you don’t have }(hIf you don't have hj5hhhNhNubj8)}(h``CONFIG_DEBUG_INFO``h]hCONFIG_DEBUG_INFO}(hhhj>hhhNhNubah}(h]h ]h"]h$]h&]uh1j7hj5ubh4 enabled, you use the function offset from the OOPS:}(h4 enabled, you use the function offset from the OOPS:hj5hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjrhhubh)}(hEIP is at vt_ioctl+0xda8/0x1482h]hEIP is at vt_ioctl+0xda8/0x1482}(hhhjWubah}(h]h ]h"]h$]h&]hhuh1hhhhKhjrhhubh)}(h=And recompile the kernel with ``CONFIG_DEBUG_INFO`` enabled::h](hAnd recompile the kernel with }(hAnd recompile the kernel with hjehhhNhNubj8)}(h``CONFIG_DEBUG_INFO``h]hCONFIG_DEBUG_INFO}(hhhjnhhhNhNubah}(h]h ]h"]h$]h&]uh1j7hjeubh enabled:}(h enabled:hjehhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjrhhubh)}(hX$ ./scripts/config -d COMPILE_TEST -e DEBUG_KERNEL -e DEBUG_INFO $ make vmlinux $ gdb vmlinux (gdb) l *vt_ioctl+0xda8 0x1888 is in vt_ioctl (drivers/tty/vt/vt_ioctl.c:293). 288 { 289 struct vc_data *vc = NULL; 290 int ret = 0; 291 292 console_lock(); 293 if (VT_BUSY(vc_num)) 294 ret = -EBUSY; 295 else if (vc_num) 296 vc = vc_deallocate(vc_num); 297 console_unlock();h]hX$ ./scripts/config -d COMPILE_TEST -e DEBUG_KERNEL -e DEBUG_INFO $ make vmlinux $ gdb vmlinux (gdb) l *vt_ioctl+0xda8 0x1888 is in vt_ioctl (drivers/tty/vt/vt_ioctl.c:293). 288 { 289 struct vc_data *vc = NULL; 290 int ret = 0; 291 292 console_lock(); 293 if (VT_BUSY(vc_num)) 294 ret = -EBUSY; 295 else if (vc_num) 296 vc = vc_deallocate(vc_num); 297 console_unlock();}(hhhjubah}(h]h ]h"]h$]h&]hhuh1hhhhKhjrhhubh)}(h$or, if you want to be more verbose::h]h#or, if you want to be more verbose:}(h#or, if you want to be more verbose:hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjrhhubh)}(ht(gdb) p vt_ioctl $1 = {int (struct tty_struct *, unsigned int, unsigned long)} 0xae0 (gdb) l *0xae0+0xda8h]ht(gdb) p vt_ioctl $1 = {int (struct tty_struct *, unsigned int, unsigned long)} 0xae0 (gdb) l *0xae0+0xda8}(hhhjubah}(h]h ]h"]h$]h&]hhuh1hhhhKhjrhhubh)}(h)You could, instead, use the object file::h]h(You could, instead, use the object file:}(h(You could, instead, use the object file:hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjrhhubh)}(hK$ make drivers/tty/ $ gdb drivers/tty/vt/vt_ioctl.o (gdb) l *vt_ioctl+0xda8h]hK$ make drivers/tty/ $ gdb drivers/tty/vt/vt_ioctl.o (gdb) l *vt_ioctl+0xda8}(hhhjubah}(h]h ]h"]h$]h&]hhuh1hhhhKhjrhhubh)}(h#If you have a call trace, such as::h]h"If you have a call trace, such as:}(h"If you have a call trace, such as:hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjrhhubh)}(hCall Trace: [] :jbd:log_wait_commit+0xa3/0xf5 [] autoremove_wake_function+0x0/0x2e [] :jbd:journal_stop+0x1be/0x1ee ...h]hCall Trace: [] :jbd:log_wait_commit+0xa3/0xf5 [] autoremove_wake_function+0x0/0x2e [] :jbd:journal_stop+0x1be/0x1ee ...}(hhhjubah}(h]h ]h"]h$]h&]hhuh1hhhhKhjrhhubh)}(hrthis shows the problem likely is in the :jbd: module. You can load that module in gdb and list the relevant code::h]hqthis shows the problem likely is in the :jbd: module. You can load that module in gdb and list the relevant code:}(hqthis shows the problem likely is in the :jbd: module. You can load that module in gdb and list the relevant code:hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjrhhubh)}(h1$ gdb fs/jbd/jbd.ko (gdb) l *log_wait_commit+0xa3h]h1$ gdb fs/jbd/jbd.ko (gdb) l *log_wait_commit+0xa3}(hhhjubah}(h]h ]h"]h$]h&]hhuh1hhhhKhjrhhubhnote)}(hX4You can also do the same for any function call at the stack trace, like this one:: [] ? dvb_usb_adapter_frontend_exit+0x3a/0x70 [dvb_usb] The position where the above call happened can be seen with:: $ gdb drivers/media/usb/dvb-usb/dvb-usb.o (gdb) l *dvb_usb_adapter_frontend_exit+0x3ah](h)}(hRYou can also do the same for any function call at the stack trace, like this one::h]hQYou can also do the same for any function call at the stack trace, like this one:}(hQYou can also do the same for any function call at the stack trace, like this one:hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubh)}(h@[] ? dvb_usb_adapter_frontend_exit+0x3a/0x70 [dvb_usb]h]h@[] ? dvb_usb_adapter_frontend_exit+0x3a/0x70 [dvb_usb]}(hhhjubah}(h]h ]h"]h$]h&]hhuh1hhhhKhj ubh)}(h=The position where the above call happened can be seen with::h]h 83 3c 01 00 00 89 44 24 14 8b 45 28 85 c0 89 44 24 18 0f 85 Put the bytes into a "foo.s" file like this: .text .globl foo foo: .byte .... /* bytes from Code: part of OOPS dump */ Compile it with "gcc -c -o foo.o foo.s" then look at the output of "objdump --disassemble foo.o". Output: ip_queue_xmit: push %ebp push %edi push %esi push %ebx sub $0xbc, %esp mov 0xd0(%esp), %ebp ! %ebp = arg0 (skb) mov 0x8(%ebp), %ebx ! %ebx = skb->sk mov 0x13c(%ebx), %eax ! %eax = inet_sk(sk)->opth]hXEIP is at +0x14/0x4c0 ... Code: 44 24 04 e8 6f 05 00 00 e9 e8 fe ff ff 8d 76 00 8d bc 27 00 00 00 00 55 57 56 53 81 ec bc 00 00 00 8b ac 24 d0 00 00 00 8b 5d 08 <8b> 83 3c 01 00 00 89 44 24 14 8b 45 28 85 c0 89 44 24 18 0f 85 Put the bytes into a "foo.s" file like this: .text .globl foo foo: .byte .... /* bytes from Code: part of OOPS dump */ Compile it with "gcc -c -o foo.o foo.s" then look at the output of "objdump --disassemble foo.o". Output: ip_queue_xmit: push %ebp push %edi push %esi push %ebx sub $0xbc, %esp mov 0xd0(%esp), %ebp ! %ebp = arg0 (skb) mov 0x8(%ebp), %ebx ! %ebx = skb->sk mov 0x13c(%ebx), %eax ! %eax = inet_sk(sk)->opt}(hhhjubah}(h]h ]h"]h$]h&]hhuh1hhhhKhjWhhubh)}(hufile:`scripts/decodecode` can be used to automate most of this, depending on what CPU architecture is being debugged.h](hfile:}(hfile:hjhhhNhNubjM)}(h`scripts/decodecode`h]hscripts/decodecode}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjubh\ can be used to automate most of this, depending on what CPU architecture is being debugged.}(h\ can be used to automate most of this, depending on what CPU architecture is being debugged.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjWhhubeh}(h]objdumpah ]h"]objdumpah$]h&]uh1hhj?hhhhhKubeh}(h]finding-the-bug-s-locationah ]h"]finding the bug's locationah$]h&]uh1hhhhhhhhKfubh)}(hhh](h)}(hReporting the bugh]hReporting the bug}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKubh)}(hOnce you find where the bug happened, by inspecting its location, you could either try to fix it yourself or report it upstream.h]hOnce you find where the bug happened, by inspecting its location, you could either try to fix it yourself or report it upstream.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(hIn order to report it upstream, you should identify the mailing list used for the development of the affected code. This can be done by using the ``get_maintainer.pl`` script.h](hIn order to report it upstream, you should identify the mailing list used for the development of the affected code. This can be done by using the }(hIn order to report it upstream, you should identify the mailing list used for the development of the affected code. This can be done by using the hj hhhNhNubj8)}(h``get_maintainer.pl``h]hget_maintainer.pl}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j7hj ubh script.}(h script.hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(h_For example, if you find a bug at the gspca's sonixj.c file, you can get its maintainers with::h]h`For example, if you find a bug at the gspca’s sonixj.c file, you can get its maintainers with:}(h^For example, if you find a bug at the gspca's sonixj.c file, you can get its maintainers with:hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(hX4$ ./scripts/get_maintainer.pl -f drivers/media/usb/gspca/sonixj.c Hans Verkuil (odd fixer:GSPCA USB WEBCAM DRIVER,commit_signer:1/1=100%) Mauro Carvalho Chehab (maintainer:MEDIA INPUT INFRASTRUCTURE (V4L/DVB),commit_signer:1/1=100%) Tejun Heo (commit_signer:1/1=100%) Bhaktipriya Shridhar (commit_signer:1/1=100%,authored:1/1=100%,added_lines:4/4=100%,removed_lines:9/9=100%) linux-media@vger.kernel.org (open list:GSPCA USB WEBCAM DRIVER) linux-kernel@vger.kernel.org (open list)h]hX4$ ./scripts/get_maintainer.pl -f drivers/media/usb/gspca/sonixj.c Hans Verkuil (odd fixer:GSPCA USB WEBCAM DRIVER,commit_signer:1/1=100%) Mauro Carvalho Chehab (maintainer:MEDIA INPUT INFRASTRUCTURE (V4L/DVB),commit_signer:1/1=100%) Tejun Heo (commit_signer:1/1=100%) Bhaktipriya Shridhar (commit_signer:1/1=100%,authored:1/1=100%,added_lines:4/4=100%,removed_lines:9/9=100%) linux-media@vger.kernel.org (open list:GSPCA USB WEBCAM DRIVER) linux-kernel@vger.kernel.org (open list)}(hhhj<ubah}(h]h ]h"]h$]h&]hhuh1hhhhKhjhhubh)}(h$Please notice that it will point to:h]h$Please notice that it will point to:}(hjLhjJhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjhhubh bullet_list)}(hhh](j)}(hThe last developers that touched the source code (if this is done inside a git tree). On the above example, Tejun and Bhaktipriya (in this specific case, none really involved on the development of this file);h]h)}(hThe last developers that touched the source code (if this is done inside a git tree). On the above example, Tejun and Bhaktipriya (in this specific case, none really involved on the development of this file);h]hThe last developers that touched the source code (if this is done inside a git tree). On the above example, Tejun and Bhaktipriya (in this specific case, none really involved on the development of this file);}(hjchjahhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj]ubah}(h]h ]h"]h$]h&]uh1jhjZhhhhhNubj)}(h%The driver maintainer (Hans Verkuil);h]h)}(hjwh]h%The driver maintainer (Hans Verkuil);}(hjwhjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM hjuubah}(h]h ]h"]h$]h&]uh1jhjZhhhhhNubj)}(h1The subsystem maintainer (Mauro Carvalho Chehab);h]h)}(hjh]h1The subsystem maintainer (Mauro Carvalho Chehab);}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM hjubah}(h]h ]h"]h$]h&]uh1jhjZhhhhhNubj)}(hGThe driver and/or subsystem mailing list (linux-media@vger.kernel.org);h]h)}(hjh](h*The driver and/or subsystem mailing list (}(h*The driver and/or subsystem mailing list (hjhhhNhNubh reference)}(hlinux-media@vger.kernel.orgh]hlinux-media@vger.kernel.org}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]refuri"mailto:linux-media@vger.kernel.orguh1jhjubh);}(h);hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhM hjubah}(h]h ]h"]h$]h&]uh1jhjZhhhhhNubj)}(h>the Linux Kernel mailing list (linux-kernel@vger.kernel.org). h]h)}(h=the Linux Kernel mailing list (linux-kernel@vger.kernel.org).h](hthe Linux Kernel mailing list (}(hthe Linux Kernel mailing list (hjhhhNhNubj)}(hlinux-kernel@vger.kernel.orgh]hlinux-kernel@vger.kernel.org}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]refuri#mailto:linux-kernel@vger.kernel.orguh1jhjubh).}(h).hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhjubah}(h]h ]h"]h$]h&]uh1jhjZhhhhhNubeh}(h]h ]h"]h$]h&]bullet-uh1jXhhhMhjhhubh)}(hUsually, the fastest way to have your bug fixed is to report it to mailing list used for the development of the code (linux-media ML) copying the driver maintainer (Hans).h]hUsually, the fastest way to have your bug fixed is to report it to mailing list used for the development of the code (linux-media ML) copying the driver maintainer (Hans).}(hj hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjhhubh)}(hIf you are totally stumped as to whom to send the report, and ``get_maintainer.pl`` didn't provide you anything useful, send it to linux-kernel@vger.kernel.org.h](h>If you are totally stumped as to whom to send the report, and }(h>If you are totally stumped as to whom to send the report, and hjhhhNhNubj8)}(h``get_maintainer.pl``h]hget_maintainer.pl}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j7hjubh2 didn’t provide you anything useful, send it to }(h0 didn't provide you anything useful, send it to hjhhhNhNubj)}(hlinux-kernel@vger.kernel.orgh]hlinux-kernel@vger.kernel.org}(hhhj2hhhNhNubah}(h]h ]h"]h$]h&]refuri#mailto:linux-kernel@vger.kernel.orguh1jhjubh.}(hj`hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhjhhubh)}(hCThanks for your help in making Linux as stable as humanly possible.h]hCThanks for your help in making Linux as stable as humanly possible.}(hjNhjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjhhubeh}(h]reporting-the-bugah ]h"]reporting the bugah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(hFixing the bugh]hFixing the bug}(hjghjehhhNhNubah}(h]h ]h"]h$]h&]uh1hhjbhhhhhMubh)}(hIf you know programming, you could help us by not only reporting the bug, but also providing us with a solution. After all, open source is about sharing what you do and don't you want to be recognised for your genius?h]hIf you know programming, you could help us by not only reporting the bug, but also providing us with a solution. After all, open source is about sharing what you do and don’t you want to be recognised for your genius?}(hjuhjshhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjbhhubh)}(hYIf you decide to take this way, once you have worked out a fix please submit it upstream.h]hYIf you decide to take this way, once you have worked out a fix please submit it upstream.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM!hjbhhubh)}(h}Please do read :ref:`Documentation/process/submitting-patches.rst ` though to help your code get accepted.h](hPlease do read }(hPlease do read hjhhhNhNubh)}(hG:ref:`Documentation/process/submitting-patches.rst `h]j)}(hjh]h,Documentation/process/submitting-patches.rst}(hhhjhhhNhNubah}(h]h ](jstdstd-refeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainjreftyperef refexplicitrefwarnjsubmittingpatchesuh1hhhhM$hjubh' though to help your code get accepted.}(h' though to help your code get accepted.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhM$hjbhhubeh}(h]fixing-the-bugah ]h"]fixing the bugah$]h&]uh1hhhhhhhhMubh transition)}(hK---------------------------------------------------------------------------h]h}(h]h ]h"]h$]h&]uh1jhhhM)hhhhubh)}(hhh](h)}(h$Notes on Oops tracing with ``klogd``h](hNotes on Oops tracing with }(hNotes on Oops tracing with hjhhhNhNubj8)}(h ``klogd``h]hklogd}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j7hjubeh}(h]h ]h"]h$]h&]uh1hhjhhhhhM,ubh)}(hXIn order to help Linus and the other kernel developers there has been substantial support incorporated into ``klogd`` for processing protection faults. In order to have full support for address resolution at least version 1.3-pl3 of the ``sysklogd`` package should be used.h](hlIn order to help Linus and the other kernel developers there has been substantial support incorporated into }(hlIn order to help Linus and the other kernel developers there has been substantial support incorporated into hjhhhNhNubj8)}(h ``klogd``h]hklogd}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j7hjubhy for processing protection faults. In order to have full support for address resolution at least version 1.3-pl3 of the }(hy for processing protection faults. In order to have full support for address resolution at least version 1.3-pl3 of the hjhhhNhNubj8)}(h ``sysklogd``h]hsysklogd}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j7hjubh package should be used.}(h package should be used.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhM.hjhhubh)}(hXvWhen a protection fault occurs the ``klogd`` daemon automatically translates important addresses in the kernel log messages to their symbolic equivalents. This translated kernel message is then forwarded through whatever reporting mechanism ``klogd`` is using. The protection fault message can be simply cut out of the message files and forwarded to the kernel developers.h](h#When a protection fault occurs the }(h#When a protection fault occurs the hj,hhhNhNubj8)}(h ``klogd``h]hklogd}(hhhj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j7hj,ubh daemon automatically translates important addresses in the kernel log messages to their symbolic equivalents. This translated kernel message is then forwarded through whatever reporting mechanism }(h daemon automatically translates important addresses in the kernel log messages to their symbolic equivalents. This translated kernel message is then forwarded through whatever reporting mechanism hj,hhhNhNubj8)}(h ``klogd``h]hklogd}(hhhjHhhhNhNubah}(h]h ]h"]h$]h&]uh1j7hj,ubh{ is using. The protection fault message can be simply cut out of the message files and forwarded to the kernel developers.}(h{ is using. The protection fault message can be simply cut out of the message files and forwarded to the kernel developers.hj,hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhM3hjhhubh)}(hX}Two types of address resolution are performed by ``klogd``. The first is static translation and the second is dynamic translation. Static translation uses the System.map file. In order to do static translation the ``klogd`` daemon must be able to find a system map file at daemon initialization time. See the klogd man page for information on how ``klogd`` searches for map files.h](h1Two types of address resolution are performed by }(h1Two types of address resolution are performed by hjahhhNhNubj8)}(h ``klogd``h]hklogd}(hhhjjhhhNhNubah}(h]h ]h"]h$]h&]uh1j7hjaubh. The first is static translation and the second is dynamic translation. Static translation uses the System.map file. In order to do static translation the }(h. The first is static translation and the second is dynamic translation. Static translation uses the System.map file. In order to do static translation the hjahhhNhNubj8)}(h ``klogd``h]hklogd}(hhhj}hhhNhNubah}(h]h ]h"]h$]h&]uh1j7hjaubh| daemon must be able to find a system map file at daemon initialization time. See the klogd man page for information on how }(h| daemon must be able to find a system map file at daemon initialization time. See the klogd man page for information on how hjahhhNhNubj8)}(h ``klogd``h]hklogd}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j7hjaubh searches for map files.}(h searches for map files.hjahhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhM:hjhhubh)}(hXDynamic address translation is important when kernel loadable modules are being used. Since memory for kernel modules is allocated from the kernel's dynamic memory pools there are no fixed locations for either the start of the module or for functions and symbols in the module.h]hXDynamic address translation is important when kernel loadable modules are being used. Since memory for kernel modules is allocated from the kernel’s dynamic memory pools there are no fixed locations for either the start of the module or for functions and symbols in the module.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMBhjhhubh)}(hXThe kernel supports system calls which allow a program to determine which modules are loaded and their location in memory. Using these system calls the klogd daemon builds a symbol table which can be used to debug a protection fault which occurs in a loadable kernel module.h]hXThe kernel supports system calls which allow a program to determine which modules are loaded and their location in memory. Using these system calls the klogd daemon builds a symbol table which can be used to debug a protection fault which occurs in a loadable kernel module.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMGhjhhubh)}(hAt the very minimum klogd will provide the name of the module which generated the protection fault. There may be additional symbolic information available if the developer of the loadable module chose to export symbol information from the module.h]hAt the very minimum klogd will provide the name of the module which generated the protection fault. There may be additional symbolic information available if the developer of the loadable module chose to export symbol information from the module.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMLhjhhubh)}(hXbSince the kernel module environment can be dynamic there must be a mechanism for notifying the ``klogd`` daemon when a change in module environment occurs. There are command line options available which allow klogd to signal the currently executing daemon that symbol information should be refreshed. See the ``klogd`` manual page for more information.h](h_Since the kernel module environment can be dynamic there must be a mechanism for notifying the }(h_Since the kernel module environment can be dynamic there must be a mechanism for notifying the hjhhhNhNubj8)}(h ``klogd``h]hklogd}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j7hjubh daemon when a change in module environment occurs. There are command line options available which allow klogd to signal the currently executing daemon that symbol information should be refreshed. See the }(h daemon when a change in module environment occurs. There are command line options available which allow klogd to signal the currently executing daemon that symbol information should be refreshed. See the hjhhhNhNubj8)}(h ``klogd``h]hklogd}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j7hjubh" manual page for more information.}(h" manual page for more information.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMQhjhhubh)}(hX+A patch is included with the sysklogd distribution which modifies the ``modules-2.0.0`` package to automatically signal klogd whenever a module is loaded or unloaded. Applying this patch provides essentially seamless support for debugging protection faults which occur with kernel loadable modules.h](hFA patch is included with the sysklogd distribution which modifies the }(hFA patch is included with the sysklogd distribution which modifies the hj hhhNhNubj8)}(h``modules-2.0.0``h]h modules-2.0.0}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1j7hj ubh package to automatically signal klogd whenever a module is loaded or unloaded. Applying this patch provides essentially seamless support for debugging protection faults which occur with kernel loadable modules.}(h package to automatically signal klogd whenever a module is loaded or unloaded. Applying this patch provides essentially seamless support for debugging protection faults which occur with kernel loadable modules.hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMXhjhhubh)}(h_The following is an example of a protection fault in a loadable module processed by ``klogd``::h](hTThe following is an example of a protection fault in a loadable module processed by }(hTThe following is an example of a protection fault in a loadable module processed by hj* hhhNhNubj8)}(h ``klogd``h]hklogd}(hhhj3 hhhNhNubah}(h]h ]h"]h$]h&]uh1j7hj* ubh:}(h:hj* hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhM^hjhhubh)}(hX9Aug 29 09:51:01 blizard kernel: Unable to handle kernel paging request at virtual address f15e97cc Aug 29 09:51:01 blizard kernel: current->tss.cr3 = 0062d000, %cr3 = 0062d000 Aug 29 09:51:01 blizard kernel: *pde = 00000000 Aug 29 09:51:01 blizard kernel: Oops: 0002 Aug 29 09:51:01 blizard kernel: CPU: 0 Aug 29 09:51:01 blizard kernel: EIP: 0010:[oops:_oops+16/3868] Aug 29 09:51:01 blizard kernel: EFLAGS: 00010212 Aug 29 09:51:01 blizard kernel: eax: 315e97cc ebx: 003a6f80 ecx: 001be77b edx: 00237c0c Aug 29 09:51:01 blizard kernel: esi: 00000000 edi: bffffdb3 ebp: 00589f90 esp: 00589f8c Aug 29 09:51:01 blizard kernel: ds: 0018 es: 0018 fs: 002b gs: 002b ss: 0018 Aug 29 09:51:01 blizard kernel: Process oops_test (pid: 3374, process nr: 21, stackpage=00589000) Aug 29 09:51:01 blizard kernel: Stack: 315e97cc 00589f98 0100b0b4 bffffed4 0012e38e 00240c64 003a6f80 00000001 Aug 29 09:51:01 blizard kernel: 00000000 00237810 bfffff00 0010a7fa 00000003 00000001 00000000 bfffff00 Aug 29 09:51:01 blizard kernel: bffffdb3 bffffed4 ffffffda 0000002b 0007002b 0000002b 0000002b 00000036 Aug 29 09:51:01 blizard kernel: Call Trace: [oops:_oops_ioctl+48/80] [_sys_ioctl+254/272] [_system_call+82/128] Aug 29 09:51:01 blizard kernel: Code: c7 00 05 00 00 00 eb 08 90 90 90 90 90 90 90 90 89 ec 5d c3h]hX9Aug 29 09:51:01 blizard kernel: Unable to handle kernel paging request at virtual address f15e97cc Aug 29 09:51:01 blizard kernel: current->tss.cr3 = 0062d000, %cr3 = 0062d000 Aug 29 09:51:01 blizard kernel: *pde = 00000000 Aug 29 09:51:01 blizard kernel: Oops: 0002 Aug 29 09:51:01 blizard kernel: CPU: 0 Aug 29 09:51:01 blizard kernel: EIP: 0010:[oops:_oops+16/3868] Aug 29 09:51:01 blizard kernel: EFLAGS: 00010212 Aug 29 09:51:01 blizard kernel: eax: 315e97cc ebx: 003a6f80 ecx: 001be77b edx: 00237c0c Aug 29 09:51:01 blizard kernel: esi: 00000000 edi: bffffdb3 ebp: 00589f90 esp: 00589f8c Aug 29 09:51:01 blizard kernel: ds: 0018 es: 0018 fs: 002b gs: 002b ss: 0018 Aug 29 09:51:01 blizard kernel: Process oops_test (pid: 3374, process nr: 21, stackpage=00589000) Aug 29 09:51:01 blizard kernel: Stack: 315e97cc 00589f98 0100b0b4 bffffed4 0012e38e 00240c64 003a6f80 00000001 Aug 29 09:51:01 blizard kernel: 00000000 00237810 bfffff00 0010a7fa 00000003 00000001 00000000 bfffff00 Aug 29 09:51:01 blizard kernel: bffffdb3 bffffed4 ffffffda 0000002b 0007002b 0000002b 0000002b 00000036 Aug 29 09:51:01 blizard kernel: Call Trace: [oops:_oops_ioctl+48/80] [_sys_ioctl+254/272] [_system_call+82/128] Aug 29 09:51:01 blizard kernel: Code: c7 00 05 00 00 00 eb 08 90 90 90 90 90 90 90 90 89 ec 5d c3}(hhhjL ubah}(h]h ]h"]h$]h&]hhuh1hhhhMahjhhubj)}(hK---------------------------------------------------------------------------h]h}(h]h ]h"]h$]h&]uh1jhhhMrhjhhubh)}(hDr. G.W. Wettstein Oncology Research Div. Computing Facility Roger Maris Cancer Center INTERNET: greg@wind.rmcc.com 820 4th St. N. Fargo, ND 58122 Phone: 701-234-7556h]hDr. G.W. Wettstein Oncology Research Div. Computing Facility Roger Maris Cancer Center INTERNET: greg@wind.rmcc.com 820 4th St. N. Fargo, ND 58122 Phone: 701-234-7556}(hhhjd ubah}(h]h ]h"]h$]h&]hhuh1hhhhMvhjhhubeh}(h] notes-on-oops-tracing-with-klogdah ]h"] notes on oops tracing with klogdah$]h&]uh1hhhhhhhhM,ubeh}(h] bug-huntingah ]h"] bug huntingah$]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.confapep_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_spacefile_insertion_enabled raw_enabledKline_length_limitM'syntax_highlightlong smart_quotessmartquotes_locales]character_level_inline_markupdoctitle_xform docinfo_xformKsectsubtitle_xform image_loadinglinkembed_stylesheetcloak_email_addressessection_self_link embed_imagesenvNubreporterNindirect_targets]substitution_defs}substitution_names}refnames}refids}nameids}(j j| jjj<j9jjjTjQjjj_j\jjjw jt u nametypes}(j NjNj<NjNjTNjNj_NjNjw Nuh}(j| hjjgj9jjj?jQjrjjWj\jjjbjt ju 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.