English Spanish
If the problem you've encountered isn't present in older versions of the kernel, it is very helpful to use `git-bisect` to find the commit that introduced the problem. For a general overview of `git-bisect`, see its https://git-scm.com/docs/git-bisect[documentation]. An outline on how to bisect the kernel is included in the https://www.kernel.org/doc/html/latest/admin-guide/bug-bisect.html[kernel documentation]. This guide contains Fedora-specific details.
Bisecting is a time-consuming task, but it's very straightforward and is often the best way to find the cause of a problem. If you're really interested in getting the problem you're seeing fixed, bisecting will speed up the process considerably in most cases.
Find the newest version you can that works. This will be the initial "good" version. The first version you find that doesn't work will be the initial "bad" version.
Install the xref:kernel/build-custom-kernel.adoc#_get_the_dependencies[dependencies] required to build the kernel.
Next, xref:kernel/build-custom-kernel.adoc#_getting_the_sources[get the source code].
Prepare a `.config` file. Assuming you've got both the good and bad kernel installed, the config for both will be in `/boot/`.footnote:[When bisecting between major versions (e.g. `v4.16` and `v4.15`) new configuration options will be added and removed as you bisect. It's _usually_ safe to select the default.]
Start a new `git-bisect` with `git bisect start`.
Mark the newest version that works as "good" with `git bisect good <tag>`. For example: `git bisect good v4.16.8`.
Mark the first version that does not work as "bad" with `git bisect bad <tag>`. For example: `git bisect bad v4.17`.
xref:kernel/build-custom-kernel.adoc#_building_the_kernel[Build the kernel]. Sometimes commits cannot be built. If this happens, skip the commit with `git bisect skip`.
xref:kernel/build-custom-kernel.adoc#_installing_the_kernel[Install the kernel].
Reboot into the new kernel and test to see if it works.
If the new kernel works, mark it as good with `git bisect good`. Otherwise, mark it as bad with `git bisect bad`.
Repeat the previous five steps until you've found the commit that introduced the problem.