Reporting issues¶
The short guide (aka TL;DR)¶
Are you facing a regression with vanilla kernels from the same stable orlongterm series? One still supported? Then search theLKML and theLinux stable mailing list archives for matching reports to join. Ifyou don’t find any, installthe latest release from that series. If it still shows the issue, report it to the stablemailing list (stable@vger.kernel.org) and CC the regressions list(regressions@lists.linux.dev); ideally also CC the maintainer and the mailinglist for the subsystem in question.
In all other cases try your best guess which kernel part might be causing theissue. Check theMAINTAINERS file for how its developersexpect to be told about problems, which most of the time will be by email with amailing list in CC. Check the destination’s archives for matching reports;search theLKML and the web, too. If youdon’t find any to join, installthe latest mainline kernel. If the issue is present there, send a report.
The issue was fixed there, but you would like to see it resolved in a stillsupported stable or longterm series as well? Then install its latest release.If it shows the problem, search for the change that fixed it in mainline andcheck if backporting is in the works or was discarded; if it’s neither, askthose who handled the change for it.
General remarks: When installing and testing a kernel as outlined above,ensure it’s vanilla (IOW: not patched and not using add-on modules). Also makesure it’s built and running in a healthy environment and not already taintedbefore the issue occurs.
If you are facing multiple issues with the Linux kernel at once, report eachseparately. While writing your report, include all information relevant to theissue, like the kernel and the distro used. In case of a regression, CC theregressions mailing list (regressions@lists.linux.dev) to your report. Also tryto pinpoint the culprit with a bisection; if you succeed, include itscommit-id and CC everyone in the sign-off-by chain.
Once the report is out, answer any questions that come up and help where youcan. That includes keeping the ball rolling by occasionally retesting with newerreleases and sending a status update afterwards.
Step-by-step guide how to report issues to the kernel maintainers¶
The above TL;DR outlines roughly how to report issues to the Linux kerneldevelopers. It might be all that’s needed for people already familiar withreporting issues to Free/Libre & Open Source Software (FLOSS) projects. Foreveryone else there is this section. It is more detailed and uses astep-by-step approach. It still tries to be brief for readability and leavesout a lot of details; those are described below the step-by-step guide in areference section, which explains each of the steps in more detail.
Note: this section covers a few more aspects than the TL;DR and does things ina slightly different order. That’s in your interest, to make sure you noticeearly if an issue that looks like a Linux kernel problem is actually caused bysomething else. These steps thus help to ensure the time you invest in thisprocess won’t feel wasted in the end:
Are you facing an issue with a Linux kernel a hardware or software vendorprovided? Then in almost all cases you are better off to stop reading thisdocument and reporting the issue to your vendor instead, unless you arewilling to install the latest Linux version yourself. Be aware the latterwill often be needed anyway to hunt down and fix issues.
Perform a rough search for existing reports with your favorite internetsearch engine; additionally, check the archives of theLinux Kernel MailingList (LKML). If you find matching reports,join the discussion instead of sending a new one.
See if the issue you are dealing with qualifies as regression, securityissue, or a really severe problem: those are ‘issues of high priority’ thatneed special handling in some steps that are about to follow.
Make sure it’s not the kernel’s surroundings that are causing the issueyou face.
Create a fresh backup and put system repair and restore tools at hand.
Ensure your system does not enhance its kernels by building additionalkernel modules on-the-fly, which solutions like DKMS might be doing locallywithout your knowledge.
Check if your kernel was ‘tainted’ when the issue occurred, as the eventthat made the kernel set this flag might be causing the issue you face.
Write down coarsely how to reproduce the issue. If you deal with multipleissues at once, create separate notes for each of them and make sure theywork independently on a freshly booted system. That’s needed, as each issueneeds to get reported to the kernel developers separately, unless they arestrongly entangled.
If you are facing a regression within a stable or longterm version line(say something broke when updating from 5.10.4 to 5.10.5), scroll down to‘Dealing with regressions within a stable and longterm kernel line’.
Locate the driver or kernel subsystem that seems to be causing the issue.Find out how and where its developers expect reports. Note: most of thetime this won’t be bugzilla.kernel.org, as issues typically need to be sentby mail to a maintainer and a public mailing list.
Search the archives of the bug tracker or mailing list in questionthoroughly for reports that might match your issue. If you find anything,join the discussion instead of sending a new report.
After these preparations you’ll now enter the main part:
Unless you are already running the latest ‘mainline’ Linux kernel, bettergo and install it for the reporting process. Testing and reporting withthe latest ‘stable’ Linux can be an acceptable alternative in somesituations; during the merge window that actually might be even the bestapproach, but in that development phase it can be an even better idea tosuspend your efforts for a few days anyway. Whatever version you choose,ideally use a ‘vanilla’ build. Ignoring these advices will dramaticallyincrease the risk your report will be rejected or ignored.
Ensure the kernel you just installed does not ‘taint’ itself whenrunning.
Reproduce the issue with the kernel you just installed. If it doesn’t showup there, scroll down to the instructions for issues only happening withstable and longterm kernels.
Optimize your notes: try to find and write the most straightforward way toreproduce your issue. Make sure the end result has all the importantdetails, and at the same time is easy to read and understand for othersthat hear about it for the first time. And if you learned something in thisprocess, consider searching again for existing reports about the issue.
If your failure involves a ‘panic’, ‘Oops’, ‘warning’, or ‘BUG’, considerdecoding the kernel log to find the line of code that triggered the error.
If your problem is a regression, try to narrow down when the issue wasintroduced as much as possible.
Start to compile the report by writing a detailed description about theissue. Always mention a few things: the latest kernel version you installedfor reproducing, the Linux Distribution used, and your notes on how toreproduce the issue. Ideally, make the kernel’s build configuration(.config) and the output from
dmesgavailable somewhere on the net andlink to it. Include or upload all other information that might be relevant,like the output/screenshot of an Oops or the output fromlspci. Onceyou wrote this main part, insert a normal length paragraph on top of itoutlining the issue and the impact quickly. On top of this add one sentencethat briefly describes the problem and gets people to read on. Now give thething a descriptive title or subject that yet again is shorter. Then you’reready to send or file the report like the MAINTAINERS file told you, unlessyou are dealing with one of those ‘issues of high priority’: they needspecial care which is explained in ‘Special handling for high priorityissues’ below.Wait for reactions and keep the thing rolling until you can accept theoutcome in one way or the other. Thus react publicly and in a timely mannerto any inquiries. Test proposed fixes. Do proactive testing: retest with atleast every first release candidate (RC) of a new mainline version andreport your results. Send friendly reminders if things stall. And try tohelp yourself, if you don’t get any help or if it’s unsatisfying.
Reporting regressions within a stable and longterm kernel line¶
This subsection is for you, if you followed above process and got sent here atthe point about regression within a stable or longterm kernel version line. Youface one of those if something breaks when updating from 5.10.4 to 5.10.5 (aswitch from 5.9.15 to 5.10.5 does not qualify). The developers want to fix suchregressions as quickly as possible, hence there is a streamlined process toreport them:
Check if the kernel developers still maintain the Linux kernel versionline you care about: go to thefront page of kernel.org and make sure it mentionsthe latest release of the particular version line without an ‘[EOL]’ tag.
Check the archives of theLinux stable mailing list for existing reports.
Install the latest release from the particular version line as a vanillakernel. Ensure this kernel is not tainted and still shows the problem, asthe issue might have already been fixed there. If you first noticed theproblem with a vendor kernel, check a vanilla build of the last versionknown to work performs fine as well.
Send a short problem report to the Linux stable mailing list(stable@vger.kernel.org) and CC the Linux regressions mailing list(regressions@lists.linux.dev); if you suspect the cause in a particularsubsystem, CC its maintainer and its mailing list. Roughly describe theissue and ideally explain how to reproduce it. Mention the first versionthat shows the problem and the last version that’s working fine. Thenwait for further instructions.
The reference section below explains each of these steps in more detail.
Reporting issues only occurring in older kernel version lines¶
This subsection is for you, if you tried the latest mainline kernel as outlinedabove, but failed to reproduce your issue there; at the same time you want tosee the issue fixed in a still supported stable or longterm series or vendorkernels regularly rebased on those. If that is the case, follow these steps:
Prepare yourself for the possibility that going through the next few stepsmight not get the issue solved in older releases: the fix might be too bigor risky to get backported there.
Perform the first three steps in the section “Dealing with regressionswithin a stable and longterm kernel line” above.
Search the Linux kernel version control system for the change that fixedthe issue in mainline, as its commit message might tell you if the fix isscheduled for backporting already. If you don’t find anything that way,search the appropriate mailing lists for posts that discuss such an issueor peer-review possible fixes; then check the discussions if the fix wasdeemed unsuitable for backporting. If backporting was not considered atall, join the newest discussion, asking if it’s in the cards.
One of the former steps should lead to a solution. If that doesn’t workout, ask the maintainers for the subsystem that seems to be causing theissue for advice; CC the mailing list for the particular subsystem as wellas the stable mailing list.
The reference section below explains each of these steps in more detail.
Reference section: Reporting issues to the kernel maintainers¶
The detailed guides above outline all the major steps in brief fashion, whichshould be enough for most people. But sometimes there are situations where evenexperienced users might wonder how to actually do one of those steps. That’swhat this section is for, as it will provide a lot more details on each of theabove steps. Consider this as reference documentation: it’s possible to read itfrom top to bottom. But it’s mainly meant to skim over and a place to look updetails how to actually perform those steps.
A few words of general advice before digging into the details:
The Linux kernel developers are well aware this process is complicated anddemands more than other FLOSS projects. We’d love to make it simpler. Butthat would require work in various places as well as some infrastructure,which would need constant maintenance; nobody has stepped up to do thatwork, so that’s just how things are for now.
A warranty or support contract with some vendor doesn’t entitle you torequest fixes from developers in the upstream Linux kernel community: suchcontracts are completely outside the scope of the Linux kernel, itsdevelopment community, and this document. That’s why you can’t demandanything such a contract guarantees in this context, not even if thedeveloper handling the issue works for the vendor in question. If you wantto claim your rights, use the vendor’s support channel instead. When doingso, you might want to mention you’d like to see the issue fixed in theupstream Linux kernel; motivate them by saying it’s the only way to ensurethe fix in the end will get incorporated in all Linux distributions.
If you never reported an issue to a FLOSS project before you should considerreadingHow to Report Bugs Effectively,How To AskQuestions The Smart Way, andHow to ask goodquestions.
With that off the table, find below the details on how to properly reportissues to the Linux kernel developers.
Make sure you’re using the upstream Linux kernel¶
Are you facing an issue with a Linux kernel a hardware or software vendorprovided? Then in almost all cases you are better off to stop reading thisdocument and reporting the issue to your vendor instead, unless you arewilling to install the latest Linux version yourself. Be aware the latterwill often be needed anyway to hunt down and fix issues.
Like most programmers, Linux kernel developers don’t like to spend time dealingwith reports for issues that don’t even happen with their current code. It’sjust a waste everybody’s time, especially yours. Unfortunately such situationseasily happen when it comes to the kernel and often leads to frustration on bothsides. That’s because almost all Linux-based kernels pre-installed on devices(Computers, Laptops, Smartphones, Routers, …) and most shipped by Linuxdistributors are quite distant from the official Linux kernel as distributed bykernel.org: these kernels from these vendors are often ancient from the point ofLinux development or heavily modified, often both.
Most of these vendor kernels are quite unsuitable for reporting issues to theLinux kernel developers: an issue you face with one of them might have beenfixed by the Linux kernel developers months or years ago already; additionally,the modifications and enhancements by the vendor might be causing the issue youface, even if they look small or totally unrelated. That’s why you should reportissues with these kernels to the vendor. Its developers should look into thereport and, in case it turns out to be an upstream issue, fix it directlyupstream or forward the report there. In practice that often does not work outor might not what you want. You thus might want to consider circumventing thevendor by installing the very latest Linux kernel core yourself. If that’s anoption for you move ahead in this process, as a later step in this guide willexplain how to do that once it rules out other potential causes for your issue.
Note, the previous paragraph is starting with the word ‘most’, as sometimesdevelopers in fact are willing to handle reports about issues occurring withvendor kernels. If they do in the end highly depends on the developers and theissue in question. Your chances are quite good if the distributor applied onlysmall modifications to a kernel based on a recent Linux version; that forexample often holds true for the mainline kernels shipped by Debian GNU/LinuxSid or Fedora Rawhide. Some developers will also accept reports about issueswith kernels from distributions shipping the latest stable kernel, as long asit’s only slightly modified; that for example is often the case for Arch Linux,regular Fedora releases, and openSUSE Tumbleweed. But keep in mind, you betterwant to use a mainline Linux and avoid using a stable kernel for thisprocess, as outlined in the section ‘Install a fresh kernel for testing’ in moredetail.
Obviously you are free to ignore all this advice and report problems with an oldor heavily modified vendor kernel to the upstream Linux developers. But note,those often get rejected or ignored, so consider yourself warned. But it’s stillbetter than not reporting the issue at all: sometimes such reports directly orindirectly will help to get the issue fixed over time.
Search for existing reports, first run¶
Perform a rough search for existing reports with your favorite internetsearch engine; additionally, check the archives of the Linux Kernel MailingList (LKML). If you find matching reports, join the discussion instead ofsending a new one.
Reporting an issue that someone else already brought forward is often a waste oftime for everyone involved, especially you as the reporter. So it’s in your owninterest to thoroughly check if somebody reported the issue already. At thisstep of the process it’s okay to just perform a rough search: a later step willtell you to perform a more detailed search once you know where your issue needsto be reported to. Nevertheless, do not hurry with this step of the reportingprocess, it can save you time and trouble.
Simply search the internet with your favorite search engine first. Afterwards,search theLinux Kernel Mailing List (LKML) archives.
If you get flooded with results consider telling your search engine to limitsearch timeframe to the past month or year. And wherever you search, make sureto use good search terms; vary them a few times, too. While doing so try tolook at the issue from the perspective of someone else: that will help you tocome up with other words to use as search terms. Also make sure not to use toomany search terms at once. Remember to search with and without information likethe name of the kernel driver or the name of the affected hardware component.But its exact brand name (say ‘ASUS Red Devil Radeon RX 5700 XT Gaming OC’)often is not much helpful, as it is too specific. Instead try search terms likethe model line (Radeon 5700 or Radeon 5000) and the code name of the main chip(‘Navi’ or ‘Navi10’) with and without its manufacturer (‘AMD’).
In case you find an existing report about your issue, join the discussion, asyou might be able to provide valuable additional information. That can beimportant even when a fix is prepared or in its final stages already, asdevelopers might look for people that can provide additional information ortest a proposed fix. Jump to the section ‘Duties after the report went out’ fordetails on how to get properly involved.
Note, searchingbugzilla.kernel.org might alsobe a good idea, as that might provide valuable insights or turn up matchingreports. If you find the latter, just keep in mind: most subsystems expectreports in different places, as described below in the section “Check where youneed to report your issue”. The developers that should take care of the issuethus might not even be aware of the bugzilla ticket. Hence, check the ticket ifthe issue already got reported as outlined in this document and if not considerdoing so.
Issue of high priority?¶
See if the issue you are dealing with qualifies as regression, securityissue, or a really severe problem: those are ‘issues of high priority’ thatneed special handling in some steps that are about to follow.
Linus Torvalds and the leading Linux kernel developers want to see some issuesfixed as soon as possible, hence there are ‘issues of high priority’ that gethandled slightly differently in the reporting process. Three type of casesqualify: regressions, security issues, and really severe problems.
You deal with a regression if some application or practical use case runningfine with one Linux kernel works worse or not at all with a newer versioncompiled using a similar configuration. The documentReporting regressions explains this in moredetail. It also provides a good deal of other information about regressions youmight want to be aware of; it for example explains how to add your issue to thelist of tracked regressions, to ensure it won’t fall through the cracks.
What qualifies as security issue is left to your judgment. Consider readingSecurity bugs before proceeding, as itprovides additional details how to best handle security issues.
An issue is a ‘really severe problem’ when something totally unacceptably badhappens. That’s for example the case when a Linux kernel corrupts the data it’shandling or damages hardware it’s running on. You’re also dealing with a severeissue when the kernel suddenly stops working with an error message (‘kernelpanic’) or without any farewell note at all. Note: do not confuse a ‘panic’ (afatal error where the kernel stop itself) with a ‘Oops’ (a recoverable error),as the kernel remains running after the latter.
Ensure a healthy environment¶
Make sure it’s not the kernel’s surroundings that are causing the issueyou face.
Problems that look a lot like a kernel issue are sometimes caused by build orruntime environment. It’s hard to rule out that problem completely, but youshould minimize it:
Use proven tools when building your kernel, as bugs in the compiler or thebinutils can cause the resulting kernel to misbehave.
Ensure your computer components run within their design specifications;that’s especially important for the main processor, the main memory, and themotherboard. Therefore, stop undervolting or overclocking when facing apotential kernel issue.
Try to make sure it’s not faulty hardware that is causing your issue. Badmain memory for example can result in a multitude of issues that willmanifest itself in problems looking like kernel issues.
If you’re dealing with a filesystem issue, you might want to check the filesystem in question with
fsck, as it might be damaged in a way that leadsto unexpected kernel behavior.When dealing with a regression, make sure it’s not something else thatchanged in parallel to updating the kernel. The problem for example might becaused by other software that was updated at the same time. It can alsohappen that a hardware component coincidentally just broke when you rebootedinto a new kernel for the first time. Updating the systems BIOS or changingsomething in the BIOS Setup can also lead to problems that on look a lotlike a kernel regression.
Prepare for emergencies¶
Create a fresh backup and put system repair and restore tools at hand.
Reminder, you are dealing with computers, which sometimes do unexpected things,especially if you fiddle with crucial parts like the kernel of its operatingsystem. That’s what you are about to do in this process. Thus, make sure tocreate a fresh backup; also ensure you have all tools at hand to repair orreinstall the operating system as well as everything you need to restore thebackup.
Make sure your kernel doesn’t get enhanced¶
Ensure your system does not enhance its kernels by building additionalkernel modules on-the-fly, which solutions like DKMS might be doing locallywithout your knowledge.
The risk your issue report gets ignored or rejected dramatically increases ifyour kernel gets enhanced in any way. That’s why you should remove or disablemechanisms like akmods and DKMS: those build add-on kernel modulesautomatically, for example when you install a new Linux kernel or boot it forthe first time. Also remove any modules they might have installed. Then rebootbefore proceeding.
Note, you might not be aware that your system is using one of these solutions:they often get set up silently when you install Nvidia’s proprietary graphicsdriver, VirtualBox, or other software that requires a some support from amodule not part of the Linux kernel. That why your might need to uninstall thepackages with such software to get rid of any 3rd party kernel module.
Check ‘taint’ flag¶
Check if your kernel was ‘tainted’ when the issue occurred, as the eventthat made the kernel set this flag might be causing the issue you face.
The kernel marks itself with a ‘taint’ flag when something happens that mightlead to follow-up errors that look totally unrelated. The issue you face mightbe such an error if your kernel is tainted. That’s why it’s in your interest torule this out early before investing more time into this process. This is theonly reason why this step is here, as this process later will tell you toinstall the latest mainline kernel; you will need to check the taint flag againthen, as that’s when it matters because it’s the kernel the report will focuson.
On a running system is easy to check if the kernel tainted itself: ifcat/proc/sys/kernel/tainted returns ‘0’ then the kernel is not tainted andeverything is fine. Checking that file is impossible in some situations; that’swhy the kernel also mentions the taint status when it reports an internalproblem (a ‘kernel bug’), a recoverable error (a ‘kernel Oops’) or anon-recoverable error before halting operation (a ‘kernel panic’). Look nearthe top of the error messages printed when one of these occurs and search for aline starting with ‘CPU:’. It should end with ‘Not tainted’ if the kernel wasnot tainted when it noticed the problem; it was tainted if you see ‘Tainted:’followed by a few spaces and some letters.
If your kernel is tainted, studyTainted kernelsto find out why. Try to eliminate the reason. Often it’s caused by one thesethree things:
A recoverable error (a ‘kernel Oops’) occurred and the kernel tainteditself, as the kernel knows it might misbehave in strange ways after thatpoint. In that case check your kernel or system log and look for a sectionthat starts with this:
Oops: 0000 [#1] SMPThat’s the first Oops since boot-up, as the ‘#1’ between the brackets shows.Every Oops and any other problem that happens after that point might be afollow-up problem to that first Oops, even if both look totally unrelated.Rule this out by getting rid of the cause for the first Oops and reproducingthe issue afterwards. Sometimes simply restarting will be enough, sometimesa change to the configuration followed by a reboot can eliminate the Oops.But don’t invest too much time into this at this point of the process, asthe cause for the Oops might already be fixed in the newer Linux kernelversion you are going to install later in this process.
Your system uses a software that installs its own kernel modules, forexample Nvidia’s proprietary graphics driver or VirtualBox. The kerneltaints itself when it loads such module from external sources (even ifthey are Open Source): they sometimes cause errors in unrelated kernelareas and thus might be causing the issue you face. You therefore have toprevent those modules from loading when you want to report an issue to theLinux kernel developers. Most of the time the easiest way to do that is:temporarily uninstall such software including any modules they might haveinstalled. Afterwards reboot.
The kernel also taints itself when it’s loading a module that resides inthe staging tree of the Linux kernel source. That’s a special area forcode (mostly drivers) that does not yet fulfill the normal Linux kernelquality standards. When you report an issue with such a module it’sobviously okay if the kernel is tainted; just make sure the module inquestion is the only reason for the taint. If the issue happens in anunrelated area reboot and temporarily block the module from being loadedby specifying
foo.blacklist=1as kernel parameter (replace ‘foo’ withthe name of the module in question).
Document how to reproduce issue¶
Write down coarsely how to reproduce the issue. If you deal with multipleissues at once, create separate notes for each of them and make sure theywork independently on a freshly booted system. That’s needed, as each issueneeds to get reported to the kernel developers separately, unless they arestrongly entangled.
If you deal with multiple issues at once, you’ll have to report each of themseparately, as they might be handled by different developers. Describingvarious issues in one report also makes it quite difficult for others to tearit apart. Hence, only combine issues in one report if they are very stronglyentangled.
Additionally, during the reporting process you will have to test if the issuehappens with other kernel versions. Therefore, it will make your work easier ifyou know exactly how to reproduce an issue quickly on a freshly booted system.
Note: it’s often fruitless to report issues that only happened once, as theymight be caused by a bit flip due to cosmic radiation. That’s why you shouldtry to rule that out by reproducing the issue before going further. Feel freeto ignore this advice if you are experienced enough to tell a one-time errordue to faulty hardware apart from a kernel issue that rarely happens and thusis hard to reproduce.
Regression in stable or longterm kernel?¶
If you are facing a regression within a stable or longterm version line(say something broke when updating from 5.10.4 to 5.10.5), scroll down to‘Dealing with regressions within a stable and longterm kernel line’.
Regression within a stable and longterm kernel version line are something theLinux developers want to fix badly, as such issues are even more unwanted thanregression in the main development branch, as they can quickly affect a lot ofpeople. The developers thus want to learn about such issues as quickly aspossible, hence there is a streamlined process to report them. Note,regressions with newer kernel version line (say something broke when switchingfrom 5.9.15 to 5.10.5) do not qualify.
Check where you need to report your issue¶
Locate the driver or kernel subsystem that seems to be causing the issue.Find out how and where its developers expect reports. Note: most of thetime this won’t be bugzilla.kernel.org, as issues typically need to be sentby mail to a maintainer and a public mailing list.
It’s crucial to send your report to the right people, as the Linux kernel is abig project and most of its developers are only familiar with a small subset ofit. Quite a few programmers for example only care for just one driver, forexample one for a WiFi chip; its developer likely will only have small or noknowledge about the internals of remote or unrelated “subsystems”, like the TCPstack, the PCIe/PCI subsystem, memory management or file systems.
Problem is: the Linux kernel lacks a central bug tracker where you can simplyfile your issue and make it reach the developers that need to know about it.That’s why you have to find the right place and way to report issues yourself.You can do that with the help of a script (see below), but it mainly targetskernel developers and experts. For everybody else the MAINTAINERS file is thebetter place.
How to read the MAINTAINERS file¶
To illustrate how to use theMAINTAINERS file, let’s assumethe WiFi in your Laptop suddenly misbehaves after updating the kernel. In thatcase it’s likely an issue in the WiFi driver. Obviously it could also be somecode it builds upon, but unless you suspect something like that stick to thedriver. If it’s really something else, the driver’s developers will get theright people involved.
Sadly, there is no way to check which code is driving a particular hardwarecomponent that is both universal and easy.
In case of a problem with the WiFi driver you for example might want to look atthe output oflspci-k, as it lists devices on the PCI/PCIe bus and thekernel module driving it:
[user@something ~]$ lspci -k[...]3a:00.0 Network controller: Qualcomm Atheros QCA6174 802.11ac Wireless Network Adapter (rev 32) Subsystem: Bigfoot Networks, Inc. Device 1535 Kernel driver in use: ath10k_pci Kernel modules: ath10k_pci[...]
But this approach won’t work if your WiFi chip is connected over USB or someother internal bus. In those cases you might want to check your WiFi manager orthe output ofiplink. Look for the name of the problematic networkinterface, which might be something like ‘wlp58s0’. This name can be used likethis to find the module driving it:
[user@something ~]$ realpath --relative-to=/sys/module/ /sys/class/net/wlp58s0/device/driver/moduleath10k_pci
In case tricks like these don’t bring you any further, try to search theinternet on how to narrow down the driver or subsystem in question. And if youare unsure which it is: just try your best guess, somebody will help you if youguessed poorly.
Once you know the driver or subsystem, you want to search for it in theMAINTAINERS file. In the case of ‘ath10k_pci’ you won’t find anything, as thename is too specific. Sometimes you will need to search on the net for help;but before doing so, try a somewhat shorted or modified name when searching theMAINTAINERS file, as then you might find something like this:
QUALCOMM ATHEROS ATH10K WIRELESS DRIVERMail: A. Some Human <shuman@example.com>Mailing list: ath10k@lists.infradead.orgStatus: SupportedWeb-page: https://wireless.wiki.kernel.org/en/users/Drivers/ath10kSCM: git git://git.kernel.org/pub/scm/linux/kernel/git/kvalo/ath.gitFiles: drivers/net/wireless/ath/ath10k/
Note: the line description will be abbreviations, if you read the plainMAINTAINERS file found in the root of the Linux source tree. ‘Mail:’ forexample will be ‘M:’, ‘Mailing list:’ will be ‘L’, and ‘Status:’ will be ‘S:’.A section near the top of the file explains these and other abbreviations.
First look at the line ‘Status’. Ideally it should be ‘Supported’ or‘Maintained’. If it states ‘Obsolete’ then you are using some outdated approachthat was replaced by a newer solution you need to switch to. Sometimes the codeonly has someone who provides ‘Odd Fixes’ when feeling motivated. And with‘Orphan’ you are totally out of luck, as nobody takes care of the code anymore.That only leaves these options: arrange yourself to live with the issue, fix ityourself, or find a programmer somewhere willing to fix it.
After checking the status, look for a line starting with ‘bugs:’: it will tellyou where to find a subsystem specific bug tracker to file your issue. Theexample above does not have such a line. That is the case for most sections, asLinux kernel development is completely driven by mail. Very few subsystems usea bug tracker, and only some of those rely on bugzilla.kernel.org.
In this and many other cases you thus have to look for lines starting with‘Mail:’ instead. Those mention the name and the email addresses for themaintainers of the particular code. Also look for a line starting with ‘Mailinglist:’, which tells you the public mailing list where the code is developed.Your report later needs to go by mail to those addresses. Additionally, for allissue reports sent by email, make sure to add the Linux Kernel Mailing List(LKML) <linux-kernel@vger.kernel.org> to CC. Don’t omit either of the mailinglists when sending your issue report by mail later! Maintainers are busy peopleand might leave some work for other developers on the subsystem specific list;and LKML is important to have one place where all issue reports can be found.
Finding the maintainers with the help of a script¶
For people that have the Linux sources at hand there is a second option to findthe proper place to report: the script ‘scripts/get_maintainer.pl’ which triesto find all people to contact. It queries the MAINTAINERS file and needs to becalled with a path to the source code in question. For drivers compiled asmodule if often can be found with a command like this:
$ modinfo ath10k_pci | grep filename | sed 's!/lib/modules/.*/kernel/!!; s!filename:!!; s!\.ko\(\|\.xz\)!!'drivers/net/wireless/ath/ath10k/ath10k_pci.ko
Pass parts of this to the script:
$ ./scripts/get_maintainer.pl -f drivers/net/wireless/ath/ath10k*Some Human <shuman@example.com> (supporter:QUALCOMM ATHEROS ATH10K WIRELESS DRIVER)Another S. Human <asomehuman@example.com> (maintainer:NETWORKING DRIVERS)ath10k@lists.infradead.org (open list:QUALCOMM ATHEROS ATH10K WIRELESS DRIVER)linux-wireless@vger.kernel.org (open list:NETWORKING DRIVERS (WIRELESS))netdev@vger.kernel.org (open list:NETWORKING DRIVERS)linux-kernel@vger.kernel.org (open list)
Don’t sent your report to all of them. Send it to the maintainers, which thescript calls “supporter:”; additionally CC the most specific mailing list forthe code as well as the Linux Kernel Mailing List (LKML). In this case you thuswould need to send the report to ‘Some Human <shuman@example.com>’ with‘ath10k@lists.infradead.org’ and‘linux-kernel@vger.kernel.org’ in CC.
Note: in case you cloned the Linux sources with git you might want to callget_maintainer.pl a second time with--git. The script then will lookat the commit history to find which people recently worked on the code inquestion, as they might be able to help. But use these results with care, as itcan easily send you in a wrong direction. That for example happens quickly inareas rarely changed (like old or unmaintained drivers): sometimes such code ismodified during tree-wide cleanups by developers that do not care about theparticular driver at all.
Search for existing reports, second run¶
Search the archives of the bug tracker or mailing list in questionthoroughly for reports that might match your issue. If you find anything,join the discussion instead of sending a new report.
As mentioned earlier already: reporting an issue that someone else alreadybrought forward is often a waste of time for everyone involved, especially youas the reporter. That’s why you should search for existing report again, nowthat you know where they need to be reported to. If it’s mailing list, you willoften find its archives onlore.kernel.org.
But some list are hosted in different places. That for example is the case forthe ath10k WiFi driver used as example in the previous step. But you’ll oftenfind the archives for these lists easily on the net. Searching for ‘archiveath10k@lists.infradead.org’ for example will lead you to theInfo page for theath10k mailing list,which at the top links to itslist archives. Sadly this andquite a few other lists miss a way to search the archives. In those cases use aregular internet search engine and add something like‘site:lists.infradead.org/pipermail/ath10k/’ to your search terms, which limitsthe results to the archives at that URL.
It’s also wise to check the internet, LKML and maybe bugzilla.kernel.org againat this point. If your report needs to be filed in a bug tracker, you may wantto check the mailing list archives for the subsystem as well, as someone mighthave reported it only there.
For details how to search and what to do if you find matching reports see“Search for existing reports, first run” above.
Do not hurry with this step of the reporting process: spending 30 to 60 minutesor even more time can save you and others quite a lot of time and trouble.
Install a fresh kernel for testing¶
Unless you are already running the latest ‘mainline’ Linux kernel, bettergo and install it for the reporting process. Testing and reporting withthe latest ‘stable’ Linux can be an acceptable alternative in somesituations; during the merge window that actually might be even the bestapproach, but in that development phase it can be an even better idea tosuspend your efforts for a few days anyway. Whatever version you choose,ideally use a ‘vanilla’ built. Ignoring these advices will dramaticallyincrease the risk your report will be rejected or ignored.
As mentioned in the detailed explanation for the first step already: Like mostprogrammers, Linux kernel developers don’t like to spend time dealing withreports for issues that don’t even happen with the current code. It’s just awaste everybody’s time, especially yours. That’s why it’s in everybody’sinterest that you confirm the issue still exists with the latest upstream codebefore reporting it. You are free to ignore this advice, but as outlinedearlier: doing so dramatically increases the risk that your issue report mightget rejected or simply ignored.
In the scope of the kernel “latest upstream” normally means:
Install a mainline kernel; the latest stable kernel can be an option, butmost of the time is better avoided. Longterm kernels (sometimes called ‘LTSkernels’) are unsuitable at this point of the process. The next subsectionexplains all of this in more detail.
The over next subsection describes way to obtain and install such a kernel.It also outlines that using a pre-compiled kernel are fine, but better arevanilla, which means: it was built using Linux sources taken straightfromkernel.org and not modified or enhanced in any way.
Choosing the right version for testing¶
Head over tokernel.org to find out which version youwant to use for testing. Ignore the big yellow button that says ‘Latest release’and look a little lower at the table. At its top you’ll see a line starting withmainline, which most of the time will point to a pre-release with a versionnumber like ‘5.8-rc2’. If that’s the case, you’ll want to use this mainlinekernel for testing, as that where all fixes have to be applied first. Do not letthat ‘rc’ scare you, these ‘development kernels’ are pretty reliable — and youmade a backup, as you were instructed above, didn’t you?
In about two out of every nine to ten weeks, mainline might point you to aproper release with a version number like ‘5.7’. If that happens, considersuspending the reporting process until the first pre-release of the nextversion (5.8-rc1) shows up on kernel.org. That’s because the Linux developmentcycle then is in its two-week long ‘merge window’. The bulk of the changes andall intrusive ones get merged for the next release during this time. It’s a bitmore risky to use mainline during this period. Kernel developers are also oftenquite busy then and might have no spare time to deal with issue reports. It’salso quite possible that one of the many changes applied during the mergewindow fixes the issue you face; that’s why you soon would have to retest witha newer kernel version anyway, as outlined below in the section ‘Duties afterthe report went out’.
That’s why it might make sense to wait till the merge window is over. But don’tto that if you’re dealing with something that shouldn’t wait. In that caseconsider obtaining the latest mainline kernel via git (see below) or use thelatest stable version offered on kernel.org. Using that is also acceptable incase mainline for some reason does currently not work for you. An in general:using it for reproducing the issue is also better than not reporting it issueat all.
Better avoid using the latest stable kernel outside merge windows, as all fixesmust be applied to mainline first. That’s why checking the latest mainlinekernel is so important: any issue you want to see fixed in older version linesneeds to be fixed in mainline first before it can get backported, which cantake a few days or weeks. Another reason: the fix you hope for might be toohard or risky for backporting; reporting the issue again hence is unlikely tochange anything.
These aspects are also why longterm kernels (sometimes called “LTS kernels”)are unsuitable for this part of the reporting process: they are to distant fromthe current code. Hence go and test mainline first and follow the processfurther: if the issue doesn’t occur with mainline it will guide you how to getit fixed in older version lines, if that’s in the cards for the fix in question.
How to obtain a fresh Linux kernel¶
Using a pre-compiled kernel: This is often the quickest, easiest, and safestway for testing — especially is you are unfamiliar with the Linux kernel. Theproblem: most of those shipped by distributors or add-on repositories are buildfrom modified Linux sources. They are thus not vanilla and therefore oftenunsuitable for testing and issue reporting: the changes might cause the issueyou face or influence it somehow.
But you are in luck if you are using a popular Linux distribution: for quite afew of them you’ll find repositories on the net that contain packages with thelatest mainline or stable Linux built as vanilla kernel. It’s totally okay touse these, just make sure from the repository’s description they are vanilla orat least close to it. Additionally ensure the packages contain the latestversions as offered on kernel.org. The packages are likely unsuitable if theyare older than a week, as new mainline and stable kernels typically get releasedat least once a week.
Please note that you might need to build your own kernel manually later: that’ssometimes needed for debugging or testing fixes, as described later in thisdocument. Also be aware that pre-compiled kernels might lack debug symbols thatare needed to decode messages the kernel prints when a panic, Oops, warning, orBUG occurs; if you plan to decode those, you might be better off compiling akernel yourself (see the end of this subsection and the section titled ‘Decodefailure messages’ for details).
Using git: Developers and experienced Linux users familiar with git areoften best served by obtaining the latest Linux kernel sources straight from theofficial development repository on kernel.org.Those are likely a bit ahead of the latest mainline pre-release. Don’t worryabout it: they are as reliable as a proper pre-release, unless the kernel’sdevelopment cycle is currently in the middle of a merge window. But even thenthey are quite reliable.
Conventional: People unfamiliar with git are often best served bydownloading the sources as tarball fromkernel.org.
How to actually build a kernel is not described here, as many websites explainthe necessary steps already. If you are new to it, consider following one ofthose how-to’s that suggest to usemakelocalmodconfig, as that tries topick up the configuration of your current kernel and then tries to adjust itsomewhat for your system. That does not make the resulting kernel any better,but quicker to compile.
Note: If you are dealing with a panic, Oops, warning, or BUG from the kernel,please try to enable CONFIG_KALLSYMS when configuring your kernel.Additionally, enable CONFIG_DEBUG_KERNEL and CONFIG_DEBUG_INFO, too; thelatter is the relevant one of those two, but can only be reached if you enablethe former. Be aware CONFIG_DEBUG_INFO increases the storage space required tobuild a kernel by quite a bit. But that’s worth it, as these options will allowyou later to pinpoint the exact line of code that triggers your issue. Thesection ‘Decode failure messages’ below explains this in more detail.
But keep in mind: Always keep a record of the issue encountered in case it ishard to reproduce. Sending an undecoded report is better than not reportingthe issue at all.
Check ‘taint’ flag¶
Ensure the kernel you just installed does not ‘taint’ itself whenrunning.
As outlined above in more detail already: the kernel sets a ‘taint’ flag whensomething happens that can lead to follow-up errors that look totallyunrelated. That’s why you need to check if the kernel you just installed doesnot set this flag. And if it does, you in almost all the cases needs toeliminate the reason for it before you reporting issues that occur with it. Seethe section above for details how to do that.
Reproduce issue with the fresh kernel¶
Reproduce the issue with the kernel you just installed. If it doesn’t showup there, scroll down to the instructions for issues only happening withstable and longterm kernels.
Check if the issue occurs with the fresh Linux kernel version you justinstalled. If it was fixed there already, consider sticking with this versionline and abandoning your plan to report the issue. But keep in mind that otherusers might still be plagued by it, as long as it’s not fixed in either stableand longterm version from kernel.org (and thus vendor kernels derived fromthose). If you prefer to use one of those or just want to help their users,head over to the section “Details about reporting issues only occurring inolder kernel version lines” below.
Optimize description to reproduce issue¶
Optimize your notes: try to find and write the most straightforward way toreproduce your issue. Make sure the end result has all the importantdetails, and at the same time is easy to read and understand for othersthat hear about it for the first time. And if you learned something in thisprocess, consider searching again for existing reports about the issue.
An unnecessarily complex report will make it hard for others to understand yourreport. Thus try to find a reproducer that’s straight forward to describe andthus easy to understand in written form. Include all important details, but atthe same time try to keep it as short as possible.
In this in the previous steps you likely have learned a thing or two about theissue you face. Use this knowledge and search again for existing reportsinstead you can join.
Decode failure messages¶
If your failure involves a ‘panic’, ‘Oops’, ‘warning’, or ‘BUG’, considerdecoding the kernel log to find the line of code that triggered the error.
When the kernel detects an internal problem, it will log some information aboutthe executed code. This makes it possible to pinpoint the exact line in thesource code that triggered the issue and shows how it was called. But that onlyworks if you enabled CONFIG_DEBUG_INFO and CONFIG_KALLSYMS when configuringyour kernel. If you did so, consider to decode the information from thekernel’s log. That will make it a lot easier to understand what lead to the‘panic’, ‘Oops’, ‘warning’, or ‘BUG’, which increases the chances that someonecan provide a fix.
Decoding can be done with a script you find in the Linux source tree. If youare running a kernel you compiled yourself earlier, call it like this:
[user@something ~]$ sudo dmesg | ./linux-5.10.5/scripts/decode_stacktrace.sh ./linux-5.10.5/vmlinux
If you are running a packaged vanilla kernel, you will likely have to installthe corresponding packages with debug symbols. Then call the script (which youmight need to get from the Linux sources if your distro does not package it)like this:
[user@something ~]$ sudo dmesg | ./linux-5.10.5/scripts/decode_stacktrace.sh \ /usr/lib/debug/lib/modules/5.10.10-4.1.x86_64/vmlinux /usr/src/kernels/5.10.10-4.1.x86_64/
The script will work on log lines like the following, which show the address ofthe code the kernel was executing when the error occurred:
[ 68.387301] RIP: 0010:test_module_init+0x5/0xffa [test_module]
Once decoded, these lines will look like this:
[ 68.387301] RIP: 0010:test_module_init (/home/username/linux-5.10.5/test-module/test-module.c:16) test_module
In this case the executed code was built from the file‘~/linux-5.10.5/test-module/test-module.c’ and the error occurred by theinstructions found in line ‘16’.
The script will similarly decode the addresses mentioned in the sectionstarting with ‘Call trace’, which show the path to the function where theproblem occurred. Additionally, the script will show the assembler output forthe code section the kernel was executing.
Note, if you can’t get this to work, simply skip this step and mention thereason for it in the report. If you’re lucky, it might not be needed. And if itis, someone might help you to get things going. Also be aware this is just oneof several ways to decode kernel stack traces. Sometimes different steps willbe required to retrieve the relevant details. Don’t worry about that, if that’sneeded in your case, developers will tell you what to do.
Special care for regressions¶
If your problem is a regression, try to narrow down when the issue wasintroduced as much as possible.
Linux lead developer Linus Torvalds insists that the Linux kernel neverworsens, that’s why he deems regressions as unacceptable and wants to see themfixed quickly. That’s why changes that introduced a regression are oftenpromptly reverted if the issue they cause can’t get solved quickly any otherway. Reporting a regression is thus a bit like playing a kind of trump card toget something quickly fixed. But for that to happen the change that’s causingthe regression needs to be known. Normally it’s up to the reporter to trackdown the culprit, as maintainers often won’t have the time or setup at hand toreproduce it themselves.
To find the change there is a process called ‘bisection’ which the documentBisecting a regression describes in detail. That processwill often require you to build about ten to twenty kernel images, trying toreproduce the issue with each of them before building the next. Yes, that takessome time, but don’t worry, it works a lot quicker than most people assume.Thanks to a ‘binary search’ this will lead you to the one commit in the sourcecode management system that’s causing the regression. Once you find it, searchthe net for the subject of the change, its commit id and the shortened commit id(the first 12 characters of the commit id). This will lead you to existingreports about it, if there are any.
Note, a bisection needs a bit of know-how, which not everyone has, and quite abit of effort, which not everyone is willing to invest. Nevertheless, it’shighly recommended performing a bisection yourself. If you really can’t ordon’t want to go down that route at least find out which mainline kernelintroduced the regression. If something for example breaks when switching from5.5.15 to 5.8.4, then try at least all the mainline releases in that area (5.6,5.7 and 5.8) to check when it first showed up. Unless you’re trying to find aregression in a stable or longterm kernel, avoid testing versions which numberhas three sections (5.6.12, 5.7.8), as that makes the outcome hard tointerpret, which might render your testing useless. Once you found the majorversion which introduced the regression, feel free to move on in the reportingprocess. But keep in mind: it depends on the issue at hand if the developerswill be able to help without knowing the culprit. Sometimes they mightrecognize from the report want went wrong and can fix it; other times they willbe unable to help unless you perform a bisection.
When dealing with regressions make sure the issue you face is really caused bythe kernel and not by something else, as outlined above already.
In the whole process keep in mind: an issue only qualifies as regression if theolder and the newer kernel got built with a similar configuration. This can beachieved by usingmakeolddefconfig, as explained in more detail byReporting regressions; that document alsoprovides a good deal of other information about regressions you might want to beaware of.
Write and send the report¶
Start to compile the report by writing a detailed description about theissue. Always mention a few things: the latest kernel version you installedfor reproducing, the Linux Distribution used, and your notes on how toreproduce the issue. Ideally, make the kernel’s build configuration(.config) and the output from ``dmesg`` available somewhere on the net andlink to it. Include or upload all other information that might be relevant,like the output/screenshot of an Oops or the output from ``lspci``. Onceyou wrote this main part, insert a normal length paragraph on top of itoutlining the issue and the impact quickly. On top of this add one sentencethat briefly describes the problem and gets people to read on. Now give thething a descriptive title or subject that yet again is shorter. Then you’reready to send or file the report like the MAINTAINERS file told you, unlessyou are dealing with one of those ‘issues of high priority’: they needspecial care which is explained in ‘Special handling for high priorityissues’ below.
Now that you have prepared everything it’s time to write your report. How to dothat is partly explained by the three documents linked to in the preface above.That’s why this text will only mention a few of the essentials as well asthings specific to the Linux kernel.
There is one thing that fits both categories: the most crucial parts of yourreport are the title/subject, the first sentence, and the first paragraph.Developers often get quite a lot of mail. They thus often just take a fewseconds to skim a mail before deciding to move on or look closer. Thus: thebetter the top section of your report, the higher are the chances that someonewill look into it and help you. And that is why you should ignore them for nowand write the detailed report first. ;-)
Things each report should mention¶
Describe in detail how your issue happens with the fresh vanilla kernel youinstalled. Try to include the step-by-step instructions you wrote and optimizedearlier that outline how you and ideally others can reproduce the issue; inthose rare cases where that’s impossible try to describe what you did totrigger it.
Also include all the relevant information others might need to understand theissue and its environment. What’s actually needed depends a lot on the issue,but there are some things you should include always:
the output from
cat/proc/version, which contains the Linux kernelversion number and the compiler it was built with.the Linux distribution the machine is running (
hostnamectl|grep"OperatingSystem")the architecture of the CPU and the operating system (
uname-mi)if you are dealing with a regression and performed a bisection, mention thesubject and the commit-id of the change that is causing it.
In a lot of cases it’s also wise to make two more things available to thosethat read your report:
the configuration used for building your Linux kernel (the ‘.config’ file)
the kernel’s messages that you get from
dmesgwritten to a file. Makesure that it starts with a line like ‘Linux version 5.8-1(foobar@example.com) (gcc (GCC) 10.2.1, GNU ld version 2.34) #1 SMP Mon Aug3 14:54:37 UTC 2020’ If it’s missing, then important messages from the firstboot phase already got discarded. In this case instead consider usingjournalctl-b0-k; alternatively you can also reboot, reproduce theissue and calldmesgright afterwards.
These two files are big, that’s why it’s a bad idea to put them directly intoyour report. If you are filing the issue in a bug tracker then attach them tothe ticket. If you report the issue by mail do not attach them, as that makesthe mail too large; instead do one of these things:
Upload the files somewhere public (your website, a public file pasteservice, a ticket created just for this purpose onbugzilla.kernel.org, ...) and include a link to them in yourreport. Ideally use something where the files stay available for years, asthey could be useful to someone many years from now; this for example canhappen if five or ten years from now a developer works on some code that waschanged just to fix your issue.
Put the files aside and mention you will send them later in individualreplies to your own mail. Just remember to actually do that once the reportwent out. ;-)
Things that might be wise to provide¶
Depending on the issue you might need to add more background data. Here are afew suggestions what often is good to provide:
If you are dealing with a ‘warning’, an ‘OOPS’ or a ‘panic’ from the kernel,include it. If you can’t copy’n’paste it, try to capture a netconsole traceor at least take a picture of the screen.
If the issue might be related to your computer hardware, mention what kindof system you use. If you for example have problems with your graphics card,mention its manufacturer, the card’s model, and what chip is uses. If it’s alaptop mention its name, but try to make sure it’s meaningful. ‘Dell XPS 13’for example is not, because it might be the one from 2012; that one looksnot that different from the one sold today, but apart from that the two havenothing in common. Hence, in such cases add the exact model number, whichfor example are ‘9380’ or ‘7390’ for XPS 13 models introduced during 2019.Names like ‘Lenovo Thinkpad T590’ are also somewhat ambiguous: there arevariants of this laptop with and without a dedicated graphics chip, so tryto find the exact model name or specify the main components.
Mention the relevant software in use. If you have problems with loadingmodules, you want to mention the versions of kmod, systemd, and udev in use.If one of the DRM drivers misbehaves, you want to state the versions oflibdrm and Mesa; also specify your Wayland compositor or the X-Server andits driver. If you have a filesystem issue, mention the version ofcorresponding filesystem utilities (e2fsprogs, btrfs-progs, xfsprogs, ...).
Gather additional information from the kernel that might be of interest. Theoutput from
lspci-nnwill for example help others to identify whathardware you use. If you have a problem with hardware you even might want tomake the output fromsudolspci-vvvavailable, as that providesinsights how the components were configured. For some issues it might begood to include the contents of files like/proc/cpuinfo,/proc/ioports,/proc/iomem,/proc/modules, or/proc/scsi/scsi. Some subsystem also offer tools to collect relevantinformation. One such tool isalsa-info.shwhich the audio/soundsubsystem developers provide.
Those examples should give your some ideas of what data might be wise toattach, but you have to think yourself what will be helpful for others to know.Don’t worry too much about forgetting something, as developers will ask foradditional details they need. But making everything important available fromthe start increases the chance someone will take a closer look.
The important part: the head of your report¶
Now that you have the detailed part of the report prepared let’s get to themost important section: the first few sentences. Thus go to the top, addsomething like ‘The detailed description:’ before the part you just wrote andinsert two newlines at the top. Now write one normal length paragraph thatdescribes the issue roughly. Leave out all boring details and focus on thecrucial parts readers need to know to understand what this is all about; if youthink this bug affects a lot of users, mention this to get people interested.
Once you did that insert two more lines at the top and write a one sentencesummary that explains quickly what the report is about. After that you have toget even more abstract and write an even shorter subject/title for the report.
Now that you have written this part take some time to optimize it, as it is themost important parts of your report: a lot of people will only read this beforethey decide if reading the rest is time well spent.
Now send or file the report like theMAINTAINERS file toldyou, unless it’s one of those ‘issues of high priority’ outlined earlier: inthat case please read the next subsection first before sending the report onits way.
Special handling for high priority issues¶
Reports for high priority issues need special handling.
Severe issues: make sure the subject or ticket title as well as the firstparagraph makes the severeness obvious.
Regressions: make the report’s subject start with ‘[REGRESSION]’.
In case you performed a successful bisection, use the title of the change thatintroduced the regression as the second part of your subject. Make the reportalso mention the commit id of the culprit. In case of an unsuccessful bisection,make your report mention the latest tested version that’s working fine (say 5.7)and the oldest where the issue occurs (say 5.8-rc1).
When sending the report by mail, CC the Linux regressions mailing list(regressions@lists.linux.dev). In case the report needs to be filed to some webtracker, proceed to do so. Once filed, forward the report by mail to theregressions list; CC the maintainer and the mailing list for the subsystem inquestion. Make sure to inline the forwarded report, hence do not attach it.Also add a short note at the top where you mention the URL to the ticket.
When mailing or forwarding the report, in case of a successful bisection add theauthor of the culprit to the recipients; also CC everyone in the signed-off-bychain, which you find at the end of its commit message.
Security issues: for these issues your will have to evaluate if ashort-term risk to other users would arise if details were publicly disclosed.If that’s not the case simply proceed with reporting the issue as described.For issues that bear such a risk you will need to adjust the reporting processslightly:
If the MAINTAINERS file instructed you to report the issue by mail, do notCC any public mailing lists.
If you were supposed to file the issue in a bug tracker make sure to markthe ticket as ‘private’ or ‘security issue’. If the bug tracker does notoffer a way to keep reports private, forget about it and send your report asa private mail to the maintainers instead.
In both cases make sure to also mail your report to the addresses theMAINTAINERS file lists in the section ‘security contact’. Ideally directly CCthem when sending the report by mail. If you filed it in a bug tracker, forwardthe report’s text to these addresses; but on top of it put a small note whereyou mention that you filed it with a link to the ticket.
SeeSecurity bugs for more information.
Duties after the report went out¶
Wait for reactions and keep the thing rolling until you can accept theoutcome in one way or the other. Thus react publicly and in a timely mannerto any inquiries. Test proposed fixes. Do proactive testing: retest with atleast every first release candidate (RC) of a new mainline version andreport your results. Send friendly reminders if things stall. And try tohelp yourself, if you don’t get any help or if it’s unsatisfying.
If your report was good and you are really lucky then one of the developersmight immediately spot what’s causing the issue; they then might write a patchto fix it, test it, and send it straight for integration in mainline whiletagging it for later backport to stable and longterm kernels that need it. Thenall you need to do is reply with a ‘Thank you very much’ and switch to a versionwith the fix once it gets released.
But this ideal scenario rarely happens. That’s why the job is only startingonce you got the report out. What you’ll have to do depends on the situations,but often it will be the things listed below. But before digging into thedetails, here are a few important things you need to keep in mind for this partof the process.
General advice for further interactions¶
Always reply in public: When you filed the issue in a bug tracker, alwaysreply there and do not contact any of the developers privately about it. Formailed reports always use the ‘Reply-all’ function when replying to any mailsyou receive. That includes mails with any additional data you might want to addto your report: go to your mail applications ‘Sent’ folder and use ‘reply-all’on your mail with the report. This approach will make sure the public mailinglist(s) and everyone else that gets involved over time stays in the loop; italso keeps the mail thread intact, which among others is really important formailing lists to group all related mails together.
There are just two situations where a comment in a bug tracker or a ‘Reply-all’is unsuitable:
Someone tells you to send something privately.
You were told to send something, but noticed it contains sensitiveinformation that needs to be kept private. In that case it’s okay to send itin private to the developer that asked for it. But note in the ticket or amail that you did that, so everyone else knows you honored the request.
Do research before asking for clarifications or help: In this part of theprocess someone might tell you to do something that requires a skill you mightnot have mastered yet. For example, you might be asked to use some test toolsyou never have heard of yet; or you might be asked to apply a patch to theLinux kernel sources to test if it helps. In some cases it will be fine sendinga reply asking for instructions how to do that. But before going that route tryto find the answer own your own by searching the internet; alternativelyconsider asking in other places for advice. For example ask a friend or postabout it to a chatroom or forum you normally hang out.
Be patient: If you are really lucky you might get a reply to your reportwithin a few hours. But most of the time it will take longer, as maintainersare scattered around the globe and thus might be in a different time zone – onewhere they already enjoy their night away from keyboard.
In general, kernel developers will take one to five business days to respond toreports. Sometimes it will take longer, as they might be busy with the mergewindows, other work, visiting developer conferences, or simply enjoying a longsummer holiday.
The ‘issues of high priority’ (see above for an explanation) are an exceptionhere: maintainers should address them as soon as possible; that’s why youshould wait a week at maximum (or just two days if it’s something urgent)before sending a friendly reminder.
Sometimes the maintainer might not be responding in a timely manner; othertimes there might be disagreements, for example if an issue qualifies asregression or not. In such cases raise your concerns on the mailing list andask others for public or private replies how to move on. If that fails, itmight be appropriate to get a higher authority involved. In case of a WiFidriver that would be the wireless maintainers; if there are no higher levelmaintainers or all else fails, it might be one of those rare situations whereit’s okay to get Linus Torvalds involved.
Proactive testing: Every time the first pre-release (the ‘rc1’) of a newmainline kernel version gets released, go and check if the issue is fixed thereor if anything of importance changed. Mention the outcome in the ticket or in amail you sent as reply to your report (make sure it has all those in the CCthat up to that point participated in the discussion). This will show yourcommitment and that you are willing to help. It also tells developers if theissue persists and makes sure they do not forget about it. A few otheroccasional retests (for example with rc3, rc5 and the final) are also a goodidea, but only report your results if something relevant changed or if you arewriting something anyway.
With all these general things off the table let’s get into the details of howto help to get issues resolved once they were reported.
Inquires and testing request¶
Here are your duties in case you got replies to your report:
Check who you deal with: Most of the time it will be the maintainer or adeveloper of the particular code area that will respond to your report. But asissues are normally reported in public it could be anyone that’s replying —including people that want to help, but in the end might guide you totally offtrack with their questions or requests. That rarely happens, but it’s one ofmany reasons why it’s wise to quickly run an internet search to see who you’reinteracting with. By doing this you also get aware if your report was heard bythe right people, as a reminder to the maintainer (see below) might be in orderlater if discussion fades out without leading to a satisfying solution for theissue.
Inquiries for data: Often you will be asked to test something or provideadditional details. Try to provide the requested information soon, as you havethe attention of someone that might help and risk losing it the longer youwait; that outcome is even likely if you do not provide the information withina few business days.
Requests for testing: When you are asked to test a diagnostic patch or apossible fix, try to test it in timely manner, too. But do it properly and makesure to not rush it: mixing things up can happen easily and can lead to a lotof confusion for everyone involved. A common mistake for example is thinking aproposed patch with a fix was applied, but in fact wasn’t. Things like thathappen even to experienced testers occasionally, but they most of the time willnotice when the kernel with the fix behaves just as one without it.
What to do when nothing of substance happens¶
Some reports will not get any reaction from the responsible Linux kerneldevelopers; or a discussion around the issue evolved, but faded out withnothing of substance coming out of it.
In these cases wait two (better: three) weeks before sending a friendlyreminder: maybe the maintainer was just away from keyboard for a while whenyour report arrived or had something more important to take care of. Whenwriting the reminder, kindly ask if anything else from your side is needed toget the ball running somehow. If the report got out by mail, do that in thefirst lines of a mail that is a reply to your initial mail (see above) whichincludes a full quote of the original report below: that’s on of those fewsituations where such a ‘TOFU’ (Text Over, Fullquote Under) is the rightapproach, as then all the recipients will have the details at hand immediatelyin the proper order.
After the reminder wait three more weeks for replies. If you still don’t get aproper reaction, you first should reconsider your approach. Did you maybe tryto reach out to the wrong people? Was the report maybe offensive or soconfusing that people decided to completely stay away from it? The best way torule out such factors: show the report to one or two people familiar with FLOSSissue reporting and ask for their opinion. Also ask them for their advice howto move forward. That might mean: prepare a better report and make those peoplereview it before you send it out. Such an approach is totally fine; justmention that this is the second and improved report on the issue and include alink to the first report.
If the report was proper you can send a second reminder; in it ask for advicewhy the report did not get any replies. A good moment for this second remindermail is shortly after the first pre-release (the ‘rc1’) of a new Linux kernelversion got published, as you should retest and provide a status update at thatpoint anyway (see above).
If the second reminder again results in no reaction within a week, try tocontact a higher-level maintainer asking for advice: even busy maintainers bythen should at least have sent some kind of acknowledgment.
Remember to prepare yourself for a disappointment: maintainers ideally shouldreact somehow to every issue report, but they are only obliged to fix those‘issues of high priority’ outlined earlier. So don’t be too devastating if youget a reply along the lines of ‘thanks for the report, I have more importantissues to deal with currently and won’t have time to look into this for theforeseeable future’.
It’s also possible that after some discussion in the bug tracker or on a listnothing happens anymore and reminders don’t help to motivate anyone to work outa fix. Such situations can be devastating, but is within the cards when itcomes to Linux kernel development. This and several other reasons for notgetting help are explained in ‘Why some issues won’t get any reaction or remainunfixed after being reported’ near the end of this document.
Don’t get devastated if you don’t find any help or if the issue in the end doesnot get solved: the Linux kernel is FLOSS and thus you can still help yourself.You for example could try to find others that are affected and team up withthem to get the issue resolved. Such a team could prepare a fresh reporttogether that mentions how many you are and why this is something that in youroption should get fixed. Maybe together you can also narrow down the root causeor the change that introduced a regression, which often makes developing a fixeasier. And with a bit of luck there might be someone in the team that knows abit about programming and might be able to write a fix.
Reference for “Reporting regressions within a stable and longterm kernel line”¶
This subsection provides details for the steps you need to perform if you facea regression within a stable and longterm kernel line.
Make sure the particular version line still gets support¶
Check if the kernel developers still maintain the Linux kernel versionline you care about: go to the front page of kernel.org and make sure itmentions the latest release of the particular version line without an‘[EOL]’ tag.
Most kernel version lines only get supported for about three months, asmaintaining them longer is quite a lot of work. Hence, only one per year ischosen and gets supported for at least two years (often six). That’s why youneed to check if the kernel developers still support the version line you carefor.
Note, if kernel.org lists two stable version lines on the front page, youshould consider switching to the newer one and forget about the older one:support for it is likely to be abandoned soon. Then it will get a “end-of-life”(EOL) stamp. Version lines that reached that point still get mentioned on thekernel.org front page for a week or two, but are unsuitable for testing andreporting.
Search stable mailing list¶
Check the archives of the Linux stable mailing list for existing reports.
Maybe the issue you face is already known and was fixed or is about to. Hence,search the archives of the Linux stable mailing list for reports about an issue like yours. Ifyou find any matches, consider joining the discussion, unless the fix isalready finished and scheduled to get applied soon.
Reproduce issue with the newest release¶
Install the latest release from the particular version line as a vanillakernel. Ensure this kernel is not tainted and still shows the problem, asthe issue might have already been fixed there. If you first noticed theproblem with a vendor kernel, check a vanilla build of the last versionknown to work performs fine as well.
Before investing any more time in this process you want to check if the issuewas already fixed in the latest release of version line you’re interested in.This kernel needs to be vanilla and shouldn’t be tainted before the issuehappens, as detailed outlined already above in the section “Install a freshkernel for testing”.
Did you first notice the regression with a vendor kernel? Then changes thevendor applied might be interfering. You need to rule that out by performinga recheck. Say something broke when you updated from 5.10.4-vendor.42 to5.10.5-vendor.43. Then after testing the latest 5.10 release as outlined inthe previous paragraph check if a vanilla build of Linux 5.10.4 works fine aswell. If things are broken there, the issue does not qualify as upstreamregression and you need switch back to the main step-by-step guide to reportthe issue.
Report the regression¶
Send a short problem report to the Linux stable mailing list(stable@vger.kernel.org) and CC the Linux regressions mailing list(regressions@lists.linux.dev); if you suspect the cause in a particularsubsystem, CC its maintainer and its mailing list. Roughly describe theissue and ideally explain how to reproduce it. Mention the first versionthat shows the problem and the last version that’s working fine. Thenwait for further instructions.
When reporting a regression that happens within a stable or longterm kernelline (say when updating from 5.10.4 to 5.10.5) a brief report is enough forthe start to get the issue reported quickly. Hence a rough description to thestable and regressions mailing list is all it takes; but in case you suspectthe cause in a particular subsystem, CC its maintainers and its mailing listas well, because that will speed things up.
And note, it helps developers a great deal if you can specify the exact versionthat introduced the problem. Hence if possible within a reasonable time frame,try to find that version using vanilla kernels. Let’s assume something broke whenyour distributor released a update from Linux kernel 5.10.5 to 5.10.8. Then asinstructed above go and check the latest kernel from that version line, say5.10.9. If it shows the problem, try a vanilla 5.10.5 to ensure that no patchesthe distributor applied interfere. If the issue doesn’t manifest itself there,try 5.10.7 and then (depending on the outcome) 5.10.8 or 5.10.6 to find thefirst version where things broke. Mention it in the report and state that 5.10.9is still broken.
What the previous paragraph outlines is basically a rough manual ‘bisection’.Once your report is out your might get asked to do a proper one, as it allows topinpoint the exact change that causes the issue (which then can easily getreverted to fix the issue quickly). Hence consider to do a proper bisectionright away if time permits. See the section ‘Special care for regressions’ andthe documentBisecting a regression for details how toperform one. In case of a successful bisection add the author of the culprit tothe recipients; also CC everyone in the signed-off-by chain, which you find atthe end of its commit message.
Reference for “Reporting issues only occurring in older kernel version lines”¶
This section provides details for the steps you need to take if you could notreproduce your issue with a mainline kernel, but want to see it fixed in olderversion lines (aka stable and longterm kernels).
Some fixes are too complex¶
Prepare yourself for the possibility that going through the next few stepsmight not get the issue solved in older releases: the fix might be too bigor risky to get backported there.
Even small and seemingly obvious code-changes sometimes introduce new andtotally unexpected problems. The maintainers of the stable and longterm kernelsare very aware of that and thus only apply changes to these kernels that arewithin rules outlined inEverything you ever wanted to know about Linux -stable releases.
Complex or risky changes for example do not qualify and thus only get appliedto mainline. Other fixes are easy to get backported to the newest stable andlongterm kernels, but too risky to integrate into older ones. So be aware thefix you are hoping for might be one of those that won’t be backported to theversion line your care about. In that case you’ll have no other choice then tolive with the issue or switch to a newer Linux version, unless you want topatch the fix into your kernels yourself.
Common preparations¶
Perform the first three steps in the section “Reporting issues onlyoccurring in older kernel version lines” above.
You need to carry out a few steps already described in another section of thisguide. Those steps will let you:
Check if the kernel developers still maintain the Linux kernel version lineyou care about.
Search the Linux stable mailing list for exiting reports.
Check with the latest release.
Check code history and search for existing discussions¶
Search the Linux kernel version control system for the change that fixedthe issue in mainline, as its commit message might tell you if the fix isscheduled for backporting already. If you don’t find anything that way,search the appropriate mailing lists for posts that discuss such an issueor peer-review possible fixes; then check the discussions if the fix wasdeemed unsuitable for backporting. If backporting was not considered atall, join the newest discussion, asking if it’s in the cards.
In a lot of cases the issue you deal with will have happened with mainline, butgot fixed there. The commit that fixed it would need to get backported as wellto get the issue solved. That’s why you want to search for it or anydiscussions abound it.
First try to find the fix in the Git repository that holds the Linux kernelsources. You can do this with the web interfaceson kernel.orgor its mirroron GitHub; if you havea local clone you alternatively can search on the command line with
gitlog--grep=<pattern>.If you find the fix, look if the commit message near the end contains a‘stable tag’ that looks like this:
Cc: <stable@vger.kernel.org> # 5.4+
If that’s case the developer marked the fix safe for backporting to versionline 5.4 and later. Most of the time it’s getting applied there within twoweeks, but sometimes it takes a bit longer.
If the commit doesn’t tell you anything or if you can’t find the fix, lookagain for discussions about the issue. Search the net with your favoriteinternet search engine as well as the archives for theLinux kerneldevelopers mailing list. Also read thesectionLocate kernel area that causes the issue above and follow theinstructions to find the subsystem in question: its bug tracker or mailinglist archive might have the answer you are looking for.
If you see a proposed fix, search for it in the version control system asoutlined above, as the commit might tell you if a backport can be expected.
Check the discussions for any indicators the fix might be too risky to getbackported to the version line you care about. If that’s the case you haveto live with the issue or switch to the kernel version line where the fixgot applied.
If the fix doesn’t contain a stable tag and backporting was not discussed,join the discussion: mention the version where you face the issue and thatyou would like to see it fixed, if suitable.
Ask for advice¶
One of the former steps should lead to a solution. If that doesn’t workout, ask the maintainers for the subsystem that seems to be causing theissue for advice; CC the mailing list for the particular subsystem as wellas the stable mailing list.
If the previous three steps didn’t get you closer to a solution there is onlyone option left: ask for advice. Do that in a mail you sent to the maintainersfor the subsystem where the issue seems to have its roots; CC the mailing listfor the subsystem as well as the stable mailing list (stable@vger.kernel.org).
Why some issues won’t get any reaction or remain unfixed after being reported¶
When reporting a problem to the Linux developers, be aware only ‘issues of highpriority’ (regressions, security issues, severe problems) are definitely goingto get resolved. The maintainers or if all else fails Linus Torvalds himselfwill make sure of that. They and the other kernel developers will fix a lot ofother issues as well. But be aware that sometimes they can’t or won’t help; andsometimes there isn’t even anyone to send a report to.
This is best explained with kernel developers that contribute to the Linuxkernel in their spare time. Quite a few of the drivers in the kernel werewritten by such programmers, often because they simply wanted to make theirhardware usable on their favorite operating system.
These programmers most of the time will happily fix problems other peoplereport. But nobody can force them to do, as they are contributing voluntarily.
Then there are situations where such developers really want to fix an issue,but can’t: sometimes they lack hardware programming documentation to do so.This often happens when the publicly available docs are superficial or thedriver was written with the help of reverse engineering.
Sooner or later spare time developers will also stop caring for the driver.Maybe their test hardware broke, got replaced by something more fancy, or is soold that it’s something you don’t find much outside of computer museumsanymore. Sometimes developer stops caring for their code and Linux at all, assomething different in their life became way more important. In some casesnobody is willing to take over the job as maintainer – and nobody can be forcedto, as contributing to the Linux kernel is done on a voluntary basis. Abandoneddrivers nevertheless remain in the kernel: they are still useful for people andremoving would be a regression.
The situation is not that different with developers that are paid for theirwork on the Linux kernel. Those contribute most changes these days. But theiremployers sooner or later also stop caring for their code or make itsprogrammer focus on other things. Hardware vendors for example earn their moneymainly by selling new hardware; quite a few of them hence are not investingmuch time and energy in maintaining a Linux kernel driver for something theystopped selling years ago. Enterprise Linux distributors often care for alonger time period, but in new versions often leave support for old and rarehardware aside to limit the scope. Often spare time contributors take over oncea company orphans some code, but as mentioned above: sooner or later they willleave the code behind, too.
Priorities are another reason why some issues are not fixed, as maintainersquite often are forced to set those, as time to work on Linux is limited.That’s true for spare time or the time employers grant their developers tospend on maintenance work on the upstream kernel. Sometimes maintainers alsoget overwhelmed with reports, even if a driver is working nearly perfectly. Tonot get completely stuck, the programmer thus might have no other choice thanto prioritize issue reports and reject some of them.
But don’t worry too much about all of this, a lot of drivers have activemaintainers who are quite interested in fixing as many issues as possible.
Closing words¶
Compared with other Free/Libre & Open Source Software it’s hard to reportissues to the Linux kernel developers: the length and complexity of thisdocument and the implications between the lines illustrate that. But that’s howit is for now. The main author of this text hopes documenting the state of theart will lay some groundwork to improve the situation over time.