sphinx.addnodesdocument)}( rawsourcechildren]( translations LanguagesNode)}(hhh](h pending_xref)}(hhh]docutils.nodesTextChinese (Simplified)}(hhparenthuba attributes}(ids]classes]names]dupnames]backrefs] refdomainstdreftypedoc reftargetB/translations/zh_CN/admin-guide/verify-bugs-and-bisect-regressionsmodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}(hhhh2ubah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftargetB/translations/zh_TW/admin-guide/verify-bugs-and-bisect-regressionsmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}(hhhhFubah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftargetB/translations/it_IT/admin-guide/verify-bugs-and-bisect-regressionsmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}(hhhhZubah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftargetB/translations/ja_JP/admin-guide/verify-bugs-and-bisect-regressionsmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}(hhhhnubah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftargetB/translations/ko_KR/admin-guide/verify-bugs-and-bisect-regressionsmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}(hhhhubah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftargetB/translations/sp_SP/admin-guide/verify-bugs-and-bisect-regressionsmodnameN classnameN refexplicituh1hhh ubeh}(h]h ]h"]h$]h&]current_languageEnglishuh1h hh _documenthsourceNlineNubhcomment)}(h0SPDX-License-Identifier: (GPL-2.0+ OR CC-BY-4.0)h]h0SPDX-License-Identifier: (GPL-2.0+ OR CC-BY-4.0)}(hhhhubah}(h]h ]h"]h$]h&] xml:spacepreserveuh1hhhhhh\/var/lib/git/docbuild/linux/Documentation/admin-guide/verify-bugs-and-bisect-regressions.rsthKubh)}(h<[see the bottom of this file for redistribution information]h]h<[see the bottom of this file for redistribution information]}(hhhhubah}(h]h ]h"]h$]h&]hhuh1hhhhhhhhKubhsection)}(hhh](htitle)}(h)How to verify bugs and bisect regressionsh]h)How to verify bugs and bisect regressions}(hhhhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhhhKubh paragraph)}(hThis document describes how to check if some Linux kernel problem occurs in code currently supported by developers -- to then explain how to locate the change causing the issue, if it is a regression (e.g. did not happen with earlier versions).h]hThis document describes how to check if some Linux kernel problem occurs in code currently supported by developers -- to then explain how to locate the change causing the issue, if it is a regression (e.g. did not happen with earlier versions).}(hhhhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(hXjThe text aims at people running kernels from mainstream Linux distributions on commodity hardware who want to report a kernel bug to the upstream Linux developers. Despite this intent, the instructions work just as well for users who are already familiar with building their own kernels: they help avoid mistakes occasionally made even by experienced developers.h]hXjThe text aims at people running kernels from mainstream Linux distributions on commodity hardware who want to report a kernel bug to the upstream Linux developers. Despite this intent, the instructions work just as well for users who are already familiar with building their own kernels: they help avoid mistakes occasionally made even by experienced developers.}(hhhhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK hhhhubh)}(hX Note: if you see this note, you are reading the text's source file. You might want to switch to a rendered version: it makes it a lot easier to read and navigate this document -- especially when you want to look something up in the reference section, then jump back to where you left off.h]hX Note: if you see this note, you are reading the text's source file. You might want to switch to a rendered version: it makes it a lot easier to read and navigate this document -- especially when you want to look something up in the reference section, then jump back to where you left off.}(hhhhubah}(h]h ]h"]h$]h&]hhuh1hhhhhhhhKubh)}(hFind the latest rendered version of this text here: https://docs.kernel.org/admin-guide/verify-bugs-and-bisect-regressions.rst.htmlh]hFind the latest rendered version of this text here: https://docs.kernel.org/admin-guide/verify-bugs-and-bisect-regressions.rst.html}(hhhjubah}(h]h ]h"]h$]h&]hhuh1hhhhhhhhKubh)}(hhh](h)}(h(The essence of the process (aka 'TL;DR')h]h,The essence of the process (aka ‘TL;DR’)}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKubh)}(hX*[If you are new to building or bisecting Linux, ignore this section and head over to the* ':ref:`step-by-step guide `' *below. It utilizes the same commands as this section while describing them in brief fashion. The steps are nevertheless easy to follow and together with accompanying entries in a reference section mention many alternatives, pitfalls, and additional aspects, all of which might be essential in your present case.]*h](hemphasis)}(hZ*[If you are new to building or bisecting Linux, ignore this section and head over to the*h]hX[If you are new to building or bisecting Linux, ignore this section and head over to the}(hhhj(hhhNhNubah}(h]h ]h"]h$]h&]uh1j&hj"ubh ‘}(h 'hj"hhhNhNubh)}(h-:ref:`step-by-step guide `h]hinline)}(hj=h]hstep-by-step guide}(hhhjAhhhNhNubah}(h]h ](xrefstdstd-refeh"]h$]h&]uh1j?hj;ubah}(h]h ]h"]h$]h&]refdoc.admin-guide/verify-bugs-and-bisect-regressions refdomainjLreftyperef refexplicitrefwarn reftargetintroguide_bissbsuh1hhhhKhj"ubh’ }(h' hj"hhhNhNubj')}(hX:*below. It utilizes the same commands as this section while describing them in brief fashion. The steps are nevertheless easy to follow and together with accompanying entries in a reference section mention many alternatives, pitfalls, and additional aspects, all of which might be essential in your present case.]*h]hX8below. It utilizes the same commands as this section while describing them in brief fashion. The steps are nevertheless easy to follow and together with accompanying entries in a reference section mention many alternatives, pitfalls, and additional aspects, all of which might be essential in your present case.]}(hhhjehhhNhNubah}(h]h ]h"]h$]h&]uh1j&hj"ubeh}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(hXb**In case you want to check if a bug is present in code currently supported by developers**, execute just the *preparations* and *segment 1*; while doing so, consider the newest Linux kernel you regularly use to be the 'working' kernel. In the following example that's assumed to be 6.0, which is why its sources will be used to prepare the .config file.h](hstrong)}(h[**In case you want to check if a bug is present in code currently supported by developers**h]hWIn case you want to check if a bug is present in code currently supported by developers}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j}hjyubh, execute just the }(h, execute just the hjyhhhNhNubj')}(h*preparations*h]h preparations}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j&hjyubh and }(h and hjyhhhNhNubj')}(h *segment 1*h]h segment 1}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j&hjyubh; while doing so, consider the newest Linux kernel you regularly use to be the ‘working’ kernel. In the following example that’s assumed to be 6.0, which is why its sources will be used to prepare the .config file.}(h; while doing so, consider the newest Linux kernel you regularly use to be the 'working' kernel. In the following example that's assumed to be 6.0, which is why its sources will be used to prepare the .config file.hjyhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK&hjhhubh)}(hX**In case you face a regression**, follow the steps at least till the end of *segment 2*. Then you can submit a preliminary report -- or continue with *segment 3*, which describes how to perform a bisection needed for a full-fledged regression report. In the following example 6.0.13 is assumed to be the 'working' kernel and 6.1.5 to be the first 'broken', which is why 6.0 will be considered the 'good' release and used to prepare the .config file.h](j~)}(h!**In case you face a regression**h]hIn case you face a regression}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j}hjubh,, follow the steps at least till the end of }(h,, follow the steps at least till the end of hjhhhNhNubj')}(h *segment 2*h]h segment 2}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j&hjubh?. Then you can submit a preliminary report -- or continue with }(h?. Then you can submit a preliminary report -- or continue with hjhhhNhNubj')}(h *segment 3*h]h segment 3}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j&hjubhX,, which describes how to perform a bisection needed for a full-fledged regression report. In the following example 6.0.13 is assumed to be the ‘working’ kernel and 6.1.5 to be the first ‘broken’, which is why 6.0 will be considered the ‘good’ release and used to prepare the .config file.}(hX , which describes how to perform a bisection needed for a full-fledged regression report. In the following example 6.0.13 is assumed to be the 'working' kernel and 6.1.5 to be the first 'broken', which is why 6.0 will be considered the 'good' release and used to prepare the .config file.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK,hjhhubh bullet_list)}(hhh](h list_item)}(hXH**Preparations**: set up everything to build your own kernels:: # * Remove any software that depends on externally maintained kernel modules # or builds any automatically during bootup. # * Ensure Secure Boot permits booting self-compiled Linux kernels. # * If you are not already running the 'working' kernel, reboot into it. # * Install compilers and everything else needed for building Linux. # * Ensure to have 15 Gigabyte free space in your home directory. git clone -o mainline --no-checkout \ https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git ~/linux/ cd ~/linux/ git remote add -t master stable \ https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git git switch --detach v6.0 # * Hint: if you used an existing clone, ensure no stale .config is around. make olddefconfig # * Ensure the former command picked the .config of the 'working' kernel. # * Connect external hardware (USB keys, tokens, ...), start a VM, bring up # VPNs, mount network shares, and briefly try the feature that is broken. yes '' | make localmodconfig ./scripts/config --set-str CONFIG_LOCALVERSION '-local' ./scripts/config -e CONFIG_LOCALVERSION_AUTO # * Note, when short on storage space, check the guide for an alternative: ./scripts/config -d DEBUG_INFO_NONE -e KALLSYMS_ALL -e DEBUG_KERNEL \ -e DEBUG_INFO -e DEBUG_INFO_DWARF_TOOLCHAIN_DEFAULT -e KALLSYMS # * Hint: at this point you might want to adjust the build configuration; # you'll have to, if you are running Debian. make olddefconfig cp .config ~/kernel-config-working h](h)}(h?**Preparations**: set up everything to build your own kernels::h](j~)}(h**Preparations**h]h Preparations}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j}hj ubh.: set up everything to build your own kernels:}(h.: set up everything to build your own kernels:hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK3hjubh literal_block)}(hX# * Remove any software that depends on externally maintained kernel modules # or builds any automatically during bootup. # * Ensure Secure Boot permits booting self-compiled Linux kernels. # * If you are not already running the 'working' kernel, reboot into it. # * Install compilers and everything else needed for building Linux. # * Ensure to have 15 Gigabyte free space in your home directory. git clone -o mainline --no-checkout \ https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git ~/linux/ cd ~/linux/ git remote add -t master stable \ https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git git switch --detach v6.0 # * Hint: if you used an existing clone, ensure no stale .config is around. make olddefconfig # * Ensure the former command picked the .config of the 'working' kernel. # * Connect external hardware (USB keys, tokens, ...), start a VM, bring up # VPNs, mount network shares, and briefly try the feature that is broken. yes '' | make localmodconfig ./scripts/config --set-str CONFIG_LOCALVERSION '-local' ./scripts/config -e CONFIG_LOCALVERSION_AUTO # * Note, when short on storage space, check the guide for an alternative: ./scripts/config -d DEBUG_INFO_NONE -e KALLSYMS_ALL -e DEBUG_KERNEL \ -e DEBUG_INFO -e DEBUG_INFO_DWARF_TOOLCHAIN_DEFAULT -e KALLSYMS # * Hint: at this point you might want to adjust the build configuration; # you'll have to, if you are running Debian. make olddefconfig cp .config ~/kernel-config-workingh]hX# * Remove any software that depends on externally maintained kernel modules # or builds any automatically during bootup. # * Ensure Secure Boot permits booting self-compiled Linux kernels. # * If you are not already running the 'working' kernel, reboot into it. # * Install compilers and everything else needed for building Linux. # * Ensure to have 15 Gigabyte free space in your home directory. git clone -o mainline --no-checkout \ https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git ~/linux/ cd ~/linux/ git remote add -t master stable \ https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git git switch --detach v6.0 # * Hint: if you used an existing clone, ensure no stale .config is around. make olddefconfig # * Ensure the former command picked the .config of the 'working' kernel. # * Connect external hardware (USB keys, tokens, ...), start a VM, bring up # VPNs, mount network shares, and briefly try the feature that is broken. yes '' | make localmodconfig ./scripts/config --set-str CONFIG_LOCALVERSION '-local' ./scripts/config -e CONFIG_LOCALVERSION_AUTO # * Note, when short on storage space, check the guide for an alternative: ./scripts/config -d DEBUG_INFO_NONE -e KALLSYMS_ALL -e DEBUG_KERNEL \ -e DEBUG_INFO -e DEBUG_INFO_DWARF_TOOLCHAIN_DEFAULT -e KALLSYMS # * Hint: at this point you might want to adjust the build configuration; # you'll have to, if you are running Debian. make olddefconfig cp .config ~/kernel-config-working}(hhhj+ubah}(h]h ]h"]h$]h&]hhuh1j)hhhK5hjubeh}(h]h ]h"]h$]h&]uh1jhjhhhhhNubj)}(hXF**Segment 1**: build a kernel from the latest mainline codebase. This among others checks if the problem was fixed already and which developers later need to be told about the problem; in case of a regression, this rules out a .config change as root of the problem. a) Checking out latest mainline code:: cd ~/linux/ git switch --discard-changes --detach mainline/master b) Build, install, and boot a kernel:: cp ~/kernel-config-working .config make olddefconfig make -j $(nproc --all) # * Make sure there is enough disk space to hold another kernel: df -h /boot/ /lib/modules/ # * Note: on Arch Linux, its derivatives and a few other distributions # the following commands will do nothing at all or only part of the # job. See the step-by-step guide for further details. sudo make modules_install command -v installkernel && sudo make install # * Check how much space your self-built kernel actually needs, which # enables you to make better estimates later: du -ch /boot/*$(make -s kernelrelease)* | tail -n 1 du -sh /lib/modules/$(make -s kernelrelease)/ # * Hint: the output of the following command will help you pick the # right kernel from the boot menu: make -s kernelrelease | tee -a ~/kernels-built reboot # * Once booted, ensure you are running the kernel you just built by # checking if the output of the next two commands matches: tail -n 1 ~/kernels-built uname -r cat /proc/sys/kernel/tainted c) Check if the problem occurs with this kernel as well. h](h)}(h@**Segment 1**: build a kernel from the latest mainline codebase.h](j~)}(h **Segment 1**h]h Segment 1}(hhhjGhhhNhNubah}(h]h ]h"]h$]h&]uh1j}hjCubh3: build a kernel from the latest mainline codebase.}(h3: build a kernel from the latest mainline codebase.hjChhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKQhj?ubh)}(hThis among others checks if the problem was fixed already and which developers later need to be told about the problem; in case of a regression, this rules out a .config change as root of the problem.h]hThis among others checks if the problem was fixed already and which developers later need to be told about the problem; in case of a regression, this rules out a .config change as root of the problem.}(hjbhj`hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKShj?ubhenumerated_list)}(hhh](j)}(hkChecking out latest mainline code:: cd ~/linux/ git switch --discard-changes --detach mainline/master h](h)}(h#Checking out latest mainline code::h]h"Checking out latest mainline code:}(h"Checking out latest mainline code:hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKWhjsubj*)}(hAcd ~/linux/ git switch --discard-changes --detach mainline/masterh]hAcd ~/linux/ git switch --discard-changes --detach mainline/master}(hhhjubah}(h]h ]h"]h$]h&]hhuh1j)hhhKYhjsubeh}(h]h ]h"]h$]h&]uh1jhjpubj)}(hXCBuild, install, and boot a kernel:: cp ~/kernel-config-working .config make olddefconfig make -j $(nproc --all) # * Make sure there is enough disk space to hold another kernel: df -h /boot/ /lib/modules/ # * Note: on Arch Linux, its derivatives and a few other distributions # the following commands will do nothing at all or only part of the # job. See the step-by-step guide for further details. sudo make modules_install command -v installkernel && sudo make install # * Check how much space your self-built kernel actually needs, which # enables you to make better estimates later: du -ch /boot/*$(make -s kernelrelease)* | tail -n 1 du -sh /lib/modules/$(make -s kernelrelease)/ # * Hint: the output of the following command will help you pick the # right kernel from the boot menu: make -s kernelrelease | tee -a ~/kernels-built reboot # * Once booted, ensure you are running the kernel you just built by # checking if the output of the next two commands matches: tail -n 1 ~/kernels-built uname -r cat /proc/sys/kernel/tainted h](h)}(h#Build, install, and boot a kernel::h]h"Build, install, and boot a kernel:}(h"Build, install, and boot a kernel:hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK\hjubj*)}(hXcp ~/kernel-config-working .config make olddefconfig make -j $(nproc --all) # * Make sure there is enough disk space to hold another kernel: df -h /boot/ /lib/modules/ # * Note: on Arch Linux, its derivatives and a few other distributions # the following commands will do nothing at all or only part of the # job. See the step-by-step guide for further details. sudo make modules_install command -v installkernel && sudo make install # * Check how much space your self-built kernel actually needs, which # enables you to make better estimates later: du -ch /boot/*$(make -s kernelrelease)* | tail -n 1 du -sh /lib/modules/$(make -s kernelrelease)/ # * Hint: the output of the following command will help you pick the # right kernel from the boot menu: make -s kernelrelease | tee -a ~/kernels-built reboot # * Once booted, ensure you are running the kernel you just built by # checking if the output of the next two commands matches: tail -n 1 ~/kernels-built uname -r cat /proc/sys/kernel/taintedh]hXcp ~/kernel-config-working .config make olddefconfig make -j $(nproc --all) # * Make sure there is enough disk space to hold another kernel: df -h /boot/ /lib/modules/ # * Note: on Arch Linux, its derivatives and a few other distributions # the following commands will do nothing at all or only part of the # job. See the step-by-step guide for further details. sudo make modules_install command -v installkernel && sudo make install # * Check how much space your self-built kernel actually needs, which # enables you to make better estimates later: du -ch /boot/*$(make -s kernelrelease)* | tail -n 1 du -sh /lib/modules/$(make -s kernelrelease)/ # * Hint: the output of the following command will help you pick the # right kernel from the boot menu: make -s kernelrelease | tee -a ~/kernels-built reboot # * Once booted, ensure you are running the kernel you just built by # checking if the output of the next two commands matches: tail -n 1 ~/kernels-built uname -r cat /proc/sys/kernel/tainted}(hhhjubah}(h]h ]h"]h$]h&]hhuh1j)hhhK^hjubeh}(h]h ]h"]h$]h&]uh1jhjpubj)}(h6Check if the problem occurs with this kernel as well. h]h)}(h5Check if the problem occurs with this kernel as well.h]h5Check if the problem occurs with this kernel as well.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKvhjubah}(h]h ]h"]h$]h&]uh1jhjpubeh}(h]h ]h"]h$]h&]enumtype loweralphaprefixhsuffix)uh1jnhj?ubeh}(h]h ]h"]h$]h&]uh1jhjhhhNhNubj)}(hXU**Segment 2**: ensure the 'good' kernel is also a 'working' kernel. This among others verifies the trimmed .config file actually works well, as bisecting with it otherwise would be a waste of time: a) Start by checking out the sources of the 'good' version:: cd ~/linux/ git switch --discard-changes --detach v6.0 b) Build, install, and boot a kernel as described earlier in *segment 1, section b* -- just feel free to skip the 'du' commands, as you have a rough estimate already. c) Ensure the feature that regressed with the 'broken' kernel actually works with this one. h](h)}(hC**Segment 2**: ensure the 'good' kernel is also a 'working' kernel.h](j~)}(h **Segment 2**h]h Segment 2}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j}hjubh>: ensure the ‘good’ kernel is also a ‘working’ kernel.}(h6: ensure the 'good' kernel is also a 'working' kernel.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKxhjubh)}(hThis among others verifies the trimmed .config file actually works well, as bisecting with it otherwise would be a waste of time:h]hThis among others verifies the trimmed .config file actually works well, as bisecting with it otherwise would be a waste of time:}(hj hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKzhjubjo)}(hhh](j)}(hvStart by checking out the sources of the 'good' version:: cd ~/linux/ git switch --discard-changes --detach v6.0 h](h)}(h9Start by checking out the sources of the 'good' version::h]h ~/bisect-log cp .config ~/bisection-config-culprit git bisect reset e) Try to verify the bisection result:: git switch --discard-changes --detach mainline/master git revert --no-edit cafec0cacaca0 cp ~/kernel-config-working .config ./scripts/config --set-str CONFIG_LOCALVERSION '-local-cafec0cacaca0-reverted' This is optional, as some commits are impossible to revert. But if the second command worked flawlessly, build, install, and boot one more kernel kernel; just this time skip the first command copying the base .config file over, as that already has been taken care off. h](h)}(h2**Segment 3**: perform and validate the bisection.h](j~)}(h **Segment 3**h]h Segment 3}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j}hjubh%: perform and validate the bisection.}(h%: perform and validate the bisection.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjubjo)}(hhh](j)}(huRetrieve the sources for your 'bad' version:: git remote set-branches --add stable linux-6.1.y git fetch stable h](h)}(h-Retrieve the sources for your 'bad' version::h]h0Retrieve the sources for your ‘bad’ version:}(h,Retrieve the sources for your 'bad' version:hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubj*)}(hAgit remote set-branches --add stable linux-6.1.y git fetch stableh]hAgit remote set-branches --add stable linux-6.1.y git fetch stable}(hhhjubah}(h]h ]h"]h$]h&]hhuh1j)hhhKhjubeh}(h]h ]h"]h$]h&]uh1jhjubj)}(hlInitialize the bisection:: cd ~/linux/ git bisect start git bisect good v6.0 git bisect bad v6.1.5 h](h)}(hInitialize the bisection::h]hInitialize the bisection:}(hInitialize the bisection:hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubj*)}(hGcd ~/linux/ git bisect start git bisect good v6.0 git bisect bad v6.1.5h]hGcd ~/linux/ git bisect start git bisect good v6.0 git bisect bad v6.1.5}(hhhjubah}(h]h ]h"]h$]h&]hhuh1j)hhhKhjubeh}(h]h ]h"]h$]h&]uh1jhjubj)}(hXBuild, install, and boot a kernel as described earlier in *segment 1, section b*. In case building or booting the kernel fails for unrelated reasons, run ``git bisect skip``. In all other outcomes, check if the regressed feature works with the newly built kernel. If it does, tell Git by executing ``git bisect good``; if it does not, run ``git bisect bad`` instead. All three commands will make Git check out another commit; then re-execute this step (e.g. build, install, boot, and test a kernel to then tell Git the outcome). Do so again and again until Git shows which commit broke things. If you run short of disk space during this process, check the section 'Complementary tasks: cleanup during and after the process' below. h](h)}(hQBuild, install, and boot a kernel as described earlier in *segment 1, section b*.h](h:Build, install, and boot a kernel as described earlier in }(h:Build, install, and boot a kernel as described earlier in hj hhhNhNubj')}(h*segment 1, section b*h]hsegment 1, section b}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j&hj ubh.}(h.hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjubh)}(hXIn case building or booting the kernel fails for unrelated reasons, run ``git bisect skip``. In all other outcomes, check if the regressed feature works with the newly built kernel. If it does, tell Git by executing ``git bisect good``; if it does not, run ``git bisect bad`` instead.h](hHIn case building or booting the kernel fails for unrelated reasons, run }(hHIn case building or booting the kernel fails for unrelated reasons, run hj+hhhNhNubhliteral)}(h``git bisect skip``h]hgit bisect skip}(hhhj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j4hj+ubh}. In all other outcomes, check if the regressed feature works with the newly built kernel. If it does, tell Git by executing }(h}. In all other outcomes, check if the regressed feature works with the newly built kernel. If it does, tell Git by executing hj+hhhNhNubj5)}(h``git bisect good``h]hgit bisect good}(hhhjIhhhNhNubah}(h]h ]h"]h$]h&]uh1j4hj+ubh; if it does not, run }(h; if it does not, run hj+hhhNhNubj5)}(h``git bisect bad``h]hgit bisect bad}(hhhj\hhhNhNubah}(h]h ]h"]h$]h&]uh1j4hj+ubh instead.}(h instead.hj+hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjubh)}(hXkAll three commands will make Git check out another commit; then re-execute this step (e.g. build, install, boot, and test a kernel to then tell Git the outcome). Do so again and again until Git shows which commit broke things. If you run short of disk space during this process, check the section 'Complementary tasks: cleanup during and after the process' below.h]hXoAll three commands will make Git check out another commit; then re-execute this step (e.g. build, install, boot, and test a kernel to then tell Git the outcome). Do so again and again until Git shows which commit broke things. If you run short of disk space during this process, check the section ‘Complementary tasks: cleanup during and after the process’ below.}(hjwhjuhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubeh}(h]h ]h"]h$]h&]uh1jhjubj)}(hOnce your finished the bisection, put a few things away:: cd ~/linux/ git bisect log > ~/bisect-log cp .config ~/bisection-config-culprit git bisect reset h](h)}(h9Once your finished the bisection, put a few things away::h]h8Once your finished the bisection, put a few things away:}(h8Once your finished the bisection, put a few things away:hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubj*)}(h`cd ~/linux/ git bisect log > ~/bisect-log cp .config ~/bisection-config-culprit git bisect reseth]h`cd ~/linux/ git bisect log > ~/bisect-log cp .config ~/bisection-config-culprit git bisect reset}(hhhjubah}(h]h ]h"]h$]h&]hhuh1j)hhhKhjubeh}(h]h ]h"]h$]h&]uh1jhjubj)}(hTry to verify the bisection result:: git switch --discard-changes --detach mainline/master git revert --no-edit cafec0cacaca0 cp ~/kernel-config-working .config ./scripts/config --set-str CONFIG_LOCALVERSION '-local-cafec0cacaca0-reverted' h](h)}(h$Try to verify the bisection result::h]h#Try to verify the bisection result:}(h#Try to verify the bisection result:hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubj*)}(hgit switch --discard-changes --detach mainline/master git revert --no-edit cafec0cacaca0 cp ~/kernel-config-working .config ./scripts/config --set-str CONFIG_LOCALVERSION '-local-cafec0cacaca0-reverted'h]hgit switch --discard-changes --detach mainline/master git revert --no-edit cafec0cacaca0 cp ~/kernel-config-working .config ./scripts/config --set-str CONFIG_LOCALVERSION '-local-cafec0cacaca0-reverted'}(hhhjubah}(h]h ]h"]h$]h&]hhuh1j)hhhKhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]jjjhjjuh1jnhjubh block_quote)}(hhh]h)}(hX This is optional, as some commits are impossible to revert. But if the second command worked flawlessly, build, install, and boot one more kernel kernel; just this time skip the first command copying the base .config file over, as that already has been taken care off.h]hX This is optional, as some commits are impossible to revert. But if the second command worked flawlessly, build, install, and boot one more kernel kernel; just this time skip the first command copying the base .config file over, as that already has been taken care off.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhhhhhNubj)}(hX**Complementary tasks**: cleanup during and after the process. a) To avoid running out of disk space during a bisection, you might need to remove some kernels you built earlier. You most likely want to keep those you built during segment 1 and 2 around for a while, but you will most likely no longer need kernels tested during the actual bisection (Segment 3 c). You can list them in build order using:: ls -ltr /lib/modules/*-local* To then for example erase a kernel that identifies itself as '6.0-rc1-local-gcafec0cacaca0', use this:: sudo rm -rf /lib/modules/6.0-rc1-local-gcafec0cacaca0 sudo kernel-install -v remove 6.0-rc1-local-gcafec0cacaca0 # * Note, on some distributions kernel-install is missing # or does only part of the job. b) If you performed a bisection and successfully validated the result, feel free to remove all kernels built during the actual bisection (Segment 3 c); the kernels you built earlier and later you might want to keep around for a week or two. h](h)}(h>**Complementary tasks**: cleanup during and after the process.h](j~)}(h**Complementary tasks**h]hComplementary tasks}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j}hjubh': cleanup during and after the process.}(h': cleanup during and after the process.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjubjo)}(hhh]j)}(hXtTo avoid running out of disk space during a bisection, you might need to remove some kernels you built earlier. You most likely want to keep those you built during segment 1 and 2 around for a while, but you will most likely no longer need kernels tested during the actual bisection (Segment 3 c). You can list them in build order using:: ls -ltr /lib/modules/*-local* h](h)}(hXRTo avoid running out of disk space during a bisection, you might need to remove some kernels you built earlier. You most likely want to keep those you built during segment 1 and 2 around for a while, but you will most likely no longer need kernels tested during the actual bisection (Segment 3 c). You can list them in build order using::h]hXQTo avoid running out of disk space during a bisection, you might need to remove some kernels you built earlier. You most likely want to keep those you built during segment 1 and 2 around for a while, but you will most likely no longer need kernels tested during the actual bisection (Segment 3 c). You can list them in build order using:}(hXQTo avoid running out of disk space during a bisection, you might need to remove some kernels you built earlier. You most likely want to keep those you built during segment 1 and 2 around for a while, but you will most likely no longer need kernels tested during the actual bisection (Segment 3 c). You can list them in build order using:hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubj*)}(hls -ltr /lib/modules/*-local*h]hls -ltr /lib/modules/*-local*}(hhhj3ubah}(h]h ]h"]h$]h&]hhuh1j)hhhKhj ubeh}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]jjjhjjuh1jnhjubj)}(hhh](h)}(hgTo then for example erase a kernel that identifies itself as '6.0-rc1-local-gcafec0cacaca0', use this::h]hjTo then for example erase a kernel that identifies itself as ‘6.0-rc1-local-gcafec0cacaca0’, use this:}(hfTo then for example erase a kernel that identifies itself as '6.0-rc1-local-gcafec0cacaca0', use this:hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjMubj*)}(hsudo rm -rf /lib/modules/6.0-rc1-local-gcafec0cacaca0 sudo kernel-install -v remove 6.0-rc1-local-gcafec0cacaca0 # * Note, on some distributions kernel-install is missing # or does only part of the job.h]hsudo rm -rf /lib/modules/6.0-rc1-local-gcafec0cacaca0 sudo kernel-install -v remove 6.0-rc1-local-gcafec0cacaca0 # * Note, on some distributions kernel-install is missing # or does only part of the job.}(hhhj_ubah}(h]h ]h"]h$]h&]hhuh1j)hhhKhjMubeh}(h]h ]h"]h$]h&]uh1jhjubjo)}(hhh]j)}(hIf you performed a bisection and successfully validated the result, feel free to remove all kernels built during the actual bisection (Segment 3 c); the kernels you built earlier and later you might want to keep around for a week or two. h]h)}(hIf you performed a bisection and successfully validated the result, feel free to remove all kernels built during the actual bisection (Segment 3 c); the kernels you built earlier and later you might want to keep around for a week or two.h]hIf you performed a bisection and successfully validated the result, feel free to remove all kernels built during the actual bisection (Segment 3 c); the kernels you built earlier and later you might want to keep around for a week or two.}(hj|hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjvubah}(h]h ]h"]h$]h&]uh1jhjsubah}(h]h ]h"]h$]h&]jjjhjjstartKuh1jnhjubeh}(h]h ]h"]h$]h&]uh1jhjhhhNhNubj)}(hX**Optional task**: test a debug patch or a proposed fix later:: git fetch mainline git switch --discard-changes --detach mainline/master git apply /tmp/foobars-proposed-fix-v1.patch cp ~/kernel-config-working .config ./scripts/config --set-str CONFIG_LOCALVERSION '-local-foobars-fix-v1' Build, install, and boot a kernel as described in *segment 1, section b* -- but this time omit the first command copying the build configuration over, as that has been taken care of already. h](h)}(h?**Optional task**: test a debug patch or a proposed fix later::h](j~)}(h**Optional task**h]h Optional task}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j}hjubh-: test a debug patch or a proposed fix later:}(h-: test a debug patch or a proposed fix later:hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjubj*)}(hgit fetch mainline git switch --discard-changes --detach mainline/master git apply /tmp/foobars-proposed-fix-v1.patch cp ~/kernel-config-working .config ./scripts/config --set-str CONFIG_LOCALVERSION '-local-foobars-fix-v1'h]hgit fetch mainline git switch --discard-changes --detach mainline/master git apply /tmp/foobars-proposed-fix-v1.patch cp ~/kernel-config-working .config ./scripts/config --set-str CONFIG_LOCALVERSION '-local-foobars-fix-v1'}(hhhjubah}(h]h ]h"]h$]h&]hhuh1j)hhhKhjubh)}(hBuild, install, and boot a kernel as described in *segment 1, section b* -- but this time omit the first command copying the build configuration over, as that has been taken care of already.h](h2Build, install, and boot a kernel as described in }(h2Build, install, and boot a kernel as described in hjhhhNhNubj')}(h*segment 1, section b*h]hsegment 1, section b}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j&hjubhv -- but this time omit the first command copying the build configuration over, as that has been taken care of already.}(hv -- but this time omit the first command copying the build configuration over, as that has been taken care of already.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjubeh}(h]h ]h"]h$]h&]uh1jhjhhhhhNubeh}(h]h ]h"]h$]h&]bullet*uh1jhhhK3hjhhubhtarget)}(h.. _introguide_bissbs:h]h}(h]h ]h"]h$]h&]refidintroguide-bissbsuh1jhKhjhhhhubeh}(h]$the-essence-of-the-process-aka-tl-drah ]h"](the essence of the process (aka 'tl;dr')ah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(h?Step-by-step guide on how to verify bugs and bisect regressionsh]h?Step-by-step guide on how to verify bugs and bisect regressions}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKubh)}(hThis guide describes how to set up your own Linux kernels for investigating bugs or regressions you intend to report. How far you want to follow the instructions depends on your issue:h]hThis guide describes how to set up your own Linux kernels for investigating bugs or regressions you intend to report. How far you want to follow the instructions depends on your issue:}(hj#hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(hXExecute all steps till the end of *segment 1* to **verify if your kernel problem is present in code supported by Linux kernel developers**. If it is, you are all set to report the bug -- unless it did not happen with earlier kernel versions, as then your want to at least continue with *segment 2* to **check if the issue qualifies as regression** which receive priority treatment. Depending on the outcome you then are ready to report a bug or submit a preliminary regression report; instead of the latter your could also head straight on and follow *segment 3* to **perform a bisection** for a full-fledged regression report developers are obliged to act upon.h](h"Execute all steps till the end of }(h"Execute all steps till the end of hj/hhhNhNubj')}(h *segment 1*h]h segment 1}(hhhj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j&hj/ubh to }(h to hj/hhhNhNubj~)}(hY**verify if your kernel problem is present in code supported by Linux kernel developers**h]hUverify if your kernel problem is present in code supported by Linux kernel developers}(hhhjKhhhNhNubah}(h]h ]h"]h$]h&]uh1j}hj/ubh. If it is, you are all set to report the bug -- unless it did not happen with earlier kernel versions, as then your want to at least continue with }(h. If it is, you are all set to report the bug -- unless it did not happen with earlier kernel versions, as then your want to at least continue with hj/hhhNhNubj')}(h *segment 2*h]h segment 2}(hhhj^hhhNhNubah}(h]h ]h"]h$]h&]uh1j&hj/ubh to }(h to hj/ubj~)}(h.**check if the issue qualifies as regression**h]h*check if the issue qualifies as regression}(hhhjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j}hj/ubh which receive priority treatment. Depending on the outcome you then are ready to report a bug or submit a preliminary regression report; instead of the latter your could also head straight on and follow }(h which receive priority treatment. Depending on the outcome you then are ready to report a bug or submit a preliminary regression report; instead of the latter your could also head straight on and follow hj/hhhNhNubj')}(h *segment 3*h]h segment 3}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j&hj/ubh to }(hjJhj/ubj~)}(h**perform a bisection**h]hperform a bisection}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j}hj/ubhI for a full-fledged regression report developers are obliged to act upon.}(hI for a full-fledged regression report developers are obliged to act upon.hj/hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjhhubj)}(hhh](h)}(hT:ref:`Preparations: set up everything to build your own kernels `.h](h)}(hS:ref:`Preparations: set up everything to build your own kernels `h]j@)}(hjh]h9Preparations: set up everything to build your own kernels}(hhhjhhhNhNubah}(h]h ](jKstdstd-refeh"]h$]h&]uh1j?hjubah}(h]h ]h"]h$]h&]refdocjX refdomainjreftyperef refexplicitrefwarnj^introprep_bissbsuh1hhhhKhjubh.}(hj$hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjubh)}(hb:ref:`Segment 1: try to reproduce the problem with the latest codebase `.h](h)}(ha:ref:`Segment 1: try to reproduce the problem with the latest codebase `h]j@)}(hjh]h@Segment 1: try to reproduce the problem with the latest codebase}(hhhjhhhNhNubah}(h]h ](jKstdstd-refeh"]h$]h&]uh1j?hjubah}(h]h ]h"]h$]h&]refdocjX refdomainjreftyperef refexplicitrefwarnj^introlatestcheck_bissbsuh1hhhhKhjubh.}(hj$hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjubh)}(hV:ref:`Segment 2: check if the kernels you build work fine `.h](h)}(hU:ref:`Segment 2: check if the kernels you build work fine `h]j@)}(hjh]h3Segment 2: check if the kernels you build work fine}(hhhjhhhNhNubah}(h]h ](jKstdstd-refeh"]h$]h&]uh1j?hjubah}(h]h ]h"]h$]h&]refdocjX refdomainj reftyperef refexplicitrefwarnj^introworkingcheck_bissbsuh1hhhhKhjubh.}(hj$hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjubh)}(hS:ref:`Segment 3: perform a bisection and validate the result `.h](h)}(hR:ref:`Segment 3: perform a bisection and validate the result `h]j@)}(hjBh]h6Segment 3: perform a bisection and validate the result}(hhhjDhhhNhNubah}(h]h ](jKstdstd-refeh"]h$]h&]uh1j?hj@ubah}(h]h ]h"]h$]h&]refdocjX refdomainjNreftyperef refexplicitrefwarnj^introbisect_bissbsuh1hhhhKhj<ubh.}(hj$hj<hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjubh)}(h`:ref:`Complementary tasks: cleanup during and after following this guide `.h](h)}(h_:ref:`Complementary tasks: cleanup during and after following this guide `h]j@)}(hjph]hBComplementary tasks: cleanup during and after following this guide}(hhhjrhhhNhNubah}(h]h ](jKstdstd-refeh"]h$]h&]uh1j?hjnubah}(h]h ]h"]h$]h&]refdocjX refdomainj|reftyperef refexplicitrefwarnj^introclosure_bissbsuh1hhhhKhjjubh.}(hj$hjjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjubh)}(hW:ref:`Optional tasks: test reverts, patches, or later versions `.h](h)}(hV:ref:`Optional tasks: test reverts, patches, or later versions `h]j@)}(hjh]h8Optional tasks: test reverts, patches, or later versions}(hhhjhhhNhNubah}(h]h ](jKstdstd-refeh"]h$]h&]uh1j?hjubah}(h]h ]h"]h$]h&]refdocjX refdomainjreftyperef refexplicitrefwarnj^introoptional_bissbsuh1hhhhKhjubh.}(hj$hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjubeh}(h]h ]h"]h$]h&]uh1jhjhhhhhNubh)}(hX\The steps in each segment illustrate the important aspects of the process, while a comprehensive reference section holds additional details for almost all of the steps. The reference section sometimes also outlines alternative approaches, pitfalls, as well as problems that might occur at the particular step -- and how to get things rolling again.h]hX\The steps in each segment illustrate the important aspects of the process, while a comprehensive reference section holds additional details for almost all of the steps. The reference section sometimes also outlines alternative approaches, pitfalls, as well as problems that might occur at the particular step -- and how to get things rolling again.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(hXFor further details on how to report Linux kernel issues or regressions check out Documentation/admin-guide/reporting-issues.rst, which works in conjunction with this document. It among others explains why you need to verify bugs with the latest 'mainline' kernel (e.g. versions like 6.0, 6.1-rc1, or 6.1-rc6), even if you face a problem with a kernel from a 'stable/longterm' series (say 6.0.13).h]hXFor further details on how to report Linux kernel issues or regressions check out Documentation/admin-guide/reporting-issues.rst, which works in conjunction with this document. It among others explains why you need to verify bugs with the latest ‘mainline’ kernel (e.g. versions like 6.0, 6.1-rc1, or 6.1-rc6), even if you face a problem with a kernel from a ‘stable/longterm’ series (say 6.0.13).}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjhhubh)}(hX1For users facing a regression that document also explains why sending a preliminary report after segment 2 might be wise, as the regression and its culprit might be known already. For further details on what actually qualifies as a regression check out Documentation/admin-guide/reporting-regressions.rst.h]hX1For users facing a regression that document also explains why sending a preliminary report after segment 2 might be wise, as the regression and its culprit might be known already. For further details on what actually qualifies as a regression check out Documentation/admin-guide/reporting-regressions.rst.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjhhubh)}(hIf you run into any problems while following this guide or have ideas how to improve it, :ref:`please let the kernel developers know `.h](hYIf you run into any problems while following this guide or have ideas how to improve it, }(hYIf you run into any problems while following this guide or have ideas how to improve it, hjhhhNhNubh)}(hB:ref:`please let the kernel developers know `h]j@)}(hjh]h%please let the kernel developers know}(hhhjhhhNhNubah}(h]h ](jKstdstd-refeh"]h$]h&]uh1j?hjubah}(h]h ]h"]h$]h&]refdocjX refdomainj reftyperef refexplicitrefwarnj^submit_improvementsuh1hhhhM hjubh.}(hj$hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhM hjhhubj)}(h.. _introprep_bissbs:h]h}(h]h ]h"]h$]h&]jintroprep-bissbsuh1jhMhjhhhhubh)}(hhh](h)}(h9Preparations: set up everything to build your own kernelsh]h9Preparations: set up everything to build your own kernels}(hj9hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj4hhhhhMubh)}(h=The following steps lay the groundwork for all further tasks.h]h=The following steps lay the groundwork for all further tasks.}(hjGhjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj4hhubh)}(hNote: the instructions assume you are building and testing on the same machine; if you want to compile the kernel on another system, check :ref:`Build kernels on a different machine ` below.h](hNote: the instructions assume you are building and testing on the same machine; if you want to compile the kernel on another system, check }(hNote: the instructions assume you are building and testing on the same machine; if you want to compile the kernel on another system, check hjShhhNhNubh)}(h;:ref:`Build kernels on a different machine `h]j@)}(hj^h]h$Build kernels on a different machine}(hhhj`hhhNhNubah}(h]h ](jKstdstd-refeh"]h$]h&]uh1j?hj\ubah}(h]h ]h"]h$]h&]refdocjX refdomainjjreftyperef refexplicitrefwarnj^ buildhost_bisuh1hhhhMhjSubh below.}(h below.hjShhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhj4hhubj)}(h.. _backup_bissbs:h]h}(h]h ]h"]h$]h&]j backup-bissbsuh1jhMhj4hhhhubj)}(hhh]j)}(hCreate a fresh backup and put system repair and restore tools at hand, just to be prepared for the unlikely case of something going sideways. [:ref:`details `] h](h)}(hCreate a fresh backup and put system repair and restore tools at hand, just to be prepared for the unlikely case of something going sideways.h]hCreate a fresh backup and put system repair and restore tools at hand, just to be prepared for the unlikely case of something going sideways.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjubh)}(h [:ref:`details `]h](h[}(h[hjhhhNhNubh)}(h:ref:`details `h]j@)}(hjh]hdetails}(hhhjhhhNhNubah}(h]h ](jKstdstd-refeh"]h$]h&]uh1j?hjubah}(h]h ]h"]h$]h&]refdocjX refdomainjreftyperef refexplicitrefwarnj^ backup_bisrefuh1hhhhM hjubh]}(h]hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhM hjubeh}(h]h ]h"]h$]h&]uh1jhjhhhhhNubah}(h]jah ]h"] backup_bissbsah$]h&]jjuh1jhhhMhj4hhexpect_referenced_by_name}jjsexpect_referenced_by_id}jjsubj)}(h.. _vanilla_bissbs:h]h}(h]h ]h"]h$]h&]jvanilla-bissbsuh1jhM"hj4hhhhubj)}(hhh]j)}(hX Remove all software that depends on externally developed kernel drivers or builds them automatically. That includes but is not limited to DKMS, openZFS, VirtualBox, and Nvidia's graphics drivers (including the GPLed kernel module). [:ref:`details `] h](h)}(hRemove all software that depends on externally developed kernel drivers or builds them automatically. That includes but is not limited to DKMS, openZFS, VirtualBox, and Nvidia's graphics drivers (including the GPLed kernel module).h]hRemove all software that depends on externally developed kernel drivers or builds them automatically. That includes but is not limited to DKMS, openZFS, VirtualBox, and Nvidia’s graphics drivers (including the GPLed kernel module).}(hj hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM$hjubh)}(h![:ref:`details `]h](h[}(hjhj hhhNhNubh)}(h:ref:`details `h]j@)}(hj h]hdetails}(hhhj hhhNhNubah}(h]h ](jKstdstd-refeh"]h$]h&]uh1j?hj ubah}(h]h ]h"]h$]h&]refdocjX refdomainj" reftyperef refexplicitrefwarnj^vanilla_bisrefuh1hhhhM(hj ubh]}(hjhj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhM(hjubeh}(h]h ]h"]h$]h&]uh1jhjhhhhhNubah}(h]jah ]h"]vanilla_bissbsah$]h&]jjuh1jhhhM$hj4hhj}jH jsj}jjsubj)}(h.. _secureboot_bissbs:h]h}(h]h ]h"]h$]h&]jsecureboot-bissbsuh1jhM*hj4hhhhubj)}(hhh]j)}(hXOn platforms with 'Secure Boot' or similar solutions, prepare everything to ensure the system will permit your self-compiled kernel to boot. The quickest and easiest way to achieve this on commodity x86 systems is to disable such techniques in the BIOS setup utility; alternatively, remove their restrictions through a process initiated by ``mokutil --disable-validation``. [:ref:`details `] h](h)}(hXuOn platforms with 'Secure Boot' or similar solutions, prepare everything to ensure the system will permit your self-compiled kernel to boot. The quickest and easiest way to achieve this on commodity x86 systems is to disable such techniques in the BIOS setup utility; alternatively, remove their restrictions through a process initiated by ``mokutil --disable-validation``.h](hXXOn platforms with ‘Secure Boot’ or similar solutions, prepare everything to ensure the system will permit your self-compiled kernel to boot. The quickest and easiest way to achieve this on commodity x86 systems is to disable such techniques in the BIOS setup utility; alternatively, remove their restrictions through a process initiated by }(hXTOn platforms with 'Secure Boot' or similar solutions, prepare everything to ensure the system will permit your self-compiled kernel to boot. The quickest and easiest way to achieve this on commodity x86 systems is to disable such techniques in the BIOS setup utility; alternatively, remove their restrictions through a process initiated by hj_ hhhNhNubj5)}(h ``mokutil --disable-validation``h]hmokutil --disable-validation}(hhhjh hhhNhNubah}(h]h ]h"]h$]h&]uh1j4hj_ ubh.}(hj$hj_ hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhM,hj[ ubh)}(h$[:ref:`details `]h](h[}(hjhj hhhNhNubh)}(h":ref:`details `h]j@)}(hj h]hdetails}(hhhj hhhNhNubah}(h]h ](jKstdstd-refeh"]h$]h&]uh1j?hj ubah}(h]h ]h"]h$]h&]refdocjX refdomainj reftyperef refexplicitrefwarnj^secureboot_bisrefuh1hhhhM3hj ubh]}(hjhj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhM3hj[ ubeh}(h]h ]h"]h$]h&]uh1jhjX hhhhhNubah}(h]jW ah ]h"]secureboot_bissbsah$]h&]jjuh1jhhhM,hj4hhj}j jM sj}jW jM subj)}(h.. _rangecheck_bissbs:h]h}(h]h ]h"]h$]h&]jrangecheck-bissbsuh1jhM5hj4hhhhubj)}(hhh]j)}(hXDetermine the kernel versions considered 'good' and 'bad' throughout this guide: * Do you follow this guide to verify if a bug is present in the code the primary developers care for? Then consider the version of the newest kernel you regularly use currently as 'good' (e.g. 6.0, 6.0.13, or 6.1-rc2). * Do you face a regression, e.g. something broke or works worse after switching to a newer kernel version? In that case it depends on the version range during which the problem appeared: * Something regressed when updating from a stable/longterm release (say 6.0.13) to a newer mainline series (like 6.1-rc7 or 6.1) or a stable/longterm version based on one (say 6.1.5)? Then consider the mainline release your working kernel is based on to be the 'good' version (e.g. 6.0) and the first version to be broken as the 'bad' one (e.g. 6.1-rc7, 6.1, or 6.1.5). Note, at this point it is merely assumed that 6.0 is fine; this hypothesis will be checked in segment 2. * Something regressed when switching from one mainline version (say 6.0) to a later one (like 6.1-rc1) or a stable/longterm release based on it (say 6.1.5)? Then regard the last working version (e.g. 6.0) as 'good' and the first broken (e.g. 6.1-rc1 or 6.1.5) as 'bad'. * Something regressed when updating within a stable/longterm series (say from 6.0.13 to 6.0.15)? Then consider those versions as 'good' and 'bad' (e.g. 6.0.13 and 6.0.15), as you need to bisect within that series. *Note, do not confuse 'good' version with 'working' kernel; the latter term throughout this guide will refer to the last kernel that has been working fine.* [:ref:`details `] h](h)}(hPDetermine the kernel versions considered 'good' and 'bad' throughout this guide:h]hXDetermine the kernel versions considered ‘good’ and ‘bad’ throughout this guide:}(hj hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM7hj ubj)}(hhh](j)}(hDo you follow this guide to verify if a bug is present in the code the primary developers care for? Then consider the version of the newest kernel you regularly use currently as 'good' (e.g. 6.0, 6.0.13, or 6.1-rc2). h]h)}(hDo you follow this guide to verify if a bug is present in the code the primary developers care for? Then consider the version of the newest kernel you regularly use currently as 'good' (e.g. 6.0, 6.0.13, or 6.1-rc2).h]hDo you follow this guide to verify if a bug is present in the code the primary developers care for? Then consider the version of the newest kernel you regularly use currently as ‘good’ (e.g. 6.0, 6.0.13, or 6.1-rc2).}(hj hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM:hj ubah}(h]h ]h"]h$]h&]uh1jhj ubj)}(hXDo you face a regression, e.g. something broke or works worse after switching to a newer kernel version? In that case it depends on the version range during which the problem appeared: * Something regressed when updating from a stable/longterm release (say 6.0.13) to a newer mainline series (like 6.1-rc7 or 6.1) or a stable/longterm version based on one (say 6.1.5)? Then consider the mainline release your working kernel is based on to be the 'good' version (e.g. 6.0) and the first version to be broken as the 'bad' one (e.g. 6.1-rc7, 6.1, or 6.1.5). Note, at this point it is merely assumed that 6.0 is fine; this hypothesis will be checked in segment 2. * Something regressed when switching from one mainline version (say 6.0) to a later one (like 6.1-rc1) or a stable/longterm release based on it (say 6.1.5)? Then regard the last working version (e.g. 6.0) as 'good' and the first broken (e.g. 6.1-rc1 or 6.1.5) as 'bad'. * Something regressed when updating within a stable/longterm series (say from 6.0.13 to 6.0.15)? Then consider those versions as 'good' and 'bad' (e.g. 6.0.13 and 6.0.15), as you need to bisect within that series. h](h)}(hDo you face a regression, e.g. something broke or works worse after switching to a newer kernel version? In that case it depends on the version range during which the problem appeared:h]hDo you face a regression, e.g. something broke or works worse after switching to a newer kernel version? In that case it depends on the version range during which the problem appeared:}(hj hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM>hj ubj)}(hhh](j)}(hXSomething regressed when updating from a stable/longterm release (say 6.0.13) to a newer mainline series (like 6.1-rc7 or 6.1) or a stable/longterm version based on one (say 6.1.5)? Then consider the mainline release your working kernel is based on to be the 'good' version (e.g. 6.0) and the first version to be broken as the 'bad' one (e.g. 6.1-rc7, 6.1, or 6.1.5). Note, at this point it is merely assumed that 6.0 is fine; this hypothesis will be checked in segment 2. h]h)}(hXSomething regressed when updating from a stable/longterm release (say 6.0.13) to a newer mainline series (like 6.1-rc7 or 6.1) or a stable/longterm version based on one (say 6.1.5)? Then consider the mainline release your working kernel is based on to be the 'good' version (e.g. 6.0) and the first version to be broken as the 'bad' one (e.g. 6.1-rc7, 6.1, or 6.1.5). Note, at this point it is merely assumed that 6.0 is fine; this hypothesis will be checked in segment 2.h]hXSomething regressed when updating from a stable/longterm release (say 6.0.13) to a newer mainline series (like 6.1-rc7 or 6.1) or a stable/longterm version based on one (say 6.1.5)? Then consider the mainline release your working kernel is based on to be the ‘good’ version (e.g. 6.0) and the first version to be broken as the ‘bad’ one (e.g. 6.1-rc7, 6.1, or 6.1.5). Note, at this point it is merely assumed that 6.0 is fine; this hypothesis will be checked in segment 2.}(hj hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMBhj ubah}(h]h ]h"]h$]h&]uh1jhj ubj)}(hX Something regressed when switching from one mainline version (say 6.0) to a later one (like 6.1-rc1) or a stable/longterm release based on it (say 6.1.5)? Then regard the last working version (e.g. 6.0) as 'good' and the first broken (e.g. 6.1-rc1 or 6.1.5) as 'bad'. h]h)}(hX Something regressed when switching from one mainline version (say 6.0) to a later one (like 6.1-rc1) or a stable/longterm release based on it (say 6.1.5)? Then regard the last working version (e.g. 6.0) as 'good' and the first broken (e.g. 6.1-rc1 or 6.1.5) as 'bad'.h]hXSomething regressed when switching from one mainline version (say 6.0) to a later one (like 6.1-rc1) or a stable/longterm release based on it (say 6.1.5)? Then regard the last working version (e.g. 6.0) as ‘good’ and the first broken (e.g. 6.1-rc1 or 6.1.5) as ‘bad’.}(hj/ hj- hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMJhj) ubah}(h]h ]h"]h$]h&]uh1jhj ubj)}(hSomething regressed when updating within a stable/longterm series (say from 6.0.13 to 6.0.15)? Then consider those versions as 'good' and 'bad' (e.g. 6.0.13 and 6.0.15), as you need to bisect within that series. h]h)}(hSomething regressed when updating within a stable/longterm series (say from 6.0.13 to 6.0.15)? Then consider those versions as 'good' and 'bad' (e.g. 6.0.13 and 6.0.15), as you need to bisect within that series.h]hSomething regressed when updating within a stable/longterm series (say from 6.0.13 to 6.0.15)? Then consider those versions as ‘good’ and ‘bad’ (e.g. 6.0.13 and 6.0.15), as you need to bisect within that series.}(hjG hjE hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMOhjA ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]jjuh1jhhhMBhj ubeh}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]jjuh1jhhhM:hj ubh)}(h*Note, do not confuse 'good' version with 'working' kernel; the latter term throughout this guide will refer to the last kernel that has been working fine.*h]j')}(hjm h]hNote, do not confuse ‘good’ version with ‘working’ kernel; the latter term throughout this guide will refer to the last kernel that has been working fine.}(hhhjo hhhNhNubah}(h]h ]h"]h$]h&]uh1j&hjk ubah}(h]h ]h"]h$]h&]uh1hhhhMShj ubh)}(h$[:ref:`details `]h](h[}(hjhj hhhNhNubh)}(h":ref:`details `h]j@)}(hj h]hdetails}(hhhj hhhNhNubah}(h]h ](jKstdstd-refeh"]h$]h&]uh1j?hj ubah}(h]h ]h"]h$]h&]refdocjX refdomainj reftyperef refexplicitrefwarnj^rangecheck_bisrefuh1hhhhMWhj ubh]}(hjhj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMWhj ubeh}(h]h ]h"]h$]h&]uh1jhj hhhhhNubah}(h]j ah ]h"]rangecheck_bissbsah$]h&]jjuh1jhhhM7hj4hhj}j j sj}j j subj)}(h.. _bootworking_bissbs:h]h}(h]h ]h"]h$]h&]jbootworking-bissbsuh1jhMYhj4hhhhubj)}(hhh]j)}(huBoot into the 'working' kernel and briefly use the apparently broken feature. [:ref:`details `] h](h)}(hMBoot into the 'working' kernel and briefly use the apparently broken feature.h]hQBoot into the ‘working’ kernel and briefly use the apparently broken feature.}(hj hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM[hj ubh)}(h%[:ref:`details `]h](h[}(hjhj hhhNhNubh)}(h#:ref:`details `h]j@)}(hj h]hdetails}(hhhj hhhNhNubah}(h]h ](jKstdstd-refeh"]h$]h&]uh1j?hj ubah}(h]h ]h"]h$]h&]refdocjX refdomainj reftyperef refexplicitrefwarnj^bootworking_bisrefuh1hhhhM]hj ubh]}(hjhj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhM]hj ubeh}(h]h ]h"]h$]h&]uh1jhj hhhhhNubah}(h]j ah ]h"]bootworking_bissbsah$]h&]jjuh1jhhhM[hj4hhj}j j sj}j j subj)}(h.. _diskspace_bissbs:h]h}(h]h ]h"]h$]h&]jdiskspace-bissbsuh1jhM_hj4hhhhubj)}(hhh]j)}(hXEnsure to have enough free space for building Linux. 15 Gigabyte in your home directory should typically suffice. If you have less available, be sure to pay attention to later steps about retrieving the Linux sources and handling of debug symbols: both explain approaches reducing the amount of space, which should allow you to master these tasks with about 4 Gigabytes free space. [:ref:`details `] h](h)}(hX}Ensure to have enough free space for building Linux. 15 Gigabyte in your home directory should typically suffice. If you have less available, be sure to pay attention to later steps about retrieving the Linux sources and handling of debug symbols: both explain approaches reducing the amount of space, which should allow you to master these tasks with about 4 Gigabytes free space.h]hX}Ensure to have enough free space for building Linux. 15 Gigabyte in your home directory should typically suffice. If you have less available, be sure to pay attention to later steps about retrieving the Linux sources and handling of debug symbols: both explain approaches reducing the amount of space, which should allow you to master these tasks with about 4 Gigabytes free space.}(hj8 hj6 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMahj2 ubh)}(h#[:ref:`details `]h](h[}(hjhjD hhhNhNubh)}(h!:ref:`details `h]j@)}(hjN h]hdetails}(hhhjP hhhNhNubah}(h]h ](jKstdstd-refeh"]h$]h&]uh1j?hjL ubah}(h]h ]h"]h$]h&]refdocjX refdomainjZ reftyperef refexplicitrefwarnj^diskspace_bisrefuh1hhhhMghjD ubh]}(hjhjD hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMghj2 ubeh}(h]h ]h"]h$]h&]uh1jhj/ hhhhhNubah}(h]j. ah ]h"]diskspace_bissbsah$]h&]jjuh1jhhhMahj4hhj}j j$ sj}j. j$ subj)}(h.. _buildrequires_bissbs:h]h}(h]h ]h"]h$]h&]jbuildrequires-bissbsuh1jhMihj4hhhhubj)}(hhh]j)}(hXjInstall all software required to build a Linux kernel. Often you will need: 'bc', 'binutils' ('ld' et al.), 'bison', 'flex', 'gcc', 'git', 'openssl', 'pahole', 'perl', and the development headers for 'libelf' and 'openssl'. The reference section shows how to quickly install those on various popular Linux distributions. [:ref:`details `] h](h)}(hX@Install all software required to build a Linux kernel. Often you will need: 'bc', 'binutils' ('ld' et al.), 'bison', 'flex', 'gcc', 'git', 'openssl', 'pahole', 'perl', and the development headers for 'libelf' and 'openssl'. The reference section shows how to quickly install those on various popular Linux distributions.h]hXpInstall all software required to build a Linux kernel. Often you will need: ‘bc’, ‘binutils’ (‘ld’ et al.), ‘bison’, ‘flex’, ‘gcc’, ‘git’, ‘openssl’, ‘pahole’, ‘perl’, and the development headers for ‘libelf’ and ‘openssl’. The reference section shows how to quickly install those on various popular Linux distributions.}(hj hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMkhj ubh)}(h'[:ref:`details `]h](h[}(hjhj hhhNhNubh)}(h%:ref:`details `h]j@)}(hj h]hdetails}(hhhj hhhNhNubah}(h]h ](jKstdstd-refeh"]h$]h&]uh1j?hj ubah}(h]h ]h"]h$]h&]refdocjX refdomainj reftyperef refexplicitrefwarnj^buildrequires_bisrefuh1hhhhMqhj ubh]}(hjhj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMqhj ubeh}(h]h ]h"]h$]h&]uh1jhj hhhhhNubah}(h]j ah ]h"]buildrequires_bissbsah$]h&]jjuh1jhhhMkhj4hhj}j j sj}j j subj)}(h.. _sources_bissbs:h]h}(h]h ]h"]h$]h&]jsources-bissbsuh1jhMshj4hhhhubj)}(hhh]j)}(hXxRetrieve the mainline Linux sources; then change into the directory holding them, as all further commands in this guide are meant to be executed from there. *Note, the following describe how to retrieve the sources using a full mainline clone, which downloads about 2,75 GByte as of early 2024. The* :ref:`reference section describes two alternatives ` *: one downloads less than 500 MByte, the other works better with unreliable internet connections.* Execute the following command to retrieve a fresh mainline codebase while preparing things to add branches for stable/longterm series later:: git clone -o mainline --no-checkout \ https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git ~/linux/ cd ~/linux/ git remote add -t master stable \ https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git [:ref:`details `] h](h)}(hRetrieve the mainline Linux sources; then change into the directory holding them, as all further commands in this guide are meant to be executed from there.h]hRetrieve the mainline Linux sources; then change into the directory holding them, as all further commands in this guide are meant to be executed from there.}(hj hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMuhj ubh)}(hX7*Note, the following describe how to retrieve the sources using a full mainline clone, which downloads about 2,75 GByte as of early 2024. The* :ref:`reference section describes two alternatives ` *: one downloads less than 500 MByte, the other works better with unreliable internet connections.*h](j')}(h*Note, the following describe how to retrieve the sources using a full mainline clone, which downloads about 2,75 GByte as of early 2024. The*h]hNote, the following describe how to retrieve the sources using a full mainline clone, which downloads about 2,75 GByte as of early 2024. The}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1j&hj ubh }(h hj hhhNhNubh)}(hD:ref:`reference section describes two alternatives `h]j@)}(hj h]h,reference section describes two alternatives}(hhhj! hhhNhNubah}(h]h ](jKstdstd-refeh"]h$]h&]uh1j?hj ubah}(h]h ]h"]h$]h&]refdocjX refdomainj+ reftyperef refexplicitrefwarnj^sources_bisrefuh1hhhhMyhj ubh }(h hj hhhNhNubj')}(hc*: one downloads less than 500 MByte, the other works better with unreliable internet connections.*h]ha: one downloads less than 500 MByte, the other works better with unreliable internet connections.}(hhhjB hhhNhNubah}(h]h ]h"]h$]h&]uh1j&hj ubeh}(h]h ]h"]h$]h&]uh1hhhhMyhj ubh)}(hExecute the following command to retrieve a fresh mainline codebase while preparing things to add branches for stable/longterm series later::h]hExecute the following command to retrieve a fresh mainline codebase while preparing things to add branches for stable/longterm series later:}(hExecute the following command to retrieve a fresh mainline codebase while preparing things to add branches for stable/longterm series later:hjV hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj ubj*)}(hgit clone -o mainline --no-checkout \ https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git ~/linux/ cd ~/linux/ git remote add -t master stable \ https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.gith]hgit clone -o mainline --no-checkout \ https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git ~/linux/ cd ~/linux/ git remote add -t master stable \ https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git}(hhhje ubah}(h]h ]h"]h$]h&]hhuh1j)hhhMhj ubh)}(h![:ref:`details `]h](h[}(hjhjs hhhNhNubh)}(h:ref:`details `h]j@)}(hj} h]hdetails}(hhhj hhhNhNubah}(h]h ](jKstdstd-refeh"]h$]h&]uh1j?hj{ ubah}(h]h ]h"]h$]h&]refdocjX refdomainj reftyperef refexplicitrefwarnj^sources_bisrefuh1hhhhMhjs ubh]}(hjhjs hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhj ubeh}(h]h ]h"]h$]h&]uh1jhj hhhhhNubah}(h]j ah ]h"]sources_bissbsah$]h&]jjuh1jhhhMuhj4hhj}j j sj}j j subj)}(h.. _stablesources_bissbs:h]h}(h]h ]h"]h$]h&]jstablesources-bissbsuh1jhMhj4hhhhubj)}(hhh]j)}(hX Is one of the versions you earlier established as 'good' or 'bad' a stable or longterm release (say 6.1.5)? Then download the code for the series it belongs to ('linux-6.1.y' in this example):: git remote set-branches --add stable linux-6.1.y git fetch stable h](h)}(hIs one of the versions you earlier established as 'good' or 'bad' a stable or longterm release (say 6.1.5)? Then download the code for the series it belongs to ('linux-6.1.y' in this example)::h]hIs one of the versions you earlier established as ‘good’ or ‘bad’ a stable or longterm release (say 6.1.5)? Then download the code for the series it belongs to (‘linux-6.1.y’ in this example):}(hIs one of the versions you earlier established as 'good' or 'bad' a stable or longterm release (say 6.1.5)? Then download the code for the series it belongs to ('linux-6.1.y' in this example):hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj ubj*)}(hAgit remote set-branches --add stable linux-6.1.y git fetch stableh]hAgit remote set-branches --add stable linux-6.1.y git fetch stable}(hhhj ubah}(h]h ]h"]h$]h&]hhuh1j)hhhMhj ubeh}(h]h ]h"]h$]h&]uh1jhj hhhhhNubah}(h]j ah ]h"]stablesources_bissbsah$]h&]jjuh1jhhhMhj4hhj}j j sj}j j subj)}(h.. _oldconfig_bissbs:h]h}(h]h ]h"]h$]h&]joldconfig-bissbsuh1jhMhj4hhhhubj)}(hhh]j)}(hX`Start preparing a kernel build configuration (the '.config' file). Before doing so, ensure you are still running the 'working' kernel an earlier step told you to boot; if you are unsure, check the current kernelrelease identifier using ``uname -r``. Afterwards check out the source code for the version earlier established as 'good'. In the following example command this is assumed to be 6.0; note that the version number in this and all later Git commands needs to be prefixed with a 'v':: git switch --discard-changes --detach v6.0 Now create a build configuration file:: make olddefconfig The kernel build scripts then will try to locate the build configuration file for the running kernel and then adjust it for the needs of the kernel sources you checked out. While doing so, it will print a few lines you need to check. Look out for a line starting with '# using defaults found in'. It should be followed by a path to a file in '/boot/' that contains the release identifier of your currently working kernel. If the line instead continues with something like 'arch/x86/configs/x86_64_defconfig', then the build infra failed to find the .config file for your running kernel -- in which case you have to put one there manually, as explained in the reference section. In case you can not find such a line, look for one containing '# configuration written to .config'. If that's the case you have a stale build configuration lying around. Unless you intend to use it, delete it; afterwards run 'make olddefconfig' again and check if it now picked up the right config file as base. [:ref:`details `] h](h)}(hBStart preparing a kernel build configuration (the '.config' file).h]hFStart preparing a kernel build configuration (the ‘.config’ file).}(hj hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj ubh)}(hBefore doing so, ensure you are still running the 'working' kernel an earlier step told you to boot; if you are unsure, check the current kernelrelease identifier using ``uname -r``.h](hBefore doing so, ensure you are still running the ‘working’ kernel an earlier step told you to boot; if you are unsure, check the current kernelrelease identifier using }(hBefore doing so, ensure you are still running the 'working' kernel an earlier step told you to boot; if you are unsure, check the current kernelrelease identifier using hj hhhNhNubj5)}(h ``uname -r``h]huname -r}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1j4hj ubh.}(hj$hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhj ubh)}(hAfterwards check out the source code for the version earlier established as 'good'. In the following example command this is assumed to be 6.0; note that the version number in this and all later Git commands needs to be prefixed with a 'v'::h]hAfterwards check out the source code for the version earlier established as ‘good’. In the following example command this is assumed to be 6.0; note that the version number in this and all later Git commands needs to be prefixed with a ‘v’:}(hAfterwards check out the source code for the version earlier established as 'good'. In the following example command this is assumed to be 6.0; note that the version number in this and all later Git commands needs to be prefixed with a 'v':hj3 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj ubj*)}(h*git switch --discard-changes --detach v6.0h]h*git switch --discard-changes --detach v6.0}(hhhjB ubah}(h]h ]h"]h$]h&]hhuh1j)hhhMhj ubh)}(h'Now create a build configuration file::h]h&Now create a build configuration file:}(h&Now create a build configuration file:hjP hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj ubj*)}(hmake olddefconfigh]hmake olddefconfig}(hhhj_ ubah}(h]h ]h"]h$]h&]hhuh1j)hhhMhj ubh)}(hThe kernel build scripts then will try to locate the build configuration file for the running kernel and then adjust it for the needs of the kernel sources you checked out. While doing so, it will print a few lines you need to check.h]hThe kernel build scripts then will try to locate the build configuration file for the running kernel and then adjust it for the needs of the kernel sources you checked out. While doing so, it will print a few lines you need to check.}(hjo hjm hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj ubh)}(hXLook out for a line starting with '# using defaults found in'. It should be followed by a path to a file in '/boot/' that contains the release identifier of your currently working kernel. If the line instead continues with something like 'arch/x86/configs/x86_64_defconfig', then the build infra failed to find the .config file for your running kernel -- in which case you have to put one there manually, as explained in the reference section.h]hXLook out for a line starting with ‘# using defaults found in’. It should be followed by a path to a file in ‘/boot/’ that contains the release identifier of your currently working kernel. If the line instead continues with something like ‘arch/x86/configs/x86_64_defconfig’, then the build infra failed to find the .config file for your running kernel -- in which case you have to put one there manually, as explained in the reference section.}(hj} hj{ hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj ubh)}(hX7In case you can not find such a line, look for one containing '# configuration written to .config'. If that's the case you have a stale build configuration lying around. Unless you intend to use it, delete it; afterwards run 'make olddefconfig' again and check if it now picked up the right config file as base.h]hXAIn case you can not find such a line, look for one containing ‘# configuration written to .config’. If that’s the case you have a stale build configuration lying around. Unless you intend to use it, delete it; afterwards run ‘make olddefconfig’ again and check if it now picked up the right config file as base.}(hj hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj ubh)}(h#[:ref:`details `]h](h[}(hjhj hhhNhNubh)}(h!:ref:`details `h]j@)}(hj h]hdetails}(hhhj hhhNhNubah}(h]h ](jKstdstd-refeh"]h$]h&]uh1j?hj ubah}(h]h ]h"]h$]h&]refdocjX refdomainj reftyperef refexplicitrefwarnj^oldconfig_bisrefuh1hhhhMhj ubh]}(hjhj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhj ubeh}(h]h ]h"]h$]h&]uh1jhj hhhhhNubah}(h]j ah ]h"]oldconfig_bissbsah$]h&]jjuh1jhhhMhj4hhj}j j sj}j j subj)}(h.. _localmodconfig_bissbs:h]h}(h]h ]h"]h$]h&]jlocalmodconfig-bissbsuh1jhMhj4hhhhubj)}(hhh]j)}(hXDisable any kernel modules apparently superfluous for your setup. This is optional, but especially wise for bisections, as it speeds up the build process enormously -- at least unless the .config file picked up in the previous step was already tailored to your and your hardware needs, in which case you should skip this step. To prepare the trimming, connect external hardware you occasionally use (USB keys, tokens, ...), quickly start a VM, and bring up VPNs. And if you rebooted since you started that guide, ensure that you tried using the feature causing trouble since you started the system. Only then trim your .config:: yes '' | make localmodconfig There is a catch to this, as the 'apparently' in initial sentence of this step and the preparation instructions already hinted at: The 'localmodconfig' target easily disables kernel modules for features only used occasionally -- like modules for external peripherals not yet connected since booting, virtualization software not yet utilized, VPN tunnels, and a few other things. That's because some tasks rely on kernel modules Linux only loads when you execute tasks like the aforementioned ones for the first time. This drawback of localmodconfig is nothing you should lose sleep over, but something to keep in mind: if something is misbehaving with the kernels built during this guide, this is most likely the reason. You can reduce or nearly eliminate the risk with tricks outlined in the reference section; but when building a kernel just for quick testing purposes this is usually not worth spending much effort on, as long as it boots and allows to properly test the feature that causes trouble. [:ref:`details `] h](h)}(hXFDisable any kernel modules apparently superfluous for your setup. This is optional, but especially wise for bisections, as it speeds up the build process enormously -- at least unless the .config file picked up in the previous step was already tailored to your and your hardware needs, in which case you should skip this step.h]hXFDisable any kernel modules apparently superfluous for your setup. This is optional, but especially wise for bisections, as it speeds up the build process enormously -- at least unless the .config file picked up in the previous step was already tailored to your and your hardware needs, in which case you should skip this step.}(hj hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj ubh)}(hX-To prepare the trimming, connect external hardware you occasionally use (USB keys, tokens, ...), quickly start a VM, and bring up VPNs. And if you rebooted since you started that guide, ensure that you tried using the feature causing trouble since you started the system. Only then trim your .config::h]hX,To prepare the trimming, connect external hardware you occasionally use (USB keys, tokens, ...), quickly start a VM, and bring up VPNs. And if you rebooted since you started that guide, ensure that you tried using the feature causing trouble since you started the system. Only then trim your .config:}(hX,To prepare the trimming, connect external hardware you occasionally use (USB keys, tokens, ...), quickly start a VM, and bring up VPNs. And if you rebooted since you started that guide, ensure that you tried using the feature causing trouble since you started the system. Only then trim your .config:hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj ubj*)}(hyes '' | make localmodconfigh]hyes '' | make localmodconfig}(hhhjubah}(h]h ]h"]h$]h&]hhuh1j)hhhMhj ubh)}(hThere is a catch to this, as the 'apparently' in initial sentence of this step and the preparation instructions already hinted at:h]hThere is a catch to this, as the ‘apparently’ in initial sentence of this step and the preparation instructions already hinted at:}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj ubh)}(hXThe 'localmodconfig' target easily disables kernel modules for features only used occasionally -- like modules for external peripherals not yet connected since booting, virtualization software not yet utilized, VPN tunnels, and a few other things. That's because some tasks rely on kernel modules Linux only loads when you execute tasks like the aforementioned ones for the first time.h]hXThe ‘localmodconfig’ target easily disables kernel modules for features only used occasionally -- like modules for external peripherals not yet connected since booting, virtualization software not yet utilized, VPN tunnels, and a few other things. That’s because some tasks rely on kernel modules Linux only loads when you execute tasks like the aforementioned ones for the first time.}(hj%hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj ubh)}(hXThis drawback of localmodconfig is nothing you should lose sleep over, but something to keep in mind: if something is misbehaving with the kernels built during this guide, this is most likely the reason. You can reduce or nearly eliminate the risk with tricks outlined in the reference section; but when building a kernel just for quick testing purposes this is usually not worth spending much effort on, as long as it boots and allows to properly test the feature that causes trouble.h]hXThis drawback of localmodconfig is nothing you should lose sleep over, but something to keep in mind: if something is misbehaving with the kernels built during this guide, this is most likely the reason. You can reduce or nearly eliminate the risk with tricks outlined in the reference section; but when building a kernel just for quick testing purposes this is usually not worth spending much effort on, as long as it boots and allows to properly test the feature that causes trouble.}(hj3hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj ubh)}(h([:ref:`details `]h](h[}(hjhj?hhhNhNubh)}(h&:ref:`details `h]j@)}(hjIh]hdetails}(hhhjKhhhNhNubah}(h]h ](jKstdstd-refeh"]h$]h&]uh1j?hjGubah}(h]h ]h"]h$]h&]refdocjX refdomainjUreftyperef refexplicitrefwarnj^localmodconfig_bisrefuh1hhhhMhj?ubh]}(hjhj?hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhj ubeh}(h]h ]h"]h$]h&]uh1jhj hhhhhNubah}(h]j ah ]h"]localmodconfig_bissbsah$]h&]jjuh1jhhhMhj4hhj}j{j sj}j j subj)}(h.. _tagging_bissbs:h]h}(h]h ]h"]h$]h&]jtagging-bissbsuh1jhMhj4hhhhubj)}(hhh]j)}(hEnsure all the kernels you will build are clearly identifiable using a special tag and a unique version number:: ./scripts/config --set-str CONFIG_LOCALVERSION '-local' ./scripts/config -e CONFIG_LOCALVERSION_AUTO [:ref:`details `] h](h)}(hpEnsure all the kernels you will build are clearly identifiable using a special tag and a unique version number::h]hoEnsure all the kernels you will build are clearly identifiable using a special tag and a unique version number:}(hoEnsure all the kernels you will build are clearly identifiable using a special tag and a unique version number:hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjubj*)}(hd./scripts/config --set-str CONFIG_LOCALVERSION '-local' ./scripts/config -e CONFIG_LOCALVERSION_AUTOh]hd./scripts/config --set-str CONFIG_LOCALVERSION '-local' ./scripts/config -e CONFIG_LOCALVERSION_AUTO}(hhhjubah}(h]h ]h"]h$]h&]hhuh1j)hhhMhjubh)}(h![:ref:`details `]h](h[}(hjhjhhhNhNubh)}(h:ref:`details `h]j@)}(hjh]hdetails}(hhhjhhhNhNubah}(h]h ](jKstdstd-refeh"]h$]h&]uh1j?hjubah}(h]h ]h"]h$]h&]refdocjX refdomainjreftyperef refexplicitrefwarnj^tagging_bisrefuh1hhhhMhjubh]}(hjhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhjubeh}(h]h ]h"]h$]h&]uh1jhjhhhhhNubah}(h]jah ]h"]tagging_bissbsah$]h&]jjuh1jhhhMhj4hhj}jjsj}jjsubj)}(h.. _debugsymbols_bissbs:h]h}(h]h ]h"]h$]h&]jdebugsymbols-bissbsuh1jhMhj4hhhhubj)}(hhh]j)}(hXDecide how to handle debug symbols. In the context of this document it is often wise to enable them, as there is a decent chance you will need to decode a stack trace from a 'panic', 'Oops', 'warning', or 'BUG':: ./scripts/config -d DEBUG_INFO_NONE -e KALLSYMS_ALL -e DEBUG_KERNEL \ -e DEBUG_INFO -e DEBUG_INFO_DWARF_TOOLCHAIN_DEFAULT -e KALLSYMS But if you are extremely short on storage space, you might want to disable debug symbols instead:: ./scripts/config -d DEBUG_INFO -d DEBUG_INFO_DWARF_TOOLCHAIN_DEFAULT \ -d DEBUG_INFO_DWARF4 -d DEBUG_INFO_DWARF5 -e CONFIG_DEBUG_INFO_NONE [:ref:`details `] h](h)}(h#Decide how to handle debug symbols.h]h#Decide how to handle debug symbols.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjubh)}(hIn the context of this document it is often wise to enable them, as there is a decent chance you will need to decode a stack trace from a 'panic', 'Oops', 'warning', or 'BUG'::h]hIn the context of this document it is often wise to enable them, as there is a decent chance you will need to decode a stack trace from a ‘panic’, ‘Oops’, ‘warning’, or ‘BUG’:}(hIn the context of this document it is often wise to enable them, as there is a decent chance you will need to decode a stack trace from a 'panic', 'Oops', 'warning', or 'BUG':hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjubj*)}(h./scripts/config -d DEBUG_INFO_NONE -e KALLSYMS_ALL -e DEBUG_KERNEL \ -e DEBUG_INFO -e DEBUG_INFO_DWARF_TOOLCHAIN_DEFAULT -e KALLSYMSh]h./scripts/config -d DEBUG_INFO_NONE -e KALLSYMS_ALL -e DEBUG_KERNEL \ -e DEBUG_INFO -e DEBUG_INFO_DWARF_TOOLCHAIN_DEFAULT -e KALLSYMS}(hhhjubah}(h]h ]h"]h$]h&]hhuh1j)hhhMhjubh)}(hbBut if you are extremely short on storage space, you might want to disable debug symbols instead::h]haBut if you are extremely short on storage space, you might want to disable debug symbols instead:}(haBut if you are extremely short on storage space, you might want to disable debug symbols instead:hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjubj*)}(h./scripts/config -d DEBUG_INFO -d DEBUG_INFO_DWARF_TOOLCHAIN_DEFAULT \ -d DEBUG_INFO_DWARF4 -d DEBUG_INFO_DWARF5 -e CONFIG_DEBUG_INFO_NONEh]h./scripts/config -d DEBUG_INFO -d DEBUG_INFO_DWARF_TOOLCHAIN_DEFAULT \ -d DEBUG_INFO_DWARF4 -d DEBUG_INFO_DWARF5 -e CONFIG_DEBUG_INFO_NONE}(hhhj<ubah}(h]h ]h"]h$]h&]hhuh1j)hhhMhjubh)}(h&[:ref:`details `]h](h[}(hjhjJhhhNhNubh)}(h$:ref:`details `h]j@)}(hjTh]hdetails}(hhhjVhhhNhNubah}(h]h ](jKstdstd-refeh"]h$]h&]uh1j?hjRubah}(h]h ]h"]h$]h&]refdocjX refdomainj`reftyperef refexplicitrefwarnj^debugsymbols_bisrefuh1hhhhMhjJubh]}(hjhjJhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhjubeh}(h]h ]h"]h$]h&]uh1jhjhhhhhNubah}(h]jah ]h"]debugsymbols_bissbsah$]h&]jjuh1jhhhMhj4hhj}jjsj}jjsubj)}(h.. _configmods_bissbs:h]h}(h]h ]h"]h$]h&]jconfigmods-bissbsuh1jhMhj4hhhhubj)}(hhh]j)}(hXZCheck if you may want or need to adjust some other kernel configuration options: * Are you running Debian? Then you want to avoid known problems by performing additional adjustments explained in the reference section. [:ref:`details `]. * If you want to influence other aspects of the configuration, do so now using your preferred tool. Note, to use make targets like 'menuconfig' or 'nconfig', you will need to install the development files of ncurses; for 'xconfig' you likewise need the Qt5 or Qt6 headers. [:ref:`details `]. h](h)}(hPCheck if you may want or need to adjust some other kernel configuration options:h]hPCheck if you may want or need to adjust some other kernel configuration options:}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjubj)}(hhh](j)}(hAre you running Debian? Then you want to avoid known problems by performing additional adjustments explained in the reference section. [:ref:`details `]. h](h)}(hAre you running Debian? Then you want to avoid known problems by performing additional adjustments explained in the reference section.h]hAre you running Debian? Then you want to avoid known problems by performing additional adjustments explained in the reference section.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjubh)}(h-[:ref:`details `].h](h[}(hjhjhhhNhNubh)}(h*:ref:`details `h]j@)}(hjh]hdetails}(hhhjhhhNhNubah}(h]h ](jKstdstd-refeh"]h$]h&]uh1j?hjubah}(h]h ]h"]h$]h&]refdocjX refdomainjreftyperef refexplicitrefwarnj^configmods_distros_bisrefuh1hhhhMhjubh].}(h].hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj)}(hXAIf you want to influence other aspects of the configuration, do so now using your preferred tool. Note, to use make targets like 'menuconfig' or 'nconfig', you will need to install the development files of ncurses; for 'xconfig' you likewise need the Qt5 or Qt6 headers. [:ref:`details `]. h](h)}(hXIf you want to influence other aspects of the configuration, do so now using your preferred tool. Note, to use make targets like 'menuconfig' or 'nconfig', you will need to install the development files of ncurses; for 'xconfig' you likewise need the Qt5 or Qt6 headers.h]hXIf you want to influence other aspects of the configuration, do so now using your preferred tool. Note, to use make targets like ‘menuconfig’ or ‘nconfig’, you will need to install the development files of ncurses; for ‘xconfig’ you likewise need the Qt5 or Qt6 headers.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjubh)}(h0[:ref:`details `].h](h[}(hjhj hhhNhNubh)}(h-:ref:`details `h]j@)}(hjh]hdetails}(hhhjhhhNhNubah}(h]h ](jKstdstd-refeh"]h$]h&]uh1j?hjubah}(h]h ]h"]h$]h&]refdocjX refdomainj!reftyperef refexplicitrefwarnj^configmods_individual_bisrefuh1hhhhMhj ubh].}(h].hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhhhMhjubeh}(h]h ]h"]h$]h&]uh1jhjhhhNhNubah}(h]jah ]h"]configmods_bissbsah$]h&]jjuh1jhhhMhj4hhj}jTjsj}jjsubj)}(h.. _saveconfig_bissbs:h]h}(h]h ]h"]h$]h&]jsaveconfig-bissbsuh1jhM hj4hhhhubj)}(hhh]j)}(hReprocess the .config after the latest adjustments and store it in a safe place:: make olddefconfig cp .config ~/kernel-config-working [:ref:`details `] h](h)}(hQReprocess the .config after the latest adjustments and store it in a safe place::h]hPReprocess the .config after the latest adjustments and store it in a safe place:}(hPReprocess the .config after the latest adjustments and store it in a safe place:hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM hjgubj*)}(h4make olddefconfig cp .config ~/kernel-config-workingh]h4make olddefconfig cp .config ~/kernel-config-working}(hhhjzubah}(h]h ]h"]h$]h&]hhuh1j)hhhMhjgubh)}(h$[:ref:`details `]h](h[}(hjhjhhhNhNubh)}(h":ref:`details `h]j@)}(hjh]hdetails}(hhhjhhhNhNubah}(h]h ](jKstdstd-refeh"]h$]h&]uh1j?hjubah}(h]h ]h"]h$]h&]refdocjX refdomainjreftyperef refexplicitrefwarnj^saveconfig_bisrefuh1hhhhMhjubh]}(hjhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhjgubeh}(h]h ]h"]h$]h&]uh1jhjdhhhhhNubah}(h]jcah ]h"]saveconfig_bissbsah$]h&]jjuh1jhhhM hj4hhj}jjYsj}jcjYsubj)}(h.. _introlatestcheck_bissbs:h]h}(h]h ]h"]h$]h&]jintrolatestcheck-bissbsuh1jhMhj4hhhhubeh}(h](8preparations-set-up-everything-to-build-your-own-kernelsj3eh ]h"](9preparations: set up everything to build your own kernelsintroprep_bissbseh$]h&]uh1hhjhhhhhMj}jj)sj}j3j)subh)}(hhh](h)}(h@Segment 1: try to reproduce the problem with the latest codebaseh]h@Segment 1: try to reproduce the problem with the latest codebase}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhMubh)}(hX'The following steps verify if the problem occurs with the code currently supported by developers. In case you face a regression, it also checks that the problem is not caused by some .config change, as reporting the issue then would be a waste of time. [:ref:`details `]h](hThe following steps verify if the problem occurs with the code currently supported by developers. In case you face a regression, it also checks that the problem is not caused by some .config change, as reporting the issue then would be a waste of time. [}(hThe following steps verify if the problem occurs with the code currently supported by developers. In case you face a regression, it also checks that the problem is not caused by some .config change, as reporting the issue then would be a waste of time. [hjhhhNhNubh)}(h(:ref:`details `h]j@)}(hjh]hdetails}(hhhjhhhNhNubah}(h]h ](jKstdstd-refeh"]h$]h&]uh1j?hjubah}(h]h ]h"]h$]h&]refdocjX refdomainjreftyperef refexplicitrefwarnj^introlatestcheck_bisrefuh1hhhhMhjubh]}(hjhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhjhhubj)}(h.. _checkoutmaster_bissbs:h]h}(h]h ]h"]h$]h&]jcheckoutmaster-bissbsuh1jhMhjhhhhubj)}(hhh]j)}(hXCheck out the latest Linux codebase. * Are your 'good' and 'bad' versions from the same stable or longterm series? Then check the `front page of kernel.org `_: if it lists a release from that series without an '[EOL]' tag, checkout the series latest version ('linux-6.1.y' in the following example):: cd ~/linux/ git switch --discard-changes --detach stable/linux-6.1.y Your series is unsupported, if is not listed or carrying a 'end of life' tag. In that case you might want to check if a successor series (say linux-6.2.y) or mainline (see next point) fix the bug. * In all other cases, run:: cd ~/linux/ git switch --discard-changes --detach mainline/master [:ref:`details `] h](h)}(h$Check out the latest Linux codebase.h]h$Check out the latest Linux codebase.}(hj7hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj1ubj)}(hhh](j)}(hX+Are your 'good' and 'bad' versions from the same stable or longterm series? Then check the `front page of kernel.org `_: if it lists a release from that series without an '[EOL]' tag, checkout the series latest version ('linux-6.1.y' in the following example):: cd ~/linux/ git switch --discard-changes --detach stable/linux-6.1.y Your series is unsupported, if is not listed or carrying a 'end of life' tag. In that case you might want to check if a successor series (say linux-6.2.y) or mainline (see next point) fix the bug. h](h)}(hXAre your 'good' and 'bad' versions from the same stable or longterm series? Then check the `front page of kernel.org `_: if it lists a release from that series without an '[EOL]' tag, checkout the series latest version ('linux-6.1.y' in the following example)::h](hcAre your ‘good’ and ‘bad’ versions from the same stable or longterm series? Then check the }(h[Are your 'good' and 'bad' versions from the same stable or longterm series? Then check the hjJhhhNhNubh reference)}(h1`front page of kernel.org `_h]hfront page of kernel.org}(hfront page of kernel.orghjUhhhNhNubah}(h]h ]h"]h$]h&]namefront page of kernel.orgrefurihttps://kernel.org/uh1jShjJubj)}(h h]h}(h]front-page-of-kernel-orgah ]h"]front page of kernel.orgah$]h&]refurijguh1j referencedKhjJubh: if it lists a release from that series without an ‘[EOL]’ tag, checkout the series latest version (‘linux-6.1.y’ in the following example):}(h: if it lists a release from that series without an '[EOL]' tag, checkout the series latest version ('linux-6.1.y' in the following example):hjJhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhM!hjFubj*)}(hDcd ~/linux/ git switch --discard-changes --detach stable/linux-6.1.yh]hDcd ~/linux/ git switch --discard-changes --detach stable/linux-6.1.y}(hhhjubah}(h]h ]h"]h$]h&]hhuh1j)hhhM&hjFubh)}(hYour series is unsupported, if is not listed or carrying a 'end of life' tag. In that case you might want to check if a successor series (say linux-6.2.y) or mainline (see next point) fix the bug.h]hYour series is unsupported, if is not listed or carrying a ‘end of life’ tag. In that case you might want to check if a successor series (say linux-6.2.y) or mainline (see next point) fix the bug.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM)hjFubeh}(h]h ]h"]h$]h&]uh1jhjCubj)}(haIn all other cases, run:: cd ~/linux/ git switch --discard-changes --detach mainline/master h](h)}(hIn all other cases, run::h]hIn all other cases, run:}(hIn all other cases, run:hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM-hjubj*)}(hAcd ~/linux/ git switch --discard-changes --detach mainline/masterh]hAcd ~/linux/ git switch --discard-changes --detach mainline/master}(hhhjubah}(h]h ]h"]h$]h&]hhuh1j)hhhM/hjubeh}(h]h ]h"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]jjuh1jhhhM!hj1ubh)}(h([:ref:`details `]h](h[}(hjhjhhhNhNubh)}(h&:ref:`details `h]j@)}(hjh]hdetails}(hhhjhhhNhNubah}(h]h ](jKstdstd-refeh"]h$]h&]uh1j?hjubah}(h]h ]h"]h$]h&]refdocjX refdomainjreftyperef refexplicitrefwarnj^checkoutmaster_bisrefuh1hhhhM2hjubh]}(hjhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhM2hj1ubeh}(h]h ]h"]h$]h&]uh1jhj.hhhhhNubah}(h]j-ah ]h"]checkoutmaster_bissbsah$]h&]jjuh1jhhhMhjhhj}j j#sj}j-j#subj)}(h.. _build_bissbs:h]h}(h]h ]h"]h$]h&]j build-bissbsuh1jhM4hjhhhhubj)}(hhh]j)}(hXvBuild the image and the modules of your first kernel using the config file you prepared:: cp ~/kernel-config-working .config make olddefconfig make -j $(nproc --all) If you want your kernel packaged up as deb, rpm, or tar file, see the reference section for alternatives, which obviously will require other steps to install as well. [:ref:`details `] h](h)}(hYBuild the image and the modules of your first kernel using the config file you prepared::h]hXBuild the image and the modules of your first kernel using the config file you prepared:}(hXBuild the image and the modules of your first kernel using the config file you prepared:hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM6hjubj*)}(hKcp ~/kernel-config-working .config make olddefconfig make -j $(nproc --all)h]hKcp ~/kernel-config-working .config make olddefconfig make -j $(nproc --all)}(hhhj2ubah}(h]h ]h"]h$]h&]hhuh1j)hhhM9hjubh)}(hIf you want your kernel packaged up as deb, rpm, or tar file, see the reference section for alternatives, which obviously will require other steps to install as well.h]hIf you want your kernel packaged up as deb, rpm, or tar file, see the reference section for alternatives, which obviously will require other steps to install as well.}(hjBhj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM=hjubh)}(h[:ref:`details `]h](h[}(hjhjNhhhNhNubh)}(h:ref:`details `h]j@)}(hjXh]hdetails}(hhhjZhhhNhNubah}(h]h ](jKstdstd-refeh"]h$]h&]uh1j?hjVubah}(h]h ]h"]h$]h&]refdocjX refdomainjdreftyperef refexplicitrefwarnj^ build_bisrefuh1hhhhMAhjNubh]}(hjhjNhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMAhjubeh}(h]h ]h"]h$]h&]uh1jhjhhhhhNubah}(h]jah ]h"] build_bissbsah$]h&]jjuh1jhhhM6hjhhj}jjsj}jjsubj)}(h.. _install_bissbs:h]h}(h]h ]h"]h$]h&]jinstall-bissbsuh1jhMChjhhhhubj)}(hhh]j)}(hX@Install your newly built kernel. Before doing so, consider checking if there is still enough space for it:: df -h /boot/ /lib/modules/ For now assume 150 MByte in /boot/ and 200 in /lib/modules/ will suffice; how much your kernels actually require will be determined later during this guide. Now install the kernel's modules and its image, which will be stored in parallel to the your Linux distribution's kernels:: sudo make modules_install command -v installkernel && sudo make install The second command ideally will take care of three steps required at this point: copying the kernel's image to /boot/, generating an initramfs, and adding an entry for both to the boot loader's configuration. Sadly some distributions (among them Arch Linux, its derivatives, and many immutable Linux distributions) will perform none or only some of those tasks. You therefore want to check if all of them were taken care of and manually perform those that were not. The reference section provides further details on that; your distribution's documentation might help, too. Once you figured out the steps needed at this point, consider writing them down: if you will build more kernels as described in segment 2 and 3, you will have to perform those again after executing ``command -v installkernel [...]``. [:ref:`details `] h](h)}(h Install your newly built kernel.h]h Install your newly built kernel.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMEhjubh)}(hJBefore doing so, consider checking if there is still enough space for it::h]hIBefore doing so, consider checking if there is still enough space for it:}(hIBefore doing so, consider checking if there is still enough space for it:hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMGhjubj*)}(hdf -h /boot/ /lib/modules/h]hdf -h /boot/ /lib/modules/}(hhhjubah}(h]h ]h"]h$]h&]hhuh1j)hhhMIhjubh)}(hFor now assume 150 MByte in /boot/ and 200 in /lib/modules/ will suffice; how much your kernels actually require will be determined later during this guide.h]hFor now assume 150 MByte in /boot/ and 200 in /lib/modules/ will suffice; how much your kernels actually require will be determined later during this guide.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMKhjubh)}(h{Now install the kernel's modules and its image, which will be stored in parallel to the your Linux distribution's kernels::h]h~Now install the kernel’s modules and its image, which will be stored in parallel to the your Linux distribution’s kernels:}(hzNow install the kernel's modules and its image, which will be stored in parallel to the your Linux distribution's kernels:hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMNhjubj*)}(hGsudo make modules_install command -v installkernel && sudo make installh]hGsudo make modules_install command -v installkernel && sudo make install}(hhhjubah}(h]h ]h"]h$]h&]hhuh1j)hhhMQhjubh)}(hThe second command ideally will take care of three steps required at this point: copying the kernel's image to /boot/, generating an initramfs, and adding an entry for both to the boot loader's configuration.h]hThe second command ideally will take care of three steps required at this point: copying the kernel’s image to /boot/, generating an initramfs, and adding an entry for both to the boot loader’s configuration.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMThjubh)}(hXkSadly some distributions (among them Arch Linux, its derivatives, and many immutable Linux distributions) will perform none or only some of those tasks. You therefore want to check if all of them were taken care of and manually perform those that were not. The reference section provides further details on that; your distribution's documentation might help, too.h]hXmSadly some distributions (among them Arch Linux, its derivatives, and many immutable Linux distributions) will perform none or only some of those tasks. You therefore want to check if all of them were taken care of and manually perform those that were not. The reference section provides further details on that; your distribution’s documentation might help, too.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMXhjubh)}(hOnce you figured out the steps needed at this point, consider writing them down: if you will build more kernels as described in segment 2 and 3, you will have to perform those again after executing ``command -v installkernel [...]``.h](hOnce you figured out the steps needed at this point, consider writing them down: if you will build more kernels as described in segment 2 and 3, you will have to perform those again after executing }(hOnce you figured out the steps needed at this point, consider writing them down: if you will build more kernels as described in segment 2 and 3, you will have to perform those again after executing hjhhhNhNubj5)}(h"``command -v installkernel [...]``h]hcommand -v installkernel [...]}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j4hjubh.}(hj$hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhM^hjubh)}(h![:ref:`details `]h](h[}(hjhj4hhhNhNubh)}(h:ref:`details `h]j@)}(hj>h]hdetails}(hhhj@hhhNhNubah}(h]h ](jKstdstd-refeh"]h$]h&]uh1j?hj<ubah}(h]h ]h"]h$]h&]refdocjX refdomainjJreftyperef refexplicitrefwarnj^install_bisrefuh1hhhhMbhj4ubh]}(hjhj4hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMbhjubeh}(h]h ]h"]h$]h&]uh1jhjhhhhhNubah}(h]jah ]h"]install_bissbsah$]h&]jjuh1jhhhMEhjhhj}jpjsj}jjsubj)}(h.. _storagespace_bissbs:h]h}(h]h ]h"]h$]h&]jstoragespace-bissbsuh1jhMdhjhhhhubj)}(hhh]j)}(hXIn case you plan to follow this guide further, check how much storage space the kernel, its modules, and other related files like the initramfs consume:: du -ch /boot/*$(make -s kernelrelease)* | tail -n 1 du -sh /lib/modules/$(make -s kernelrelease)/ Write down or remember those two values for later: they enable you to prevent running out of disk space accidentally during a bisection. [:ref:`details `] h](h)}(hIn case you plan to follow this guide further, check how much storage space the kernel, its modules, and other related files like the initramfs consume::h]hIn case you plan to follow this guide further, check how much storage space the kernel, its modules, and other related files like the initramfs consume:}(hIn case you plan to follow this guide further, check how much storage space the kernel, its modules, and other related files like the initramfs consume:hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMfhjubj*)}(hadu -ch /boot/*$(make -s kernelrelease)* | tail -n 1 du -sh /lib/modules/$(make -s kernelrelease)/h]hadu -ch /boot/*$(make -s kernelrelease)* | tail -n 1 du -sh /lib/modules/$(make -s kernelrelease)/}(hhhjubah}(h]h ]h"]h$]h&]hhuh1j)hhhMihjubh)}(hWrite down or remember those two values for later: they enable you to prevent running out of disk space accidentally during a bisection.h]hWrite down or remember those two values for later: they enable you to prevent running out of disk space accidentally during a bisection.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMlhjubh)}(h&[:ref:`details `]h](h[}(hjhjhhhNhNubh)}(h$:ref:`details `h]j@)}(hjh]hdetails}(hhhjhhhNhNubah}(h]h ](jKstdstd-refeh"]h$]h&]uh1j?hjubah}(h]h ]h"]h$]h&]refdocjX refdomainjreftyperef refexplicitrefwarnj^storagespace_bisrefuh1hhhhMohjubh]}(hjhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMohjubeh}(h]h ]h"]h$]h&]uh1jhjhhhhhNubah}(h]jah ]h"]storagespace_bissbsah$]h&]jjuh1jhhhMfhjhhj}jjusj}jjusubj)}(h.. _kernelrelease_bissbs:h]h}(h]h ]h"]h$]h&]jkernelrelease-bissbsuh1jhMqhjhhhhubj)}(hhh](j)}(hShow and store the kernelrelease identifier of the kernel you just built:: make -s kernelrelease | tee -a ~/kernels-built Remember the identifier momentarily, as it will help you pick the right kernel from the boot menu upon restarting. h](h)}(hJShow and store the kernelrelease identifier of the kernel you just built::h]hIShow and store the kernelrelease identifier of the kernel you just built:}(hIShow and store the kernelrelease identifier of the kernel you just built:hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMshjubj*)}(h.make -s kernelrelease | tee -a ~/kernels-builth]h.make -s kernelrelease | tee -a ~/kernels-built}(hhhjubah}(h]h ]h"]h$]h&]hhuh1j)hhhMuhjubh)}(hrRemember the identifier momentarily, as it will help you pick the right kernel from the boot menu upon restarting.h]hrRemember the identifier momentarily, as it will help you pick the right kernel from the boot menu upon restarting.}(hj$hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMwhjubeh}(h]h ]h"]h$]h&]uh1jhjhhhhhNubj)}(hReboot into your newly built kernel. To ensure your actually started the one you just built, you might want to verify if the output of these commands matches:: tail -n 1 ~/kernels-built uname -r h](h)}(hReboot into your newly built kernel. To ensure your actually started the one you just built, you might want to verify if the output of these commands matches::h]hReboot into your newly built kernel. To ensure your actually started the one you just built, you might want to verify if the output of these commands matches:}(hReboot into your newly built kernel. To ensure your actually started the one you just built, you might want to verify if the output of these commands matches:hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMzhj6ubj*)}(h"tail -n 1 ~/kernels-built uname -rh]h"tail -n 1 ~/kernels-built uname -r}(hhhjIubah}(h]h ]h"]h$]h&]hhuh1j)hhhM~hj6ubeh}(h]h ]h"]h$]h&]uh1jhjhhhhhNubeh}(h]jah ]h"]kernelrelease_bissbsah$]h&]jjuh1jhhhMshjhhj}jajsj}jjsubj)}(h.. _tainted_bissbs:h]h}(h]h ]h"]h$]h&]jtainted-bissbsuh1jhMhjhhhhubj)}(hhh]j)}(hCheck if the kernel marked itself as 'tainted':: cat /proc/sys/kernel/tainted If that command does not return '0', check the reference section, as the cause for this might interfere with your testing. [:ref:`details `] h](h)}(h0Check if the kernel marked itself as 'tainted'::h]h3Check if the kernel marked itself as ‘tainted’:}(h/Check if the kernel marked itself as 'tainted':hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjtubj*)}(hcat /proc/sys/kernel/taintedh]hcat /proc/sys/kernel/tainted}(hhhjubah}(h]h ]h"]h$]h&]hhuh1j)hhhMhjtubh)}(hzIf that command does not return '0', check the reference section, as the cause for this might interfere with your testing.h]h~If that command does not return ‘0’, check the reference section, as the cause for this might interfere with your testing.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjtubh)}(h![:ref:`details `]h](h[}(hjhjhhhNhNubh)}(h:ref:`details `h]j@)}(hjh]hdetails}(hhhjhhhNhNubah}(h]h ](jKstdstd-refeh"]h$]h&]uh1j?hjubah}(h]h ]h"]h$]h&]refdocjX refdomainjreftyperef refexplicitrefwarnj^tainted_bisrefuh1hhhhMhjubh]}(hjhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhjtubeh}(h]h ]h"]h$]h&]uh1jhjqhhhhhNubah}(h]jpah ]h"]tainted_bissbsah$]h&]jjuh1jhhhMhjhhj}jjfsj}jpjfsubj)}(h.. _recheckbroken_bissbs:h]h}(h]h ]h"]h$]h&]jrecheckbroken-bissbsuh1jhMhjhhhhubj)}(hhh]j)}(hVerify if your bug occurs with the newly built kernel. If it does not, check out the instructions in the reference section to ensure nothing went sideways during your tests. [:ref:`details `] h](h)}(hVerify if your bug occurs with the newly built kernel. If it does not, check out the instructions in the reference section to ensure nothing went sideways during your tests.h]hVerify if your bug occurs with the newly built kernel. If it does not, check out the instructions in the reference section to ensure nothing went sideways during your tests.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjubh)}(h'[:ref:`details `]h](h[}(hjhjhhhNhNubh)}(h%:ref:`details `h]j@)}(hjh]hdetails}(hhhjhhhNhNubah}(h]h ](jKstdstd-refeh"]h$]h&]uh1j?hj ubah}(h]h ]h"]h$]h&]refdocjX refdomainjreftyperef refexplicitrefwarnj^recheckbroken_bisrefuh1hhhhMhjubh]}(hjhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhjubeh}(h]h ]h"]h$]h&]uh1jhjhhhhhNubah}(h]jah ]h"]recheckbroken_bissbsah$]h&]jjuh1jhhhMhjhhj}j@jsj}jjsubj)}(h.. _recheckstablebroken_bissbs:h]h}(h]h ]h"]h$]h&]jrecheckstablebroken-bissbsuh1jhMhjhhhhubj)}(hhh]j)}(hXDid you just built a stable or longterm kernel? And were you able to reproduce the regression with it? Then you should test the latest mainline codebase as well, because the result determines which developers the bug must be submitted to. To prepare that test, check out current mainline:: cd ~/linux/ git switch --discard-changes --detach mainline/master Now use the checked out code to build and install another kernel using the commands the earlier steps already described in more detail:: cp ~/kernel-config-working .config make olddefconfig make -j $(nproc --all) # * Check if the free space suffices holding another kernel: df -h /boot/ /lib/modules/ sudo make modules_install command -v installkernel && sudo make install make -s kernelrelease | tee -a ~/kernels-built reboot Confirm you booted the kernel you intended to start and check its tainted status:: tail -n 1 ~/kernels-built uname -r cat /proc/sys/kernel/tainted Now verify if this kernel is showing the problem. If it does, then you need to report the bug to the primary developers; if it does not, report it to the stable team. See Documentation/admin-guide/reporting-issues.rst for details. [:ref:`details `] h](h)}(hDid you just built a stable or longterm kernel? And were you able to reproduce the regression with it? Then you should test the latest mainline codebase as well, because the result determines which developers the bug must be submitted to.h]hDid you just built a stable or longterm kernel? And were you able to reproduce the regression with it? Then you should test the latest mainline codebase as well, because the result determines which developers the bug must be submitted to.}(hjYhjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjSubh)}(h2To prepare that test, check out current mainline::h]h1To prepare that test, check out current mainline:}(h1To prepare that test, check out current mainline:hjehhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjSubj*)}(hAcd ~/linux/ git switch --discard-changes --detach mainline/masterh]hAcd ~/linux/ git switch --discard-changes --detach mainline/master}(hhhjtubah}(h]h ]h"]h$]h&]hhuh1j)hhhMhjSubh)}(hNow use the checked out code to build and install another kernel using the commands the earlier steps already described in more detail::h]hNow use the checked out code to build and install another kernel using the commands the earlier steps already described in more detail:}(hNow use the checked out code to build and install another kernel using the commands the earlier steps already described in more detail:hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjSubj*)}(hX!cp ~/kernel-config-working .config make olddefconfig make -j $(nproc --all) # * Check if the free space suffices holding another kernel: df -h /boot/ /lib/modules/ sudo make modules_install command -v installkernel && sudo make install make -s kernelrelease | tee -a ~/kernels-built rebooth]hX!cp ~/kernel-config-working .config make olddefconfig make -j $(nproc --all) # * Check if the free space suffices holding another kernel: df -h /boot/ /lib/modules/ sudo make modules_install command -v installkernel && sudo make install make -s kernelrelease | tee -a ~/kernels-built reboot}(hhhjubah}(h]h ]h"]h$]h&]hhuh1j)hhhMhjSubh)}(hRConfirm you booted the kernel you intended to start and check its tainted status::h]hQConfirm you booted the kernel you intended to start and check its tainted status:}(hQConfirm you booted the kernel you intended to start and check its tainted status:hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjSubj*)}(h?tail -n 1 ~/kernels-built uname -r cat /proc/sys/kernel/taintedh]h?tail -n 1 ~/kernels-built uname -r cat /proc/sys/kernel/tainted}(hhhjubah}(h]h ]h"]h$]h&]hhuh1j)hhhMhjSubh)}(hNow verify if this kernel is showing the problem. If it does, then you need to report the bug to the primary developers; if it does not, report it to the stable team. See Documentation/admin-guide/reporting-issues.rst for details.h]hNow verify if this kernel is showing the problem. If it does, then you need to report the bug to the primary developers; if it does not, report it to the stable team. See Documentation/admin-guide/reporting-issues.rst for details.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjSubh)}(h-[:ref:`details `]h](h[}(hjhjhhhNhNubh)}(h+:ref:`details `h]j@)}(hjh]hdetails}(hhhjhhhNhNubah}(h]h ](jKstdstd-refeh"]h$]h&]uh1j?hjubah}(h]h ]h"]h$]h&]refdocjX refdomainjreftyperef refexplicitrefwarnj^recheckstablebroken_bisrefuh1hhhhMhjubh]}(hjhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhjSubeh}(h]h ]h"]h$]h&]uh1jhjPhhhhhNubah}(h]jOah ]h"]recheckstablebroken_bissbsah$]h&]jjuh1jhhhMhjhhj}jjEsj}jOjEsubh)}(hX9Do you follow this guide to verify if a problem is present in the code currently supported by Linux kernel developers? Then you are done at this point. If you later want to remove the kernel you just built, check out :ref:`Complementary tasks: cleanup during and after following this guide `.h](hDo you follow this guide to verify if a problem is present in the code currently supported by Linux kernel developers? Then you are done at this point. If you later want to remove the kernel you just built, check out }(hDo you follow this guide to verify if a problem is present in the code currently supported by Linux kernel developers? Then you are done at this point. If you later want to remove the kernel you just built, check out hj hhhNhNubh)}(h_:ref:`Complementary tasks: cleanup during and after following this guide `h]j@)}(hjh]hBComplementary tasks: cleanup during and after following this guide}(hhhjhhhNhNubah}(h]h ](jKstdstd-refeh"]h$]h&]uh1j?hjubah}(h]h ]h"]h$]h&]refdocjX refdomainj"reftyperef refexplicitrefwarnj^introclosure_bissbsuh1hhhhMhj ubh.}(hj$hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhjhhubh)}(hUIn case you face a regression, move on and execute at least the next segment as well.h]hUIn case you face a regression, move on and execute at least the next segment as well.}(hj@hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjhhubj)}(h.. _introworkingcheck_bissbs:h]h}(h]h ]h"]h$]h&]jintroworkingcheck-bissbsuh1jhMhjhhhhubeh}(h](?segment-1-try-to-reproduce-the-problem-with-the-latest-codebasejeh ]h"](@segment 1: try to reproduce the problem with the latest codebaseintrolatestcheck_bissbseh$]h&]uh1hhjhhhhhMj}j]jsj}jjsubh)}(hhh](h)}(h3Segment 2: check if the kernels you build work fineh]h3Segment 2: check if the kernels you build work fine}(hjghjehhhNhNubah}(h]h ]h"]h$]h&]uh1hhjbhhhhhMubh)}(hIn case of a regression, you now want to ensure the trimmed configuration file you created earlier works as expected; a bisection with the .config file otherwise would be a waste of time. [:ref:`details `]h](hIn case of a regression, you now want to ensure the trimmed configuration file you created earlier works as expected; a bisection with the .config file otherwise would be a waste of time. [}(hIn case of a regression, you now want to ensure the trimmed configuration file you created earlier works as expected; a bisection with the .config file otherwise would be a waste of time. [hjshhhNhNubh)}(h):ref:`details `h]j@)}(hj~h]hdetails}(hhhjhhhNhNubah}(h]h ](jKstdstd-refeh"]h$]h&]uh1j?hj|ubah}(h]h ]h"]h$]h&]refdocjX refdomainjreftyperef refexplicitrefwarnj^introworkingcheck_bisrefuh1hhhhMhjsubh]}(hjhjshhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhjbhhubj)}(h.. _recheckworking_bissbs:h]h}(h]h ]h"]h$]h&]jrecheckworking-bissbsuh1jhMhjbhhhhubj)}(hhh]j)}(hX Build your own variant of the 'working' kernel and check if the feature that regressed works as expected with it. Start by checking out the sources for the version earlier established as 'good' (once again assumed to be 6.0 here):: cd ~/linux/ git switch --discard-changes --detach v6.0 Now use the checked out code to configure, build, and install another kernel using the commands the previous subsection explained in more detail:: cp ~/kernel-config-working .config make olddefconfig make -j $(nproc --all) # * Check if the free space suffices holding another kernel: df -h /boot/ /lib/modules/ sudo make modules_install command -v installkernel && sudo make install make -s kernelrelease | tee -a ~/kernels-built reboot When the system booted, you may want to verify once again that the kernel you started is the one you just built:: tail -n 1 ~/kernels-built uname -r Now check if this kernel works as expected; if not, consult the reference section for further instructions. [:ref:`details `] h](h)}(hqBuild your own variant of the 'working' kernel and check if the feature that regressed works as expected with it.h]huBuild your own variant of the ‘working’ kernel and check if the feature that regressed works as expected with it.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjubh)}(huStart by checking out the sources for the version earlier established as 'good' (once again assumed to be 6.0 here)::h]hxStart by checking out the sources for the version earlier established as ‘good’ (once again assumed to be 6.0 here):}(htStart by checking out the sources for the version earlier established as 'good' (once again assumed to be 6.0 here):hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjubj*)}(h6cd ~/linux/ git switch --discard-changes --detach v6.0h]h6cd ~/linux/ git switch --discard-changes --detach v6.0}(hhhjubah}(h]h ]h"]h$]h&]hhuh1j)hhhMhjubh)}(hNow use the checked out code to configure, build, and install another kernel using the commands the previous subsection explained in more detail::h]hNow use the checked out code to configure, build, and install another kernel using the commands the previous subsection explained in more detail:}(hNow use the checked out code to configure, build, and install another kernel using the commands the previous subsection explained in more detail:hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjubj*)}(hX!cp ~/kernel-config-working .config make olddefconfig make -j $(nproc --all) # * Check if the free space suffices holding another kernel: df -h /boot/ /lib/modules/ sudo make modules_install command -v installkernel && sudo make install make -s kernelrelease | tee -a ~/kernels-built rebooth]hX!cp ~/kernel-config-working .config make olddefconfig make -j $(nproc --all) # * Check if the free space suffices holding another kernel: df -h /boot/ /lib/modules/ sudo make modules_install command -v installkernel && sudo make install make -s kernelrelease | tee -a ~/kernels-built reboot}(hhhjubah}(h]h ]h"]h$]h&]hhuh1j)hhhMhjubh)}(hqWhen the system booted, you may want to verify once again that the kernel you started is the one you just built::h]hpWhen the system booted, you may want to verify once again that the kernel you started is the one you just built:}(hpWhen the system booted, you may want to verify once again that the kernel you started is the one you just built:hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjubj*)}(h"tail -n 1 ~/kernels-built uname -rh]h"tail -n 1 ~/kernels-built uname -r}(hhhjubah}(h]h ]h"]h$]h&]hhuh1j)hhhMhjubh)}(hkNow check if this kernel works as expected; if not, consult the reference section for further instructions.h]hkNow check if this kernel works as expected; if not, consult the reference section for further instructions.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjubh)}(h([:ref:`details `]h](h[}(hjhj+hhhNhNubh)}(h&:ref:`details `h]j@)}(hj5h]hdetails}(hhhj7hhhNhNubah}(h]h ](jKstdstd-refeh"]h$]h&]uh1j?hj3ubah}(h]h ]h"]h$]h&]refdocjX refdomainjAreftyperef refexplicitrefwarnj^recheckworking_bisrefuh1hhhhMhj+ubh]}(hjhj+hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhjubeh}(h]h ]h"]h$]h&]uh1jhjhhhhhNubah}(h]jah ]h"]recheckworking_bissbsah$]h&]jjuh1jhhhMhjbhhj}jgjsj}jjsubj)}(h.. _introbisect_bissbs:h]h}(h]h ]h"]h$]h&]jintrobisect-bissbsuh1jhMhjbhhhhubeh}(h](2segment-2-check-if-the-kernels-you-build-work-finejVeh ]h"](3segment 2: check if the kernels you build work fineintroworkingcheck_bissbseh$]h&]uh1hhjhhhhhMj}j}jLsj}jVjLsubh)}(hhh](h)}(h8Segment 3: perform the bisection and validate the resulth]h8Segment 3: perform the bisection and validate the result}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhMubh)}(hXWith all the preparations and precaution builds taken care of, you are now ready to begin the bisection. This will make you build quite a few kernels -- usually about 15 in case you encountered a regression when updating to a newer series (say from 6.0.13 to 6.1.5). But do not worry, due to the trimmed build configuration created earlier this works a lot faster than many people assume: overall on average it will often just take about 10 to 15 minutes to compile each kernel on commodity x86 machines.h]hXWith all the preparations and precaution builds taken care of, you are now ready to begin the bisection. This will make you build quite a few kernels -- usually about 15 in case you encountered a regression when updating to a newer series (say from 6.0.13 to 6.1.5). But do not worry, due to the trimmed build configuration created earlier this works a lot faster than many people assume: overall on average it will often just take about 10 to 15 minutes to compile each kernel on commodity x86 machines.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjhhubj)}(h.. _bisectstart_bissbs:h]h}(h]h ]h"]h$]h&]jbisectstart-bissbsuh1jhMhjhhhhubj)}(hhh]j)}(hXStart the bisection and tell Git about the versions earlier established as 'good' (6.0 in the following example command) and 'bad' (6.1.5):: cd ~/linux/ git bisect start git bisect good v6.0 git bisect bad v6.1.5 [:ref:`details `] h](h)}(hStart the bisection and tell Git about the versions earlier established as 'good' (6.0 in the following example command) and 'bad' (6.1.5)::h]hStart the bisection and tell Git about the versions earlier established as ‘good’ (6.0 in the following example command) and ‘bad’ (6.1.5):}(hStart the bisection and tell Git about the versions earlier established as 'good' (6.0 in the following example command) and 'bad' (6.1.5):hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjubj*)}(hGcd ~/linux/ git bisect start git bisect good v6.0 git bisect bad v6.1.5h]hGcd ~/linux/ git bisect start git bisect good v6.0 git bisect bad v6.1.5}(hhhjubah}(h]h ]h"]h$]h&]hhuh1j)hhhMhjubh)}(h%[:ref:`details `]h](h[}(hjhjhhhNhNubh)}(h#:ref:`details `h]j@)}(hjh]hdetails}(hhhjhhhNhNubah}(h]h ](jKstdstd-refeh"]h$]h&]uh1j?hjubah}(h]h ]h"]h$]h&]refdocjX refdomainjreftyperef refexplicitrefwarnj^bisectstart_bisrefuh1hhhhMhjubh]}(hjhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhjubeh}(h]h ]h"]h$]h&]uh1jhjhhhhhNubah}(h]jah ]h"]bisectstart_bissbsah$]h&]jjuh1jhhhMhjhhj}j jsj}jjsubj)}(h.. _bisectbuild_bissbs:h]h}(h]h ]h"]h$]h&]jbisectbuild-bissbsuh1jhMhjhhhhubj)}(hhh]j)}(hXNow use the code Git checked out to build, install, and boot a kernel using the commands introduced earlier:: cp ~/kernel-config-working .config make olddefconfig make -j $(nproc --all) # * Check if the free space suffices holding another kernel: df -h /boot/ /lib/modules/ sudo make modules_install command -v installkernel && sudo make install make -s kernelrelease | tee -a ~/kernels-built reboot If compilation fails for some reason, run ``git bisect skip`` and restart executing the stack of commands from the beginning. In case you skipped the 'test latest codebase' step in the guide, check its description as for why the 'df [...]' and 'make -s kernelrelease [...]' commands are here. Important note: the latter command from this point on will print release identifiers that might look odd or wrong to you -- which they are not, as it's totally normal to see release identifiers like '6.0-rc1-local-gcafec0cacaca0' if you bisect between versions 6.1 and 6.2 for example. [:ref:`details `] h](h)}(hmNow use the code Git checked out to build, install, and boot a kernel using the commands introduced earlier::h]hlNow use the code Git checked out to build, install, and boot a kernel using the commands introduced earlier:}(hlNow use the code Git checked out to build, install, and boot a kernel using the commands introduced earlier:hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM hjubj*)}(hX!cp ~/kernel-config-working .config make olddefconfig make -j $(nproc --all) # * Check if the free space suffices holding another kernel: df -h /boot/ /lib/modules/ sudo make modules_install command -v installkernel && sudo make install make -s kernelrelease | tee -a ~/kernels-built rebooth]hX!cp ~/kernel-config-working .config make olddefconfig make -j $(nproc --all) # * Check if the free space suffices holding another kernel: df -h /boot/ /lib/modules/ sudo make modules_install command -v installkernel && sudo make install make -s kernelrelease | tee -a ~/kernels-built reboot}(hhhj2ubah}(h]h ]h"]h$]h&]hhuh1j)hhhM hjubh)}(h}If compilation fails for some reason, run ``git bisect skip`` and restart executing the stack of commands from the beginning.h](h*If compilation fails for some reason, run }(h*If compilation fails for some reason, run hj@hhhNhNubj5)}(h``git bisect skip``h]hgit bisect skip}(hhhjIhhhNhNubah}(h]h ]h"]h$]h&]uh1j4hj@ubh@ and restart executing the stack of commands from the beginning.}(h@ and restart executing the stack of commands from the beginning.hj@hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhjubh)}(hIn case you skipped the 'test latest codebase' step in the guide, check its description as for why the 'df [...]' and 'make -s kernelrelease [...]' commands are here.h]hIn case you skipped the ‘test latest codebase’ step in the guide, check its description as for why the ‘df [...]’ and ‘make -s kernelrelease [...]’ commands are here.}(hjdhjbhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjubh)}(hXImportant note: the latter command from this point on will print release identifiers that might look odd or wrong to you -- which they are not, as it's totally normal to see release identifiers like '6.0-rc1-local-gcafec0cacaca0' if you bisect between versions 6.1 and 6.2 for example.h]hX#Important note: the latter command from this point on will print release identifiers that might look odd or wrong to you -- which they are not, as it’s totally normal to see release identifiers like ‘6.0-rc1-local-gcafec0cacaca0’ if you bisect between versions 6.1 and 6.2 for example.}(hjrhjphhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjubh)}(h%[:ref:`details `]h](h[}(hjhj~hhhNhNubh)}(h#:ref:`details `h]j@)}(hjh]hdetails}(hhhjhhhNhNubah}(h]h ](jKstdstd-refeh"]h$]h&]uh1j?hjubah}(h]h ]h"]h$]h&]refdocjX refdomainjreftyperef refexplicitrefwarnj^bisectbuild_bisrefuh1hhhhM"hj~ubh]}(hjhj~hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhM"hjubeh}(h]h ]h"]h$]h&]uh1jhjhhhhhNubah}(h]jah ]h"]bisectbuild_bissbsah$]h&]jjuh1jhhhM hjhhj}jjsj}jjsubj)}(h.. _bisecttest_bissbs:h]h}(h]h ]h"]h$]h&]jbisecttest-bissbsuh1jhM$hjhhhhubj)}(hhh]j)}(hXNow check if the feature that regressed works in the kernel you just built. You again might want to start by making sure the kernel you booted is the one you just built:: cd ~/linux/ tail -n 1 ~/kernels-built uname -r Now verify if the feature that regressed works at this kernel bisection point. If it does, run this:: git bisect good If it does not, run this:: git bisect bad Be sure about what you tell Git, as getting this wrong just once will send the rest of the bisection totally off course. While the bisection is ongoing, Git will use the information you provided to find and check out another bisection point for you to test. While doing so, it will print something like 'Bisecting: 675 revisions left to test after this (roughly 10 steps)' to indicate how many further changes it expects to be tested. Now build and install another kernel using the instructions from the previous step; afterwards follow the instructions in this step again. Repeat this again and again until you finish the bisection -- that's the case when Git after tagging a change as 'good' or 'bad' prints something like 'cafecaca0c0dacafecaca0c0dacafecaca0c0da is the first bad commit'; right afterwards it will show some details about the culprit including the patch description of the change. The latter might fill your terminal screen, so you might need to scroll up to see the message mentioning the culprit; alternatively, run ``git bisect log > ~/bisection-log``. [:ref:`details `] h](h)}(hKNow check if the feature that regressed works in the kernel you just built.h]hKNow check if the feature that regressed works in the kernel you just built.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM&hjubh)}(h^You again might want to start by making sure the kernel you booted is the one you just built::h]h]You again might want to start by making sure the kernel you booted is the one you just built:}(h]You again might want to start by making sure the kernel you booted is the one you just built:hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM(hjubj*)}(h.cd ~/linux/ tail -n 1 ~/kernels-built uname -rh]h.cd ~/linux/ tail -n 1 ~/kernels-built uname -r}(hhhjubah}(h]h ]h"]h$]h&]hhuh1j)hhhM+hjubh)}(heNow verify if the feature that regressed works at this kernel bisection point. If it does, run this::h]hdNow verify if the feature that regressed works at this kernel bisection point. If it does, run this:}(hdNow verify if the feature that regressed works at this kernel bisection point. If it does, run this:hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM/hjubj*)}(hgit bisect goodh]hgit bisect good}(hhhj ubah}(h]h ]h"]h$]h&]hhuh1j)hhhM2hjubh)}(hIf it does not, run this::h]hIf it does not, run this:}(hIf it does not, run this:hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM4hjubj*)}(hgit bisect badh]hgit bisect bad}(hhhj(ubah}(h]h ]h"]h$]h&]hhuh1j)hhhM6hjubh)}(hxBe sure about what you tell Git, as getting this wrong just once will send the rest of the bisection totally off course.h]hxBe sure about what you tell Git, as getting this wrong just once will send the rest of the bisection totally off course.}(hj8hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM8hjubh)}(hXWhile the bisection is ongoing, Git will use the information you provided to find and check out another bisection point for you to test. While doing so, it will print something like 'Bisecting: 675 revisions left to test after this (roughly 10 steps)' to indicate how many further changes it expects to be tested. Now build and install another kernel using the instructions from the previous step; afterwards follow the instructions in this step again.h]hXWhile the bisection is ongoing, Git will use the information you provided to find and check out another bisection point for you to test. While doing so, it will print something like ‘Bisecting: 675 revisions left to test after this (roughly 10 steps)’ to indicate how many further changes it expects to be tested. Now build and install another kernel using the instructions from the previous step; afterwards follow the instructions in this step again.}(hjFhjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM;hjubh)}(hXRepeat this again and again until you finish the bisection -- that's the case when Git after tagging a change as 'good' or 'bad' prints something like 'cafecaca0c0dacafecaca0c0dacafecaca0c0da is the first bad commit'; right afterwards it will show some details about the culprit including the patch description of the change. The latter might fill your terminal screen, so you might need to scroll up to see the message mentioning the culprit; alternatively, run ``git bisect log > ~/bisection-log``.h](hXRepeat this again and again until you finish the bisection -- that’s the case when Git after tagging a change as ‘good’ or ‘bad’ prints something like ‘cafecaca0c0dacafecaca0c0dacafecaca0c0da is the first bad commit’; right afterwards it will show some details about the culprit including the patch description of the change. The latter might fill your terminal screen, so you might need to scroll up to see the message mentioning the culprit; alternatively, run }(hXRepeat this again and again until you finish the bisection -- that's the case when Git after tagging a change as 'good' or 'bad' prints something like 'cafecaca0c0dacafecaca0c0dacafecaca0c0da is the first bad commit'; right afterwards it will show some details about the culprit including the patch description of the change. The latter might fill your terminal screen, so you might need to scroll up to see the message mentioning the culprit; alternatively, run hjRhhhNhNubj5)}(h$``git bisect log > ~/bisection-log``h]h git bisect log > ~/bisection-log}(hhhj[hhhNhNubah}(h]h ]h"]h$]h&]uh1j4hjRubh.}(hj$hjRhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMBhjubh)}(h$[:ref:`details `]h](h[}(hjhjshhhNhNubh)}(h":ref:`details `h]j@)}(hj}h]hdetails}(hhhjhhhNhNubah}(h]h ](jKstdstd-refeh"]h$]h&]uh1j?hj{ubah}(h]h ]h"]h$]h&]refdocjX refdomainjreftyperef refexplicitrefwarnj^bisecttest_bisrefuh1hhhhMJhjsubh]}(hjhjshhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMJhjubeh}(h]h ]h"]h$]h&]uh1jhjhhhhhNubah}(h]jah ]h"]bisecttest_bissbsah$]h&]jjuh1jhhhM&hjhhj}jjsj}jjsubj)}(h.. _bisectlog_bissbs:h]h}(h]h ]h"]h$]h&]jbisectlog-bissbsuh1jhMLhjhhhhubj)}(hhh]j)}(hX%Store Git's bisection log and the current .config file in a safe place before telling Git to reset the sources to the state before the bisection:: cd ~/linux/ git bisect log > ~/bisection-log cp .config ~/bisection-config-culprit git bisect reset [:ref:`details `] h](h)}(hStore Git's bisection log and the current .config file in a safe place before telling Git to reset the sources to the state before the bisection::h]hStore Git’s bisection log and the current .config file in a safe place before telling Git to reset the sources to the state before the bisection:}(hStore Git's bisection log and the current .config file in a safe place before telling Git to reset the sources to the state before the bisection:hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMNhjubj*)}(hccd ~/linux/ git bisect log > ~/bisection-log cp .config ~/bisection-config-culprit git bisect reseth]hccd ~/linux/ git bisect log > ~/bisection-log cp .config ~/bisection-config-culprit git bisect reset}(hhhjubah}(h]h ]h"]h$]h&]hhuh1j)hhhMQhjubh)}(h#[:ref:`details `]h](h[}(hjhjhhhNhNubh)}(h!:ref:`details `h]j@)}(hjh]hdetails}(hhhjhhhNhNubah}(h]h ](jKstdstd-refeh"]h$]h&]uh1j?hjubah}(h]h ]h"]h$]h&]refdocjX refdomainjreftyperef refexplicitrefwarnj^bisectlog_bisrefuh1hhhhMVhjubh]}(hjhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMVhjubeh}(h]h ]h"]h$]h&]uh1jhjhhhhhNubah}(h]jah ]h"]bisectlog_bissbsah$]h&]jjuh1jhhhMNhjhhj}jjsj}jjsubj)}(h.. _revert_bissbs:h]h}(h]h ]h"]h$]h&]j revert-bissbsuh1jhMXhjhhhhubj)}(hhh]j)}(hX Try reverting the culprit on top of latest mainline to see if this fixes your regression. This is optional, as it might be impossible or hard to realize. The former is the case, if the bisection determined a merge commit as the culprit; the latter happens if other changes depend on the culprit. But if the revert succeeds, it is worth building another kernel, as it validates the result of a bisection, which can easily deroute; it furthermore will let kernel developers know, if they can resolve the regression with a quick revert. Begin by checking out the latest codebase depending on the range you bisected: * Did you face a regression within a stable/longterm series (say between 6.0.13 and 6.0.15) that does not happen in mainline? Then check out the latest codebase for the affected series like this:: git fetch stable git switch --discard-changes --detach linux-6.0.y * In all other cases check out latest mainline:: git fetch mainline git switch --discard-changes --detach mainline/master If you bisected a regression within a stable/longterm series that also happens in mainline, there is one more thing to do: look up the mainline commit-id. To do so, use a command like ``git show abcdcafecabcd`` to view the patch description of the culprit. There will be a line near the top which looks like 'commit cafec0cacaca0 upstream.' or 'Upstream commit cafec0cacaca0'; use that commit-id in the next command and not the one the bisection blamed. Now try reverting the culprit by specifying its commit id:: git revert --no-edit cafec0cacaca0 If that fails, give up trying and move on to the next step; if it works, adjust the tag to facilitate the identification and prevent accidentally overwriting another kernel:: cp ~/kernel-config-working .config ./scripts/config --set-str CONFIG_LOCALVERSION '-local-cafec0cacaca0-reverted' Build a kernel using the familiar command sequence, just without copying the the base .config over:: make olddefconfig && make -j $(nproc --all) # * Check if the free space suffices holding another kernel: df -h /boot/ /lib/modules/ sudo make modules_install command -v installkernel && sudo make install make -s kernelrelease | tee -a ~/kernels-built reboot Now check one last time if the feature that made you perform a bisection works with that kernel: if everything went well, it should not show the regression. [:ref:`details `] h](h)}(hYTry reverting the culprit on top of latest mainline to see if this fixes your regression.h]hYTry reverting the culprit on top of latest mainline to see if this fixes your regression.}(hj8hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMZhj2ubh)}(hXThis is optional, as it might be impossible or hard to realize. The former is the case, if the bisection determined a merge commit as the culprit; the latter happens if other changes depend on the culprit. But if the revert succeeds, it is worth building another kernel, as it validates the result of a bisection, which can easily deroute; it furthermore will let kernel developers know, if they can resolve the regression with a quick revert.h]hXThis is optional, as it might be impossible or hard to realize. The former is the case, if the bisection determined a merge commit as the culprit; the latter happens if other changes depend on the culprit. But if the revert succeeds, it is worth building another kernel, as it validates the result of a bisection, which can easily deroute; it furthermore will let kernel developers know, if they can resolve the regression with a quick revert.}(hjFhjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM]hj2ubh)}(hNBegin by checking out the latest codebase depending on the range you bisected:h]hNBegin by checking out the latest codebase depending on the range you bisected:}(hjThjRhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMdhj2ubj)}(hhh](j)}(hX Did you face a regression within a stable/longterm series (say between 6.0.13 and 6.0.15) that does not happen in mainline? Then check out the latest codebase for the affected series like this:: git fetch stable git switch --discard-changes --detach linux-6.0.y h](h)}(hDid you face a regression within a stable/longterm series (say between 6.0.13 and 6.0.15) that does not happen in mainline? Then check out the latest codebase for the affected series like this::h]hDid you face a regression within a stable/longterm series (say between 6.0.13 and 6.0.15) that does not happen in mainline? Then check out the latest codebase for the affected series like this:}(hDid you face a regression within a stable/longterm series (say between 6.0.13 and 6.0.15) that does not happen in mainline? Then check out the latest codebase for the affected series like this:hjghhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMfhjcubj*)}(hBgit fetch stable git switch --discard-changes --detach linux-6.0.yh]hBgit fetch stable git switch --discard-changes --detach linux-6.0.y}(hhhjvubah}(h]h ]h"]h$]h&]hhuh1j)hhhMjhjcubeh}(h]h ]h"]h$]h&]uh1jhj`ubj)}(hXDIn all other cases check out latest mainline:: git fetch mainline git switch --discard-changes --detach mainline/master If you bisected a regression within a stable/longterm series that also happens in mainline, there is one more thing to do: look up the mainline commit-id. To do so, use a command like ``git show abcdcafecabcd`` to view the patch description of the culprit. There will be a line near the top which looks like 'commit cafec0cacaca0 upstream.' or 'Upstream commit cafec0cacaca0'; use that commit-id in the next command and not the one the bisection blamed. h](h)}(h.In all other cases check out latest mainline::h]h-In all other cases check out latest mainline:}(h-In all other cases check out latest mainline:hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMmhjubj*)}(hHgit fetch mainline git switch --discard-changes --detach mainline/masterh]hHgit fetch mainline git switch --discard-changes --detach mainline/master}(hhhjubah}(h]h ]h"]h$]h&]hhuh1j)hhhMohjubh)}(hXIf you bisected a regression within a stable/longterm series that also happens in mainline, there is one more thing to do: look up the mainline commit-id. To do so, use a command like ``git show abcdcafecabcd`` to view the patch description of the culprit. There will be a line near the top which looks like 'commit cafec0cacaca0 upstream.' or 'Upstream commit cafec0cacaca0'; use that commit-id in the next command and not the one the bisection blamed.h](hIf you bisected a regression within a stable/longterm series that also happens in mainline, there is one more thing to do: look up the mainline commit-id. To do so, use a command like }(hIf you bisected a regression within a stable/longterm series that also happens in mainline, there is one more thing to do: look up the mainline commit-id. To do so, use a command like hjhhhNhNubj5)}(h``git show abcdcafecabcd``h]hgit show abcdcafecabcd}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j4hjubh to view the patch description of the culprit. There will be a line near the top which looks like ‘commit cafec0cacaca0 upstream.’ or ‘Upstream commit cafec0cacaca0’; use that commit-id in the next command and not the one the bisection blamed.}(h to view the patch description of the culprit. There will be a line near the top which looks like 'commit cafec0cacaca0 upstream.' or 'Upstream commit cafec0cacaca0'; use that commit-id in the next command and not the one the bisection blamed.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMrhjubeh}(h]h ]h"]h$]h&]uh1jhj`ubeh}(h]h ]h"]h$]h&]jjuh1jhhhMfhj2ubh)}(h;Now try reverting the culprit by specifying its commit id::h]h:Now try reverting the culprit by specifying its commit id:}(h:Now try reverting the culprit by specifying its commit id:hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMzhj2ubj*)}(h"git revert --no-edit cafec0cacaca0h]h"git revert --no-edit cafec0cacaca0}(hhhjubah}(h]h ]h"]h$]h&]hhuh1j)hhhM|hj2ubh)}(hIf that fails, give up trying and move on to the next step; if it works, adjust the tag to facilitate the identification and prevent accidentally overwriting another kernel::h]hIf that fails, give up trying and move on to the next step; if it works, adjust the tag to facilitate the identification and prevent accidentally overwriting another kernel:}(hIf that fails, give up trying and move on to the next step; if it works, adjust the tag to facilitate the identification and prevent accidentally overwriting another kernel:hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM~hj2ubj*)}(hqcp ~/kernel-config-working .config ./scripts/config --set-str CONFIG_LOCALVERSION '-local-cafec0cacaca0-reverted'h]hqcp ~/kernel-config-working .config ./scripts/config --set-str CONFIG_LOCALVERSION '-local-cafec0cacaca0-reverted'}(hhhjubah}(h]h ]h"]h$]h&]hhuh1j)hhhMhj2ubh)}(hdBuild a kernel using the familiar command sequence, just without copying the the base .config over::h]hcBuild a kernel using the familiar command sequence, just without copying the the base .config over:}(hcBuild a kernel using the familiar command sequence, just without copying the the base .config over:hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj2ubj*)}(hXmake olddefconfig && make -j $(nproc --all) # * Check if the free space suffices holding another kernel: df -h /boot/ /lib/modules/ sudo make modules_install command -v installkernel && sudo make install make -s kernelrelease | tee -a ~/kernels-built rebooth]hXmake olddefconfig && make -j $(nproc --all) # * Check if the free space suffices holding another kernel: df -h /boot/ /lib/modules/ sudo make modules_install command -v installkernel && sudo make install make -s kernelrelease | tee -a ~/kernels-built reboot}(hhhj"ubah}(h]h ]h"]h$]h&]hhuh1j)hhhMhj2ubh)}(hNow check one last time if the feature that made you perform a bisection works with that kernel: if everything went well, it should not show the regression.h]hNow check one last time if the feature that made you perform a bisection works with that kernel: if everything went well, it should not show the regression.}(hj2hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj2ubh)}(h [:ref:`details `]h](h[}(hjhj>hhhNhNubh)}(h:ref:`details `h]j@)}(hjHh]hdetails}(hhhjJhhhNhNubah}(h]h ](jKstdstd-refeh"]h$]h&]uh1j?hjFubah}(h]h ]h"]h$]h&]refdocjX refdomainjTreftyperef refexplicitrefwarnj^ revert_bisrefuh1hhhhMhj>ubh]}(hjhj>hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhj2ubeh}(h]h ]h"]h$]h&]uh1jhj/hhhhhNubah}(h]j.ah ]h"] revert_bissbsah$]h&]jjuh1jhhhMZhjhhj}jzj$sj}j.j$subj)}(h.. _introclosure_bissbs:h]h}(h]h ]h"]h$]h&]jintroclosure-bissbsuh1jhMhjhhhhubeh}(h](7segment-3-perform-the-bisection-and-validate-the-resultjveh ]h"](8segment 3: perform the bisection and validate the resultintrobisect_bissbseh$]h&]uh1hhjhhhhhMj}jjlsj}jvjlsubh)}(hhh](h)}(h;Complementary tasks: cleanup during and after the bisectionh]h;Complementary tasks: cleanup during and after the bisection}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhMubh)}(hDuring and after following this guide you might want or need to remove some of the kernels you installed: the boot menu otherwise will become confusing or space might run out.h]hDuring and after following this guide you might want or need to remove some of the kernels you installed: the boot menu otherwise will become confusing or space might run out.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjhhubj)}(h.. _makeroom_bissbs:h]h}(h]h ]h"]h$]h&]jmakeroom-bissbsuh1jhMhjhhhhubj)}(hhh]j)}(hXTo remove one of the kernels you installed, look up its 'kernelrelease' identifier. This guide stores them in '~/kernels-built', but the following command will print them as well:: ls -ltr /lib/modules/*-local* You in most situations want to remove the oldest kernels built during the actual bisection (e.g. segment 3 of this guide). The two ones you created beforehand (e.g. to test the latest codebase and the version considered 'good') might become handy to verify something later -- thus better keep them around, unless you are really short on storage space. To remove the modules of a kernel with the kernelrelease identifier '*6.0-rc1-local-gcafec0cacaca0*', start by removing the directory holding its modules:: sudo rm -rf /lib/modules/6.0-rc1-local-gcafec0cacaca0 Afterwards try the following command:: sudo kernel-install -v remove 6.0-rc1-local-gcafec0cacaca0 On quite a few distributions this will delete all other kernel files installed while also removing the kernel's entry from the boot menu. But on some distributions kernel-install does not exist or leaves boot-loader entries or kernel image and related files behind; in that case remove them as described in the reference section. [:ref:`details `] h](h)}(hTo remove one of the kernels you installed, look up its 'kernelrelease' identifier. This guide stores them in '~/kernels-built', but the following command will print them as well::h]hTo remove one of the kernels you installed, look up its ‘kernelrelease’ identifier. This guide stores them in ‘~/kernels-built’, but the following command will print them as well:}(hTo remove one of the kernels you installed, look up its 'kernelrelease' identifier. This guide stores them in '~/kernels-built', but the following command will print them as well:hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjubj*)}(hls -ltr /lib/modules/*-local*h]hls -ltr /lib/modules/*-local*}(hhhjubah}(h]h ]h"]h$]h&]hhuh1j)hhhMhjubh)}(hX_You in most situations want to remove the oldest kernels built during the actual bisection (e.g. segment 3 of this guide). The two ones you created beforehand (e.g. to test the latest codebase and the version considered 'good') might become handy to verify something later -- thus better keep them around, unless you are really short on storage space.h]hXcYou in most situations want to remove the oldest kernels built during the actual bisection (e.g. segment 3 of this guide). The two ones you created beforehand (e.g. to test the latest codebase and the version considered ‘good’) might become handy to verify something later -- thus better keep them around, unless you are really short on storage space.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjubh)}(hTo remove the modules of a kernel with the kernelrelease identifier '*6.0-rc1-local-gcafec0cacaca0*', start by removing the directory holding its modules::h](hGTo remove the modules of a kernel with the kernelrelease identifier ‘}(hETo remove the modules of a kernel with the kernelrelease identifier 'hjhhhNhNubj')}(h*6.0-rc1-local-gcafec0cacaca0*h]h6.0-rc1-local-gcafec0cacaca0}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1j&hjubh9’, start by removing the directory holding its modules:}(h7', start by removing the directory holding its modules:hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhjubj*)}(h5sudo rm -rf /lib/modules/6.0-rc1-local-gcafec0cacaca0h]h5sudo rm -rf /lib/modules/6.0-rc1-local-gcafec0cacaca0}(hhhjubah}(h]h ]h"]h$]h&]hhuh1j)hhhMhjubh)}(h&Afterwards try the following command::h]h%Afterwards try the following command:}(h%Afterwards try the following command:hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjubj*)}(h:sudo kernel-install -v remove 6.0-rc1-local-gcafec0cacaca0h]h:sudo kernel-install -v remove 6.0-rc1-local-gcafec0cacaca0}(hhhj0ubah}(h]h ]h"]h$]h&]hhuh1j)hhhMhjubh)}(hXIOn quite a few distributions this will delete all other kernel files installed while also removing the kernel's entry from the boot menu. But on some distributions kernel-install does not exist or leaves boot-loader entries or kernel image and related files behind; in that case remove them as described in the reference section.h]hXKOn quite a few distributions this will delete all other kernel files installed while also removing the kernel’s entry from the boot menu. But on some distributions kernel-install does not exist or leaves boot-loader entries or kernel image and related files behind; in that case remove them as described in the reference section.}(hj@hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjubh)}(h"[:ref:`details `]h](h[}(hjhjLhhhNhNubh)}(h :ref:`details `h]j@)}(hjVh]hdetails}(hhhjXhhhNhNubah}(h]h ](jKstdstd-refeh"]h$]h&]uh1j?hjTubah}(h]h ]h"]h$]h&]refdocjX refdomainjbreftyperef refexplicitrefwarnj^makeroom_bisrefuh1hhhhMhjLubh]}(hjhjLhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhjubeh}(h]h ]h"]h$]h&]uh1jhjhhhhhNubah}(h]jah ]h"]makeroom_bissbsah$]h&]jjuh1jhhhMhjhhj}jjsj}jjsubj)}(h.. _finishingtouch_bissbs:h]h}(h]h ]h"]h$]h&]jfinishingtouch-bissbsuh1jhMhjhhhhubj)}(hhh]j)}(hXOnce you have finished the bisection, do not immediately remove anything you set up, as you might need a few things again. What is safe to remove depends on the outcome of the bisection: * Could you initially reproduce the regression with the latest codebase and after the bisection were able to fix the problem by reverting the culprit on top of the latest codebase? Then you want to keep those two kernels around for a while, but safely remove all others with a '-local' in the release identifier. * Did the bisection end on a merge-commit or seems questionable for other reasons? Then you want to keep as many kernels as possible around for a few days: it's pretty likely that you will be asked to recheck something. * In other cases it likely is a good idea to keep the following kernels around for some time: the one built from the latest codebase, the one created from the version considered 'good', and the last three or four you compiled during the actual bisection process. [:ref:`details `] h](h)}(hOnce you have finished the bisection, do not immediately remove anything you set up, as you might need a few things again. What is safe to remove depends on the outcome of the bisection:h]hOnce you have finished the bisection, do not immediately remove anything you set up, as you might need a few things again. What is safe to remove depends on the outcome of the bisection:}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjubj)}(hhh](j)}(hX7Could you initially reproduce the regression with the latest codebase and after the bisection were able to fix the problem by reverting the culprit on top of the latest codebase? Then you want to keep those two kernels around for a while, but safely remove all others with a '-local' in the release identifier. h]h)}(hX6Could you initially reproduce the regression with the latest codebase and after the bisection were able to fix the problem by reverting the culprit on top of the latest codebase? Then you want to keep those two kernels around for a while, but safely remove all others with a '-local' in the release identifier.h]hX:Could you initially reproduce the regression with the latest codebase and after the bisection were able to fix the problem by reverting the culprit on top of the latest codebase? Then you want to keep those two kernels around for a while, but safely remove all others with a ‘-local’ in the release identifier.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hDid the bisection end on a merge-commit or seems questionable for other reasons? Then you want to keep as many kernels as possible around for a few days: it's pretty likely that you will be asked to recheck something. h]h)}(hDid the bisection end on a merge-commit or seems questionable for other reasons? Then you want to keep as many kernels as possible around for a few days: it's pretty likely that you will be asked to recheck something.h]hDid the bisection end on a merge-commit or seems questionable for other reasons? Then you want to keep as many kernels as possible around for a few days: it’s pretty likely that you will be asked to recheck something.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hXIn other cases it likely is a good idea to keep the following kernels around for some time: the one built from the latest codebase, the one created from the version considered 'good', and the last three or four you compiled during the actual bisection process. h]h)}(hXIn other cases it likely is a good idea to keep the following kernels around for some time: the one built from the latest codebase, the one created from the version considered 'good', and the last three or four you compiled during the actual bisection process.h]hXIn other cases it likely is a good idea to keep the following kernels around for some time: the one built from the latest codebase, the one created from the version considered ‘good’, and the last three or four you compiled during the actual bisection process.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhhhMhjubh)}(h([:ref:`details `]h](h[}(hjhjhhhNhNubh)}(h&:ref:`details `h]j@)}(hjh]hdetails}(hhhj hhhNhNubah}(h]h ](jKstdstd-refeh"]h$]h&]uh1j?hjubah}(h]h ]h"]h$]h&]refdocjX refdomainjreftyperef refexplicitrefwarnj^finishingtouch_bisrefuh1hhhhMhjubh]}(hjhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhjubeh}(h]h ]h"]h$]h&]uh1jhjhhhhhNubah}(h]jah ]h"]finishingtouch_bissbsah$]h&]jjuh1jhhhMhjhhj}j:jsj}jjsubj)}(h.. _introoptional_bissbs:h]h}(h]h ]h"]h$]h&]jintrooptional-bissbsuh1jhMhjhhhhubeh}(h](:complementary-tasks-cleanup-during-and-after-the-bisectionjeh ]h"](;complementary tasks: cleanup during and after the bisectionintroclosure_bissbseh$]h&]uh1hhjhhhhhMj}jPjsj}jjsubh)}(hhh](h)}(h2Optional: test reverts, patches, or later versionsh]h2Optional: test reverts, patches, or later versions}(hjZhjXhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjUhhhhhMubh)}(hWhile or after reporting a bug, you might want or potentially will be asked to test reverts, debug patches, proposed fixes, or other versions. In that case follow these instructions.h]hWhile or after reporting a bug, you might want or potentially will be asked to test reverts, debug patches, proposed fixes, or other versions. In that case follow these instructions.}(hjhhjfhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjUhhubj)}(hhh](j)}(hX{Update your Git clone and check out the latest code. * In case you want to test mainline, fetch its latest changes before checking its code out:: git fetch mainline git switch --discard-changes --detach mainline/master * In case you want to test a stable or longterm kernel, first add the branch holding the series you are interested in (6.2 in the example), unless you already did so earlier:: git remote set-branches --add stable linux-6.2.y Then fetch the latest changes and check out the latest version from the series:: git fetch stable git switch --discard-changes --detach stable/linux-6.2.y h](h)}(h4Update your Git clone and check out the latest code.h]h4Update your Git clone and check out the latest code.}(hj}hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjwubj)}(hhh](j)}(hIn case you want to test mainline, fetch its latest changes before checking its code out:: git fetch mainline git switch --discard-changes --detach mainline/master h](h)}(hZIn case you want to test mainline, fetch its latest changes before checking its code out::h]hYIn case you want to test mainline, fetch its latest changes before checking its code out:}(hYIn case you want to test mainline, fetch its latest changes before checking its code out:hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjubj*)}(hHgit fetch mainline git switch --discard-changes --detach mainline/masterh]hHgit fetch mainline git switch --discard-changes --detach mainline/master}(hhhjubah}(h]h ]h"]h$]h&]hhuh1j)hhhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubj)}(hXIn case you want to test a stable or longterm kernel, first add the branch holding the series you are interested in (6.2 in the example), unless you already did so earlier:: git remote set-branches --add stable linux-6.2.y Then fetch the latest changes and check out the latest version from the series:: git fetch stable git switch --discard-changes --detach stable/linux-6.2.y h](h)}(hIn case you want to test a stable or longterm kernel, first add the branch holding the series you are interested in (6.2 in the example), unless you already did so earlier::h]hIn case you want to test a stable or longterm kernel, first add the branch holding the series you are interested in (6.2 in the example), unless you already did so earlier:}(hIn case you want to test a stable or longterm kernel, first add the branch holding the series you are interested in (6.2 in the example), unless you already did so earlier:hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjubj*)}(h0git remote set-branches --add stable linux-6.2.yh]h0git remote set-branches --add stable linux-6.2.y}(hhhjubah}(h]h ]h"]h$]h&]hhuh1j)hhhMhjubh)}(hPThen fetch the latest changes and check out the latest version from the series::h]hOThen fetch the latest changes and check out the latest version from the series:}(hOThen fetch the latest changes and check out the latest version from the series:hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjubj*)}(hIgit fetch stable git switch --discard-changes --detach stable/linux-6.2.yh]hIgit fetch stable git switch --discard-changes --detach stable/linux-6.2.y}(hhhjubah}(h]h ]h"]h$]h&]hhuh1j)hhhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhhhMhjwubeh}(h]h ]h"]h$]h&]uh1jhjthhhNhNubj)}(hRCopy your kernel build configuration over:: cp ~/kernel-config-working .config h](h)}(h+Copy your kernel build configuration over::h]h*Copy your kernel build configuration over:}(h*Copy your kernel build configuration over:hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjubj*)}(h"cp ~/kernel-config-working .configh]h"cp ~/kernel-config-working .config}(hhhjubah}(h]h ]h"]h$]h&]hhuh1j)hhhMhjubeh}(h]h ]h"]h$]h&]uh1jhjthhhhhNubj)}(hXYour next step depends on what you want to do: * In case you just want to test the latest codebase, head to the next step, you are already all set. * In case you want to test if a revert fixes an issue, revert one or multiple changes by specifying their commit ids:: git revert --no-edit cafec0cacaca0 Now give that kernel a special tag to facilitates its identification and prevent accidentally overwriting another kernel:: ./scripts/config --set-str CONFIG_LOCALVERSION '-local-cafec0cacaca0-reverted' * In case you want to test a patch, store the patch in a file like '/tmp/foobars-proposed-fix-v1.patch' and apply it like this:: git apply /tmp/foobars-proposed-fix-v1.patch In case of multiple patches, repeat this step with the others. Now give that kernel a special tag to facilitates its identification and prevent accidentally overwriting another kernel:: ./scripts/config --set-str CONFIG_LOCALVERSION '-local-foobars-fix-v1' h](h)}(h.Your next step depends on what you want to do:h]h.Your next step depends on what you want to do:}(hj0hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj*ubj)}(hhh](j)}(hcIn case you just want to test the latest codebase, head to the next step, you are already all set. h]h)}(hbIn case you just want to test the latest codebase, head to the next step, you are already all set.h]hbIn case you just want to test the latest codebase, head to the next step, you are already all set.}(hjEhjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj?ubah}(h]h ]h"]h$]h&]uh1jhj<ubj)}(hXiIn case you want to test if a revert fixes an issue, revert one or multiple changes by specifying their commit ids:: git revert --no-edit cafec0cacaca0 Now give that kernel a special tag to facilitates its identification and prevent accidentally overwriting another kernel:: ./scripts/config --set-str CONFIG_LOCALVERSION '-local-cafec0cacaca0-reverted' h](h)}(htIn case you want to test if a revert fixes an issue, revert one or multiple changes by specifying their commit ids::h]hsIn case you want to test if a revert fixes an issue, revert one or multiple changes by specifying their commit ids:}(hsIn case you want to test if a revert fixes an issue, revert one or multiple changes by specifying their commit ids:hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjWubj*)}(h"git revert --no-edit cafec0cacaca0h]h"git revert --no-edit cafec0cacaca0}(hhhjjubah}(h]h ]h"]h$]h&]hhuh1j)hhhMhjWubh)}(hzNow give that kernel a special tag to facilitates its identification and prevent accidentally overwriting another kernel::h]hyNow give that kernel a special tag to facilitates its identification and prevent accidentally overwriting another kernel:}(hyNow give that kernel a special tag to facilitates its identification and prevent accidentally overwriting another kernel:hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjWubj*)}(hN./scripts/config --set-str CONFIG_LOCALVERSION '-local-cafec0cacaca0-reverted'h]hN./scripts/config --set-str CONFIG_LOCALVERSION '-local-cafec0cacaca0-reverted'}(hhhjubah}(h]h ]h"]h$]h&]hhuh1j)hhhMhjWubeh}(h]h ]h"]h$]h&]uh1jhj<ubj)}(hXIn case you want to test a patch, store the patch in a file like '/tmp/foobars-proposed-fix-v1.patch' and apply it like this:: git apply /tmp/foobars-proposed-fix-v1.patch In case of multiple patches, repeat this step with the others. Now give that kernel a special tag to facilitates its identification and prevent accidentally overwriting another kernel:: ./scripts/config --set-str CONFIG_LOCALVERSION '-local-foobars-fix-v1' h](h)}(h~In case you want to test a patch, store the patch in a file like '/tmp/foobars-proposed-fix-v1.patch' and apply it like this::h]hIn case you want to test a patch, store the patch in a file like ‘/tmp/foobars-proposed-fix-v1.patch’ and apply it like this:}(h}In case you want to test a patch, store the patch in a file like '/tmp/foobars-proposed-fix-v1.patch' and apply it like this:hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjub~j*)}(h,git apply /tmp/foobars-proposed-fix-v1.patchh]h,git apply /tmp/foobars-proposed-fix-v1.patch}(hhhjubah}(h]h ]h"]h$]h&]hhuh1j)hhhM hjubh)}(h>In case of multiple patches, repeat this step with the others.h]h>In case of multiple patches, repeat this step with the others.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM hjubh)}(hzNow give that kernel a special tag to facilitates its identification and prevent accidentally overwriting another kernel::h]hyNow give that kernel a special tag to facilitates its identification and prevent accidentally overwriting another kernel:}(hyNow give that kernel a special tag to facilitates its identification and prevent accidentally overwriting another kernel:hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM hjubj*)}(hF./scripts/config --set-str CONFIG_LOCALVERSION '-local-foobars-fix-v1'h]hF./scripts/config --set-str CONFIG_LOCALVERSION '-local-foobars-fix-v1'}(hhhjubah}(h]h ]h"]h$]h&]hhuh1j)hhhMhjubeh}(h]h ]h"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]jjuh1jhhhMhj*ubeh}(h]h ]h"]h$]h&]uh1jhjthhhNhNubj)}(hXBuild a kernel using the familiar commands, just without copying the kernel build configuration over, as that has been taken care of already:: make olddefconfig && make -j $(nproc --all) # * Check if the free space suffices holding another kernel: df -h /boot/ /lib/modules/ sudo make modules_install command -v installkernel && sudo make install make -s kernelrelease | tee -a ~/kernels-built reboot h](h)}(hBuild a kernel using the familiar commands, just without copying the kernel build configuration over, as that has been taken care of already::h]hBuild a kernel using the familiar commands, just without copying the kernel build configuration over, as that has been taken care of already:}(hBuild a kernel using the familiar commands, just without copying the kernel build configuration over, as that has been taken care of already:hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjubj*)}(hXmake olddefconfig && make -j $(nproc --all) # * Check if the free space suffices holding another kernel: df -h /boot/ /lib/modules/ sudo make modules_install command -v installkernel && sudo make install make -s kernelrelease | tee -a ~/kernels-built rebooth]hXmake olddefconfig && make -j $(nproc --all) # * Check if the free space suffices holding another kernel: df -h /boot/ /lib/modules/ sudo make modules_install command -v installkernel && sudo make install make -s kernelrelease | tee -a ~/kernels-built reboot}(hhhj ubah}(h]h ]h"]h$]h&]hhuh1j)hhhMhjubeh}(h]h ]h"]h$]h&]uh1jhjthhhhhNubj)}(h;Now verify you booted the newly built kernel and check it. h]h)}(h:Now verify you booted the newly built kernel and check it.h]h:Now verify you booted the newly built kernel and check it.}(hj&hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj ubah}(h]h ]h"]h$]h&]uh1jhjthhhhhNubeh}(h]h ]h"]h$]h&]jjuh1jhhhMhjUhhubh)}(h'[:ref:`details `]h](h[}(hjhj>hhhNhNubh)}(h%:ref:`details `h]j@)}(hjHh]hdetails}(hhhjJhhhNhNubah}(h]h ](jKstdstd-refeh"]h$]h&]uh1j?hjFubah}(h]h ]h"]h$]h&]refdocjX refdomainjTreftyperef refexplicitrefwarnj^introoptional_bisrefuh1hhhhM hj>ubh]}(hjhj>hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhM hjUhhubj)}(h.. _submit_improvements:h]h}(h]h ]h"]h$]h&]jsubmit-improvementsuh1jhM"hjUhhhhubeh}(h](/optional-test-reverts-patches-or-later-versionsjIeh ]h"](2optional: test reverts, patches, or later versionsintrooptional_bissbseh$]h&]uh1hhjhhhhhMj}jj?sj}jIj?subh)}(hhh](h)}(h Conclusionh]h Conclusion}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhM%ubh)}(h3You have reached the end of the step-by-step guide.h]h3You have reached the end of the step-by-step guide.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM'hjhhubh)}(hDid you run into trouble following any of the above steps not cleared up by the reference section below? Did you spot errors? Or do you have ideas how to improve the guide?h]hDid you run into trouble following any of the above steps not cleared up by the reference section below? Did you spot errors? Or do you have ideas how to improve the guide?}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM)hjhhubh)}(hXIf any of that applies, please take a moment and let the maintainer of this document know by email (Thorsten Leemhuis ), ideally while CCing the Linux docs mailing list (linux-doc@vger.kernel.org). Such feedback is vital to improve this text further, which is in everybody's interest, as it will enable more people to master the task described here -- and hopefully also improve similar guides inspired by this one.h](hwIf any of that applies, please take a moment and let the maintainer of this document know by email (Thorsten Leemhuis <}(hwIf any of that applies, please take a moment and let the maintainer of this document know by email (Thorsten Leemhuis ), ideally while CCing the Linux docs mailing list (}(h5>), ideally while CCing the Linux docs mailing list (hjhhhNhNubjT)}(hlinux-doc@vger.kernel.orgh]hlinux-doc@vger.kernel.org}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]refuri mailto:linux-doc@vger.kernel.orguh1jShjubh). Such feedback is vital to improve this text further, which is in everybody’s interest, as it will enable more people to master the task described here -- and hopefully also improve similar guides inspired by this one.}(h). Such feedback is vital to improve this text further, which is in everybody's interest, as it will enable more people to master the task described here -- and hopefully also improve similar guides inspired by this one.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhM-hjhhubeh}(h]( conclusionjzeh ]h"]( conclusionsubmit_improvementseh$]h&]uh1hhjhhhhhM%j}jjpsj}jzjpsubeh}(h](?step-by-step-guide-on-how-to-verify-bugs-and-bisect-regressionsjeh ]h"](?step-by-step guide on how to verify bugs and bisect regressionsintroguide_bissbseh$]h&]uh1hhhhhhhhKj}jjsj}jjsubh)}(hhh](h)}(h,Reference section for the step-by-step guideh]h,Reference section for the step-by-step guide}(hj hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hhhhhM6ubh)}(hcThis section holds additional information for almost all the items in the above step-by-step guide.h]hcThis section holds additional information for almost all the items in the above step-by-step guide.}(hj hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM8hj hhubh)}(hhh](h)}(h*Preparations for building your own kernelsh]h*Preparations for building your own kernels}(hj& hj$ hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj! hhhhhM<ubj)}(hhh]h)}(he*The steps in this section lay the groundwork for all further tests.* [:ref:`... `]h](j')}(hE*The steps in this section lay the groundwork for all further tests.*h]hCThe steps in this section lay the groundwork for all further tests.}(hhhj9 hhhNhNubah}(h]h ]h"]h$]h&]uh1j&hj5 ubh [}(h [hj5 hhhNhNubh)}(h:ref:`... `h]j@)}(hjN h]h...}(hhhjP hhhNhNubah}(h]h ](jKstdstd-refeh"]h$]h&]uh1j?hjL ubah}(h]h ]h"]h$]h&]refdocjX refdomainjZ reftyperef refexplicitrefwarnj^introprep_bissbsuh1hhhhM>hj5 ubh]}(hjhj5 hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhM>hj2 ubah}(h]h ]h"]h$]h&]uh1jhj! hhhhhNubh)}(hMThe steps in all later sections of this guide depend on those described here.h]hMThe steps in all later sections of this guide depend on those described here.}(hj~ hj| hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMAhj! hhubh)}(h7[:ref:`back to step-by-step guide `].h](h[}(hjhj hhhNhNubh)}(h4:ref:`back to step-by-step guide `h]j@)}(hj h]hback to step-by-step guide}(hhhj hhhNhNubah}(h]h ](jKstdstd-refeh"]h$]h&]uh1j?hj ubah}(h]h ]h"]h$]h&]refdocjX refdomainj reftyperef refexplicitrefwarnj^introprep_bissbsuh1hhhhMChj ubh].}(h].hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMChj! hhubj)}(h.. _backup_bisref:h]h}(h]h ]h"]h$]h&]j backup-bisrefuh1jhMEhj! hhhhubh)}(hhh](h)}(hPrepare for emergenciesh]hPrepare for emergencies}(hj hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hhhhhMHubj)}(hhh]h)}(he*Create a fresh backup and put system repair and restore tools at hand.* [:ref:`... `]h](j')}(hH*Create a fresh backup and put system repair and restore tools at hand.*h]hFCreate a fresh backup and put system repair and restore tools at hand.}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1j&hj ubh [}(h [hj hhhNhNubh)}(h:ref:`... `h]j@)}(hj h]h...}(hhhj hhhNhNubah}(h]h ](jKstdstd-refeh"]h$]h&]uh1j?hj ubah}(h]h ]h"]h$]h&]refdocjX refdomainj!reftyperef refexplicitrefwarnj^ backup_bissbsuh1hhhhMJhj ubh]}(hjhj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMJhj ubah}(h]h ]h"]h$]h&]uh1jhj hhhhhNubh)}(hX*Remember, you are dealing with computers, which sometimes do unexpected things -- especially if you fiddle with crucial parts like the kernel of an operating system. That's what you are about to do in this process. Hence, better prepare for something going sideways, even if that should not happen.h]hX,Remember, you are dealing with computers, which sometimes do unexpected things -- especially if you fiddle with crucial parts like the kernel of an operating system. That’s what you are about to do in this process. Hence, better prepare for something going sideways, even if that should not happen.}(hj%!hj#!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMMhj hhubh)}(h3[:ref:`back to step-by-step guide `]h](h[}(hjhj1!hhhNhNubh)}(h1:ref:`back to step-by-step guide `h]j@)}(hj;!h]hback to step-by-step guide}(hhhj=!hhhNhNubah}(h]h ](jKstdstd-refeh"]h$]h&]uh1j?hj9!ubah}(h]h ]h"]h$]h&]refdocjX refdomainjG!reftyperef refexplicitrefwarnj^ backup_bissbsuh1hhhhMRhj1!ubh]}(hjhj1!hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMRhj hhubj)}(h.. _vanilla_bisref:h]h}(h]h ]h"]h$]h&]jvanilla-bisrefuh1jhMThj hhhhubeh}(h](prepare-for-emergenciesj eh ]h"](prepare for emergencies backup_bisrefeh$]h&]uh1hhj! hhhhhMHj}jt!j sj}j j subh)}(hhh](h)}(h?Remove anything related to externally maintained kernel modulesh]h?Remove anything related to externally maintained kernel modules}(hj~!hj|!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjy!hhhhhMWubj)}(hhh]h)}(h*Remove all software that depends on externally developed kernel drivers or builds them automatically.* [:ref:`...`]h](j')}(hg*Remove all software that depends on externally developed kernel drivers or builds them automatically.*h]heRemove all software that depends on externally developed kernel drivers or builds them automatically.}(hhhj!hhhNhNubah}(h]h ]h"]h$]h&]uh1j&hj!ubh [}(h [hj!hhhNhNubh)}(h:ref:`...`h]j@)}(hj!h]h...}(hhhj!hhhNhNubah}(h]h ](jKstdstd-refeh"]h$]h&]uh1j?hj!ubah}(h]h ]h"]h$]h&]refdocjX refdomainj!reftyperef refexplicitrefwarnj^vanilla_bissbsuh1hhhhMYhj!ubh]}(hjhj!hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMYhj!ubah}(h]h ]h"]h$]h&]uh1jhjy!hhhhhNubh)}(hPExternally developed kernel modules can easily cause trouble during a bisection.h]hPExternally developed kernel modules can easily cause trouble during a bisection.}(hj!hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM\hjy!hhubh)}(hXKBut there is a more important reason why this guide contains this step: most kernel developers will not care about reports about regressions occurring with kernels that utilize such modules. That's because such kernels are not considered 'vanilla' anymore, as Documentation/admin-guide/reporting-issues.rst explains in more detail.h]hXQBut there is a more important reason why this guide contains this step: most kernel developers will not care about reports about regressions occurring with kernels that utilize such modules. That’s because such kernels are not considered ‘vanilla’ anymore, as Documentation/admin-guide/reporting-issues.rst explains in more detail.}(hj!hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM^hjy!hhubh)}(h4[:ref:`back to step-by-step guide `]h](h[}(hjhj!hhhNhNubh)}(h2:ref:`back to step-by-step guide `h]j@)}(hj!h]hback to step-by-step guide}(hhhj!hhhNhNubah}(h]h ](jKstdstd-refeh"]h$]h&]uh1j?hj!ubah}(h]h ]h"]h$]h&]refdocjX refdomainj"reftyperef refexplicitrefwarnj^vanilla_bissbsuh1hhhhMdhj!ubh]}(hjhj!hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMdhjy!hhubj)}(h.. _secureboot_bisref:h]h}(h]h ]h"]h$]h&]jsecureboot-bisrefuh1jhMfhjy!hhhhubeh}(h](?remove-anything-related-to-externally-maintained-kernel-modulesjm!eh ]h"](?remove anything related to externally maintained kernel modulesvanilla_bisrefeh$]h&]uh1hhj! hhhhhMWj}j3"jc!sj}jm!jc!subh)}(hhh](h)}(h%Deal with techniques like Secure Booth]h%Deal with techniques like Secure Boot}(hj="hj;"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj8"hhhhhMiubj)}(hhh]h)}(h*On platforms with 'Secure Boot' or similar techniques, prepare everything to ensure the system will permit your self-compiled kernel to boot later.* [:ref:`... `]h](j')}(h*On platforms with 'Secure Boot' or similar techniques, prepare everything to ensure the system will permit your self-compiled kernel to boot later.*h]hOn platforms with ‘Secure Boot’ or similar techniques, prepare everything to ensure the system will permit your self-compiled kernel to boot later.}(hhhjP"hhhNhNubah}(h]h ]h"]h$]h&]uh1j&hjL"ubh [}(h [hjL"hhhNhNubh)}(h:ref:`... `h]j@)}(hje"h]h...}(hhhjg"hhhNhNubah}(h]h ](jKstdstd-refeh"]h$]h&]uh1j?hjc"ubah}(h]h ]h"]h$]h&]refdocjX refdomainjq"reftyperef refexplicitrefwarnj^secureboot_bissbsuh1hhhhMkhjL"ubh]}(hjhjL"hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMkhjI"ubah}(h]h ]h"]h$]h&]uh1jhj8"hhhhhNubh)}(hMany modern systems allow only certain operating systems to start; that's why they reject booting self-compiled kernels by default.h]hMany modern systems allow only certain operating systems to start; that’s why they reject booting self-compiled kernels by default.}(hj"hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMohj8"hhubh)}(hXbYou ideally deal with this by making your platform trust your self-built kernels with the help of a certificate. How to do that is not described here, as it requires various steps that would take the text too far away from its purpose; 'Documentation/admin-guide/module-signing.rst' and various web sides already explain everything needed in more detail.h]hXfYou ideally deal with this by making your platform trust your self-built kernels with the help of a certificate. How to do that is not described here, as it requires various steps that would take the text too far away from its purpose; ‘Documentation/admin-guide/module-signing.rst’ and various web sides already explain everything needed in more detail.}(hj"hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMrhj8"hhubh)}(hXTemporarily disabling solutions like Secure Boot is another way to make your own Linux boot. On commodity x86 systems it is possible to do this in the BIOS Setup utility; the required steps vary a lot between machines and therefore cannot be described here.h]hXTemporarily disabling solutions like Secure Boot is another way to make your own Linux boot. On commodity x86 systems it is possible to do this in the BIOS Setup utility; the required steps vary a lot between machines and therefore cannot be described here.}(hj"hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMxhj8"hhubh)}(hX)On mainstream x86 Linux distributions there is a third and universal option: disable all Secure Boot restrictions for your Linux environment. You can initiate this process by running ``mokutil --disable-validation``; this will tell you to create a one-time password, which is safe to write down. Now restart; right after your BIOS performed all self-tests the bootloader Shim will show a blue box with a message 'Press any key to perform MOK management'. Hit some key before the countdown exposes, which will open a menu. Choose 'Change Secure Boot state'. Shim's 'MokManager' will now ask you to enter three randomly chosen characters from the one-time password specified earlier. Once you provided them, confirm you really want to disable the validation. Afterwards, permit MokManager to reboot the machine.h](hOn mainstream x86 Linux distributions there is a third and universal option: disable all Secure Boot restrictions for your Linux environment. You can initiate this process by running }(hOn mainstream x86 Linux distributions there is a third and universal option: disable all Secure Boot restrictions for your Linux environment. You can initiate this process by running hj"hhhNhNubj5)}(h ``mokutil --disable-validation``h]hmokutil --disable-validation}(hhhj"hhhNhNubah}(h]h ]h"]h$]h&]uh1j4hj"ubhX`; this will tell you to create a one-time password, which is safe to write down. Now restart; right after your BIOS performed all self-tests the bootloader Shim will show a blue box with a message ‘Press any key to perform MOK management’. Hit some key before the countdown exposes, which will open a menu. Choose ‘Change Secure Boot state’. Shim’s ‘MokManager’ will now ask you to enter three randomly chosen characters from the one-time password specified earlier. Once you provided them, confirm you really want to disable the validation. Afterwards, permit MokManager to reboot the machine.}(hXR; this will tell you to create a one-time password, which is safe to write down. Now restart; right after your BIOS performed all self-tests the bootloader Shim will show a blue box with a message 'Press any key to perform MOK management'. Hit some key before the countdown exposes, which will open a menu. Choose 'Change Secure Boot state'. Shim's 'MokManager' will now ask you to enter three randomly chosen characters from the one-time password specified earlier. Once you provided them, confirm you really want to disable the validation. Afterwards, permit MokManager to reboot the machine.hj"hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhM}hj8"hhubh)}(h7[:ref:`back to step-by-step guide `]h](h[}(hjhj"hhhNhNubh)}(h5:ref:`back to step-by-step guide `h]j@)}(hj"h]hback to step-by-step guide}(hhhj"hhhNhNubah}(h]h ](jKstdstd-refeh"]h$]h&]uh1j?hj"ubah}(h]h ]h"]h$]h&]refdocjX refdomainj"reftyperef refexplicitrefwarnj^secureboot_bissbsuh1hhhhMhj"ubh]}(hjhj"hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhj8"hhubj)}(h.. _bootworking_bisref:h]h}(h]h ]h"]h$]h&]jbootworking-bisrefuh1jhMhj8"hhhhubeh}(h](%deal-with-techniques-like-secure-bootj,"eh ]h"](%deal with techniques like secure bootsecureboot_bisrefeh$]h&]uh1hhj! hhhhhMij}j"#j""sj}j,"j""subh)}(hhh](h)}(h%Boot the last kernel that was workingh]h%Boot the last kernel that was working}(hj,#hj*#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj'#hhhhhMubj)}(hhh]h)}(h*Boot into the last working kernel and briefly recheck if the feature that regressed really works.* [:ref:`...`]h](j')}(hc*Boot into the last working kernel and briefly recheck if the feature that regressed really works.*h]haBoot into the last working kernel and briefly recheck if the feature that regressed really works.}(hhhj?#hhhNhNubah}(h]h ]h"]h$]h&]uh1j&hj;#ubh [}(h [hj;#hhhNhNubh)}(h:ref:`...`h]j@)}(hjT#h]h...}(hhhjV#hhhNhNubah}(h]h ](jKstdstd-refeh"]h$]h&]uh1j?hjR#ubah}(h]h ]h"]h$]h&]refdocjX refdomainj`#reftyperef refexplicitrefwarnj^bootworking_bissbsuh1hhhhMhj;#ubh]}(hjhj;#hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhj8#ubah}(h]h ]h"]h$]h&]uh1jhj'#hhhhhNubh)}(haThis will make later steps that cover creating and trimming the configuration do the right thing.h]haThis will make later steps that cover creating and trimming the configuration do the right thing.}(hj#hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj'#hhubh)}(h8[:ref:`back to step-by-step guide `]h](h[}(hjhj#hhhNhNubh)}(h6:ref:`back to step-by-step guide `h]j@)}(hj#h]hback to step-by-step guide}(hhhj#hhhNhNubah}(h]h ](jKstdstd-refeh"]h$]h&]uh1j?hj#ubah}(h]h ]h"]h$]h&]refdocjX refdomainj#reftyperef refexplicitrefwarnj^bootworking_bissbsuh1hhhhMhj#ubh]}(hjhj#hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhj'#hhubj)}(h.. _diskspace_bisref:h]h}(h]h ]h"]h$]h&]jdiskspace-bisrefuh1jhMhj'#hhhhubeh}(h](%boot-the-last-kernel-that-was-workingj#eh ]h"](%boot the last kernel that was workingbootworking_bisrefeh$]h&]uh1hhj! hhhhhMj}j#j#sj}j#j#subh)}(hhh](h)}(hSpace requirementsh]hSpace requirements}(hj#hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj#hhhhhMubj)}(hhh]h)}(hV*Ensure to have enough free space for building Linux.* [:ref:`... `]h](j')}(h6*Ensure to have enough free space for building Linux.*h]h4Ensure to have enough free space for building Linux.}(hhhj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j&hj#ubh [}(h [hj#hhhNhNubh)}(h:ref:`... `h]j@)}(hj$h]h...}(hhhj$hhhNhNubah}(h]h ](jKstdstd-refeh"]h$]h&]uh1j?hj$ubah}(h]h ]h"]h$]h&]refdocjX refdomainj$reftyperef refexplicitrefwarnj^diskspace_bissbsuh1hhhhMhj#ubh]}(hjhj#hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhj#ubah}(h]h ]h"]h$]h&]uh1jhj#hhhhhNubh)}(hvThe numbers mentioned are rough estimates with a big extra charge to be on the safe side, so often you will need less.h]hvThe numbers mentioned are rough estimates with a big extra charge to be on the safe side, so often you will need less.}(hj5$hj3$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj#hhubh)}(hX If you have space constraints, be sure to hay attention to the :ref:`step about debug symbols' ` and its :ref:`accompanying reference section' `, as disabling then will reduce the consumed disk space by quite a few gigabytes.h](h?If you have space constraints, be sure to hay attention to the }(h?If you have space constraints, be sure to hay attention to the hjA$hhhNhNubh)}(h6:ref:`step about debug symbols' `h]j@)}(hjL$h]hstep about debug symbols’}(hhhjN$hhhNhNubah}(h]h ](jKstdstd-refeh"]h$]h&]uh1j?hjJ$ubah}(h]h ]h"]h$]h&]refdocjX refdomainjX$reftyperef refexplicitrefwarnj^debugsymbols_bissbsuh1hhhhMhjA$ubh and its }(h and its hjA$hhhNhNubh)}(h<:ref:`accompanying reference section' `h]j@)}(hjq$h]h!accompanying reference section’}(hhhjs$hhhNhNubah}(h]h ](jKstdstd-refeh"]h$]h&]uh1j?hjo$ubah}(h]h ]h"]h$]h&]refdocjX refdomainj}$reftyperef refexplicitrefwarnj^debugsymbols_bisrefuh1hhhhMhjA$ubhQ, as disabling then will reduce the consumed disk space by quite a few gigabytes.}(hQ, as disabling then will reduce the consumed disk space by quite a few gigabytes.hjA$hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhj#hhubh)}(h6[:ref:`back to step-by-step guide `]h](h[}(hjhj$hhhNhNubh)}(h4:ref:`back to step-by-step guide `h]j@)}(hj$h]hback to step-by-step guide}(hhhj$hhhNhNubah}(h]h ](jKstdstd-refeh"]h$]h&]uh1j?hj$ubah}(h]h ]h"]h$]h&]refdocjX refdomainj$reftyperef refexplicitrefwarnj^diskspace_bissbsuh1hhhhMhj$ubh]}(hjhj$hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhj#hhubj)}(h.. _rangecheck_bisref:h]h}(h]h ]h"]h$]h&]jrangecheck-bisrefuh1jhMhj#hhhhubeh}(h](space-requirementsj#eh ]h"](space requirementsdiskspace_bisrefeh$]h&]uh1hhj! hhhhhMj}j$j#sj}j#j#subh)}(hhh](h)}(hBisection rangeh]hBisection range}(hj$hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj$hhhhhMubj)}(hhh]h)}(hr*Determine the kernel versions considered 'good' and 'bad' throughout this guide.* [:ref:`...`]h](j')}(hR*Determine the kernel versions considered 'good' and 'bad' throughout this guide.*h]hXDetermine the kernel versions considered ‘good’ and ‘bad’ throughout this guide.}(hhhj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j&hj$ubh [}(h [hj$hhhNhNubh)}(h:ref:`...`h]j@)}(hj%h]h...}(hhhj%hhhNhNubah}(h]h ](jKstdstd-refeh"]h$]h&]uh1j?hj %ubah}(h]h ]h"]h$]h&]refdocjX refdomainj%reftyperef refexplicitrefwarnj^rangecheck_bissbsuh1hhhhMhj$ubh]}(hjhj$hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhj$ubah}(h]h ]h"]h$]h&]uh1jhj$hhhhhNubh)}(hX2Establishing the range of commits to be checked is mostly straightforward, except when a regression occurred when switching from a release of one stable series to a release of a later series (e.g. from 6.0.13 to 6.1.5). In that case Git will need some hand holding, as there is no straight line of descent.h]hX2Establishing the range of commits to be checked is mostly straightforward, except when a regression occurred when switching from a release of one stable series to a release of a later series (e.g. from 6.0.13 to 6.1.5). In that case Git will need some hand holding, as there is no straight line of descent.}(hj?%hj=%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj$hhubh)}(hXThat's because with the release of 6.0 mainline carried on to 6.1 while the stable series 6.0.y branched to the side. It's therefore theoretically possible that the issue you face with 6.1.5 only worked in 6.0.13, as it was fixed by a commit that went into one of the 6.0.y releases, but never hit mainline or the 6.1.y series. Thankfully that normally should not happen due to the way the stable/longterm maintainers maintain the code. It's thus pretty safe to assume 6.0 as a 'good' kernel. That assumption will be tested anyway, as that kernel will be built and tested in the segment '2' of this guide; Git would force you to do this as well, if you tried bisecting between 6.0.13 and 6.1.15.h]hXThat’s because with the release of 6.0 mainline carried on to 6.1 while the stable series 6.0.y branched to the side. It’s therefore theoretically possible that the issue you face with 6.1.5 only worked in 6.0.13, as it was fixed by a commit that went into one of the 6.0.y releases, but never hit mainline or the 6.1.y series. Thankfully that normally should not happen due to the way the stable/longterm maintainers maintain the code. It’s thus pretty safe to assume 6.0 as a ‘good’ kernel. That assumption will be tested anyway, as that kernel will be built and tested in the segment ‘2’ of this guide; Git would force you to do this as well, if you tried bisecting between 6.0.13 and 6.1.15.}(hjM%hjK%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj$hhubh)}(h7[:ref:`back to step-by-step guide `]h](h[}(hjhjY%hhhNhNubh)}(h5:ref:`back to step-by-step guide `h]j@)}(hjc%h]hback to step-by-step guide}(hhhje%hhhNhNubah}(h]h ](jKstdstd-refeh"]h$]h&]uh1j?hja%ubah}(h]h ]h"]h$]h&]refdocjX refdomainjo%reftyperef refexplicitrefwarnj^rangecheck_bissbsuh1hhhhMhjY%ubh]}(hjhjY%hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhj$hhubj)}(h.. _buildrequires_bisref:h]h}(h]h ]h"]h$]h&]jbuildrequires-bisrefuh1jhMhj$hhhhubeh}(h](bisection-rangej$eh ]h"](bisection rangerangecheck_bisrefeh$]h&]uh1hhj! hhhhhMj}j%j$sj}j$j$subh)}(hhh](h)}(hInstall build requirementsh]hInstall build requirements}(hj%hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj%hhhhhMubj)}(hhh]h)}(h[*Install all software required to build a Linux kernel.* [:ref:`...`]h](j')}(h8*Install all software required to build a Linux kernel.*h]h6Install all software required to build a Linux kernel.}(hhhj%hhhNhNubah}(h]h ]h"]h$]h&]uh1j&hj%ubh [}(h [hj%hhhNhNubh)}(h :ref:`...`h]j@)}(hj%h]h...}(hhhj%hhhNhNubah}(h]h ](jKstdstd-refeh"]h$]h&]uh1j?hj%ubah}(h]h ]h"]h$]h&]refdocjX refdomainj%reftyperef refexplicitrefwarnj^buildrequires_bissbsuh1hhhhMhj%ubh]}(hjhj%hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhj%ubah}(h]h ]h"]h$]h&]uh1jhj%hhhhhNubh)}(hThe kernel is pretty stand-alone, but besides tools like the compiler you will sometimes need a few libraries to build one. How to install everything needed depends on your Linux distribution and the configuration of the kernel you are about to build.h]hThe kernel is pretty stand-alone, but besides tools like the compiler you will sometimes need a few libraries to build one. How to install everything needed depends on your Linux distribution and the configuration of the kernel you are about to build.}(hj%hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj%hhubh)}(hQHere are a few examples what you typically need on some mainstream distributions:h]hQHere are a few examples what you typically need on some mainstream distributions:}(hj &hj &hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj%hhubj)}(hhh](j)}(hArch Linux and derivatives:: sudo pacman --needed -S bc binutils bison flex gcc git kmod libelf openssl \ pahole perl zlib ncurses qt6-base h](h)}(hArch Linux and derivatives::h]hArch Linux and derivatives:}(hArch Linux and derivatives:hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj&ubj*)}(hpsudo pacman --needed -S bc binutils bison flex gcc git kmod libelf openssl \ pahole perl zlib ncurses qt6-baseh]hpsudo pacman --needed -S bc binutils bison flex gcc git kmod libelf openssl \ pahole perl zlib ncurses qt6-base}(hhhj.&ubah}(h]h ]h"]h$]h&]hhuh1j)hhhMhj&ubeh}(h]h ]h"]h$]h&]uh1jhj&hhhhhNubj)}(hDebian, Ubuntu, and derivatives:: sudo apt install bc binutils bison dwarves flex gcc git kmod libelf-dev \ libssl-dev make openssl pahole perl-base pkg-config zlib1g-dev \ libncurses-dev qt6-base-dev g++ h](h)}(h!Debian, Ubuntu, and derivatives::h]h Debian, Ubuntu, and derivatives:}(h Debian, Ubuntu, and derivatives:hjF&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjB&ubj*)}(hsudo apt install bc binutils bison dwarves flex gcc git kmod libelf-dev \ libssl-dev make openssl pahole perl-base pkg-config zlib1g-dev \ libncurses-dev qt6-base-dev g++h]hsudo apt install bc binutils bison dwarves flex gcc git kmod libelf-dev \ libssl-dev make openssl pahole perl-base pkg-config zlib1g-dev \ libncurses-dev qt6-base-dev g++}(hhhjU&ubah}(h]h ]h"]h$]h&]hhuh1j)hhhMhjB&ubeh}(h]h ]h"]h$]h&]uh1jhj&hhhhhNubj)}(hFedora and derivatives:: sudo dnf install binutils \ /usr/bin/{bc,bison,flex,gcc,git,openssl,make,perl,pahole,rpmbuild} \ /usr/include/{libelf.h,openssl/pkcs7.h,zlib.h,ncurses.h,qt6/QtGui/QAction} h](h)}(hFedora and derivatives::h]hFedora and derivatives:}(hFedora and derivatives:hjm&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhji&ubj*)}(hsudo dnf install binutils \ /usr/bin/{bc,bison,flex,gcc,git,openssl,make,perl,pahole,rpmbuild} \ /usr/include/{libelf.h,openssl/pkcs7.h,zlib.h,ncurses.h,qt6/QtGui/QAction}h]hsudo dnf install binutils \ /usr/bin/{bc,bison,flex,gcc,git,openssl,make,perl,pahole,rpmbuild} \ /usr/include/{libelf.h,openssl/pkcs7.h,zlib.h,ncurses.h,qt6/QtGui/QAction}}(hhhj|&ubah}(h]h ]h"]h$]h&]hhuh1j)hhhMhji&ubeh}(h]h ]h"]h$]h&]uh1jhj&hhhhhNubj)}(hopenSUSE and derivatives:: sudo zypper install bc binutils bison dwarves flex gcc git \ kernel-install-tools libelf-devel make modutils openssl openssl-devel \ perl-base zlib-devel rpm-build ncurses-devel qt6-base-devel h](h)}(hopenSUSE and derivatives::h]hopenSUSE and derivatives:}(hopenSUSE and derivatives:hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj&ubj*)}(hsudo zypper install bc binutils bison dwarves flex gcc git \ kernel-install-tools libelf-devel make modutils openssl openssl-devel \ perl-base zlib-devel rpm-build ncurses-devel qt6-base-develh]hsudo zypper install bc binutils bison dwarves flex gcc git \ kernel-install-tools libelf-devel make modutils openssl openssl-devel \ perl-base zlib-devel rpm-build ncurses-devel qt6-base-devel}(hhhj&ubah}(h]h ]h"]h$]h&]hhuh1j)hhhMhj&ubeh}(h]h ]h"]h$]h&]uh1jhj&hhhhhNubeh}(h]h ]h"]h$]h&]jjuh1jhhhMhj%hhubh)}(hXThese commands install a few packages that are often, but not always needed. You for example might want to skip installing the development headers for ncurses, which you will only need in case you later might want to adjust the kernel build configuration using make the targets 'menuconfig' or 'nconfig'; likewise omit the headers of Qt6 if you do not plan to adjust the .config using 'xconfig'.h]hXThese commands install a few packages that are often, but not always needed. You for example might want to skip installing the development headers for ncurses, which you will only need in case you later might want to adjust the kernel build configuration using make the targets ‘menuconfig’ or ‘nconfig’; likewise omit the headers of Qt6 if you do not plan to adjust the .config using ‘xconfig’.}(hj&hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj%hhubh)}(hYou furthermore might need additional libraries and their development headers for tasks not covered in this guide -- for example when building utilities from the kernel's tools/ directory.h]hYou furthermore might need additional libraries and their development headers for tasks not covered in this guide -- for example when building utilities from the kernel’s tools/ directory.}(hj&hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj%hhubh)}(h:[:ref:`back to step-by-step guide `]h](h[}(hjhj&hhhNhNubh)}(h8:ref:`back to step-by-step guide `h]j@)}(hj&h]hback to step-by-step guide}(hhhj&hhhNhNubah}(h]h ](jKstdstd-refeh"]h$]h&]uh1j?hj&ubah}(h]h ]h"]h$]h&]refdocjX refdomainj&reftyperef refexplicitrefwarnj^buildrequires_bissbsuh1hhhhMhj&ubh]}(hjhj&hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhj%hhubj)}(h.. _sources_bisref:h]h}(h]h ]h"]h$]h&]jsources-bisrefuh1jhMhj%hhhhubeh}(h](install-build-requirementsj%eh ]h"](install build requirementsbuildrequires_bisrefeh$]h&]uh1hhj! hhhhhMj}j'j%sj}j%j%subh)}(hhh](h)}(hDownload the sources using Gith]hDownload the sources using Git}(hj&'hj$'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj!'hhhhhMubj)}(hhh]h)}(hC*Retrieve the Linux mainline sources.* [:ref:`...`]h](j')}(h&*Retrieve the Linux mainline sources.*h]h$Retrieve the Linux mainline sources.}(hhhj9'hhhNhNubah}(h]h ]h"]h$]h&]uh1j&hj5'ubh [}(h [hj5'hhhNhNubh)}(h:ref:`...`h]j@)}(hjN'h]h...}(hhhjP'hhhNhNubah}(h]h ](jKstdstd-refeh"]h$]h&]uh1j?hjL'ubah}(h]h ]h"]h$]h&]refdocjX refdomainjZ'reftyperef refexplicitrefwarnj^sources_bissbsuh1hhhhMhj5'ubh]}(hjhj5'hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhj2'ubah}(h]h ]h"]h$]h&]uh1jhj!'hhhhhNubh)}(hThe step-by-step guide outlines how to download the Linux sources using a full Git clone of Linus' mainline repository. There is nothing more to say about that -- but there are two alternatives ways to retrieve the sources that might work better for you:h]hXThe step-by-step guide outlines how to download the Linux sources using a full Git clone of Linus’ mainline repository. There is nothing more to say about that -- but there are two alternatives ways to retrieve the sources that might work better for you:}(hj~'hj|'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj!'hhubj)}(hhh](j)}(hlIf you have an unreliable internet connection, consider :ref:`using a 'Git bundle'`. h]h)}(hkIf you have an unreliable internet connection, consider :ref:`using a 'Git bundle'`.h](h8If you have an unreliable internet connection, consider }(h8If you have an unreliable internet connection, consider hj'hhhNhNubh)}(h2:ref:`using a 'Git bundle'`h]j@)}(hj'h]husing a ‘Git bundle’}(hhhj'hhhNhNubah}(h]h ](jKstdstd-refeh"]h$]h&]uh1j?hj'ubah}(h]h ]h"]h$]h&]refdocjX refdomainj'reftyperef refexplicitrefwarnj^sources_bundle_bisrefuh1hhhhMhj'ubh.}(hj$hj'hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhj'ubah}(h]h ]h"]h$]h&]uh1jhj'hhhhhNubj)}(hIf downloading the complete repository would take too long or requires too much storage space, consider :ref:`using a 'shallow clone'`. h]h)}(hIf downloading the complete repository would take too long or requires too much storage space, consider :ref:`using a 'shallow clone'`.h](hhIf downloading the complete repository would take too long or requires too much storage space, consider }(hhIf downloading the complete repository would take too long or requires too much storage space, consider hj'hhhNhNubh)}(h6:ref:`using a 'shallow clone'`h]j@)}(hj'h]husing a ‘shallow clone’}(hhhj'hhhNhNubah}(h]h ](jKstdstd-refeh"]h$]h&]uh1j?hj'ubah}(h]h ]h"]h$]h&]refdocjX refdomainj'reftyperef refexplicitrefwarnj^sources_shallow_bisrefuh1hhhhMhj'ubh.}(hj$hj'hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhj'ubah}(h]h ]h"]h$]h&]uh1jhj'hhhhhNubeh}(h]h ]h"]h$]h&]jjuh1jhhhMhj!'hhubj)}(h.. _sources_bundle_bisref:h]h}(h]h ]h"]h$]h&]jsources-bundle-bisrefuh1jhM hj!'hhhhubh)}(hhh](h)}(h1Downloading Linux mainline sources using a bundleh]h1Downloading Linux mainline sources using a bundle}(hj(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj(hhhhhM ubh)}(hRUse the following commands to retrieve the Linux mainline sources using a bundle::h]hQUse the following commands to retrieve the Linux mainline sources using a bundle:}(hQUse the following commands to retrieve the Linux mainline sources using a bundle:hj)(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj(hhubj*)}(hXwget -c \ https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/clone.bundle git clone --no-checkout clone.bundle ~/linux/ cd ~/linux/ git remote remove origin git remote add mainline \ https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git git fetch mainline git remote add -t master stable \ https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.gith]hXwget -c \ https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/clone.bundle git clone --no-checkout clone.bundle ~/linux/ cd ~/linux/ git remote remove origin git remote add mainline \ https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git git fetch mainline git remote add -t master stable \ https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git}(hhhj8(ubah}(h]h ]h"]h$]h&]hhuh1j)hhhMhj(hhubh)}(hXIn case the 'wget' command fails, just re-execute it, it will pick up where it left off.h]h\In case the ‘wget’ command fails, just re-execute it, it will pick up where it left off.}(hjH(hjF(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj(hhubh)}(hd[:ref:`back to step-by-step guide `] [:ref:`back to section intro `]h](h[}(hjhjT(hhhNhNubh)}(h2:ref:`back to step-by-step guide `h]j@)}(hj^(h]hback to step-by-step guide}(hhhj`(hhhNhNubah}(h]h ](jKstdstd-refeh"]h$]h&]uh1j?hj\(ubah}(h]h ]h"]h$]h&]refdocjX refdomainjj(reftyperef refexplicitrefwarnj^sources_bissbsuh1hhhhM hjT(ubh] [}(h] [hjT(hhhNhNubh)}(h-:ref:`back to section intro `h]j@)}(hj(h]hback to section intro}(hhhj(hhhNhNubah}(h]h ](jKstdstd-refeh"]h$]h&]uh1j?hj(ubah}(h]h ]h"]h$]h&]refdocjX refdomainj(reftyperef refexplicitrefwarnj^sources_bisrefuh1hhhhM hjT(ubh]}(hjhjT(hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhM hj(hhubj)}(h.. _sources_shallow_bisref:h]h}(h]h ]h"]h$]h&]jsources-shallow-bisrefuh1jhM#hj(hhhhubeh}(h](1downloading-linux-mainline-sources-using-a-bundlej(eh ]h"](1downloading linux mainline sources using a bundlesources_bundle_bisrefeh$]h&]uh1hhj!'hhhhhM j}j(j (sj}j(j (subeh}(h](download-the-sources-using-gitj'eh ]h"](download the sources using gitsources_bisrefeh$]h&]uh1hhj! hhhhhMj}j(j 'sj}j'j 'subh)}(hhh](h)}(h8Downloading Linux mainline sources using a shallow cloneh]h8Downloading Linux mainline sources using a shallow clone}(hj(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj(hhhhhM&ubh)}(hOFirst, execute the following command to retrieve the latest mainline codebase::h]hNFirst, execute the following command to retrieve the latest mainline codebase:}(hNFirst, execute the following command to retrieve the latest mainline codebase:hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM(hj(hhubj*)}(hgit clone -o mainline --no-checkout --depth 1 -b master \ https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git ~/linux/ cd ~/linux/ git remote add -t master stable \ https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.gith]hgit clone -o mainline --no-checkout --depth 1 -b master \ https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git ~/linux/ cd ~/linux/ git remote add -t master stable \ https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git}(hhhj(ubah}(h]h ]h"]h$]h&]hhuh1j)hhhM*hj(hhubh)}(hNow deepen your clone's history to the second predecessor of the mainline release of your 'good' version. In case the latter are 6.0 or 6.0.13, 5.19 would be the first predecessor and 5.18 the second -- hence deepen the history up to that version::h]hNow deepen your clone’s history to the second predecessor of the mainline release of your ‘good’ version. In case the latter are 6.0 or 6.0.13, 5.19 would be the first predecessor and 5.18 the second -- hence deepen the history up to that version:}(hNow deepen your clone's history to the second predecessor of the mainline release of your 'good' version. In case the latter are 6.0 or 6.0.13, 5.19 would be the first predecessor and 5.18 the second -- hence deepen the history up to that version:hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM0hj(hhubj*)}(h*git fetch --shallow-exclude=v5.18 mainlineh]h*git fetch --shallow-exclude=v5.18 mainline}(hhhj )ubah}(h]h ]h"]h$]h&]hhuh1j)hhhM5hj(hhubh)}(h{Afterwards add the stable Git repository as remote and all required stable branches as explained in the step-by-step guide.h]h{Afterwards add the stable Git repository as remote and all required stable branches as explained in the step-by-step guide.}(hj)hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM7hj(hhubh)}(h9Note, shallow clones have a few peculiar characteristics:h]h9Note, shallow clones have a few peculiar characteristics:}(hj')hj%)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM:hj(hhubj)}(hhh](j)}(hXOFor bisections the history needs to be deepened a few mainline versions farther than it seems necessary, as explained above already. That's because Git otherwise will be unable to revert or describe most of the commits within a range (say 6.1..6.2), as they are internally based on earlier kernels releases (like 6.0-rc2 or 5.19-rc3). h]h)}(hXNFor bisections the history needs to be deepened a few mainline versions farther than it seems necessary, as explained above already. That's because Git otherwise will be unable to revert or describe most of the commits within a range (say 6.1..6.2), as they are internally based on earlier kernels releases (like 6.0-rc2 or 5.19-rc3).h]hXPFor bisections the history needs to be deepened a few mainline versions farther than it seems necessary, as explained above already. That’s because Git otherwise will be unable to revert or describe most of the commits within a range (say 6.1..6.2), as they are internally based on earlier kernels releases (like 6.0-rc2 or 5.19-rc3).}(hj<)hj:)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM<hj6)ubah}(h]h ]h"]h$]h&]uh1jhj3)hhhhhNubj)}(hX This document in most places uses ``git fetch`` with ``--shallow-exclude=`` to specify the earliest version you care about (or to be precise: its git tag). You alternatively can use the parameter ``--shallow-since=`` to specify an absolute (say ``'2023-07-15'``) or relative (``'12 months'``) date to define the depth of the history you want to download. When using them while bisecting mainline, ensure to deepen the history to at least 7 months before the release of the mainline release your 'good' kernel is based on. h]h)}(hX This document in most places uses ``git fetch`` with ``--shallow-exclude=`` to specify the earliest version you care about (or to be precise: its git tag). You alternatively can use the parameter ``--shallow-since=`` to specify an absolute (say ``'2023-07-15'``) or relative (``'12 months'``) date to define the depth of the history you want to download. When using them while bisecting mainline, ensure to deepen the history to at least 7 months before the release of the mainline release your 'good' kernel is based on.h](h"This document in most places uses }(h"This document in most places uses hjR)hhhNhNubj5)}(h ``git fetch``h]h git fetch}(hhhj[)hhhNhNubah}(h]h ]h"]h$]h&]uh1j4hjR)ubh with }(h with hjR)hhhNhNubj5)}(h``--shallow-exclude=``h]h--shallow-exclude=}(hhhjn)hhhNhNubah}(h]h ]h"]h$]h&]uh1j4hjR)ubhy to specify the earliest version you care about (or to be precise: its git tag). You alternatively can use the parameter }(hy to specify the earliest version you care about (or to be precise: its git tag). You alternatively can use the parameter hjR)hhhNhNubj5)}(h``--shallow-since=``h]h--shallow-since=}(hhhj)hhhNhNubah}(h]h ]h"]h$]h&]uh1j4hjR)ubh to specify an absolute (say }(h to specify an absolute (say hjR)hhhNhNubj5)}(h``'2023-07-15'``h]h '2023-07-15'}(hhhj)hhhNhNubah}(h]h ]h"]h$]h&]uh1j4hjR)ubh) or relative (}(h) or relative (hjR)hhhNhNubj5)}(h``'12 months'``h]h '12 months'}(hhhj)hhhNhNubah}(h]h ]h"]h$]h&]uh1j4hjR)ubh) date to define the depth of the history you want to download. When using them while bisecting mainline, ensure to deepen the history to at least 7 months before the release of the mainline release your ‘good’ kernel is based on.}(h) date to define the depth of the history you want to download. When using them while bisecting mainline, ensure to deepen the history to at least 7 months before the release of the mainline release your 'good' kernel is based on.hjR)hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMBhjN)ubah}(h]h ]h"]h$]h&]uh1jhj3)hhhhhNubj)}(hBe warned, when deepening your clone you might encounter an error like 'fatal: error in object: unshallow cafecaca0c0dacafecaca0c0dacafecaca0c0da'. In that case run ``git repack -d`` and try again. h]h)}(hBe warned, when deepening your clone you might encounter an error like 'fatal: error in object: unshallow cafecaca0c0dacafecaca0c0dacafecaca0c0da'. In that case run ``git repack -d`` and try again.h](hBe warned, when deepening your clone you might encounter an error like ‘fatal: error in object: unshallow cafecaca0c0dacafecaca0c0dacafecaca0c0da’. In that case run }(hBe warned, when deepening your clone you might encounter an error like 'fatal: error in object: unshallow cafecaca0c0dacafecaca0c0dacafecaca0c0da'. In that case run hj)hhhNhNubj5)}(h``git repack -d``h]h git repack -d}(hhhj)hhhNhNubah}(h]h ]h"]h$]h&]uh1j4hj)ubh and try again.}(h and try again.hj)hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMJhj)ubah}(h]h ]h"]h$]h&]uh1jhj3)hhhhhNubeh}(h]h ]h"]h$]h&]jjuh1jhhhM<hj(hhubh)}(hd[:ref:`back to step-by-step guide `] [:ref:`back to section intro `]h](h[}(hjhj)hhhNhNubh)}(h2:ref:`back to step-by-step guide `h]j@)}(hj*h]hback to step-by-step guide}(hhhj*hhhNhNubah}(h]h ](jKstdstd-refeh"]h$]h&]uh1j?hj*ubah}(h]h ]h"]h$]h&]refdocjX refdomainj*reftyperef refexplicitrefwarnj^sources_bissbsuh1hhhhMNhj)ubh] [}(h] [hj)hhhNhNubh)}(h-:ref:`back to section intro `h]j@)}(hj'*h]hback to section intro}(hhhj)*hhhNhNubah}(h]h ](jKstdstd-refeh"]h$]h&]uh1j?hj%*ubah}(h]h ]h"]h$]h&]refdocjX refdomainj3*reftyperef refexplicitrefwarnj^sources_bisrefuh1hhhhMNhj)ubh]}(hjhj)hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMNhj(hhubj)}(h.. _oldconfig_bisref:h]h}(h]h ]h"]h$]h&]joldconfig-bisrefuh1jhMQhj(hhhhubeh}(h](8downloading-linux-mainline-sources-using-a-shallow-clonej(eh ]h"](8downloading linux mainline sources using a shallow clonesources_shallow_bisrefeh$]h&]uh1hhj! hhhhhM&j}j`*j(sj}j(j(subh)}(hhh](h)}(h6Start defining the build configuration for your kernelh]h6Start defining the build configuration for your kernel}(hjj*hjh*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhje*hhhhhMTubj)}(hhh]h)}(hd*Start preparing a kernel build configuration (the '.config' file).* [:ref:`... `]h](j')}(hD*Start preparing a kernel build configuration (the '.config' file).*h]hFStart preparing a kernel build configuration (the ‘.config’ file).}(hhhj}*hhhNhNubah}(h]h ]h"]h$]h&]uh1j&hjy*ubh [}(h [hjy*hhhNhNubh)}(h:ref:`... `h]j@)}(hj*h]h...}(hhhj*hhhNhNubah}(h]h ](jKstdstd-refeh"]h$]h&]uh1j?hj*ubah}(h]h ]h"]h$]h&]refdocjX refdomainj*reftyperef refexplicitrefwarnj^oldconfig_bissbsuh1hhhhMVhjy*ubh]}(hjhjy*hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMVhjv*ubah}(h]h ]h"]h$]h&]uh1jhje*hhhhhNubh)}(hXI*Note, this is the first of multiple steps in this guide that create or modify build artifacts. The commands used in this guide store them right in the source tree to keep things simple. In case you prefer storing the build artifacts separately, create a directory like '~/linux-builddir/' and add the parameter ``O=~/linux-builddir/`` to all make calls used throughout this guide. You will have to point other commands there as well -- among them the ``./scripts/config [...]`` commands, which will require ``--file ~/linux-builddir/.config`` to locate the right build configuration.*h]j')}(hj*h]hXKNote, this is the first of multiple steps in this guide that create or modify build artifacts. The commands used in this guide store them right in the source tree to keep things simple. In case you prefer storing the build artifacts separately, create a directory like ‘~/linux-builddir/’ and add the parameter ``O=~/linux-builddir/`` to all make calls used throughout this guide. You will have to point other commands there as well -- among them the ``./scripts/config [...]`` commands, which will require ``--file ~/linux-builddir/.config`` to locate the right build configuration.}(hhhj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j&hj*ubah}(h]h ]h"]h$]h&]uh1hhhhMYhje*hhubh)}(hGTwo things can easily go wrong when creating a .config file as advised:h]hGTwo things can easily go wrong when creating a .config file as advised:}(hj*hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMbhje*hhubj)}(hhh](j)}(hXThe oldconfig target will use a .config file from your build directory, if one is already present there (e.g. '~/linux/.config'). That's totally fine if that's what you intend (see next step), but in all other cases you want to delete it. This for example is important in case you followed this guide further, but due to problems come back here to redo the configuration from scratch. h]h)}(hXThe oldconfig target will use a .config file from your build directory, if one is already present there (e.g. '~/linux/.config'). That's totally fine if that's what you intend (see next step), but in all other cases you want to delete it. This for example is important in case you followed this guide further, but due to problems come back here to redo the configuration from scratch.h]hXThe oldconfig target will use a .config file from your build directory, if one is already present there (e.g. ‘~/linux/.config’). That’s totally fine if that’s what you intend (see next step), but in all other cases you want to delete it. This for example is important in case you followed this guide further, but due to problems come back here to redo the configuration from scratch.}(hj*hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMdhj*ubah}(h]h ]h"]h$]h&]uh1jhj*hhhhhNubj)}(hXSometimes olddefconfig is unable to locate the .config file for your running kernel and will use defaults, as briefly outlined in the guide. In that case check if your distribution ships the configuration somewhere and manually put it in the right place (e.g. '~/linux/.config') if it does. On distributions where /proc/config.gz exists this can be achieved using this command:: zcat /proc/config.gz > .config Once you put it there, run ``make olddefconfig`` again to adjust it to the needs of the kernel about to be built. h](h)}(hXzSometimes olddefconfig is unable to locate the .config file for your running kernel and will use defaults, as briefly outlined in the guide. In that case check if your distribution ships the configuration somewhere and manually put it in the right place (e.g. '~/linux/.config') if it does. On distributions where /proc/config.gz exists this can be achieved using this command::h]hX}Sometimes olddefconfig is unable to locate the .config file for your running kernel and will use defaults, as briefly outlined in the guide. In that case check if your distribution ships the configuration somewhere and manually put it in the right place (e.g. ‘~/linux/.config’) if it does. On distributions where /proc/config.gz exists this can be achieved using this command:}(hXySometimes olddefconfig is unable to locate the .config file for your running kernel and will use defaults, as briefly outlined in the guide. In that case check if your distribution ships the configuration somewhere and manually put it in the right place (e.g. '~/linux/.config') if it does. On distributions where /proc/config.gz exists this can be achieved using this command:hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMkhj+ubj*)}(hzcat /proc/config.gz > .configh]hzcat /proc/config.gz > .config}(hhhj+ubah}(h]h ]h"]h$]h&]hhuh1j)hhhMqhj+ubh)}(hqOnce you put it there, run ``make olddefconfig`` again to adjust it to the needs of the kernel about to be built.h](hOnce you put it there, run }(hOnce you put it there, run hj!+hhhNhNubj5)}(h``make olddefconfig``h]hmake olddefconfig}(hhhj*+hhhNhNubah}(h]h ]h"]h$]h&]uh1j4hj!+ubhA again to adjust it to the needs of the kernel about to be built.}(hA again to adjust it to the needs of the kernel about to be built.hj!+hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMshj+ubeh}(h]h ]h"]h$]h&]uh1jhj*hhhhhNubeh}(h]h ]h"]h$]h&]jjuh1jhhhMdhje*hhubh)}(hX+Note, the olddefconfig target will set any undefined build options to their default value. If you prefer to set such configuration options manually, use ``make oldconfig`` instead. Then for each undefined configuration option you will be asked how to proceed; in case you are unsure what to answer, simply hit 'enter' to apply the default value. Note though that for bisections you normally want to go with the defaults, as you otherwise might enable a new feature that causes a problem looking like regressions (for example due to security restrictions).h](hNote, the olddefconfig target will set any undefined build options to their default value. If you prefer to set such configuration options manually, use }(hNote, the olddefconfig target will set any undefined build options to their default value. If you prefer to set such configuration options manually, use hjO+hhhNhNubj5)}(h``make oldconfig``h]hmake oldconfig}(hhhjX+hhhNhNubah}(h]h ]h"]h$]h&]uh1j4hjO+ubhX instead. Then for each undefined configuration option you will be asked how to proceed; in case you are unsure what to answer, simply hit ‘enter’ to apply the default value. Note though that for bisections you normally want to go with the defaults, as you otherwise might enable a new feature that causes a problem looking like regressions (for example due to security restrictions).}(hX instead. Then for each undefined configuration option you will be asked how to proceed; in case you are unsure what to answer, simply hit 'enter' to apply the default value. Note though that for bisections you normally want to go with the defaults, as you otherwise might enable a new feature that causes a problem looking like regressions (for example due to security restrictions).hjO+hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMvhje*hhubh)}(hXOccasionally odd things happen when trying to use a config file prepared for one kernel (say 6.1) on an older mainline release -- especially if it is much older (say 5.15). That's one of the reasons why the previous step in the guide told you to boot the kernel where everything works. If you manually add a .config file you thus want to ensure it's from the working kernel and not from a one that shows the regression.h]hXOccasionally odd things happen when trying to use a config file prepared for one kernel (say 6.1) on an older mainline release -- especially if it is much older (say 5.15). That’s one of the reasons why the previous step in the guide told you to boot the kernel where everything works. If you manually add a .config file you thus want to ensure it’s from the working kernel and not from a one that shows the regression.}(hjs+hjq+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhje*hhubh)}(hXIn case you want to build kernels for another machine, locate its kernel build configuration; usually ``ls /boot/config-$(uname -r)`` will print its name. Copy that file to the build machine and store it as ~/linux/.config; afterwards run ``make olddefconfig`` to adjust it.h](hfIn case you want to build kernels for another machine, locate its kernel build configuration; usually }(hfIn case you want to build kernels for another machine, locate its kernel build configuration; usually hj+hhhNhNubj5)}(h``ls /boot/config-$(uname -r)``h]hls /boot/config-$(uname -r)}(hhhj+hhhNhNubah}(h]h ]h"]h$]h&]uh1j4hj+ubhj will print its name. Copy that file to the build machine and store it as ~/linux/.config; afterwards run }(hj will print its name. Copy that file to the build machine and store it as ~/linux/.config; afterwards run hj+hhhNhNubj5)}(h``make olddefconfig``h]hmake olddefconfig}(hhhj+hhhNhNubah}(h]h ]h"]h$]h&]uh1j4hj+ubh to adjust it.}(h to adjust it.hj+hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhje*hhubh)}(h6[:ref:`back to step-by-step guide `]h](h[}(hjhj+hhhNhNubh)}(h4:ref:`back to step-by-step guide `h]j@)}(hj+h]hback to step-by-step guide}(hhhj+hhhNhNubah}(h]h ](jKstdstd-refeh"]h$]h&]uh1j?hj+ubah}(h]h ]h"]h$]h&]refdocjX refdomainj+reftyperef refexplicitrefwarnj^oldconfig_bissbsuh1hhhhMhj+ubh]}(hjhj+hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhje*hhubj)}(h.. _localmodconfig_bisref:h]h}(h]h ]h"]h$]h&]jlocalmodconfig-bisrefuh1jhMhje*hhhhubeh}(h](6start-defining-the-build-configuration-for-your-kerneljY*eh ]h"](6start defining the build configuration for your kerneloldconfig_bisrefeh$]h&]uh1hhj! hhhhhMTj}j+jO*sj}jY*jO*subh)}(hhh](h)}(h,Trim the build configuration for your kernelh]h,Trim the build configuration for your kernel}(hj,hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj+hhhhhMubj)}(hhh]h)}(hh*Disable any kernel modules apparently superfluous for your setup.* [:ref:`... `]h](j')}(hC*Disable any kernel modules apparently superfluous for your setup.*h]hADisable any kernel modules apparently superfluous for your setup.}(hhhj,hhhNhNubah}(h]h ]h"]h$]h&]uh1j&hj,ubh [}(h [hj,hhhNhNubh)}(h":ref:`... `h]j@)}(hj),h]h...}(hhhj+,hhhNhNubah}(h]h ](jKstdstd-refeh"]h$]h&]uh1j?hj',ubah}(h]h ]h"]h$]h&]refdocjX refdomainj5,reftyperef refexplicitrefwarnj^localmodconfig_bissbsuh1hhhhMhj,ubh]}(hjhj,hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhj ,ubah}(h]h ]h"]h$]h&]uh1jhj+hhhhhNubh)}(hX:As explained briefly in the step-by-step guide already: with localmodconfig it can easily happen that your self-built kernels will lack modules for tasks you did not perform at least once before utilizing this make target. That happens when a task requires kernel modules which are only autoloaded when you execute it for the first time. So when you never performed that task since starting your kernel the modules will not have been loaded -- and from localmodonfig's point of view look superfluous, which thus disables them to reduce the amount of code to be compiled.h]hX<As explained briefly in the step-by-step guide already: with localmodconfig it can easily happen that your self-built kernels will lack modules for tasks you did not perform at least once before utilizing this make target. That happens when a task requires kernel modules which are only autoloaded when you execute it for the first time. So when you never performed that task since starting your kernel the modules will not have been loaded -- and from localmodonfig’s point of view look superfluous, which thus disables them to reduce the amount of code to be compiled.}(hjY,hjW,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj+hhubh)}(hXYou can try to avoid this by performing typical tasks that often will autoload additional kernel modules: start a VM, establish VPN connections, loop-mount a CD/DVD ISO, mount network shares (CIFS, NFS, ...), and connect all external devices (2FA keys, headsets, webcams, ...) as well as storage devices with file systems you otherwise do not utilize (btrfs, ext4, FAT, NTFS, XFS, ...). But it is hard to think of everything that might be needed -- even kernel developers often forget one thing or another at this point.h]hXYou can try to avoid this by performing typical tasks that often will autoload additional kernel modules: start a VM, establish VPN connections, loop-mount a CD/DVD ISO, mount network shares (CIFS, NFS, ...), and connect all external devices (2FA keys, headsets, webcams, ...) as well as storage devices with file systems you otherwise do not utilize (btrfs, ext4, FAT, NTFS, XFS, ...). But it is hard to think of everything that might be needed -- even kernel developers often forget one thing or another at this point.}(hjg,hje,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj+hhubh)}(hXBDo not let that risk bother you, especially when compiling a kernel only for testing purposes: everything typically crucial will be there. And if you forget something important you can turn on a missing feature manually later and quickly run the commands again to compile and install a kernel that has everything you need.h]hXBDo not let that risk bother you, especially when compiling a kernel only for testing purposes: everything typically crucial will be there. And if you forget something important you can turn on a missing feature manually later and quickly run the commands again to compile and install a kernel that has everything you need.}(hju,hjs,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj+hhubh)}(hXuBut if you plan to build and use self-built kernels regularly, you might want to reduce the risk by recording which modules your system loads over the course of a few weeks. You can automate this with `modprobed-db `_. Afterwards use ``LSMOD=`` to point localmodconfig to the list of modules modprobed-db noticed being used::h](hBut if you plan to build and use self-built kernels regularly, you might want to reduce the risk by recording which modules your system loads over the course of a few weeks. You can automate this with }(hBut if you plan to build and use self-built kernels regularly, you might want to reduce the risk by recording which modules your system loads over the course of a few weeks. You can automate this with hj,hhhNhNubjT)}(h:`modprobed-db `_h]h modprobed-db}(h modprobed-dbhj,hhhNhNubah}(h]h ]h"]h$]h&]namej,jf(https://github.com/graysky2/modprobed-dbuh1jShj,ubj)}(h+ h]h}(h] modprobed-dbah ]h"] modprobed-dbah$]h&]refurij,uh1jjuKhj,ubh. Afterwards use }(h. Afterwards use hj,hhhNhNubj5)}(h``LSMOD=``h]h LSMOD=}(hhhj,hhhNhNubah}(h]h ]h"]h$]h&]uh1j4hj,ubhP to point localmodconfig to the list of modules modprobed-db noticed being used:}(hP to point localmodconfig to the list of modules modprobed-db noticed being used:hj,hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhj+hhubj*)}(hAyes '' | make LSMOD='${HOME}'/.config/modprobed.db localmodconfigh]hAyes '' | make LSMOD='${HOME}'/.config/modprobed.db localmodconfig}(hhhj,ubah}(h]h ]h"]h$]h&]hhuh1j)hhhMhj+hhubh)}(hX^That parameter also allows you to build trimmed kernels for another machine in case you copied a suitable .config over to use as base (see previous step). Just run ``lsmod > lsmod_foo-machine`` on that system and copy the generated file to your build's host home directory. Then run these commands instead of the one the step-by-step guide mentions::h](hThat parameter also allows you to build trimmed kernels for another machine in case you copied a suitable .config over to use as base (see previous step). Just run }(hThat parameter also allows you to build trimmed kernels for another machine in case you copied a suitable .config over to use as base (see previous step). Just run hj,hhhNhNubj5)}(h``lsmod > lsmod_foo-machine``h]hlsmod > lsmod_foo-machine}(hhhj,hhhNhNubah}(h]h ]h"]h$]h&]uh1j4hj,ubh on that system and copy the generated file to your build’s host home directory. Then run these commands instead of the one the step-by-step guide mentions:}(h on that system and copy the generated file to your build's host home directory. Then run these commands instead of the one the step-by-step guide mentions:hj,hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhj+hhubj*)}(h6yes '' | make LSMOD=~/lsmod_foo-machine localmodconfigh]h6yes '' | make LSMOD=~/lsmod_foo-machine localmodconfig}(hhhj,ubah}(h]h ]h"]h$]h&]hhuh1j)hhhMhj+hhubh)}(h;[:ref:`back to step-by-step guide `]h](h[}(hjhj-hhhNhNubh)}(h9:ref:`back to step-by-step guide `h]j@)}(hj-h]hback to step-by-step guide}(hhhj-hhhNhNubah}(h]h ](jKstdstd-refeh"]h$]h&]uh1j?hj -ubah}(h]h ]h"]h$]h&]refdocjX refdomainj-reftyperef refexplicitrefwarnj^localmodconfig_bissbsuh1hhhhMhj-ubh]}(hjhj-hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhj+hhubj)}(h.. _tagging_bisref:h]h}(h]h ]h"]h$]h&]jtagging-bisrefuh1jhMhj+hhhhubeh}(h](,trim-the-build-configuration-for-your-kernelj+eh ]h"](,trim the build configuration for your kernellocalmodconfig_bisrefeh$]h&]uh1hhj! hhhhhMj}jG-j+sj}j+j+subh)}(hhh](h)}(h!Tag the kernels about to be buildh]h!Tag the kernels about to be build}(hjQ-hjO-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjL-hhhhhMubj)}(hhh]h)}(h*Ensure all the kernels you will build are clearly identifiable using a special tag and a unique version identifier.* [:ref:`... `]h](j')}(hu*Ensure all the kernels you will build are clearly identifiable using a special tag and a unique version identifier.*h]hsEnsure all the kernels you will build are clearly identifiable using a special tag and a unique version identifier.}(hhhjd-hhhNhNubah}(h]h ]h"]h$]h&]uh1j&hj`-ubh [}(h [hj`-hhhNhNubh)}(h:ref:`... `h]j@)}(hjy-h]h...}(hhhj{-hhhNhNubah}(h]h ](jKstdstd-refeh"]h$]h&]uh1j?hjw-ubah}(h]h ]h"]h$]h&]refdocjX refdomainj-reftyperef refexplicitrefwarnj^tagging_bissbsuh1hhhhMhj`-ubh]}(hjhj`-hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhj]-ubah}(h]h ]h"]h$]h&]uh1jhjL-hhhhhNubh)}(hXWThis allows you to differentiate your distribution's kernels from those created during this process, as the file or directories for the latter will contain '-local' in the name; it also helps picking the right entry in the boot menu and not lose track of you kernels, as their version numbers will look slightly confusing during the bisection.h]hX]This allows you to differentiate your distribution’s kernels from those created during this process, as the file or directories for the latter will contain ‘-local’ in the name; it also helps picking the right entry in the boot menu and not lose track of you kernels, as their version numbers will look slightly confusing during the bisection.}(hj-hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjL-hhubh)}(h4[:ref:`back to step-by-step guide `]h](h[}(hjhj-hhhNhNubh)}(h2:ref:`back to step-by-step guide `h]j@)}(hj-h]hback to step-by-step guide}(hhhj-hhhNhNubah}(h]h ](jKstdstd-refeh"]h$]h&]uh1j?hj-ubah}(h]h ]h"]h$]h&]refdocjX refdomainj-reftyperef refexplicitrefwarnj^tagging_bissbsuh1hhhhMhj-ubh]}(hjhj-hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhjL-hhubj)}(h.. _debugsymbols_bisref:h]h}(h]h ]h"]h$]h&]jdebugsymbols-bisrefuh1jhMhjL-hhhhubeh}(h](!tag-the-kernels-about-to-be-buildj@-eh ]h"](!tag the kernels about to be buildtagging_bisrefeh$]h&]uh1hhj! hhhhhMj}j-j6-sj}j@-j6-subh)}(hhh](h)}(h)Decide to enable or disable debug symbolsh]h)Decide to enable or disable debug symbols}(hj.hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj-hhhhhMubj)}(hhh]h)}(hH*Decide how to handle debug symbols.* [:ref:`... `]h](j')}(h%*Decide how to handle debug symbols.*h]h#Decide how to handle debug symbols.}(hhhj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j&hj.ubh [}(h [hj.hhhNhNubh)}(h :ref:`... `h]j@)}(hj*.h]h...}(hhhj,.hhhNhNubah}(h]h ](jKstdstd-refeh"]h$]h&]uh1j?hj(.ubah}(h]h ]h"]h$]h&]refdocjX refdomainj6.reftyperef refexplicitrefwarnj^debugsymbols_bissbsuh1hhhhMhj.ubh]}(hjhj.hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhj.ubah}(h]h ]h"]h$]h&]uh1jhj-hhhhhNubh)}(hXuHaving debug symbols available can be important when your kernel throws a 'panic', 'Oops', 'warning', or 'BUG' later when running, as then you will be able to find the exact place where the problem occurred in the code. But collecting and embedding the needed debug information takes time and consumes quite a bit of space: in late 2022 the build artifacts for a typical x86 kernel trimmed with localmodconfig consumed around 5 Gigabyte of space with debug symbols, but less than 1 when they were disabled. The resulting kernel image and modules are bigger as well, which increases storage requirements for /boot/ and load times.h]hXHaving debug symbols available can be important when your kernel throws a ‘panic’, ‘Oops’, ‘warning’, or ‘BUG’ later when running, as then you will be able to find the exact place where the problem occurred in the code. But collecting and embedding the needed debug information takes time and consumes quite a bit of space: in late 2022 the build artifacts for a typical x86 kernel trimmed with localmodconfig consumed around 5 Gigabyte of space with debug symbols, but less than 1 when they were disabled. The resulting kernel image and modules are bigger as well, which increases storage requirements for /boot/ and load times.}(hjZ.hjX.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj-hhubh)}(hIn case you want a small kernel and are unlikely to decode a stack trace later, you thus might want to disable debug symbols to avoid those downsides. If it later turns out that you need them, just enable them as shown and rebuild the kernel.h]hIn case you want a small kernel and are unlikely to decode a stack trace later, you thus might want to disable debug symbols to avoid those downsides. If it later turns out that you need them, just enable them as shown and rebuild the kernel.}(hjh.hjf.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj-hhubh)}(hX You on the other hand definitely want to enable them for this process, if there is a decent chance that you need to decode a stack trace later. The section 'Decode failure messages' in Documentation/admin-guide/reporting-issues.rst explains this process in more detail.h]hXYou on the other hand definitely want to enable them for this process, if there is a decent chance that you need to decode a stack trace later. The section ‘Decode failure messages’ in Documentation/admin-guide/reporting-issues.rst explains this process in more detail.}(hjv.hjt.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj-hhubh)}(h9[:ref:`back to step-by-step guide `]h](h[}(hjhj.hhhNhNubh)}(h7:ref:`back to step-by-step guide `h]j@)}(hj.h]hback to step-by-step guide}(hhhj.hhhNhNubah}(h]h ](jKstdstd-refeh"]h$]h&]uh1j?hj.ubah}(h]h ]h"]h$]h&]refdocjX refdomainj.reftyperef refexplicitrefwarnj^debugsymbols_bissbsuh1hhhhMhj.ubh]}(hjhj.hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhj-hhubj)}(h.. _configmods_bisref:h]h}(h]h ]h"]h$]h&]jconfigmods-bisrefuh1jhMhj-hhhhubeh}(h]()decide-to-enable-or-disable-debug-symbolsj-eh ]h"]()decide to enable or disable debug symbolsdebugsymbols_bisrefeh$]h&]uh1hhj! hhhhhMj}j.j-sj}j-j-subh)}(hhh](h)}(hAdjust build configurationh]hAdjust build configuration}(hj.hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj.hhhhhMubj)}(hhh]h)}(hR*Check if you may want or need to adjust some other kernel configuration options:*h]j')}(hj.h]hPCheck if you may want or need to adjust some other kernel configuration options:}(hhhj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j&hj.ubah}(h]h ]h"]h$]h&]uh1hhhhMhj.ubah}(h]h ]h"]h$]h&]uh1jhj.hhhhhNubh)}(hiDepending on your needs you at this point might want or have to adjust some kernel configuration options.h]hiDepending on your needs you at this point might want or have to adjust some kernel configuration options.}(hj.hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj.hhubj)}(h.. _configmods_distros_bisref:h]h}(h]h ]h"]h$]h&]jconfigmods-distros-bisrefuh1jhMhj.hhhhubh)}(hhh](h)}(hDistro specific adjustmentsh]hDistro specific adjustments}(hj/hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/hhhhhMubj)}(hhh]h)}(h2*Are you running* [:ref:`... `]h](j')}(h*Are you running*h]hAre you running}(hhhj,/hhhNhNubah}(h]h ]h"]h$]h&]uh1j&hj(/ubh [}(h [hj(/hhhNhNubh)}(h:ref:`... `h]j@)}(hjA/h]h...}(hhhjC/hhhNhNubah}(h]h ](jKstdstd-refeh"]h$]h&]uh1j?hj?/ubah}(h]h ]h"]h$]h&]refdocjX refdomainjM/reftyperef refexplicitrefwarnj^configmods_bissbsuh1hhhhMhj(/ubh]}(hjhj(/hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhj%/ubah}(h]h ]h"]h$]h&]uh1jhj/hhhhhNubh)}(hThe following sections help you to avoid build problems that are known to occur when following this guide on a few commodity distributions.h]hThe following sections help you to avoid build problems that are known to occur when following this guide on a few commodity distributions.}(hjq/hjo/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj/hhubh)}(h **Debian:**h]j~)}(hj/h]hDebian:}(hhhj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j}hj}/ubah}(h]h ]h"]h$]h&]uh1hhhhMhj/hhubj)}(hhh]j)}(hXRemove a stale reference to a certificate file that would cause your build to fail:: ./scripts/config --set-str SYSTEM_TRUSTED_KEYS '' Alternatively, download the needed certificate and make that configuration option point to it, as `the Debian handbook explains in more detail `_ -- or generate your own, as explained in Documentation/admin-guide/module-signing.rst. h](h)}(hTRemove a stale reference to a certificate file that would cause your build to fail::h]hSRemove a stale reference to a certificate file that would cause your build to fail:}(hSRemove a stale reference to a certificate file that would cause your build to fail:hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj/ubj*)}(h1./scripts/config --set-str SYSTEM_TRUSTED_KEYS ''h]h1./scripts/config --set-str SYSTEM_TRUSTED_KEYS ''}(hhhj/ubah}(h]h ]h"]h$]h&]hhuh1j)hhhMhj/ubh)}(hX1Alternatively, download the needed certificate and make that configuration option point to it, as `the Debian handbook explains in more detail `_ -- or generate your own, as explained in Documentation/admin-guide/module-signing.rst.h](hbAlternatively, download the needed certificate and make that configuration option point to it, as }(hbAlternatively, download the needed certificate and make that configuration option point to it, as hj/hhhNhNubjT)}(hx`the Debian handbook explains in more detail `_h]h+the Debian handbook explains in more detail}(h+the Debian handbook explains in more detailhj/hhhNhNubah}(h]h ]h"]h$]h&]name+the Debian handbook explains in more detailjfGhttps://debian-handbook.info/browse/stable/sect.kernel-compilation.htmluh1jShj/ubj)}(hJ h]h}(h]+the-debian-handbook-explains-in-more-detailah ]h"]+the debian handbook explains in more detailah$]h&]refurij/uh1jjuKhj/ubhW -- or generate your own, as explained in Documentation/admin-guide/module-signing.rst.}(hW -- or generate your own, as explained in Documentation/admin-guide/module-signing.rst.hj/hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhj/ubeh}(h]h ]h"]h$]h&]uh1jhj/hhhhhNubah}(h]h ]h"]h$]h&]jjuh1jhhhMhj/hhubh)}(h7[:ref:`back to step-by-step guide `]h](h[}(hjhj/hhhNhNubh)}(h5:ref:`back to step-by-step guide `h]j@)}(hj0h]hback to step-by-step guide}(hhhj0hhhNhNubah}(h]h ](jKstdstd-refeh"]h$]h&]uh1j?hj/ubah}(h]h ]h"]h$]h&]refdocjX refdomainj 0reftyperef refexplicitrefwarnj^configmods_bissbsuh1hhhhM hj/ubh]}(hjhj/hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhM hj/hhubj)}(h!.. _configmods_individual_bisref:h]h}(h]h ]h"]h$]h&]jconfigmods-individual-bisrefuh1jhMhj/hhhhubeh}(h](distro-specific-adjustmentsj/eh ]h"](distro specific adjustmentsconfigmods_distros_bisrefeh$]h&]uh1hhj.hhhhhMj}j:0j /sj}j/j /subh)}(hhh](h)}(hIndividual adjustmentsh]hIndividual adjustments}(hjD0hjB0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj?0hhhhhMubj)}(hhh]h)}(hn*If you want to influence the other aspects of the configuration, do so now.* [:ref:`... `]h](j')}(hM*If you want to influence the other aspects of the configuration, do so now.*h]hKIf you want to influence the other aspects of the configuration, do so now.}(hhhjW0hhhNhNubah}(h]h ]h"]h$]h&]uh1j&hjS0ubh [}(h [hjS0hhhNhNubh)}(h:ref:`... `h]j@)}(hjl0h]h...}(hhhjn0hhhNhNubah}(h]h ](jKstdstd-refeh"]h$]h&]uh1j?hjj0ubah}(h]h ]h"]h$]h&]refdocjX refdomainjx0reftyperef refexplicitrefwarnj^configmods_bissbsuh1hhhhMhjS0ubh]}(hjhjS0hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhjP0ubah}(h]h ]h"]h$]h&]uh1jhj?0hhhhhNubh)}(hXAt this point you can use a command like ``make menuconfig`` or ``make nconfig`` to enable or disable certain features using a text-based user interface; to use a graphical configuration utility, run ``make xconfig`` instead. Both of them require development libraries from toolkits they are rely on (ncurses respectively Qt5 or Qt6); an error message will tell you if something required is missing.h](h)At this point you can use a command like }(h)At this point you can use a command like hj0hhhNhNubj5)}(h``make menuconfig``h]hmake menuconfig}(hhhj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j4hj0ubh or }(h or hj0hhhNhNubj5)}(h``make nconfig``h]h make nconfig}(hhhj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j4hj0ubhx to enable or disable certain features using a text-based user interface; to use a graphical configuration utility, run }(hx to enable or disable certain features using a text-based user interface; to use a graphical configuration utility, run hj0hhhNhNubj5)}(h``make xconfig``h]h make xconfig}(hhhj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j4hj0ubh instead. Both of them require development libraries from toolkits they are rely on (ncurses respectively Qt5 or Qt6); an error message will tell you if something required is missing.}(h instead. Both of them require development libraries from toolkits they are rely on (ncurses respectively Qt5 or Qt6); an error message will tell you if something required is missing.hj0hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhj?0hhubh)}(h7[:ref:`back to step-by-step guide `]h](h[}(hjhj0hhhNhNubh)}(h5:ref:`back to step-by-step guide `h]j@)}(hj0h]hback to step-by-step guide}(hhhj0hhhNhNubah}(h]h ](jKstdstd-refeh"]h$]h&]uh1j?hj0ubah}(h]h ]h"]h$]h&]refdocjX refdomainj0reftyperef refexplicitrefwarnj^configmods_bissbsuh1hhhhMhj0ubh]}(hjhj0hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhj?0hhubj)}(h.. _saveconfig_bisref:h]h}(h]h ]h"]h$]h&]jsaveconfig-bisrefuh1jhM hj?0hhhhubeh}(h](individual-adjustmentsj30eh ]h"](individual adjustmentsconfigmods_individual_bisrefeh$]h&]uh1hhj.hhhhhMj}j%1j)0sj}j30j)0subeh}(h](adjust-build-configurationj.eh ]h"](adjust build configurationconfigmods_bisrefeh$]h&]uh1hhj! hhhhhMj}j01j.sj}j.j.subh)}(hhh](h)}(hPut the .config file asideh]hPut the .config file aside}(hj:1hj81hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj51hhhhhM#ubj)}(hhh]h)}(ho*Reprocess the .config after the latest changes and store it in a safe place.* [:ref:`... `]h](j')}(hN*Reprocess the .config after the latest changes and store it in a safe place.*h]hLReprocess the .config after the latest changes and store it in a safe place.}(hhhjM1hhhNhNubah}(h]h ]h"]h$]h&]uh1j&hjI1ubh [}(h [hjI1hhhNhNubh)}(h:ref:`... `h]j@)}(hjb1h]h...}(hhhjd1hhhNhNubah}(h]h ](jKstdstd-refeh"]h$]h&]uh1j?hj`1ubah}(h]h ]h"]h$]h&]refdocjX refdomainjn1reftyperef refexplicitrefwarnj^saveconfig_bissbsuh1hhhhM%hjI1ubh]}(hjhjI1hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhM%hjF1ubah}(h]h ]h"]h$]h&]uh1jhj51hhhhhNubh)}(hXPut the .config you prepared aside, as you want to copy it back to the build directory every time during this guide before you start building another kernel. That's because going back and forth between different versions can alter .config files in odd ways; those occasionally cause side effects that could confuse testing or in some cases render the result of your bisection meaningless.h]hXPut the .config you prepared aside, as you want to copy it back to the build directory every time during this guide before you start building another kernel. That’s because going back and forth between different versions can alter .config files in odd ways; those occasionally cause side effects that could confuse testing or in some cases render the result of your bisection meaningless.}(hj1hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM(hj51hhubh)}(h7[:ref:`back to step-by-step guide `]h](h[}(hjhj1hhhNhNubh)}(h5:ref:`back to step-by-step guide `h]j@)}(hj1h]hback to step-by-step guide}(hhhj1hhhNhNubah}(h]h ](jKstdstd-refeh"]h$]h&]uh1j?hj1ubah}(h]h ]h"]h$]h&]refdocjX refdomainj1reftyperef refexplicitrefwarnj^saveconfig_bissbsuh1hhhhM/hj1ubh]}(hjhj1hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhM/hj51hhubj)}(h.. _introlatestcheck_bisref:h]h}(h]h ]h"]h$]h&]jintrolatestcheck-bisrefuh1jhM1hj51hhhhubeh}(h](put-the-config-file-asidej1eh ]h"](put the .config file asidesaveconfig_bisrefeh$]h&]uh1hhj! hhhhhM#j}j1j1sj}j1j1subeh}(h]*preparations-for-building-your-own-kernelsah ]h"]*preparations for building your own kernelsah$]h&]uh1hhj hhhhhM<ubh)}(hhh](h)}(h5Try to reproduce the problem with the latest codebaseh]h5Try to reproduce the problem with the latest codebase}(hj1hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj1hhhhhM4ubj)}(hhh]h)}(h*Verify the regression is not caused by some .config change and check if it still occurs with the latest codebase.* [:ref:`... `]h](j')}(hs*Verify the regression is not caused by some .config change and check if it still occurs with the latest codebase.*h]hqVerify the regression is not caused by some .config change and check if it still occurs with the latest codebase.}(hhhj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j&hj2ubh [}(h [hj2hhhNhNubh)}(h$:ref:`... `h]j@)}(hj2h]h...}(hhhj2hhhNhNubah}(h]h ](jKstdstd-refeh"]h$]h&]uh1j?hj2ubah}(h]h ]h"]h$]h&]refdocjX refdomainj'2reftyperef refexplicitrefwarnj^introlatestcheck_bissbsuh1hhhhM6hj2ubh]}(hjhj2hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhM6hj1ubah}(h]h ]h"]h$]h&]uh1jhj1hhhhhNubh)}(hX For some readers it might seem unnecessary to check the latest codebase at this point, especially if you did that already with a kernel prepared by your distributor or face a regression within a stable/longterm series. But it's highly recommended for these reasons:h]hX For some readers it might seem unnecessary to check the latest codebase at this point, especially if you did that already with a kernel prepared by your distributor or face a regression within a stable/longterm series. But it’s highly recommended for these reasons:}(hjK2hjI2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM9hj1hhubj)}(hhh](j)}(hXhYou will run into any problems caused by your setup before you actually begin a bisection. That will make it a lot easier to differentiate between 'this most likely is some problem in my setup' and 'this change needs to be skipped during the bisection, as the kernel sources at that stage contain an unrelated problem that causes building or booting to fail'. h]h)}(hXgYou will run into any problems caused by your setup before you actually begin a bisection. That will make it a lot easier to differentiate between 'this most likely is some problem in my setup' and 'this change needs to be skipped during the bisection, as the kernel sources at that stage contain an unrelated problem that causes building or booting to fail'.h]hXoYou will run into any problems caused by your setup before you actually begin a bisection. That will make it a lot easier to differentiate between ‘this most likely is some problem in my setup’ and ‘this change needs to be skipped during the bisection, as the kernel sources at that stage contain an unrelated problem that causes building or booting to fail’.}(hj`2hj^2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM>hjZ2ubah}(h]h ]h"]h$]h&]uh1jhjW2hhhhhNubj)}(hXtThese steps will rule out if your problem is caused by some change in the build configuration between the 'working' and the 'broken' kernel. This for example can happen when your distributor enabled an additional security feature in the newer kernel which was disabled or not yet supported by the older kernel. That security feature might get into the way of something you do -- in which case your problem from the perspective of the Linux kernel upstream developers is not a regression, as Documentation/admin-guide/reporting-regressions.rst explains in more detail. You thus would waste your time if you'd try to bisect this. h]h)}(hXsThese steps will rule out if your problem is caused by some change in the build configuration between the 'working' and the 'broken' kernel. This for example can happen when your distributor enabled an additional security feature in the newer kernel which was disabled or not yet supported by the older kernel. That security feature might get into the way of something you do -- in which case your problem from the perspective of the Linux kernel upstream developers is not a regression, as Documentation/admin-guide/reporting-regressions.rst explains in more detail. You thus would waste your time if you'd try to bisect this.h]hX}These steps will rule out if your problem is caused by some change in the build configuration between the ‘working’ and the ‘broken’ kernel. This for example can happen when your distributor enabled an additional security feature in the newer kernel which was disabled or not yet supported by the older kernel. That security feature might get into the way of something you do -- in which case your problem from the perspective of the Linux kernel upstream developers is not a regression, as Documentation/admin-guide/reporting-regressions.rst explains in more detail. You thus would waste your time if you’d try to bisect this.}(hjx2hjv2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMDhjr2ubah}(h]h ]h"]h$]h&]uh1jhjW2hhhhhNubj)}(hXIf the cause for your regression was already fixed in the latest mainline codebase, you'd perform the bisection for nothing. This holds true for a regression you encountered with a stable/longterm release as well, as they are often caused by problems in mainline changes that were backported -- in which case the problem will have to be fixed in mainline first. Maybe it already was fixed there and the fix is already in the process of being backported. h]h)}(hXIf the cause for your regression was already fixed in the latest mainline codebase, you'd perform the bisection for nothing. This holds true for a regression you encountered with a stable/longterm release as well, as they are often caused by problems in mainline changes that were backported -- in which case the problem will have to be fixed in mainline first. Maybe it already was fixed there and the fix is already in the process of being backported.h]hXIf the cause for your regression was already fixed in the latest mainline codebase, you’d perform the bisection for nothing. This holds true for a regression you encountered with a stable/longterm release as well, as they are often caused by problems in mainline changes that were backported -- in which case the problem will have to be fixed in mainline first. Maybe it already was fixed there and the fix is already in the process of being backported.}(hj2hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMNhj2ubah}(h]h ]h"]h$]h&]uh1jhjW2hhhhhNubj)}(hXGFor regressions within a stable/longterm series it's furthermore crucial to know if the issue is specific to that series or also happens in the mainline kernel, as the report needs to be sent to different people: * Regressions specific to a stable/longterm series are the stable team's responsibility; mainline Linux developers might or might not care. * Regressions also happening in mainline are something the regular Linux developers and maintainers have to handle; the stable team does not care and does not need to be involved in the report, they just should be told to backport the fix once it's ready. Your report might be ignored if you send it to the wrong party -- and even when you get a reply there is a decent chance that developers tell you to evaluate which of the two cases it is before they take a closer look. h](h)}(hFor regressions within a stable/longterm series it's furthermore crucial to know if the issue is specific to that series or also happens in the mainline kernel, as the report needs to be sent to different people:h]hFor regressions within a stable/longterm series it’s furthermore crucial to know if the issue is specific to that series or also happens in the mainline kernel, as the report needs to be sent to different people:}(hj2hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMUhj2ubj)}(hhh](j)}(hRegressions specific to a stable/longterm series are the stable team's responsibility; mainline Linux developers might or might not care. h]h)}(hRegressions specific to a stable/longterm series are the stable team's responsibility; mainline Linux developers might or might not care.h]hRegressions specific to a stable/longterm series are the stable team’s responsibility; mainline Linux developers might or might not care.}(hj2hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMYhj2ubah}(h]h ]h"]h$]h&]uh1jhj2ubj)}(hRegressions also happening in mainline are something the regular Linux developers and maintainers have to handle; the stable team does not care and does not need to be involved in the report, they just should be told to backport the fix once it's ready. h]h)}(hRegressions also happening in mainline are something the regular Linux developers and maintainers have to handle; the stable team does not care and does not need to be involved in the report, they just should be told to backport the fix once it's ready.h]hRegressions also happening in mainline are something the regular Linux developers and maintainers have to handle; the stable team does not care and does not need to be involved in the report, they just should be told to backport the fix once it’s ready.}(hj2hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM\hj2ubah}(h]h ]h"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]jjuh1jhhhMYhj2ubh)}(hYour report might be ignored if you send it to the wrong party -- and even when you get a reply there is a decent chance that developers tell you to evaluate which of the two cases it is before they take a closer look.h]hYour report might be ignored if you send it to the wrong party -- and even when you get a reply there is a decent chance that developers tell you to evaluate which of the two cases it is before they take a closer look.}(hj2hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMahj2ubeh}(h]h ]h"]h$]h&]uh1jhjW2hhhhhNubeh}(h]h ]h"]h$]h&]jjuh1jhhhM>hj1hhubh)}(h=[:ref:`back to step-by-step guide `]h](h[}(hjhj3hhhNhNubh)}(h;:ref:`back to step-by-step guide `h]j@)}(hj3h]hback to step-by-step guide}(hhhj3hhhNhNubah}(h]h ](jKstdstd-refeh"]h$]h&]uh1j?hj3ubah}(h]h ]h"]h$]h&]refdocjX refdomainj3reftyperef refexplicitrefwarnj^introlatestcheck_bissbsuh1hhhhMehj3ubh]}(hjhj3hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMehj1hhubj)}(h.. _checkoutmaster_bisref:h]h}(h]h ]h"]h$]h&]jcheckoutmaster-bisrefuh1jhMghj1hhhhubh)}(hhh](h)}(h#Check out the latest Linux codebaseh]h#Check out the latest Linux codebase}(hjI3hjG3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjD3hhhhhMjubj)}(hhh]h)}(hK*Check out the latest Linux codebase.* [:ref:`... `]h](j')}(h&*Check out the latest Linux codebase.*h]h$Check out the latest Linux codebase.}(hhhj\3hhhNhNubah}(h]h ]h"]h$]h&]uh1j&hjX3ubh [}(h [hjX3hhhNhNubh)}(h":ref:`... `h]j@)}(hjq3h]h...}(hhhjs3hhhNhNubah}(h]h ](jKstdstd-refeh"]h$]h&]uh1j?hjo3ubah}(h]h ]h"]h$]h&]refdocjX refdomainj}3reftyperef refexplicitrefwarnj^checkoutmaster_bissbsuh1hhhhMlhjX3ubh]}(hjhjX3hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMlhjU3ubah}(h]h ]h"]h$]h&]uh1jhjD3hhhhhNubh)}(hIn case you later want to recheck if an ever newer codebase might fix the problem, remember to run that ``git fetch --shallow-exclude [...]`` command again mentioned earlier to update your local Git repository.h](hhIn case you later want to recheck if an ever newer codebase might fix the problem, remember to run that }(hhIn case you later want to recheck if an ever newer codebase might fix the problem, remember to run that hj3hhhNhNubj5)}(h%``git fetch --shallow-exclude [...]``h]h!git fetch --shallow-exclude [...]}(hhhj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j4hj3ubhE command again mentioned earlier to update your local Git repository.}(hE command again mentioned earlier to update your local Git repository.hj3hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMohjD3hhubh)}(h;[:ref:`back to step-by-step guide `]h](h[}(hjhj3hhhNhNubh)}(h9:ref:`back to step-by-step guide `h]j@)}(hj3h]hback to step-by-step guide}(hhhj3hhhNhNubah}(h]h ](jKstdstd-refeh"]h$]h&]uh1j?hj3ubah}(h]h ]h"]h$]h&]refdocjX refdomainj3reftyperef refexplicitrefwarnj^checkoutmaster_bissbsuh1hhhhMshj3ubh]}(hjhj3hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMshjD3hhubj)}(h.. _build_bisref:h]h}(h]h ]h"]h$]h&]j build-bisrefuh1jhMuhjD3hhhhubeh}(h](#check-out-the-latest-linux-codebasejC3eh ]h"](#check out the latest linux codebasecheckoutmaster_bisrefeh$]h&]uh1hhj1hhhhhMjj}j4j93sj}jC3j93subh)}(hhh](h)}(hBuild your kernelh]hBuild your kernel}(hj4hj 4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj 4hhhhhMxubj)}(hhh]h)}(hv*Build the image and the modules of your first kernel using the config file you prepared.* [:ref:`... `]h](j')}(hZ*Build the image and the modules of your first kernel using the config file you prepared.*h]hXBuild the image and the modules of your first kernel using the config file you prepared.}(hhhj!4hhhNhNubah}(h]h ]h"]h$]h&]uh1j&hj4ubh [}(h [hj4hhhNhNubh)}(h:ref:`... `h]j@)}(hj64h]h...}(hhhj84hhhNhNubah}(h]h ](jKstdstd-refeh"]h$]h&]uh1j?hj44ubah}(h]h ]h"]h$]h&]refdocjX refdomainjB4reftyperef refexplicitrefwarnj^ build_bissbsuh1hhhhMzhj4ubh]}(hjhj4hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMzhj4ubah}(h]h ]h"]h$]h&]uh1jhj 4hhhhhNubh)}(hA lot can go wrong at this stage, but the instructions below will help you help yourself. Another subsection explains how to directly package your kernel up as deb, rpm or tar file.h]hA lot can go wrong at this stage, but the instructions below will help you help yourself. Another subsection explains how to directly package your kernel up as deb, rpm or tar file.}(hjf4hjd4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM}hj 4hhubh)}(hhh](h)}(hDealing with build errorsh]hDealing with build errors}(hjw4hju4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjr4hhhhhMubh)}(hXWhen a build error occurs, it might be caused by some aspect of your machine's setup that often can be fixed quickly; other times though the problem lies in the code and can only be fixed by a developer. A close examination of the failure messages coupled with some research on the internet will often tell you which of the two it is. To perform such investigation, restart the build process like this::h]hXWhen a build error occurs, it might be caused by some aspect of your machine’s setup that often can be fixed quickly; other times though the problem lies in the code and can only be fixed by a developer. A close examination of the failure messages coupled with some research on the internet will often tell you which of the two it is. To perform such investigation, restart the build process like this:}(hXWhen a build error occurs, it might be caused by some aspect of your machine's setup that often can be fixed quickly; other times though the problem lies in the code and can only be fixed by a developer. A close examination of the failure messages coupled with some research on the internet will often tell you which of the two it is. To perform such investigation, restart the build process like this:hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjr4hhubj*)}(hmake V=1h]hmake V=1}(hhhj4ubah}(h]h ]h"]h$]h&]hhuh1j)hhhMhjr4hhubh)}(hX,The ``V=1`` activates verbose output, which might be needed to see the actual error. To make it easier to spot, this command also omits the ``-j $(nproc --all)`` used earlier to utilize every CPU core in the system for the job -- but this parallelism also results in some clutter when failures occur.h](hThe }(hThe hj4hhhNhNubj5)}(h``V=1``h]hV=1}(hhhj4hhhNhNubah}(h]h ]h"]h$]h&]uh1j4hj4ubh activates verbose output, which might be needed to see the actual error. To make it easier to spot, this command also omits the }(h activates verbose output, which might be needed to see the actual error. To make it easier to spot, this command also omits the hj4hhhNhNubj5)}(h``-j $(nproc --all)``h]h-j $(nproc --all)}(hhhj4hhhNhNubah}(h]h ]h"]h$]h&]uh1j4hj4ubh used earlier to utilize every CPU core in the system for the job -- but this parallelism also results in some clutter when failures occur.}(h used earlier to utilize every CPU core in the system for the job -- but this parallelism also results in some clutter when failures occur.hj4hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhjr4hhubh)}(hXAfter a few seconds the build process should run into the error again. Now try to find the most crucial line describing the problem. Then search the internet for the most important and non-generic section of that line (say 4 to 8 words); avoid or remove anything that looks remotely system-specific, like your username or local path names like ``/home/username/linux/``. First try your regular internet search engine with that string, afterwards search Linux kernel mailing lists via `lore.kernel.org/all/ `_.h](hXXAfter a few seconds the build process should run into the error again. Now try to find the most crucial line describing the problem. Then search the internet for the most important and non-generic section of that line (say 4 to 8 words); avoid or remove anything that looks remotely system-specific, like your username or local path names like }(hXXAfter a few seconds the build process should run into the error again. Now try to find the most crucial line describing the problem. Then search the internet for the most important and non-generic section of that line (say 4 to 8 words); avoid or remove anything that looks remotely system-specific, like your username or local path names like hj4hhhNhNubj5)}(h``/home/username/linux/``h]h/home/username/linux/}(hhhj4hhhNhNubah}(h]h ]h"]h$]h&]uh1j4hj4ubhs. First try your regular internet search engine with that string, afterwards search Linux kernel mailing lists via }(hs. First try your regular internet search engine with that string, afterwards search Linux kernel mailing lists via hj4hhhNhNubjT)}(h6`lore.kernel.org/all/ `_h]hlore.kernel.org/all/}(hlore.kernel.org/all/hj4hhhNhNubah}(h]h ]h"]h$]h&]namej4jfhttps://lore.kernel.org/all/uh1jShj4ubj)}(h h]h}(h]lore-kernel-org-allah ]h"]lore.kernel.org/all/ah$]h&]refurij5uh1jjuKhj4ubh.}(hj$hj4hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhjr4hhubh)}(hX;This most of the time will find something that will explain what is wrong; quite often one of the hits will provide a solution for your problem, too. If you do not find anything that matches your problem, try again from a different angle by modifying your search terms or using another line from the error messages.h]hX;This most of the time will find something that will explain what is wrong; quite often one of the hits will provide a solution for your problem, too. If you do not find anything that matches your problem, try again from a different angle by modifying your search terms or using another line from the error messages.}(hj5hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjr4hhubh)}(hXIn the end, most issues you run into have likely been encountered and reported by others already. That includes issues where the cause is not your system, but lies in the code. If you run into one of those, you might thus find a solution (e.g. a patch) or workaround for your issue, too.h]hXIn the end, most issues you run into have likely been encountered and reported by others already. That includes issues where the cause is not your system, but lies in the code. If you run into one of those, you might thus find a solution (e.g. a patch) or workaround for your issue, too.}(hj)5hj'5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjr4hhubeh}(h]dealing-with-build-errorsah ]h"]dealing with build errorsah$]h&]uh1hhj 4hhhhhMubh)}(hhh](h)}(hPackage your kernel uph]hPackage your kernel up}(hjB5hj@5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj=5hhhhhMubh)}(hX+The step-by-step guide uses the default make targets (e.g. 'bzImage' and 'modules' on x86) to build the image and the modules of your kernel, which later steps of the guide then install. You instead can also directly build everything and directly package it up by using one of the following targets:h]hX3The step-by-step guide uses the default make targets (e.g. ‘bzImage’ and ‘modules’ on x86) to build the image and the modules of your kernel, which later steps of the guide then install. You instead can also directly build everything and directly package it up by using one of the following targets:}(hjP5hjN5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj=5hhubj)}(hhh](j)}(h@``make -j $(nproc --all) bindeb-pkg`` to generate a deb package h]h)}(h?``make -j $(nproc --all) bindeb-pkg`` to generate a deb packageh](j5)}(h%``make -j $(nproc --all) bindeb-pkg``h]h!make -j $(nproc --all) bindeb-pkg}(hhhjg5hhhNhNubah}(h]h ]h"]h$]h&]uh1j4hjc5ubh to generate a deb package}(h to generate a deb packagehjc5hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhj_5ubah}(h]h ]h"]h$]h&]uh1jhj\5hhhhhNubj)}(h@``make -j $(nproc --all) binrpm-pkg`` to generate a rpm package h]h)}(h?``make -j $(nproc --all) binrpm-pkg`` to generate a rpm packageh](j5)}(h%``make -j $(nproc --all) binrpm-pkg``h]h!make -j $(nproc --all) binrpm-pkg}(hhhj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j4hj5ubh to generate a rpm package}(h to generate a rpm packagehj5hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhj5ubah}(h]h ]h"]h$]h&]uh1jhj\5hhhhhNubj)}(hK``make -j $(nproc --all) tarbz2-pkg`` to generate a bz2 compressed tarball h]h)}(hJ``make -j $(nproc --all) tarbz2-pkg`` to generate a bz2 compressed tarballh](j5)}(h%``make -j $(nproc --all) tarbz2-pkg``h]h!make -j $(nproc --all) tarbz2-pkg}(hhhj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j4hj5ubh% to generate a bz2 compressed tarball}(h% to generate a bz2 compressed tarballhj5hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhj5ubah}(h]h ]h"]h$]h&]uh1jhj\5hhhhhNubeh}(h]h ]h"]h$]h&]jjuh1jhhhMhj=5hhubh)}(hThis is just a selection of available make targets for this purpose, see ``make help`` for others. You can also use these targets after running ``make -j $(nproc --all)``, as they will pick up everything already built.h](hIThis is just a selection of available make targets for this purpose, see }(hIThis is just a selection of available make targets for this purpose, see hj5hhhNhNubj5)}(h ``make help``h]h make help}(hhhj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j4hj5ubh: for others. You can also use these targets after running }(h: for others. You can also use these targets after running hj5hhhNhNubj5)}(h``make -j $(nproc --all)``h]hmake -j $(nproc --all)}(hhhj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j4hj5ubh0, as they will pick up everything already built.}(h0, as they will pick up everything already built.hj5hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhj=5hhubh)}(hX/If you employ the targets to generate deb or rpm packages, ignore the step-by-step guide's instructions on installing and removing your kernel; instead install and remove the packages using the package utility for the format (e.g. dpkg and rpm) or a package management utility build on top of them (apt, aptitude, dnf/yum, zypper, ...). Be aware that the packages generated using these two make targets are designed to work on various distributions utilizing those formats, they thus will sometimes behave differently than your distribution's kernel packages.h]hX3If you employ the targets to generate deb or rpm packages, ignore the step-by-step guide’s instructions on installing and removing your kernel; instead install and remove the packages using the package utility for the format (e.g. dpkg and rpm) or a package management utility build on top of them (apt, aptitude, dnf/yum, zypper, ...). Be aware that the packages generated using these two make targets are designed to work on various distributions utilizing those formats, they thus will sometimes behave differently than your distribution’s kernel packages.}(hj6hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj=5hhubh)}(h2[:ref:`back to step-by-step guide `]h](h[}(hjhj6hhhNhNubh)}(h0:ref:`back to step-by-step guide `h]j@)}(hj'6h]hback to step-by-step guide}(hhhj)6hhhNhNubah}(h]h ](jKstdstd-refeh"]h$]h&]uh1j?hj%6ubah}(h]h ]h"]h$]h&]refdocjX refdomainj36reftyperef refexplicitrefwarnj^ build_bissbsuh1hhhhMhj6ubh]}(hjhj6hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhj=5hhubj)}(h.. _install_bisref:h]h}(h]h ]h"]h$]h&]jinstall-bisrefuh1jhMhj=5hhhhubeh}(h]package-your-kernel-upah ]h"]package your kernel upah$]h&]uh1hhj 4hhhhhMubeh}(h](build-your-kernelj3eh ]h"](build your kernel build_bisrefeh$]h&]uh1hhj1hhhhhMxj}jh6j3sj}j3j3subh)}(hhh](h)}(hPut the kernel in placeh]hPut the kernel in place}(hjr6hjp6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjm6hhhhhMubj)}(hhh]h)}(hB*Install the kernel you just built.* [:ref:`... `]h](j')}(h$*Install the kernel you just built.*h]h"Install the kernel you just built.}(hhhj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j&hj6ubh [}(h [hj6hhhNhNubh)}(h:ref:`... `h]j@)}(hj6h]h...}(hhhj6hhhNhNubah}(h]h ](jKstdstd-refeh"]h$]h&]uh1j?hj6ubah}(h]h ]h"]h$]h&]refdocjX refdomainj6reftyperef refexplicitrefwarnj^install_bissbsuh1hhhhMhj6ubh]}(hjhj6hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhj~6ubah}(h]h ]h"]h$]h&]uh1jhjm6hhhhhNubh)}(hWhat you need to do after executing the command in the step-by-step guide depends on the existence and the implementation of ``/sbin/installkernel`` executable on your distribution.h](h}What you need to do after executing the command in the step-by-step guide depends on the existence and the implementation of }(h}What you need to do after executing the command in the step-by-step guide depends on the existence and the implementation of hj6hhhNhNubj5)}(h``/sbin/installkernel``h]h/sbin/installkernel}(hhhj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j4hj6ubh! executable on your distribution.}(h! executable on your distribution.hj6hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhjm6hhubh)}(hIf installkernel is found, the kernel's build system will delegate the actual installation of your kernel image to this executable, which then performs some or all of these tasks:h]hIf installkernel is found, the kernel’s build system will delegate the actual installation of your kernel image to this executable, which then performs some or all of these tasks:}(hj6hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjm6hhubj)}(hhh](j)}(hOn almost all Linux distributions installkernel will store your kernel's image in /boot/, usually as '/boot/vmlinuz-'; often it will put a 'System.map-' alongside it. h]h)}(hOn almost all Linux distributions installkernel will store your kernel's image in /boot/, usually as '/boot/vmlinuz-'; often it will put a 'System.map-' alongside it.h]hOn almost all Linux distributions installkernel will store your kernel’s image in /boot/, usually as ‘/boot/vmlinuz-’; often it will put a ‘System.map-’ alongside it.}(hj7hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj6ubah}(h]h ]h"]h$]h&]uh1jhj6hhhhhNubj)}(hXOn most distributions installkernel will then generate an 'initramfs' (sometimes also called 'initrd'), which usually are stored as '/boot/initramfs-.img' or '/boot/initrd-'. Commodity distributions rely on this file for booting, hence ensure to execute the make target 'modules_install' first, as your distribution's initramfs generator otherwise will be unable to find the modules that go into the image. h]h)}(hXOn most distributions installkernel will then generate an 'initramfs' (sometimes also called 'initrd'), which usually are stored as '/boot/initramfs-.img' or '/boot/initrd-'. Commodity distributions rely on this file for booting, hence ensure to execute the make target 'modules_install' first, as your distribution's initramfs generator otherwise will be unable to find the modules that go into the image.h]hXOn most distributions installkernel will then generate an ‘initramfs’ (sometimes also called ‘initrd’), which usually are stored as ‘/boot/initramfs-.img’ or ‘/boot/initrd-’. Commodity distributions rely on this file for booting, hence ensure to execute the make target ‘modules_install’ first, as your distribution’s initramfs generator otherwise will be unable to find the modules that go into the image.}(hj7hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj7ubah}(h]h ]h"]h$]h&]uh1jhj6hhhhhNubj)}(hoOn some distributions installkernel will then add an entry for your kernel to your bootloader's configuration. h]h)}(hnOn some distributions installkernel will then add an entry for your kernel to your bootloader's configuration.h]hpOn some distributions installkernel will then add an entry for your kernel to your bootloader’s configuration.}(hj17hj/7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj+7ubah}(h]h ]h"]h$]h&]uh1jhj6hhhhhNubeh}(h]h ]h"]h$]h&]jjuh1jhhhMhjm6hhubh)}(hYou have to take care of some or all of the tasks yourself, if your distribution lacks a installkernel script or does only handle part of them. Consult the distribution's documentation for details. If in doubt, install the kernel manually::h]hYou have to take care of some or all of the tasks yourself, if your distribution lacks a installkernel script or does only handle part of them. Consult the distribution’s documentation for details. If in doubt, install the kernel manually:}(hYou have to take care of some or all of the tasks yourself, if your distribution lacks a installkernel script or does only handle part of them. Consult the distribution's documentation for details. If in doubt, install the kernel manually:hjI7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjm6hhubj*)}(hsudo install -m 0600 $(make -s image_name) /boot/vmlinuz-$(make -s kernelrelease) sudo install -m 0600 System.map /boot/System.map-$(make -s kernelrelease)h]hsudo install -m 0600 $(make -s image_name) /boot/vmlinuz-$(make -s kernelrelease) sudo install -m 0600 System.map /boot/System.map-$(make -s kernelrelease)D}(hhhjX7ubah}(h]h ]h"]h$]h&]hhuh1j)hhhMhjm6hhubh)}(hNow generate your initramfs using the tools your distribution provides for this process. Afterwards add your kernel to your bootloader configuration and reboot.h]hNow generate your initramfs using the tools your distribution provides for this process. Afterwards add your kernel to your bootloader configuration and reboot.}(hjh7hjf7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjm6hhubh)}(h4[:ref:`back to step-by-step guide `]h](h[}(hjhjt7hhhNhNubh)}(h2:ref:`back to step-by-step guide `h]j@)}(hj~7h]hback to step-by-step guide}(hhhj7hhhNhNubah}(h]h ](jKstdstd-refeh"]h$]h&]uh1j?hj|7ubah}(h]h ]h"]h$]h&]refdocjX refdomainj7reftyperef refexplicitrefwarnj^install_bissbsuh1hhhhMhjt7ubh]}(hjhjt7hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhjm6hhubj)}(h.. _storagespace_bisref:h]h}(h]h ]h"]h$]h&]jstoragespace-bisrefuh1jhMhjm6hhhhubeh}(h](put-the-kernel-in-placejY6eh ]h"](put the kernel in placeinstall_bisrefeh$]h&]uh1hhj1hhhhhMj}j7jO6sj}jY6jO6subh)}(hhh](h)}(hStorage requirements per kernelh]hStorage requirements per kernel}(hj7hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj7hhhhhMubj)}(hhh]h)}(h*Check how much storage space the kernel, its modules, and other related files like the initramfs consume.* [:ref:`... `]h](j')}(hk*Check how much storage space the kernel, its modules, and other related files like the initramfs consume.*h]hiCheck how much storage space the kernel, its modules, and other related files like the initramfs consume.}(hhhj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j&hj7ubh [}(h [hj7hhhNhNubh)}(h :ref:`... `h]j@)}(hj7h]h...}(hhhj7hhhNhNubah}(h]h ](jKstdstd-refeh"]h$]h&]uh1j?hj7ubah}(h]h ]h"]h$]h&]refdocjX refdomainj7reftyperef refexplicitrefwarnj^storagespace_bissbsuh1hhhhMhj7ubh]}(hjhj7hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhj7ubah}(h]h ]h"]h$]h&]uh1jhj7hhhhhNubh)}(hXnThe kernels built during a bisection consume quite a bit of space in /boot/ and /lib/modules/, especially if you enabled debug symbols. That makes it easy to fill up volumes during a bisection -- and due to that even kernels which used to work earlier might fail to boot. To prevent that you will need to know how much space each installed kernel typically requires.h]hXnThe kernels built during a bisection consume quite a bit of space in /boot/ and /lib/modules/, especially if you enabled debug symbols. That makes it easy to fill up volumes during a bisection -- and due to that even kernels which used to work earlier might fail to boot. To prevent that you will need to know how much space each installed kernel typically requires.}(hj8hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj7hhubh)}(hX Note, most of the time the pattern '/boot/*$(make -s kernelrelease)*' used in the guide will match all files needed to boot your kernel -- but neither the path nor the naming scheme are mandatory. On some distributions you thus will need to look in different places.h](h,Note, most of the time the pattern ‘/boot/}(h*Note, most of the time the pattern '/boot/hj%8hhhNhNubj')}(h*$(make -s kernelrelease)*h]h$(make -s kernelrelease)}(hhhj.8hhhNhNubah}(h]h ]h"]h$]h&]uh1j&hj%8ubh’ used in the guide will match all files needed to boot your kernel -- but neither the path nor the naming scheme are mandatory. On some distributions you thus will need to look in different places.}(h' used in the guide will match all files needed to boot your kernel -- but neither the path nor the naming scheme are mandatory. On some distributions you thus will need to look in different places.hj%8hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhj7hhubh)}(h9[:ref:`back to step-by-step guide `]h](h[}(hjhjG8hhhNhNubh)}(h7:ref:`back to step-by-step guide `h]j@)}(hjQ8h]hback to step-by-step guide}(hhhjS8hhhNhNubah}(h]h ](jKstdstd-refeh"]h$]h&]uh1j?hjO8ubah}(h]h ]h"]h$]h&]refdocjX refdomainj]8reftyperef refexplicitrefwarnj^storagespace_bissbsuh1hhhhMhjG8ubh]}(hjhjG8hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhj7hhubj)}(h.. _tainted_bisref:h]h}(h]h ]h"]h$]h&]jtainted-bisrefuh1jhMhj7hhhhubeh}(h](storage-requirements-per-kernelj7eh ]h"](storage requirements per kernelstoragespace_bisrefeh$]h&]uh1hhj1hhhhhMj}j8j7sj}j7j7subh)}(hhh](h)}(h;Check if your newly built kernel considers itself 'tainted'h]h?Check if your newly built kernel considers itself ‘tainted’}(hj8hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj8hhhhhMubj)}(hhh]h)}(hO*Check if the kernel marked itself as 'tainted'.* [:ref:`... `]h](j')}(h1*Check if the kernel marked itself as 'tainted'.*h]h3Check if the kernel marked itself as ‘tainted’.}(hhhj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j&hj8ubh [}(h [hj8hhhNhNubh)}(h:ref:`... `h]j@)}(hj8h]h...}(hhhj8hhhNhNubah}(h]h ](jKstdstd-refeh"]h$]h&]uh1j?hj8ubah}(h]h ]h"]h$]h&]refdocjX refdomainj8reftyperef refexplicitrefwarnj^tainted_bissbsuh1hhhhMhj8ubh]}(hjhj8hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhj8ubah}(h]h ]h"]h$]h&]uh1jhj8hhhhhNubh)}(hX#Linux marks itself as tainted when something happens that potentially leads to follow-up errors that look totally unrelated. That is why developers might ignore or react scantly to reports from tainted kernels -- unless of course the kernel set the flag right when the reported bug occurred.h]hX#Linux marks itself as tainted when something happens that potentially leads to follow-up errors that look totally unrelated. That is why developers might ignore or react scantly to reports from tainted kernels -- unless of course the kernel set the flag right when the reported bug occurred.}(hj8hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM hj8hhubh)}(hThat's why you want check why a kernel is tainted as explained in Documentation/admin-guide/tainted-kernels.rst; doing so is also in your own interest, as your testing might be flawed otherwise.h]hThat’s why you want check why a kernel is tainted as explained in Documentation/admin-guide/tainted-kernels.rst; doing so is also in your own interest, as your testing might be flawed otherwise.}(hj8hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj8hhubh)}(h4[:ref:`back to step-by-step guide `]h](h[}(hjhj9hhhNhNubh)}(h2:ref:`back to step-by-step guide `h]j@)}(hj9h]hback to step-by-step guide}(hhhj9hhhNhNubah}(h]h ](jKstdstd-refeh"]h$]h&]uh1j?hj9ubah}(h]h ]h"]h$]h&]refdocjX refdomainj9reftyperef refexplicitrefwarnj^tainted_bissbsuh1hhhhMhj9ubh]}(hjhj9hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhj8hhubj)}(h.. _recheckbroken_bisref:h]h}(h]h ]h"]h$]h&]jrecheckbroken-bisrefuh1jhMhj8hhhhubeh}(h](9check-if-your-newly-built-kernel-considers-itself-taintedj8eh ]h"](;check if your newly built kernel considers itself 'tainted'tainted_bisrefeh$]h&]uh1hhj1hhhhhMj}jI9jy8sj}j8jy8subh)}(hhh](h)}(h6Check the kernel built from a recent mainline codebaseh]h6Check the kernel built from a recent mainline codebase}(hjS9hjQ9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjN9hhhhhMubj)}(hhh]h)}(h\*Verify if your bug occurs with the newly built kernel.* [:ref:`... `]h](j')}(h8*Verify if your bug occurs with the newly built kernel.*h]h6Verify if your bug occurs with the newly built kernel.}(hhhjf9hhhNhNubah}(h]h ]h"]h$]h&]uh1j&hjb9ubh [}(h [hjb9hhhNhNubh)}(h!:ref:`... `h]j@)}(hj{9h]h...}(hhhj}9hhhNhNubah}(h]h ](jKstdstd-refeh"]h$]h&]uh1j?hjy9ubah}(h]h ]h"]h$]h&]refdocjX refdomainj9reftyperef refexplicitrefwarnj^recheckbroken_bissbsuh1hhhhMhjb9ubh]}(hjhjb9hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhj_9ubah}(h]h ]h"]h$]h&]uh1jhjN9hhhhhNubh)}(hThere are a couple of reasons why your bug or regression might not show up with the kernel you built from the latest codebase. These are the most frequent:h]hThere are a couple of reasons why your bug or regression might not show up with the kernel you built from the latest codebase. These are the most frequent:}(hj9hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjN9hhubj)}(hhh](j)}(hThe bug was fixed meanwhile. h]h)}(hThe bug was fixed meanwhile.h]hThe bug was fixed meanwhile.}(hj9hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj9ubah}(h]h ]h"]h$]h&]uh1jhj9hhhhhNubj)}(hWhat you suspected to be a regression was caused by a change in the build configuration the provider of your kernel carried out. h]h)}(hWhat you suspected to be a regression was caused by a change in the build configuration the provider of your kernel carried out.h]hWhat you suspected to be a regression was caused by a change in the build configuration the provider of your kernel carried out.}(hj9hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM!hj9ubah}(h]h ]h"]h$]h&]uh1jhj9hhhhhNubj)}(hYour problem might be a race condition that does not show up with your kernel; the trimmed build configuration, a different setting for debug symbols, the compiler used, and various other things can cause this. h]h)}(hYour problem might be a race condition that does not show up with your kernel; the trimmed build configuration, a different setting for debug symbols, the compiler used, and various other things can cause this.h]hYour problem might be a race condition that does not show up with your kernel; the trimmed build configuration, a different setting for debug symbols, the compiler used, and various other things can cause this.}(hj9hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM$hj9ubah}(h]h ]h"]h$]h&]uh1jhj9hhhhhNubj)}(hIn case you encountered the regression with a stable/longterm kernel it might be a problem that is specific to that series; the next step in this guide will check this. h]h)}(hIn case you encountered the regression with a stable/longterm kernel it might be a problem that is specific to that series; the next step in this guide will check this.h]hIn case you encountered the regression with a stable/longterm kernel it might be a problem that is specific to that series; the next step in this guide will check this.}(hj:hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM(hj:ubah}(h]h ]h"]h$]h&]uh1jhj9hhhhhNubeh}(h]h ]h"]h$]h&]jjuh1jhhhMhjN9hhubh)}(h:[:ref:`back to step-by-step guide `]h](h[}(hjhj :hhhNhNubh)}(h8:ref:`back to step-by-step guide `h]j@)}(hj*:h]hback to step-by-step guide}(hhhj,:hhhNhNubah}(h]h ](jKstdstd-refeh"]h$]h&]uh1j?hj(:ubah}(h]h ]h"]h$]h&]refdocjX refdomainj6:reftyperef refexplicitrefwarnj^recheckbroken_bissbsuh1hhhhM,hj :ubh]}(hjhj :hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhM,hjN9hhubj)}(h.. _recheckstablebroken_bisref:h]h}(h]h ]h"]h$]h&]jrecheckstablebroken-bisrefuh1jhM.hjN9hhhhubeh}(h](6check-the-kernel-built-from-a-recent-mainline-codebasejB9eh ]h"](6check the kernel built from a recent mainline codebaserecheckbroken_bisrefeh$]h&]uh1hhj1hhhhhMj}jc:j89sj}jB9j89subh)}(hhh](h)}(h?Check the kernel built from the latest stable/longterm codebaseh]h?Check the kernel built from the latest stable/longterm codebase}(hjm:hjk:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjh:hhhhhM1ubj)}(hhh]h)}(hX!*Are you facing a regression within a stable/longterm release, but failed to reproduce it with the kernel you just built using the latest mainline sources? Then check if the latest codebase for the particular series might already fix the problem.* [:ref:`... `]h](j')}(h*Are you facing a regression within a stable/longterm release, but failed to reproduce it with the kernel you just built using the latest mainline sources? Then check if the latest codebase for the particular series might already fix the problem.*h]hAre you facing a regression within a stable/longterm release, but failed to reproduce it with the kernel you just built using the latest mainline sources? Then check if the latest codebase for the particular series might already fix the problem.}(hhhj:hhhNhNubah}(h]h ]h"]h$]h&]uh1j&hj|:ubh [}(h [hj|:hhhNhNubh)}(h':ref:`... `h]j@)}(hj:h]h...}(hhhj:hhhNhNubah}(h]h ](jKstdstd-refeh"]h$]h&]uh1j?hj:ubah}(h]h ]h"]h$]h&]refdocjX refdomainj:reftyperef refexplicitrefwarnj^recheckstablebroken_bissbsuh1hhhhM3hj|:ubh]}(hjhj|:hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhM3hjy:ubah}(h]h ]h"]h$]h&]uh1jhjh:hhhhhNubh)}(haIf this kernel does not show the regression either, there most likely is no need for a bisection.h]haIf this kernel does not show the regression either, there most likely is no need for a bisection.}(hj:hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM8hjh:hhubh)}(h@[:ref:`back to step-by-step guide `]h](h[}(hjhj:hhhNhNubh)}(h>:ref:`back to step-by-step guide `h]j@)}(hj:h]hback to step-by-step guide}(hhhj:hhhNhNubah}(h]h ](jKstdstd-refeh"]h$]h&]uh1j?hj:ubah}(h]h ]h"]h$]h&]refdocjX refdomainj:reftyperef refexplicitrefwarnj^recheckstablebroken_bissbsuh1hhhhM;hj:ubh]}(hjhj:hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhM;hjh:hhubj)}(h.. _introworkingcheck_bisref:h]h}(h]h ]h"]h$]h&]jintroworkingcheck-bisrefuh1jhM=hjh:hhhhubeh}(h](?check-the-kernel-built-from-the-latest-stable-longterm-codebasej\:eh ]h"](?check the kernel built from the latest stable/longterm codebaserecheckstablebroken_bisrefeh$]h&]uh1hhj1hhhhhM1j}j;jR:sj}j\:jR:subeh}(h](5try-to-reproduce-the-problem-with-the-latest-codebasej1eh ]h"](5try to reproduce the problem with the latest codebaseintrolatestcheck_bisrefeh$]h&]uh1hhj hhhhhM4j}j;j1sj}j1j1subh)}(hhh](h)}(h0Ensure the 'good' version is really working wellh]h4Ensure the ‘good’ version is really working well}(hj);hj';hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj$;hhhhhM@ubj)}(hhh]h)}(hS*Check if the kernels you build work fine.* [:ref:`... `]h](j')}(h+*Check if the kernels you build work fine.*h]h)Check if the kernels you build work fine.}(hhhj<;hhhNhNubah}(h]h ]h"]h$]h&]uh1j&hj8;ubh [}(h [hj8;hhhNhNubh)}(h%:ref:`... `h]j@)}(hjQ;h]h...}(hhhjS;hhhNhNubah}(h]h ](jKstdstd-refeh"]h$]h&]uh1j?hjO;ubah}(h]h ]h"]h$]h&]refdocjX refdomainj];reftyperef refexplicitrefwarnj^introworkingcheck_bissbsuh1hhhhMBhj8;ubh]}(hjhj8;hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMBhj5;ubah}(h]h ]h"]h$]h&]uh1jhj$;hhhhhNubh)}(hThis section will reestablish a known working base. Skipping it might be appealing, but is usually a bad idea, as it does something important:h]hThis section will reestablish a known working base. Skipping it might be appealing, but is usually a bad idea, as it does something important:}(hj;hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMEhj$;hhubh)}(hX8It will ensure the .config file you prepared earlier actually works as expected. That is in your own interest, as trimming the configuration is not foolproof -- and you might be building and testing ten or more kernels for nothing before starting to suspect something might be wrong with the build configuration.h]hX8It will ensure the .config file you prepared earlier actually works as expected. That is in your own interest, as trimming the configuration is not foolproof -- and you might be building and testing ten or more kernels for nothing before starting to suspect something might be wrong with the build configuration.}(hj;hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMHhj$;hhubh)}(hOThat alone is reason enough to spend the time on this, but not the only reason.h]hOThat alone is reason enough to spend the time on this, but not the only reason.}(hj;hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMMhj$;hhubh)}(hXMany readers of this guide normally run kernels that are patched, use add-on modules, or both. Those kernels thus are not considered 'vanilla' -- therefore it's possible that the thing that regressed might never have worked in vanilla builds of the 'good' version in the first place.h]hX%Many readers of this guide normally run kernels that are patched, use add-on modules, or both. Those kernels thus are not considered ‘vanilla’ -- therefore it’s possible that the thing that regressed might never have worked in vanilla builds of the ‘good’ version in the first place.}(hj;hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMOhj$;hhubh)}(hThere is a third reason for those that noticed a regression between stable/longterm kernels of different series (e.g. 6.0.13..6.1.5): it will ensure the kernel version you assumed to be 'good' earlier in the process (e.g. 6.0) actually is working.h]hThere is a third reason for those that noticed a regression between stable/longterm kernels of different series (e.g. 6.0.13..6.1.5): it will ensure the kernel version you assumed to be ‘good’ earlier in the process (e.g. 6.0) actually is working.}(hj;hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMThj$;hhubh)}(h>[:ref:`back to step-by-step guide `]h](h[}(hjhj;hhhNhNubh)}(h<:ref:`back to step-by-step guide `h]j@)}(hj;h]hback to step-by-step guide}(hhhj;hhhNhNubah}(h]h ](jKstdstd-refeh"]h$]h&]uh1j?hj;ubah}(h]h ]h"]h$]h&]refdocjX refdomainj;reftyperef refexplicitrefwarnj^introworkingcheck_bissbsuh1hhhhMYhj;ubh]}(hjhj;hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMYhj$;hhubj)}(h.. _recheckworking_bisref:h]h}(h]h ]h"]h$]h&]jrecheckworking-bisrefuh1jhM[hj$;hhhhubh)}(hhh](h)}(h+Build your own version of the 'good' kernelh]h/Build your own version of the ‘good’ kernel}(hj<hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj<hhhhhM^ubj)}(hhh]h)}(h*Build your own variant of the working kernel and check if the feature that regressed works as expected with it.* [:ref:`... `]h](j')}(hq*Build your own variant of the working kernel and check if the feature that regressed works as expected with it.*h]hoBuild your own variant of the working kernel and check if the feature that regressed works as expected with it.}(hhhj<hhhNhNubah}(h]h ]h"]h$]h&]uh1j&hj<ubh [}(h [hj<hhhNhNubh)}(h":ref:`... `h]j@)}(hj/<h]h...}(hhhj1<hhhNhNubah}(h]h ](jKstdstd-refeh"]h$]h&]uh1j?hj-<ubah}(h]h ]h"]h$]h&]refdocjX refdomainj;<reftyperef refexplicitrefwarnj^recheckworking_bissbsuh1hhhhM`hj<ubh]}(hjhj<hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhM`hj<ubah}(h]h ]h"]h$]h&]uh1jhj<hhhhhNubh)}(hIn case the feature that broke with newer kernels does not work with your first self-built kernel, find and resolve the cause before moving on. There are a multitude of reasons why this might happen. Some ideas where to look:h]hIn case the feature that broke with newer kernels does not work with your first self-built kernel, find and resolve the cause before moving on. There are a multitude of reasons why this might happen. Some ideas where to look:}(hj_<hj]<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMchj<hhubj)}(hhh](j)}(hZCheck the taint status and the output of ``dmesg``, maybe something unrelated went wrong. h]h)}(hYCheck the taint status and the output of ``dmesg``, maybe something unrelated went wrong.h](h)Check the taint status and the output of }(h)Check the taint status and the output of hjr<hhhNhNubj5)}(h ``dmesg``h]hdmesg}(hhhj{<hhhNhNubah}(h]h ]h"]h$]h&]uh1j4hjr<ubh', maybe something unrelated went wrong.}(h', maybe something unrelated went wrong.hjr<hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMghjn<ubah}(h]h ]h"]h$]h&]uh1jhjk<hhhhhNubj)}(hX2Maybe localmodconfig did something odd and disabled the module required to test the feature? Then you might want to recreate a .config file based on the one from the last working kernel and skip trimming it down; manually disabling some features in the .config might work as well to reduce the build time. h]h)}(hX1Maybe localmodconfig did something odd and disabled the module required to test the feature? Then you might want to recreate a .config file based on the one from the last working kernel and skip trimming it down; manually disabling some features in the .config might work as well to reduce the build time.h]hX1Maybe localmodconfig did something odd and disabled the module required to test the feature? Then you might want to recreate a .config file based on the one from the last working kernel and skip trimming it down; manually disabling some features in the .config might work as well to reduce the build time.}(hj<hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMjhj<ubah}(h]h ]h"]h$]h&]uh1jhjk<hhhhhNubj)}(hMaybe it's not a kernel regression and something that is caused by some fluke, a broken initramfs (also known as initrd), new firmware files, or an updated userland software? h]h)}(hMaybe it's not a kernel regression and something that is caused by some fluke, a broken initramfs (also known as initrd), new firmware files, or an updated userland software?h]hMaybe it’s not a kernel regression and something that is caused by some fluke, a broken initramfs (also known as initrd), new firmware files, or an updated userland software?}(hj<hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMohj<ubah}(h]h ]h"]h$]h&]uh1jhjk<hhhhhNubj)}(hmMaybe it was a feature added to your distributor's kernel which vanilla Linux at that point never supported? h]h)}(hlMaybe it was a feature added to your distributor's kernel which vanilla Linux at that point never supported?h]hnMaybe it was a feature added to your distributor’s kernel which vanilla Linux at that point never supported?}(hj<hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMshj<ubah}(h]h ]h"]h$]h&]uh1jhjk<hhhhhNubeh}(h]h ]h"]h$]h&]jjuh1jhhhMghj<hhubh)}(hNote, if you found and fixed problems with the .config file, you want to use it to build another kernel from the latest codebase, as your earlier tests with mainline and the latest version from an affected stable/longterm series were most likely flawed.h]hNote, if you found and fixed problems with the .config file, you want to use it to build another kernel from the latest codebase, as your earlier tests with mainline and the latest version from an affected stable/longterm series were most likely flawed.}(hj<hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMvhj<hhubh)}(h;[:ref:`back to step-by-step guide `]h](h[}(hjhj<hhhNhNubh)}(h9:ref:`back to step-by-step guide `h]j@)}(hj=h]hback to step-by-step guide}(hhhj=hhhNhNubah}(h]h ](jKstdstd-refeh"]h$]h&]uh1j?hj<ubah}(h]h ]h"]h$]h&]refdocjX refdomainj =reftyperef refexplicitrefwarnj^recheckworking_bissbsuh1hhhhM{hj<ubh]}(hjhj<hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhM{hj<hhubeh}(h]()build-your-own-version-of-the-good-kernelj<eh ]h"](+build your own version of the 'good' kernelrecheckworking_bisrefeh$]h&]uh1hhj$;hhhhhM^j}j.=j;sj}j<j;subeh}(h](.ensure-the-good-version-is-really-working-wellj ;eh ]h"](0ensure the 'good' version is really working wellintroworkingcheck_bisrefeh$]h&]uh1hhj hhhhhM@j}j9=j;sj}j ;j;subh)}(hhh](h)}(h+Perform a bisection and validate the resulth]h+Perform a bisection and validate the result}(hjC=hjA=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj>=hhhhhM~ubj)}(hhh]h)}(h*With all the preparations and precaution builds taken care of, you are now ready to begin the bisection.* [:ref:`... `]h](j')}(hj*With all the preparations and precaution builds taken care of, you are now ready to begin the bisection.*h]hhWith all the preparations and precaution builds taken care of, you are now ready to begin the bisection.}(hhhjV=hhhNhNubah}(h]h ]h"]h$]h&]uh1j&hjR=ubh [}(h [hjR=hhhNhNubh)}(h:ref:`... `h]j@)}(hjk=h]h...}(hhhjm=hhhNhNubah}(h]h ](jKstdstd-refeh"]h$]h&]uh1j?hji=ubah}(h]h ]h"]h$]h&]refdocjX refdomainjw=reftyperef refexplicitrefwarnj^introbisect_bissbsuh1hhhhMhjR=ubh]}(hjhjR=hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhjO=ubah}(h]h ]h"]h$]h&]uh1jhj>=hhhhhNubh)}(h=The steps in this segment perform and validate the bisection.h]h=The steps in this segment perform and validate the bisection.}(hj=hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj>=hhubh)}(h9[:ref:`back to step-by-step guide `].h](h[}(hjhj=hhhNhNubh)}(h6:ref:`back to step-by-step guide `h]j@)}(hj=h]hback to step-by-step guide}(hhhj=hhhNhNubah}(h]h ](jKstdstd-refeh"]h$]h&]uh1j?hj=ubah}(h]h ]h"]h$]h&]refdocjX refdomainj=reftyperef refexplicitrefwarnj^introbisect_bissbsuh1hhhhMhj=ubh].}(h].hj=hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhj>=hhubj)}(h.. _bisectstart_bisref:h]h}(h]h ]h"]h$]h&]jbisectstart-bisrefuh1jhMhj>=hhhhubh)}(hhh](h)}(hStart the bisectionh]hStart the bisection}(hj=hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj=hhhhhMubj)}(hhh]h)}(h*Start the bisection and tell Git about the versions earlier established as 'good' and 'bad'.* [:ref:`... `]h](j')}(h^*Start the bisection and tell Git about the versions earlier established as 'good' and 'bad'.*h]hdStart the bisection and tell Git about the versions earlier established as ‘good’ and ‘bad’.}(hhhj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j&hj=ubh [}(h [hj=hhhNhNubh)}(h:ref:`... `h]j@)}(hj>h]h...}(hhhj>hhhNhNubah}(h]h ](jKstdstd-refeh"]h$]h&]uh1j?hj>ubah}(h]h ]h"]h$]h&]refdocjX refdomainj>reftyperef refexplicitrefwarnj^bisectstart_bissbsuh1hhhhMhj=ubh]}(hjhj=hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhj=ubah}(h]h ]h"]h$]h&]uh1jhj=hhhhhNubh)}(hThis will start the bisection process; the last of the commands will make Git check out a commit round about half-way between the 'good' and the 'bad' changes for you to test.h]hThis will start the bisection process; the last of the commands will make Git check out a commit round about half-way between the ‘good’ and the ‘bad’ changes for you to test.}(hjB>hj@>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj=hhubh)}(h8[:ref:`back to step-by-step guide `]h](h[}(hjhjN>hhhNhNubh)}(h6:ref:`back to step-by-step guide `h]j@)}(hjX>h]hback to step-by-step guide}(hhhjZ>hhhNhNubah}(h]h ](jKstdstd-refeh"]h$]h&]uh1j?hjV>ubah}(h]h ]h"]h$]h&]refdocjX refdomainjd>reftyperef refexplicitrefwarnj^bisectstart_bissbsuh1hhhhMhjN>ubh]}(hjhjN>hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhj=hhubj)}(h.. _bisectbuild_bisref:h]h}(h]h ]h"]h$]h&]jbisectbuild-bisrefuh1jhMhj=hhhhubeh}(h](start-the-bisectionj=eh ]h"](start the bisectionbisectstart_bisrefeh$]h&]uh1hhj>=hhhhhMj}j>j=sj}j=j=subh)}(hhh](h)}(h'Build a kernel from the bisection pointh]h'Build a kernel from the bisection point}(hj>hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj>hhhhhMubj)}(hhh]h)}(h*Build, install, and boot a kernel from the code Git checked out using the same commands you used earlier.* [:ref:`... `]h](j')}(hk*Build, install, and boot a kernel from the code Git checked out using the same commands you used earlier.*h]hiBuild, install, and boot a kernel from the code Git checked out using the same commands you used earlier.}(hhhj>hhhNhNubah}(h]h ]h"]h$]h&]uh1j&hj>ubh [}(h [hj>hhhNhNubh)}(h:ref:`... `h]j@)}(hj>h]h...}(hhhj>hhhNhNubah}(h]h ](jKstdstd-refeh"]h$]h&]uh1j?hj>ubah}(h]h ]h"]h$]h&]refdocjX refdomainj>reftyperef refexplicitrefwarnj^bisectbuild_bissbsuh1hhhhMhj>ubh]}(hjhj>hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhj>ubah}(h]h ]h"]h$]h&]uh1jhj>hhhhhNubh)}(h(There are two things worth of note here:h]h(There are two things worth of note here:}(hj>hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj>hhubj)}(hhh](j)}(hX,Occasionally building the kernel will fail or it might not boot due some problem in the code at the bisection point. In that case run this command:: git bisect skip Git will then check out another commit nearby which with a bit of luck should work better. Afterwards restart executing this step. h](h)}(hOccasionally building the kernel will fail or it might not boot due some problem in the code at the bisection point. In that case run this command::h]hOccasionally building the kernel will fail or it might not boot due some problem in the code at the bisection point. In that case run this command:}(hOccasionally building the kernel will fail or it might not boot due some problem in the code at the bisection point. In that case run this command:hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj?ubj*)}(hgit bisect skiph]hgit bisect skip}(hhhj?ubah}(h]h ]h"]h$]h&]hhuh1j)hhhMhj?ubh)}(hGit will then check out another commit nearby which with a bit of luck should work better. Afterwards restart executing this step.h]hGit will then check out another commit nearby which with a bit of luck should work better. Afterwards restart executing this step.}(hj%?hj#?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj?ubeh}(h]h ]h"]h$]h&]uh1jhj>hhhhhNubj)}(hXThose slightly odd looking version identifiers can happen during bisections, because the Linux kernel subsystems prepare their changes for a new mainline release (say 6.2) before its predecessor (e.g. 6.1) is finished. They thus base them on a somewhat earlier point like 6.1-rc1 or even 6.0 -- and then get merged for 6.2 without rebasing nor squashing them once 6.1 is out. This leads to those slightly odd looking version identifiers coming up during bisections. h]h)}(hXThose slightly odd looking version identifiers can happen during bisections, because the Linux kernel subsystems prepare their changes for a new mainline release (say 6.2) before its predecessor (e.g. 6.1) is finished. They thus base them on a somewhat earlier point like 6.1-rc1 or even 6.0 -- and then get merged for 6.2 without rebasing nor squashing them once 6.1 is out. This leads to those slightly odd looking version identifiers coming up during bisections.h]hXThose slightly odd looking version identifiers can happen during bisections, because the Linux kernel subsystems prepare their changes for a new mainline release (say 6.2) before its predecessor (e.g. 6.1) is finished. They thus base them on a somewhat earlier point like 6.1-rc1 or even 6.0 -- and then get merged for 6.2 without rebasing nor squashing them once 6.1 is out. This leads to those slightly odd looking version identifiers coming up during bisections.}(hj=?hj;?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj7?ubah}(h]h ]h"]h$]h&]uh1jhj>hhhhhNubeh}(h]h ]h"]h$]h&]jjuh1jhhhMhj>hhubh)}(h8[:ref:`back to step-by-step guide `]h](h[}(hjhjU?hhhNhNubh)}(h6:ref:`back to step-by-step guide `h]j@)}(hj_?h]hback to step-by-step guide}(hhhja?hhhNhNubah}(h]h ](jKstdstd-refeh"]h$]h&]uh1j?hj]?ubah}(h]h ]h"]h$]h&]refdocjX refdomainjk?reftyperef refexplicitrefwarnj^bisectbuild_bissbsuh1hhhhMhjU?ubh]}(hjhjU?hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhj>hhubj)}(h.. _bisecttest_bisref:h]h}(h]h ]h"]h$]h&]jbisecttest-bisrefuh1jhMhj>hhhhubeh}(h]('build-a-kernel-from-the-bisection-pointj>eh ]h"]('build a kernel from the bisection pointbisectbuild_bisrefeh$]h&]uh1hhj>=hhhhhMj}j?j>sj}j>j>subh)}(hhh](h)}(hBisection checkpointh]hBisection checkpoint}(hj?hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj?hhhhhMubj)}(hhh]h)}(hj*Check if the feature that regressed works in the kernel you just built.* [:ref:`... `]h](j')}(hI*Check if the feature that regressed works in the kernel you just built.*h]hGCheck if the feature that regressed works in the kernel you just built.}(hhhj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j&hj?ubh [}(h [hj?hhhNhNubh)}(h:ref:`... `h]j@)}(hj?h]h...}(hhhj?hhhNhNubah}(h]h ](jKstdstd-refeh"]h$]h&]uh1j?hj?ubah}(h]h ]h"]h$]h&]refdocjX refdomainj?reftyperef refexplicitrefwarnj^bisecttest_bissbsuh1hhhhMhj?ubh]}(hjhj?hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhj?ubah}(h]h ]h"]h$]h&]uh1jhj?hhhhhNubh)}(hEnsure what you tell Git is accurate: getting it wrong just one time will bring the rest of the bisection totally off course, hence all testing after that point will be for nothing.h]hEnsure what you tell Git is accurate: getting it wrong just one time will bring the rest of the bisection totally off course, hence all testing after that point will be for nothing.}(hj?hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj?hhubh)}(h7[:ref:`back to step-by-step guide `]h](h[}(hjhj@hhhNhNubh)}(h5:ref:`back to step-by-step guide `h]j@)}(hj@h]hback to step-by-step guide}(hhhj@hhhNhNubah}(h]h ](jKstdstd-refeh"]h$]h&]uh1j?hj@ubah}(h]h ]h"]h$]h&]refdocjX refdomainj@reftyperef refexplicitrefwarnj^bisecttest_bissbsuh1hhhhMhj@ubh]}(hjhj@hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhj?hhubj)}(h.. _bisectlog_bisref:h]h}(h]h ]h"]h$]h&]jbisectlog-bisrefuh1jhMhj?hhhhubeh}(h](bisection-checkpointj?eh ]h"](bisection checkpointbisecttest_bisrefeh$]h&]uh1hhj>=hhhhhMj}jI@j?sj}j?j?subh)}(hhh](h)}(hPut the bisection log awayh]hPut the bisection log away}(hjS@hjQ@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjN@hhhhhMubj)}(hhh]h)}(hi*Store Git's bisection log and the current .config file in a safe place.* [:ref:`... `]h](j')}(hI*Store Git's bisection log and the current .config file in a safe place.*h]hIStore Git’s bisection log and the current .config file in a safe place.}(hhhjf@hhhNhNubah}(h]h ]h"]h$]h&]uh1j&hjb@ubh [}(h [hjb@hhhNhNubh)}(h:ref:`... `h]j@)}(hj{@h]h...}(hhhj}@hhhNhNubah}(h]h ](jKstdstd-refeh"]h$]h&]uh1j?hjy@ubah}(h]h ]h"]h$]h&]refdocjX refdomainj@reftyperef refexplicitrefwarnj^bisectlog_bissbsuh1hhhhMhjb@ubh]}(hjhjb@hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhj_@ubah}(h]h ]h"]h$]h&]uh1jhjN@hhhhhNubh)}(hXAs indicated above: declaring just one kernel wrongly as 'good' or 'bad' will render the end result of a bisection useless. In that case you'd normally have to restart the bisection from scratch. The log can prevent that, as it might allow someone to point out where a bisection likely went sideways -- and then instead of testing ten or more kernels you might only have to build a few to resolve things.h]hXAs indicated above: declaring just one kernel wrongly as ‘good’ or ‘bad’ will render the end result of a bisection useless. In that case you’d normally have to restart the bisection from scratch. The log can prevent that, as it might allow someone to point out where a bisection likely went sideways -- and then instead of testing ten or more kernels you might only have to build a few to resolve things.}(hj@hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjN@hhubh)}(h|The .config file is put aside, as there is a decent chance that developers might ask for it after you report the regression.h]h|The .config file is put aside, as there is a decent chance that developers might ask for it after you report the regression.}(hj@hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjN@hhubh)}(h6[:ref:`back to step-by-step guide `]h](h[}(hjhj@hhhNhNubh)}(h4:ref:`back to step-by-step guide `h]j@)}(hj@h]hback to step-by-step guide}(hhhj@hhhNhNubah}(h]h ](jKstdstd-refeh"]h$]h&]uh1j?hj@ubah}(h]h ]h"]h$]h&]refdocjX refdomainj@reftyperef refexplicitrefwarnj^bisectlog_bissbsuh1hhhhMhj@ubh]}(hjhj@hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhjN@hhubj)}(h.. _revert_bisref:h]h}(h]h ]h"]h$]h&]j revert-bisrefuh1jhMhjN@hhhhubeh}(h](put-the-bisection-log-awayjB@eh ]h"](put the bisection log awaybisectlog_bisrefeh$]h&]uh1hhj>=hhhhhMj}jAj8@sj}jB@j8@subh)}(hhh](h)}(hTry reverting the culprith]hTry reverting the culprit}(hjAhjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj AhhhhhMubj)}(hhh]h)}(h|*Try reverting the culprit on top of the latest codebase to see if this fixes your regression.* [:ref:`... `]h](j')}(h_*Try reverting the culprit on top of the latest codebase to see if this fixes your regression.*h]h]Try reverting the culprit on top of the latest codebase to see if this fixes your regression.}(hhhj%AhhhNhNubah}(h]h ]h"]h$]h&]uh1j&hj!Aubh [}(h [hj!AhhhNhNubh)}(h:ref:`... `h]j@)}(hj:Ah]h...}(hhhj`]h](h[}(hjhjAhhhNhNubh)}(h1:ref:`back to step-by-step guide `h]j@)}(hjAh]hback to step-by-step guide}(hhhjAhhhNhNubah}(h]h ](jKstdstd-refeh"]h$]h&]uh1j?hjAubah}(h]h ]h"]h$]h&]refdocjX refdomainjAreftyperef refexplicitrefwarnj^ revert_bissbsuh1hhhhMhjAubh]}(hjhjAhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhj Ahhubeh}(h](try-reverting-the-culpritjAeh ]h"](try reverting the culprit revert_bisrefeh$]h&]uh1hhj>=hhhhhMj}jAj@sj}jAj@subeh}(h]+perform-a-bisection-and-validate-the-resultah ]h"]+perform a bisection and validate the resultah$]h&]uh1hhj hhhhhM~ubh)}(hhh](h)}(h3Cleanup steps during and after following this guideh]h3Cleanup steps during and after following this guide}(hjAhjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjAhhhhhMubj)}(hhh]h)}(h*During and after following this guide you might want or need to remove some of the kernels you installed.* [:ref:`... `]h](j')}(hk*During and after following this guide you might want or need to remove some of the kernels you installed.*h]hiDuring and after following this guide you might want or need to remove some of the kernels you installed.}(hhhjAhhhNhNubah}(h]h ]h"]h$]h&]uh1j&hjAubh [}(h [hjAhhhNhNubh)}(h :ref:`... `h]j@)}(hjAh]h...}(hhhjAhhhNhNubah}(h]h ](jKstdstd-refeh"]h$]h&]uh1j?hjAubah}(h]h ]h"]h$]h&]refdocjX refdomainjBreftyperef refexplicitrefwarnj^introclosure_bissbsuh1hhhhMhjAubh]}(hjhjAhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhjAubah}(h]h ]h"]h$]h&]uh1jhjAhhhhhNubh)}(h7The steps in this section describe clean-up procedures.h]h7The steps in this section describe clean-up procedures.}(hj&Bhj$BhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjAhhubh)}(h:[:ref:`back to step-by-step guide `].h](h[}(hjhj2BhhhNhNubh)}(h7:ref:`back to step-by-step guide `h]j@)}(hjBhhhNhNubah}(h]h ](jKstdstd-refeh"]h$]h&]uh1j?hj:Bubah}(h]h ]h"]h$]h&]refdocjX refdomainjHBreftyperef refexplicitrefwarnj^introclosure_bissbsuh1hhhhMhj2Bubh].}(h].hj2BhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhjAhhubj)}(h.. _makeroom_bisref:h]h}(h]h ]h"]h$]h&]jmakeroom-bisrefuh1jhMhjAhhhhubh)}(hhh](h)}(h Cleaning up during the bisectionh]h Cleaning up during the bisection}(hjuBhjsBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjpBhhhhhMubj)}(hhh]h)}(ht*To remove one of the kernels you installed, look up its 'kernelrelease' identifier.* [:ref:`... `]h](j')}(hU*To remove one of the kernels you installed, look up its 'kernelrelease' identifier.*h]hWTo remove one of the kernels you installed, look up its ‘kernelrelease’ identifier.}(hhhjBhhhNhNubah}(h]h ]h"]h$]h&]uh1j&hjBubh [}(h [hjBhhhNhNubh)}(h:ref:`... `h]j@)}(hjBh]h...}(hhhjBhhhNhNubah}(h]h ](jKstdstd-refeh"]h$]h&]uh1j?hjBubah}(h]h ]h"]h$]h&]refdocjX refdomainjBreftyperef refexplicitrefwarnj^makeroom_bissbsuh1hhhhMhjBubh]}(hjhjBhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhjBubah}(h]h ]h"]h$]h&]uh1jhjpBhhhhhNubh)}(hXZThe kernels you install during this process are easy to remove later, as its parts are only stored in two places and clearly identifiable. You thus do not need to worry to mess up your machine when you install a kernel manually (and thus bypass your distribution's packaging system): all parts of your kernels are relatively easy to remove later.h]hX\The kernels you install during this process are easy to remove later, as its parts are only stored in two places and clearly identifiable. You thus do not need to worry to mess up your machine when you install a kernel manually (and thus bypass your distribution’s packaging system): all parts of your kernels are relatively easy to remove later.}(hjBhjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjpBhhubh)}(hXOne of the two places is a directory in /lib/modules/, which holds the modules for each installed kernel. This directory is named after the kernel's release identifier; hence, to remove all modules for one of the kernels you built, simply remove its modules directory in /lib/modules/.h]hXOne of the two places is a directory in /lib/modules/, which holds the modules for each installed kernel. This directory is named after the kernel’s release identifier; hence, to remove all modules for one of the kernels you built, simply remove its modules directory in /lib/modules/.}(hjBhjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjpBhhubh)}(hXThe other place is /boot/, where typically two up to five files will be placed during installation of a kernel. All of them usually contain the release name in their file name, but how many files and their exact names depend somewhat on your distribution's installkernel executable and its initramfs generator. On some distributions the ``kernel-install remove...`` command mentioned in the step-by-step guide will delete all of these files for you while also removing the menu entry for the kernel from your bootloader configuration. On others you have to take care of these two tasks yourself. The following command should interactively remove the three main files of a kernel with the release name '6.0-rc1-local-gcafec0cacaca0'::h](hXSThe other place is /boot/, where typically two up to five files will be placed during installation of a kernel. All of them usually contain the release name in their file name, but how many files and their exact names depend somewhat on your distribution’s installkernel executable and its initramfs generator. On some distributions the }(hXQThe other place is /boot/, where typically two up to five files will be placed during installation of a kernel. All of them usually contain the release name in their file name, but how many files and their exact names depend somewhat on your distribution's installkernel executable and its initramfs generator. On some distributions the hjBhhhNhNubj5)}(h``kernel-install remove...``h]hkernel-install remove...}(hhhjBhhhNhNubah}(h]h ]h"]h$]h&]uh1j4hjBubhXs command mentioned in the step-by-step guide will delete all of these files for you while also removing the menu entry for the kernel from your bootloader configuration. On others you have to take care of these two tasks yourself. The following command should interactively remove the three main files of a kernel with the release name ‘6.0-rc1-local-gcafec0cacaca0’:}(hXo command mentioned in the step-by-step guide will delete all of these files for you while also removing the menu entry for the kernel from your bootloader configuration. On others you have to take care of these two tasks yourself. The following command should interactively remove the three main files of a kernel with the release name '6.0-rc1-local-gcafec0cacaca0':hjBhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhjpBhhubj*)}(hCrm -i /boot/{System.map,vmlinuz,initr}-6.0-rc1-local-gcafec0cacaca0h]hCrm -i /boot/{System.map,vmlinuz,initr}-6.0-rc1-local-gcafec0cacaca0}(hhhj Cubah}(h]h ]h"]h$]h&]hhuh1j)hhhMhjpBhhubh)}(hXAfterwards check for other files in /boot/ that have '6.0-rc1-local-gcafec0cacaca0' in their name and consider deleting them as well. Now remove the boot entry for the kernel from your bootloader's configuration; the steps to do that vary quite a bit between Linux distributions.h]hXAfterwards check for other files in /boot/ that have ‘6.0-rc1-local-gcafec0cacaca0’ in their name and consider deleting them as well. Now remove the boot entry for the kernel from your bootloader’s configuration; the steps to do that vary quite a bit between Linux distributions.}(hjChjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjpBhhubh)}(hNote, be careful with wildcards like '*' when deleting files or directories for kernels manually: you might accidentally remove files of a 6.0.13 kernel when all you want is to remove 6.0 or 6.0.1.h]hNote, be careful with wildcards like ‘*’ when deleting files or directories for kernels manually: you might accidentally remove files of a 6.0.13 kernel when all you want is to remove 6.0 or 6.0.1.}(hNote, be careful with wildcards like '*' when deleting files or directories for kernels manually: you might accidentally remove files of a 6.0.13 kernel when all you want is to remove 6.0 or 6.0.1.hj%ChhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjpBhhubh)}(h5[:ref:`back to step-by-step guide `]h](h[}(hjhj4ChhhNhNubh)}(h3:ref:`back to step-by-step guide `h]j@)}(hj>Ch]hback to step-by-step guide}(hhhj@ChhhNhNubah}(h]h ](jKstdstd-refeh"]h$]h&]uh1j?hj`]h](j')}(h|*Once you have finished the bisection, do not immediately remove anything you set up, as you might need a few things again.*h]hzOnce you have finished the bisection, do not immediately remove anything you set up, as you might need a few things again.}(hhhjChhhNhNubah}(h]h ]h"]h$]h&]uh1j&hjCubh [}(h [hjChhhNhNubh)}(h":ref:`... `h]j@)}(hjCh]h...}(hhhjChhhNhNubah}(h]h ](jKstdstd-refeh"]h$]h&]uh1j?hjCubah}(h]h ]h"]h$]h&]refdocjX refdomainjCreftyperef refexplicitrefwarnj^finishingtouch_bissbsuh1hhhhM"hjCubh]}(hjhjChhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhM"hjCubah}(h]jCah ]h"]finishingtouch_bisrefah$]h&]uh1jhjqChhhhhNj}jCjCsj}jCjCsubh)}(hXWhen you are really short of storage space removing the kernels as described in the step-by-step guide might not free as much space as you would like. In that case consider running ``rm -rf ~/linux/*`` as well now. This will remove the build artifacts and the Linux sources, but will leave the Git repository (~/linux/.git/) behind -- a simple ``git reset --hard`` thus will bring the sources back.h](hWhen you are really short of storage space removing the kernels as described in the step-by-step guide might not free as much space as you would like. In that case consider running }(hWhen you are really short of storage space removing the kernels as described in the step-by-step guide might not free as much space as you would like. In that case consider running hjChhhNhNubj5)}(h``rm -rf ~/linux/*``h]hrm -rf ~/linux/*}(hhhjChhhNhNubah}(h]h ]h"]h$]h&]uh1j4hjCubh as well now. This will remove the build artifacts and the Linux sources, but will leave the Git repository (~/linux/.git/) behind -- a simple }(h as well now. This will remove the build artifacts and the Linux sources, but will leave the Git repository (~/linux/.git/) behind -- a simple hjChhhNhNubj5)}(h``git reset --hard``h]hgit reset --hard}(hhhjChhhNhNubah}(h]h ]h"]h$]h&]uh1j4hjCubh" thus will bring the sources back.}(h" thus will bring the sources back.hjChhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhM&hjqChhubh)}(hXoRemoving the repository as well would likely be unwise at this point: there is a decent chance developers will ask you to build another kernel to perform additional tests -- like testing a debug patch or a proposed fix. Details on how to perform those can be found in the section :ref:`Optional tasks: test reverts, patches, or later versions `.h](hXRemoving the repository as well would likely be unwise at this point: there is a decent chance developers will ask you to build another kernel to perform additional tests -- like testing a debug patch or a proposed fix. Details on how to perform those can be found in the section }(hXRemoving the repository as well would likely be unwise at this point: there is a decent chance developers will ask you to build another kernel to perform additional tests -- like testing a debug patch or a proposed fix. Details on how to perform those can be found in the section hjDhhhNhNubh)}(hV:ref:`Optional tasks: test reverts, patches, or later versions `h]j@)}(hjDh]h8Optional tasks: test reverts, patches, or later versions}(hhhjDhhhNhNubah}(h]h ](jKstdstd-refeh"]h$]h&]uh1j?hjDubah}(h]h ]h"]h$]h&]refdocjX refdomainj&Dreftyperef refexplicitrefwarnj^introoptional_bissbsuh1hhhhM-hjDubh.}(hj$hjDhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhM-hjqChhubh)}(hrAdditional tests are also the reason why you want to keep the ~/kernel-config-working file around for a few weeks.h]hrAdditional tests are also the reason why you want to keep the ~/kernel-config-working file around for a few weeks.}(hjDDhjBDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM3hjqChhubh)}(h;[:ref:`back to step-by-step guide `]h](h[}(hjhjPDhhhNhNubh)}(h9:ref:`back to step-by-step guide `h]j@)}(hjZDh]hback to step-by-step guide}(hhhj\DhhhNhNubah}(h]h ](jKstdstd-refeh"]h$]h&]uh1j?hjXDubah}(h]h ]h"]h$]h&]refdocjX refdomainjfDreftyperef refexplicitrefwarnj^finishingtouch_bissbsuh1hhhhM6hjPDubh]}(hjhjPDhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhM6hjqChhubj)}(h.. _introoptional_bisref:h]h}(h]h ]h"]h$]h&]jintrooptional-bisrefuh1jhM8hjqChhhhubeh}(h]cleaning-up-after-the-bisectionah ]h"]cleaning up after the bisectionah$]h&]uh1hhjAhhhhhMubeh}(h]3cleanup-steps-during-and-after-following-this-guideah ]h"]3cleanup steps during and after following this guideah$]h&]uh1hhj hhhhhMubh)}(hhh](h)}(h(Test reverts, patches, or later versionsh]h(Test reverts, patches, or later versions}(hjDhjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjDhhhhhM;ubj)}(hhh]h)}(h*While or after reporting a bug, you might want or potentially will be asked to test reverts, patches, proposed fixes, or other versions.* [:ref:`... `]h](j')}(h*While or after reporting a bug, you might want or potentially will be asked to test reverts, patches, proposed fixes, or other versions.*h]hWhile or after reporting a bug, you might want or potentially will be asked to test reverts, patches, proposed fixes, or other versions.}(hhhjDhhhNhNubah}(h]h ]h"]h$]h&]uh1j&hjDubh [}(h [hjDhhhNhNubh)}(h!:ref:`... `h]j@)}(hjDh]h...}(hhhjDhhhNhNubah}(h]h ](jKstdstd-refeh"]h$]h&]uh1j?hjDubah}(h]h ]h"]h$]h&]refdocjX refdomainjDreftyperef refexplicitrefwarnj^introoptional_bissbsuh1hhhhM=hjDubh]}(hjhjDhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhM=hjDubah}(h]h ]h"]h$]h&]uh1jhjDhhhhhNubh)}(hX,All the commands used in this section should be pretty straight forward, so there is not much to add except one thing: when setting a kernel tag as instructed, ensure it is not much longer than the one used in the example, as problems will arise if the kernelrelease identifier exceeds 63 characters.h]hX,All the commands used in this section should be pretty straight forward, so there is not much to add except one thing: when setting a kernel tag as instructed, ensure it is not much longer than the one used in the example, as problems will arise if the kernelrelease identifier exceeds 63 characters.}(hjDhjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMAhjDhhubh)}(h;[:ref:`back to step-by-step guide `].h](h[}(hjhjEhhhNhNubh)}(h8:ref:`back to step-by-step guide `h]j@)}(hjEh]hback to step-by-step guide}(hhhjEhhhNhNubah}(h]h ](jKstdstd-refeh"]h$]h&]uh1j?hjEubah}(h]h ]h"]h$]h&]refdocjX refdomainjEreftyperef refexplicitrefwarnj^introoptional_bissbsuh1hhhhMFhjEubh].}(h].hjEhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMFhjDhhubeh}(h](&test-reverts-patches-or-later-versionsjDeh ]h"]((test reverts, patches, or later versionsintrooptional_bisrefeh$]h&]uh1hhj hhhhhM;j}j?EjDsj}jDjDsubeh}(h],reference-section-for-the-step-by-step-guideah ]h"],reference section for the step-by-step guideah$]h&]uh1hhhhhhhhM6ubh)}(hhh](h)}(hAdditional informationh]hAdditional information}(hjQEhjOEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjLEhhhhhMJubj)}(h.. _buildhost_bis:h]h}(h]h ]h"]h$]h&]j buildhost-bisuh1jhMLhjLEhhhhubh)}(hhh](h)}(h$Build kernels on a different machineh]h$Build kernels on a different machine}(hjmEhjkEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhEhhhhhMOubh)}(h[To compile kernels on another system, slightly alter the step-by-step guide's instructions:h]h]To compile kernels on another system, slightly alter the step-by-step guide’s instructions:J}(hj{EhjyEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMQhjhEhhubj)}(hhh](j)}(h_Start following the guide on the machine where you want to install and test the kernels later. h]h)}(h^Start following the guide on the machine where you want to install and test the kernels later.h]h^Start following the guide on the machine where you want to install and test the kernels later.}(hjEhjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMThjEubah}(h]h ]h"]h$]h&]uh1jhjEhhhhhNubj)}(hXAfter executing ':ref:`Boot into the working kernel and briefly use the apparently broken feature `', save the list of loaded modules to a file using ``lsmod > ~/test-machine-lsmod``. Then locate the build configuration for the running kernel (see ':ref:`Start defining the build configuration for your kernel `' for hints on where to find it) and store it as '~/test-machine-config-working'. Transfer both files to the home directory of your build host. h]h)}(hXAfter executing ':ref:`Boot into the working kernel and briefly use the apparently broken feature `', save the list of loaded modules to a file using ``lsmod > ~/test-machine-lsmod``. Then locate the build configuration for the running kernel (see ':ref:`Start defining the build configuration for your kernel `' for hints on where to find it) and store it as '~/test-machine-config-working'. Transfer both files to the home directory of your build host.h](hAfter executing ‘}(hAfter executing 'hjEhhhNhNubh)}(hf:ref:`Boot into the working kernel and briefly use the apparently broken feature `h]j@)}(hjEh]hJBoot into the working kernel and briefly use the apparently broken feature}(hhhjEhhhNhNubah}(h]h ](jKstdstd-refeh"]h$]h&]uh1j?hjEubah}(h]h ]h"]h$]h&]refdocjX refdomainjEreftyperef refexplicitrefwarnj^bootworking_bissbsuh1hhhhMWhjEubh5’, save the list of loaded modules to a file using }(h3', save the list of loaded modules to a file using hjEhhhNhNubj5)}(h ``lsmod > ~/test-machine-lsmod``h]hlsmod > ~/test-machine-lsmod}(hhhjEhhhNhNubah}(h]h ]h"]h$]h&]uh1j4hjEubhE. Then locate the build configuration for the running kernel (see ‘}(hC. Then locate the build configuration for the running kernel (see 'hjEhhhNhNubh)}(hP:ref:`Start defining the build configuration for your kernel `h]j@)}(hjEh]h6Start defining the build configuration for your kernel}(hhhjEhhhNhNubah}(h]h ](jKstdstd-refeh"]h$]h&]uh1j?hjEubah}(h]h ]h"]h$]h&]refdocjX refdomainjEreftyperef refexplicitrefwarnj^oldconfig_bisrefuh1hhhhMWhjEubh’ for hints on where to find it) and store it as ‘~/test-machine-config-working’. Transfer both files to the home directory of your build host.}(h' for hints on where to find it) and store it as '~/test-machine-config-working'. Transfer both files to the home directory of your build host.hjEhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMWhjEubah}(h]h ]h"]h$]h&]uh1jhjEhhhhhNubj)}(hContinue the guide on the build host (e.g. with ':ref:`Ensure to have enough free space for building [...] `'). h]h)}(hContinue the guide on the build host (e.g. with ':ref:`Ensure to have enough free space for building [...] `').h](h3Continue the guide on the build host (e.g. with ‘}(h1Continue the guide on the build host (e.g. with 'hjFhhhNhNubh)}(hM:ref:`Ensure to have enough free space for building [...] `h]j@)}(hj'Fh]h3Ensure to have enough free space for building [...]}(hhhj)FhhhNhNubah}(h]h ](jKstdstd-refeh"]h$]h&]uh1j?hj%Fubah}(h]h ]h"]h$]h&]refdocjX refdomainj3Freftyperef refexplicitrefwarnj^diskspace_bissbsuh1hhhhM_hjFubh’).}(h').hjFhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhM_hjFubah}(h]h ]h"]h$]h&]uh1jhjEhhhhhNubj)}(hX:When you reach ':ref:`Start preparing a kernel build configuration[...] `': before running ``make olddefconfig`` for the first time, execute the following command to base your configuration on the one from the test machine's 'working' kernel:: cp ~/test-machine-config-working ~/linux/.config h](h)}(hXWhen you reach ':ref:`Start preparing a kernel build configuration[...] `': before running ``make olddefconfig`` for the first time, execute the following command to base your configuration on the one from the test machine's 'working' kernel::h](hWhen you reach ‘}(hWhen you reach 'hjZFhhhNhNubh)}(hK:ref:`Start preparing a kernel build configuration[...] `h]j@)}(hjeFh]h1Start preparing a kernel build configuration[...]}(hhhjgFhhhNhNubah}(h]h ](jKstdstd-refeh"]h$]h&]uh1j?hjcFubah}(h]h ]h"]h$]h&]refdocjX refdomainjqFreftyperef refexplicitrefwarnj^oldconfig_bissbsuh1hhhhMbhjZFubh’: before running }(h': before running hjZFhhhNhNubj5)}(h``make olddefconfig``h]hmake olddefconfig}(hhhjFhhhNhNubah}(h]h ]h"]h$]h&]uh1j4hjZFubh for the first time, execute the following command to base your configuration on the one from the test machine’s ‘working’ kernel:}(h for the first time, execute the following command to base your configuration on the one from the test machine's 'working' kernel:hjZFhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMbhjVFubj*)}(h0cp ~/test-machine-config-working ~/linux/.configh]h0cp ~/test-machine-config-working ~/linux/.config}(hhhjFubah}(h]h ]h"]h$]h&]hhuh1j)hhhMghjVFubeh}(h]h ]h"]h$]h&]uh1jhjEhhhhhNubj)}(hDuring the next step to ':ref:`disable any apparently superfluous kernel modules `' use the following command instead:: yes '' | make localmodconfig LSMOD=~/lsmod_foo-machine localmodconfig h](h)}(hDuring the next step to ':ref:`disable any apparently superfluous kernel modules `' use the following command instead::h](hDuring the next step to ‘}(hDuring the next step to 'hjFhhhNhNubh)}(hP:ref:`disable any apparently superfluous kernel modules `h]j@)}(hjFh]h1disable any apparently superfluous kernel modules}(hhhjFhhhNhNubah}(h]h ](jKstdstd-refeh"]h$]h&]uh1j?hjFubah}(h]h ]h"]h$]h&]refdocjX refdomainjFreftyperef refexplicitrefwarnj^localmodconfig_bissbsuh1hhhhMihjFubh&’ use the following command instead:}(h$' use the following command instead:hjFhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMihjFubj*)}(hEyes '' | make localmodconfig LSMOD=~/lsmod_foo-machine localmodconfigh]hEyes '' | make localmodconfig LSMOD=~/lsmod_foo-machine localmodconfig}(hhhjFubah}(h]h ]h"]h$]h&]hhuh1j)hhhMlhjFubeh}(h]h ]h"]h$]h&]uh1jhjEhhhhhNubj)}(hXNContinue the guide, but ignore the instructions outlining how to compile, install, and reboot into a kernel every time they come up. Instead build like this:: cp ~/kernel-config-working .config make olddefconfig && make -j $(nproc --all) targz-pkg This will generate a gzipped tar file whose name is printed in the last line shown; for example, a kernel with the kernelrelease identifier '6.0.0-rc1-local-g928a87efa423' built for x86 machines usually will be stored as '~/linux/linux-6.0.0-rc1-local-g928a87efa423-x86.tar.gz'. Copy that file to your test machine's home directory. h](h)}(hContinue the guide, but ignore the instructions outlining how to compile, install, and reboot into a kernel every time they come up. Instead build like this::h]hContinue the guide, but ignore the instructions outlining how to compile, install, and reboot into a kernel every time they come up. Instead build like this:}(hContinue the guide, but ignore the instructions outlining how to compile, install, and reboot into a kernel every time they come up. Instead build like this:hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMnhjGubj*)}(hXcp ~/kernel-config-working .config make olddefconfig && make -j $(nproc --all) targz-pkgh]hXcp ~/kernel-config-working .config make olddefconfig && make -j $(nproc --all) targz-pkg}(hhhjGubah}(h]h ]h"]h$]h&]hhuh1j)hhhMrhjGubh)}(hXThis will generate a gzipped tar file whose name is printed in the last line shown; for example, a kernel with the kernelrelease identifier '6.0.0-rc1-local-g928a87efa423' built for x86 machines usually will be stored as '~/linux/linux-6.0.0-rc1-local-g928a87efa423-x86.tar.gz'.h]hXThis will generate a gzipped tar file whose name is printed in the last line shown; for example, a kernel with the kernelrelease identifier ‘6.0.0-rc1-local-g928a87efa423’ built for x86 machines usually will be stored as ‘~/linux/linux-6.0.0-rc1-local-g928a87efa423-x86.tar.gz’.}(hj$Ghj"GhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMvhjGubh)}(h5Copy that file to your test machine's home directory.h]h7Copy that file to your test machine’s home directory.}(hj2Ghj0GhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM{hjGubeh}(h]h ]h"]h$]h&]uh1jhjEhhhhhNubj)}(hX'Switch to the test machine to check if you have enough space to hold another kernel. Then extract the file you transferred:: sudo tar -xvzf ~/linux-6.0.0-rc1-local-g928a87efa423-x86.tar.gz -C / Afterwards :ref:`generate the initramfs and add the kernel to your boot loader's configuration `; on some distributions the following command will take care of both these tasks:: sudo /sbin/installkernel 6.0.0-rc1-local-g928a87efa423 /boot/vmlinuz-6.0.0-rc1-local-g928a87efa423 Now reboot and ensure you started the intended kernel. h](h)}(h|Switch to the test machine to check if you have enough space to hold another kernel. Then extract the file you transferred::h]h{Switch to the test machine to check if you have enough space to hold another kernel. Then extract the file you transferred:}(h{Switch to the test machine to check if you have enough space to hold another kernel. Then extract the file you transferred:hjHGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM}hjDGubj*)}(hDsudo tar -xvzf ~/linux-6.0.0-rc1-local-g928a87efa423-x86.tar.gz -C /h]hDsudo tar -xvzf ~/linux-6.0.0-rc1-local-g928a87efa423-x86.tar.gz -C /}(hhhjWGubah}(h]h ]h"]h$]h&]hhuh1j)hhhMhjDGubh)}(hAfterwards :ref:`generate the initramfs and add the kernel to your boot loader's configuration `; on some distributions the following command will take care of both these tasks::h](h Afterwards }(h Afterwards hjeGhhhNhNubh)}(he:ref:`generate the initramfs and add the kernel to your boot loader's configuration `h]j@)}(hjpGh]hOgenerate the initramfs and add the kernel to your boot loader’s configuration}(hhhjrGhhhNhNubah}(h]h ](jKstdstd-refeh"]h$]h&]uh1j?hjnGubah}(h]h ]h"]h$]h&]refdocjX refdomainj|Greftyperef refexplicitrefwarnj^install_bisrefuh1hhhhMhjeGubhQ; on some distributions the following command will take care of both these tasks:}(hQ; on some distributions the following command will take care of both these tasks:hjeGhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhjDGubj*)}(hbsudo /sbin/installkernel 6.0.0-rc1-local-g928a87efa423 /boot/vmlinuz-6.0.0-rc1-local-g928a87efa423h]hbsudo /sbin/installkernel 6.0.0-rc1-local-g928a87efa423 /boot/vmlinuz-6.0.0-rc1-local-g928a87efa423}(hhhjGubah}(h]h ]h"]h$]h&]hhuh1j)hhhMhjDGubh)}(h6Now reboot and ensure you started the intended kernel.h]h6Now reboot and ensure you started the intended kernel.}(hjGhjGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjDGubeh}(h]h ]h"]h$]h&]uh1jhjEhhhhhNubeh}(h]h ]h"]h$]h&]jjuh1jhhhMThjhEhhubh)}(hThis approach even works when building for another architecture: just install cross-compilers and add the appropriate parameters to every invocation of make (e.g. ``make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- [...]``).h](hThis approach even works when building for another architecture: just install cross-compilers and add the appropriate parameters to every invocation of make (e.g. }(hThis approach even works when building for another architecture: just install cross-compilers and add the appropriate parameters to every invocation of make (e.g. hjGhhhNhNubj5)}(h:``make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- [...]``h]h6make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- [...]}(hhhjGhhhNhNubah}(h]h ]h"]h$]h&]uh1j4hjGubh).}(h).hjGhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhjhEhhubeh}(h]($build-kernels-on-a-different-machinejgEeh ]h"]($build kernels on a different machine buildhost_biseh$]h&]uh1hhjLEhhhhhMOj}jGj]Esj}jgEj]Esubh)}(hhh](h)}(hAdditional reading materialh]hAdditional reading material}(hjGhjGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjGhhhhhMubj)}(hhh](j)}(hThe `man page for 'git bisect' `_ and `fighting regressions with 'git bisect' `_ in the Git documentation.h]h)}(hThe `man page for 'git bisect' `_ and `fighting regressions with 'git bisect' `_ in the Git documentation.h](hThe }(hThe hjHhhhNhNubjT)}(hB`man page for 'git bisect' `_h]hman page for ‘git bisect’}(hman page for 'git bisect'hjHhhhNhNubah}(h]h ]h"]h$]h&]nameman page for 'git bisect'jf#https://git-scm.com/docs/git-bisectuh1jShjHubj)}(h& h]h}(h]man-page-for-git-bisectah ]h"]man page for 'git bisect'ah$]h&]refurij Huh1jjuKhjHubh and }(h and hjHhhhNhNubjT)}(h[`fighting regressions with 'git bisect' `_h]h*fighting regressions with ‘git bisect’}(h&fighting regressions with 'git bisect'hj3HhhhNhNubah}(h]h ]h"]h$]h&]name&fighting regressions with 'git bisect'jf/https://git-scm.com/docs/git-bisect-lk2009.htmluh1jShjHubj)}(h2 h]h}(h]$fighting-regressions-with-git-bisectah ]h"]&fighting regressions with 'git bisect'ah$]h&]refurijDHuh1jjuKhjHubh in the Git documentation.}(h in the Git documentation.hjHhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhjHubah}(h]h ]h"]h$]h&]uh1jhjGhhhhhNubj)}(h}`Working with git bisect `_ from kernel developer Nathan Chancellor.h]h)}(h}`Working with git bisect `_ from kernel developer Nathan Chancellor.h](jT)}(hT`Working with git bisect `_h]hWorking with git bisect}(hWorking with git bisecthjkHhhhNhNubah}(h]h ]h"]h$]h&]nameWorking with git bisectjf7https://nathanchance.dev/posts/working-with-git-bisect/uh1jShjgHubj)}(h: h]h}(h]working-with-git-bisectah ]h"]working with git bisectah$]h&]refurij|Huh1jjuKhjgHubh) from kernel developer Nathan Chancellor.}(h) from kernel developer Nathan Chancellor.hjgHhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhjcHubah}(h]h ]h"]h$]h&]uh1jhjGhhhhhNubj)}(h_`Using Git bisect to figure out when brokenness was introduced `_.h]h)}(hjHh](jT)}(h^`Using Git bisect to figure out when brokenness was introduced `_h]h=Using Git bisect to figure out when brokenness was introduced}(h=Using Git bisect to figure out when brokenness was introducedhjHhhhNhNubah}(h]h ]h"]h$]h&]name=Using Git bisect to figure out when brokenness was introducedjfhttp://webchick.net/node/99uh1jShjHubj)}(h h]h}(h]=using-git-bisect-to-figure-out-when-brokenness-was-introducedah ]h"]=using git bisect to figure out when brokenness was introducedah$]h&]refurijHuh1jjuKhjHubh.}(hj$hjHhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhjHubah}(h]h ]h"]h$]h&]uh1jhjGhhhhhNubj)}(hV`Fully automated bisecting with 'git bisect run' `_. h]h)}(hU`Fully automated bisecting with 'git bisect run' `_.h](jT)}(hT`Fully automated bisecting with 'git bisect run' `_h]h3Fully automated bisecting with ‘git bisect run’}(h/Fully automated bisecting with 'git bisect run'hjHhhhNhNubah}(h]h ]h"]h$]h&]name/Fully automated bisecting with 'git bisect run'jfhttps://lwn.net/Articles/317154uh1jShjHubj)}(h" h]h}(h]-fully-automated-bisecting-with-git-bisect-runah ]h"]/fully automated bisecting with 'git bisect run'ah$]h&]refurijHuh1jjuKhjHubh.}(hj$hjHhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhjHubah}(h]h ]h"]h$]h&]uh1jhjGhhhhhNubeh}(h]h ]h"]h$]h&]jjuh1jhhhMhjGhhubh)}(hend-of-contenth]hend-of-content}(hhhjIubah}(h]h ]h"]h$]h&]hhuh1hhjGhhhhhMubh)}(hXThis document is maintained by Thorsten Leemhuis . If you spot a typo or small mistake, feel free to let him know directly and he'll fix it. You are free to do the same in a mostly informal way if you want to contribute changes to the text -- but for copyright reasons please CC linux-doc@vger.kernel.org and 'sign-off' your contribution as Documentation/process/submitting-patches.rst explains in the section 'Sign your work - the Developer's Certificate of Origin'.h]hXThis document is maintained by Thorsten Leemhuis . If you spot a typo or small mistake, feel free to let him know directly and he'll fix it. You are free to do the same in a mostly informal way if you want to contribute changes to the text -- but for copyright reasons please CC linux-doc@vger.kernel.org and 'sign-off' your contribution as Documentation/process/submitting-patches.rst explains in the section 'Sign your work - the Developer's Certificate of Origin'.}(hhhjIubah}(h]h ]h"]h$]h&]hhuh1hhjGhhhhhMubh)}(hX}This text is available under GPL-2.0+ or CC-BY-4.0, as stated at the top of the file. If you want to distribute this text under CC-BY-4.0 only, please use 'The Linux kernel development community' for author attribution and link this as source: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/plain/Documentation/admin-guide/verify-bugs-and-bisect-regressions.rsth]hX}This text is available under GPL-2.0+ or CC-BY-4.0, as stated at the top of the file. If you want to distribute this text under CC-BY-4.0 only, please use 'The Linux kernel development community' for author attribution and link this as source: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/plain/Documentation/admin-guide/verify-bugs-and-bisect-regressions.rst}(hhhj*Iubah}(h]h ]h"]h$]h&]hhuh1hhjGhhhhhMubh)}(hXNote: Only the content of this RST file as found in the Linux kernel sources is available under CC-BY-4.0, as versions of this text that were processed (for example by the kernel's build system) might contain content taken from files which use a more restrictive license.h]hXNote: Only the content of this RST file as found in the Linux kernel sources is available under CC-BY-4.0, as versions of this text that were processed (for example by the kernel's build system) might contain content taken from files which use a more restrictive license.}(hhhj8Iubah}(h]h ]h"]h$]h&]hhuh1hhjGhhhhhMubeh}(h]additional-reading-materialah ]h"]additional reading materialah$]h&]uh1hhjLEhhhhhMubeh}(h]additional-informationah ]h"]additional informationah$]h&]uh1hhhhhhhhMJubeh}(h])how-to-verify-bugs-and-bisect-regressionsah ]h"])how to verify bugs and bisect regressionsah$]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_handlerjIerror_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}(j]jaj3]j)aj]jaj]jajW ]jM aj ]j aj ]j aj. ]j$ aj ]j aj ]j aj ]j aj ]j aj ]j aj]jaj]jaj]jajc]jYaj]jaj-]j#aj]jaj]jaj]juaj]jajp]jfaj]jajO]jEajV]jLaj]jajv]jlaj]jaj]jaj]jaj]jaj.]j$aj]jaj]jaj]jajI]j?ajz]jpaj ]j ajm!]jc!aj,"]j""aj#]j#aj#]j#aj$]j$aj%]j%aj']j 'aj(]j (aj(]j(ajY*]jO*aj+]j+aj@-]j6-aj-]j-aj.]j.aj/]j /aj30]j)0aj1]j1aj1]j1ajC3]j93aj3]j3ajY6]jO6aj7]j7aj8]jy8ajB9]j89aj\:]jR:aj ;]j;aj<]j;aj=]j=aj>]j>aj?]j?ajB@]j8@ajA]j@ajoB]jeBajC]jCajD]jDajgE]j]Eaunameids}(j[IjXIj j jjjjjj3jjjjjH jj jW j j j j j j. j j j j j j j j j{j jjjjjTjjjcj]jj\jYj j-jqjnjjjpjjjjajjjpj@jjjOj}jVj|jyjgjjjvjjj jjjjjjjjzj.jPjjOjLjjj:jjjIjj}jjzjjjIEjFEj1j1jt!j js!jp!j3"jm!j2"j/"j"#j,"j!#j#j#j#j#j#j$j#j$j$j%j$j%j%j'j%j'j'j(j'j(j(j(j(j(j(j`*j(j_*j\*j+jY*j+j+jG-j+jF-jC-j,j,j-j@-j-j-j.j-j.j.j01j.j/1j,1j:0j/j90j60j/j/j%1j30j$1j!1j1j1j1j1j;j1j;j;j4jC3j4j4jh6j3jg6jd6j:5j75j 5j5j_6j\6j7jY6j7j7j8j7j8j8jI9j8jH9jE9jc:jB9jb:j_:j;j\:j;j;j9=j ;j8=j5=j.=j<j-=j*=jAjAj>j=j>j>j?j>j?j?jI@j?jH@jE@jAjB@jAjAjAjAjAjAjDjDjlCjoBjkCjhCjDjDjCjCj?EjDj>Ej;EjSIjPIjGjgEjGjGjKIjHIj*Hj'HjNHjKHjHjHjHjHjHjHu nametypes}(j[INj NjjNjjNjjH j j j j j j j j j{jjjTjj]j\Nj jqjjpjjajj@jj}j|NjgjjNj jjjjzjPjONjj:jjNjjNjIENj1Njt!js!Nj3"j2"Nj"#j!#Nj#j#Nj$j$Nj%j%Nj'j'Nj(j(Nj(j(Nj`*j_*Nj+j+NjG-jF-Nj,j-j-Nj.j.Nj01j/1Nj:0j90Nj/j%1j$1Nj1j1Nj;j;Nj4j4Njh6jg6Nj:5Nj 5j_6Nj7j7Nj8j8NjI9jH9Njc:jb:Nj;j;Nj9=j8=Nj.=j-=NjANj>j>Nj?j?NjI@jH@NjAjANjAjANjDNjlCjkCNjDNjCj?Ej>ENjSINjGjGNjKINj*HjNHjHjHjHuh}(jXIhj jjjjjj3j4jj4jjjjjW jX j j j j j. j/ j j j j j j j j j j jjjjjjjcjdjjjYjj-j.jnjhjjjjjjjjjpjqjjjOjPjVjbjyjbjjjvjjjjjjjjjjjj.j/jjjLjjjjjjIjUj}jUjzjjjjFEj j1j! j j jp!j jm!jy!j/"jy!j,"j8"j#j8"j#j'#j#j'#j#j#j$j#j$j$j%j$j%j%j'j%j'j!'j(j!'j(j(j(j(j(j(j\*j(jY*je*j+je*j+j+jC-j+j,j,j@-jL-j-jL-j-j-j.j-j.j.j,1j.j/j/j60j/j/j/j30j?0j!1j?0j1j51j1j51j1j1j;j1jC3jD3j4jD3j3j 4jd6j 4j75jr4j5j5j\6j=5jY6jm6j7jm6j7j7j8j7j8j8jE9j8jB9jN9j_:jN9j\:jh:j;jh:j ;j$;j5=j$;j<j<j*=j<jAj>=j=j=j>j=j>j>j?j>j?j?jE@j?jB@jN@jAjN@jAj AjAj AjDjAjoBjpBjhCjpBjDjqCjCjCjDjDj;EjDjPIjLEjgEjhEjGjhEjHIjGj'Hj!HjKHjEHjHj}HjHjHjHjHu footnote_refs} citation_refs} autofootnotes]autofootnote_refs]symbol_footnotes]symbol_footnote_refs] footnotes] citations]autofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}Rparse_messages]hsystem_message)}(hhh]h)}(h:Enumerated list start value not ordinal-1: "b" (ordinal 2)h]h>Enumerated list start value not ordinal-1: “b” (ordinal 2)}(hhhj5JhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj2Jubah}(h]h ]h"]h$]h&]levelKtypeINFOsourcehlineKuh1j0Jhjubatransform_messages](j1J)}(hhh]h)}(hhh]h7Hyperlink target "introguide-bissbs" is not referenced.}(hhhjSJubah}(h]h ]h"]h$]h&]uh1hhjPJubah}(h]h ]h"]h$]h&]levelKtypejKJsourcehlineKuh1j0Jubj1J)}(hhh]h)}(hhh]h6Hyperlink target "introprep-bissbs" is not referenced.}(hhhjmJubah}(h]h ]h"]h$]h&]uh1hhjjJubah}(h]h ]h"]h$]h&]levelKtypejKJsourcehlineMuh1j0Jubj1J)}(hhh]h)}(hhh]h3Hyperlink target "backup-bissbs" is not referenced.}(hhhjJubah}(h]h ]h"]h$]h&]uh1hhjJubah}(h]h ]h"]h$]h&]levelKtypejKJsourcehlineMuh1j0Jubj1J)}(hhh]h)}(hhh]h4Hyperlink target "vanilla-bissbs" is not referenced.}(hhhjJubah}(h]h ]h"]h$]h&]uh1hhjJubah}(h]h ]h"]h$]h&]levelKtypejKJsourcehlineM"uh1j0Jubj1J)}(hhh]h)}(hhh]h7Hyperlink target "secureboot-bissbs" is not referenced.}(hhhjJubah}(h]h ]h"]h$]h&]uh1hhjJubah}(h]h ]h"]h$]h&]levelKtypejKJsourcehlineM*uh1j0Jubj1J)}(hhh]h)}(hhh]h7Hyperlink target "rangecheck-bissbs" is not referenced.}(hhhjJubah}(h]h ]h"]h$]h&]uh1hhjJubah}(h]h ]h"]h$]h&]levelKtypejKJsourcehlineM5uh1j0Jubj1J)}(hhh]h)}(hhh]h8Hyperlink target "bootworking-bissbs" is not referenced.}(hhhjJubah}(h]h ]h"]h$]h&]uh1hhjJubah}(h]h ]h"]h$]h&]levelKtypejKJsourcehlineMYuh1j0Jubj1J)}(hhh]h)}(hhh]h6Hyperlink target "diskspace-bissbs" is not referenced.}(hhhj Kubah}(h]h ]h"]h$]h&]uh1hhjKubah}(h]h ]h"]h$]h&]levelKtypejKJsourcehlineM_uh1j0Jubj1J)}(hhh]h)}(hhh]h:Hyperlink target "buildrequires-bissbs" is not referenced.}(hhhj#Kubah}(h]h ]h"]h$]h&]uh1hhj Kubah}(h]h ]h"]h$]h&]levelKtypejKJsourcehlineMiuh1j0Jubj1J)}(hhh]h)}(hhh]h4Hyperlink target "sources-bissbs" is not referenced.}(hhhj=Kubah}(h]h ]h"]h$]h&]uh1hhj:Kubah}(h]h ]h"]h$]h&]levelKtypejKJsourcehlineMsuh1j0Jubj1J)}(hhh]h)}(hhh]h:Hyperlink target "stablesources-bissbs" is not referenced.}(hhhjWKubah}(h]h ]h"]h$]h&]uh1hhjTKubah}(h]h ]h"]h$]h&]levelKtypejKJsourcehlineMuh1j0Jubj1J)}(hhh]h)}(hhh]h6Hyperlink target "oldconfig-bissbs" is not referenced.}(hhhjqKubah}(h]h ]h"]h$]h&]uh1hhjnKubah}(h]h ]h"]h$]h&]levelKtypejKJsourcehlineMuh1j0Jubj1J)}(hhh]h)}(hhh]h;Hyperlink target "localmodconfig-bissbs" is not referenced.}(hhhjKubah}(h]h ]h"]h$]h&]uh1hhjKubah}(h]h ]h"]h$]h&]levelKtypejKJsourcehlineMuh1j0Jubj1J)}(hhh]h)}(hhh]h4Hyperlink target "tagging-bissbs" is not referenced.}(hhhjKubah}(h]h ]h"]h$]h&]uh1hhjKubah}(h]h ]h"]h$]h&]levelKtypejKJsourcehlineMuh1j0Jubj1J)}(hhh]h)}(hhh]h9Hyperlink target "debugsymbols-bissbs" is not referenced.}(hhhjKubah}(h]h ]h"]h$]h&]uh1hhjKubah}(h]h ]h"]h$]h&]levelKtypejKJsourcehlineMuh1j0Jubj1J)}(hhh]h)}(hhh]h7Hyperlink target "configmods-bissbs" is not referenced.}(hhhjKubah}(h]h ]h"]h$]h&]uh1hhjKubah}(h]h ]h"]h$]h&]levelKtypejKJsourcehlineMuh1j0Jubj1J)}(hhh]h)}(hhh]h7Hyperlink target "saveconfig-bissbs" is not referenced.}(hhhjKubah}(h]h ]h"]h$]h&]uh1hhjKubah}(h]h ]h"]h$]h&]levelKtypejKJsourcehlineM uh1j0Jubj1J)}(hhh]h)}(hhh]h=Hyperlink target "introlatestcheck-bissbs" is not referenced.}(hhhj Lubah}(h]h ]h"]h$]h&]uh1hhj Lubah}(h]h ]h"]h$]h&]levelKtypejKJsourcehlineMuh1j0Jubj1J)}(hhh]h)}(hhh]h;Hyperlink target "checkoutmaster-bissbs" is not referenced.}(hhhj'Lubah}(h]h ]h"]h$]h&]uh1hhj$Lubah}(h]h ]h"]h$]h&]levelKtypejKJsourcehlineMuh1j0Jubj1J)}(hhh]h)}(hhh]h2Hyperlink target "build-bissbs" is not referenced.}(hhhjALubah}(h]h ]h"]h$]h&]uh1hhj>Lubah}(h]h ]h"]h$]h&]levelKtypejKJsourcehlineM4uh1j0Jubj1J)}(hhh]h)}(hhh]h4Hyperlink target "install-bissbs" is not referenced.}(hhhj[Lubah}(h]h ]h"]h$]h&]uh1hhjXLubah}(h]h ]h"]h$]h&]levelKtypejKJsourcehlineMCuh1j0Jubj1J)}(hhh]h)}(hhh]h9Hyperlink target "storagespace-bissbs" is not referenced.}(hhhjuLubah}(h]h ]h"]h$]h&]uh1hhjrLubah}(h]h ]h"]h$]h&]levelKtypejKJsourcehlineMduh1j0Jubj1J)}(hhh]h)}(hhh]h:Hyperlink target "kernelrelease-bissbs" is not referenced.}(hhhjLubah}(h]h ]h"]h$]h&]uh1hhjLubah}(h]h ]h"]h$]h&]levelKtypejKJsourcehlineMquh1j0Jubj1J)}(hhh]h)}(hhh]h4Hyperlink target "tainted-bissbs" is not referenced.}(hhhjLubah}(h]h ]h"]h$]h&]uh1hhjLubah}(h]h ]h"]h$]h&]levelKtypejKJsourcehlineMuh1j0Jubj1J)}(hhh]h)}(hhh]h:Hyperlink target "recheckbroken-bissbs" is not referenced.}(hhhjLubah}(h]h ]h"]h$]h&]uh1hhjLubah}(h]h ]h"]h$]h&]levelKtypejKJsourcehlineMuh1j0Jubj1J)}(hhh]h)}(hhh]h@Hyperlink target "recheckstablebroken-bissbs" is not referenced.}(hhhjLubah}(h]h ]h"]h$]h&]uh1hhjLubah}(h]h ]h"]h$]h&]levelKtypejKJsourcehlineMuh1j0Jubj1J)}(hhh]h)}(hhh]h>Hyperlink target "introworkingcheck-bissbs" is not referenced.}(hhhjLubah}(h]h ]h"]h$]h&]uh1hhjLubah}(h]h ]h"]h$]h&]levelKtypejKJsourcehlineMuh1j0Jubj1J)}(hhh]h)}(hhh]h;Hyperlink target "recheckworking-bissbs" is not referenced.}(hhhjMubah}(h]h ]h"]h$]h&]uh1hhjMubah}(h]h ]h"]h$]h&]levelKtypejKJsourcehlineMuh1j0Jubj1J)}(hhh]h)}(hhh]h8Hyperlink target "introbisect-bissbs" is not referenced.}(hhhj+Mubah}(h]h ]h"]h$]h&]uh1hhj(Mubah}(h]h ]h"]h$]h&]levelKtypejKJsourcehlineMuh1j0Jubj1J)}(hhh]h)}(hhh]h8Hyperlink target "bisectstart-bissbs" is not referenced.}(hhhjEMubah}(h]h ]h"]h$]h&]uh1hhjBMubah}(h]h ]h"]h$]h&]levelKtypejKJsourcehlineMuh1j0Jubj1J)}(hhh]h)}(hhh]h8Hyperlink target "bisectbuild-bissbs" is not referenced.}(hhhj_Mubah}(h]h ]h"]h$]h&]uh1hhj\Mubah}(h]h ]h"]h$]h&]levelKtypejKJsourcehlineMuh1j0Jubj1J)}(hhh]h)}(hhh]h7Hyperlink target "bisecttest-bissbs" is not referenced.}(hhhjyMubah}(h]h ]h"]h$]h&]uh1hhjvMubah}(h]h ]h"]h$]h&]levelKtypejKJsourcehlineM$uh1j0Jubj1J)}(hhh]h)}(hhh]h6Hyperlink target "bisectlog-bissbs" is not referenced.}(hhhjMubah}(h]h ]h"]h$]h&]uh1hhjMubah}(h]h ]h"]h$]h&]levelKtypejKJsourcehlineMLuh1j0Jubj1J)}(hhh]h)}(hhh]h3Hyperlink target "revert-bissbs" is not referenced.}(hhhjMubah}(h]h ]h"]h$]h&]uh1hhjMubah}(h]h ]h"]h$]h&]levelKtypejKJsourcehlineMXuh1j0Jubj1J)}(hhh]h)}(hhh]h9Hyperlink target "introclosure-bissbs" is not referenced.}(hhhjMubah}(h]h ]h"]h$]h&]uh1hhjMubah}(h]h ]h"]h$]h&]levelKtypejKJsourcehlineMuh1j0Jubj1J)}(hhh]h)}(hhh]h5Hyperlink target "makeroom-bissbs" is not referenced.}(hhhjMubah}(h]h ]h"]h$]h&]uh1hhjMubah}(h]h ]h"]h$]h&]levelKtypejKJsourcehlineMuh1j0Jubj1J)}(hhh]h)}(hhh]h;Hyperlink target "finishingtouch-bissbs" is not referenced.}(hhhjMubah}(h]h ]h"]h$]h&]uh1hhjMubah}(h]h ]h"]h$]h&]levelKtypejKJsourcehlineMuh1j0Jubj1J)}(hhh]h)}(hhh]h:Hyperlink target "introoptional-bissbs" is not referenced.}(hhhjNubah}(h]h ]h"]h$]h&]uh1hhjNubah}(h]h ]h"]h$]h&]levelKtypejKJsourcehlineMuh1j0Jubj1J)}(hhh]h)}(hhh]h9Hyperlink target "submit-improvements" is not referenced.}(hhhj/Nubah}(h]h ]h"]h$]h&]uh1hhj,Nubah}(h]h ]h"]h$]h&]levelKtypejKJsourcehlineM"uh1j0Jubj1J)}(hhh]h)}(hhh]h3Hyperlink target "backup-bisref" is not referenced.}(hhhjINubah}(h]h ]h"]h$]h&]uh1hhjFNubah}(h]h ]h"]h$]h&]levelKtypejKJsourcehlineMEuh1j0Jubj1J)}(hhh]h)}(hhh]h4Hyperlink target "vanilla-bisref" is not referenced.}(hhhjcNubah}(h]h ]h"]h$]h&]uh1hhj`Nubah}(h]h ]h"]h$]h&]levelKtypejKJsourcehlineMTuh1j0Jubj1J)}(hhh]h)}(hhh]h7Hyperlink target "secureboot-bisref" is not referenced.}(hhhj}Nubah}(h]h ]h"]h$]h&]uh1hhjzNubah}(h]h ]h"]h$]h&]levelKtypejKJsourcehlineMfuh1j0Jubj1J)}(hhh]h)}(hhh]h8Hyperlink target "bootworking-bisref" is not referenced.}(hhhjNubah}(h]h ]h"]h$]h&]uh1hhjNubah}(h]h ]h"]h$]h&]levelKtypejKJsourcehlineMuh1j0Jubj1J)}(hhh]h)}(hhh]h6Hyperlink target "diskspace-bisref" is not referenced.}(hhhjNubah}(h]h ]h"]h$]h&]uh1hhjNubah}(h]h ]h"]h$]h&]levelKtypejKJsourcehlineMuh1j0Jubj1J)}(hhh]h)}(hhh]h7Hyperlink target "rangecheck-bisref" is not referenced.}(hhhjNubah}(h]h ]h"]h$]h&]uh1hhjNubah}(h]h ]h"]h$]h&]levelKtypejKJsourcehlineMuh1j0Jubj1J)}(hhh]h)}(hhh]h:Hyperlink target "buildrequires-bisref" is not referenced.}(hhhjNubah}(h]h ]h"]h$]h&]uh1hhjNubah}(h]h ]h"]h$]h&]levelKtypejKJsourcehlineMuh1j0Jubj1J)}(hhh]h)}(hhh]h4Hyperlink target "sources-bisref" is not referenced.}(hhhjNubah}(h]h ]h"]h$]h&]uh1hhjNubah}(h]h ]h"]h$]h&]levelKtypejKJsourcehlineMuh1j0Jubj1J)}(hhh]h)}(hhh]h;Hyperlink target "sources-bundle-bisref" is not referenced.}(hhhjOubah}(h]h ]h"]h$]h&]uh1hhjOubah}(h]h ]h"]h$]h&]levelKtypejKJsourcehlineM uh1j0Jubj1J)}(hhh]h)}(hhh]hHyperlink target "introworkingcheck-bisref" is not referenced.}(hhhjPubah}(h]h ]h"]h$]h&]uh1hhjPubah}(h]h ]h"]h$]h&]levelKtypejKJsourcehlineM=uh1j0Jubj1J)}(hhh]h)}(hhh]h;Hyperlink target "recheckworking-bisref" is not referenced.}(hhhjQubah}(h]h ]h"]h$]h&]uh1hhjQubah}(h]h ]h"]h$]h&]levelKtypejKJsourcehlineM[uh1j0Jubj1J)}(hhh]h)}(hhh]h8Hyperlink target "bisectstart-bisref" is not referenced.}(hhhj!Qubah}(h]h ]h"]h$]h&]uh1hhjQubah}(h]h ]h"]h$]h&]levelKtypejKJsourcehlineMuh1j0Jubj1J)}(hhh]h)}(hhh]h8Hyperlink target "bisectbuild-bisref" is not referenced.}(hhhj;Qubah}(h]h ]h"]h$]h&]uh1hhj8Qubah}(h]h ]h"]h$]h&]levelKtypejKJsourcehlineMuh1j0Jubj1J)}(hhh]h)}(hhh]h7Hyperlink target "bisecttest-bisref" is not referenced.}(hhhjUQubah}(h]h ]h"]h$]h&]uh1hhjRQubah}(h]h ]h"]h$]h&]levelKtypejKJsourcehlineMuh1j0Jubj1J)}(hhh]h)}(hhh]h6Hyperlink target "bisectlog-bisref" is not referenced.}(hhhjoQubah}(h]h ]h"]h$]h&]uh1hhjlQubah}(h]h ]h"]h$]h&]levelKtypejKJsourcehlineMuh1j0Jubj1J)}(hhh]h)}(hhh]h3Hyperlink target "revert-bisref" is not referenced.}(hhhjQubah}(h]h ]h"]h$]h&]uh1hhjQubah}(h]h ]h"]h$]h&]levelKtypejKJsourcehlineMuh1j0Jubj1J)}(hhh]h)}(hhh]h5Hyperlink target "makeroom-bisref" is not referenced.}(hhhjQubah}(h]h ]h"]h$]h&]uh1hhjQubah}(h]h ]h"]h$]h&]levelKtypejKJsourcehlineMuh1j0Jubj1J)}(hhh]h)}(hhh]h;Hyperlink target "finishingtouch-bisref" is not referenced.}(hhhjQubah}(h]h ]h"]h$]h&]uh1hhjQubah}(h]h ]h"]h$]h&]levelKtypejKJsourcehlineM uh1j0Jubj1J)}(hhh]h)}(hhh]h:Hyperlink target "introoptional-bisref" is not referenced.}(hhhjQubah}(h]h ]h"]h$]h&]uh1hhjQubah}(h]h ]h"]h$]h&]levelKtypejKJsourcehlineM8uh1j0Jubj1J)}(hhh]h)}(hhh]h3Hyperlink target "buildhost-bis" is not referenced.}(hhhjQubah}(h]h ]h"]h$]h&]uh1hhjQubah}(h]h ]h"]h$]h&]levelKtypejKJsourcehlineMLuh1j0Jube transformerN include_log] decorationNhhub.