[RFC PATCH v1 09/26] docs: reporting-bugs: help users find the proper place for their report
From: Thorsten Leemhuis
Date: Wed Oct 07 2020 - 08:06:01 EST
Many thx for you comments. Consider all the obvious spelling and
grammatical mistakes you pointed out fixed, I won't mention all of them
in this reply to keep things easier to follow.
Am 04.10.20 um 06:03 schrieb Randy Dunlap:
On 10/1/20 1:39 AM, Thorsten Leemhuis wrote:
= RFC =
This section tells users to always CC LKML. I placed this in the text here for
now as a way to force a general discussion about this, as it would be way easier
if users had one place where they could search for existing reports; maybe it
should be the same place where fixes are sent to, as then the single search
would find those, too.
That might mean "LKML", which these days afaics is a kind of "catch-all" ml
anyway (which nearly nobody reads). So it might make sense to go "all in" and
make people send their reports here, too. But TBH I'm a bit unsure myself if
that's the right approach. Maybe creating a mailing list like
'linux-issues@xxxxxxxxxxxxxxx' would be best (and while at it maybe also
linux-regressions@xxxxxxxxxxxxxxx).
Yes, LKML has become an archival list for almost everything. However, bug reports
should still be sent to their more specific list when possible, e.g., USB to
linux-usb, ACPI to linux-acpi, networking to netdev, wireless to linux-wireless,
SCSI to linux-scsi, etc.
Definitely, that "always CC LKML" above was meant as "in addition" ;-)
I might be OK with one additional bug/issues/regressions mailing list but I
wouldn't care to see that split into more than one list.
Yeah, but we care more about regression and having no way to tell them
apart from bugs might make things hard.
+Problem is: the Linux kernel lacks a central bug tracker that all maintainers
+use, so you have to find the right way and place to report issues yourself. One
+way to do that: look at the `MAINTAINERS file in the Linux kernel sources
+<https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/plain/MAINTAINERS>`_,
The MAINTAINERS list is also available via html at
https://www.kernel.org/doc/html/latest/process/maintainers.html
Ahh, wasn't aware of that, thx for the pointer. I switched over to that
one and use a "ref:" link. This and these comments…
but since a reporter might need to use scripts/get_maintainer.pl, maybe the html
doesn't help so much.
> [...]
+To illustrate how to use the file lets assume the Wi-Fi in your Laptop suddenly
+misbehaves after updating the kernel. In that case it's likely an issue in the
+Wi-Fi driver; it could also be some code it builds upon: the Wi-Fi subsystem,
+the TCP/IP stack, which are all part of the Network subsystem. But unless you
+suspect the culprit lies there stick to the driver. Thus run the command
+``lspci -k`` to tell which kernel driver manages a particular hardware::
Other times it might be 'lsusb' or 'lsscsi' or this might not be applicable at all
to LED drivers or pinctrl drivers or W1 or I2C or GPIO (?).
> [...]
+the person has a spare minute. If it states 'Obsolete' then you are using some
+outdated code and should switch to the newer approach the kernel offers. If it
+says 'Orphan' you are out of luck: nobody takes care of the code anymore, hence
+there is nobody to send a report to. You need to fix this yourself or look
+somewhere else to find someone that is willing to help.
or discard that particular hardware.
> [...]
Personally I would CC all M: people but not R: (reviewers).
…made me revisit the whole section and rewrite a few bits. This is how
it looks like now (sorry, please ignore the long quoted lines that got
wrapped, sending this with thunderbird instead of git-send-email):
```
Locate kernel area that causes the 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 the time this won't be bugzilla.kernel.org, as issues typically need
to be sent by 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 a big project and most of its developers are only familiar
with a small subset of it. Quite a few programmers for example only care
for just one driver, for example one for a WiFi chip; its developer
likely will only have small or no knowledge about the internals of more
remote "subsystems", like the TCP stack, the PCIe/PCI subsystem, memory
management or some other part the driver might be using.
Problem is: the Linux kernel lacks a central bug tracker where you can
simply file your issue to 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, but it mainly
targets kernel developers and experts. For everybody else the
MAINTAINERS file is the better place.
How to read the MAINTAINERS file
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
To illustrate how to use the ref:`MAINTAINERS <maintainers>`_ file, lets
assume the WiFi in your Laptop suddenly misbehaves after updating the
kernel. In that case it's likely an issue in the WiFi driver. Obviously
it could also be some code it builds upon, but unless you suspect
something like that stick to the driver, as its developers will get the
right people involved if it's really something else.
Sadly, there is no way to check which code is driving a particular
hardware component that is both universal and easy. In the case of a
WiFi driver problem there are multiple approaches to find the
You for example might want to look at the output of ``lspci -k``, as it
lists devices on the PCI/PCIe bus and the kernel 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
some other internal bus. In those cases you might want to check your
WiFi manager or the output of ``ip link``. Look for the name of the
problematic network interface, which might be something like 'wlp58s0'.
This name can be used like this to find the module driving it::
[user@something ~]$ realpath --relative-to=/sys/module/
/sys/class/net/wlp58s0/device/driver/module
ath10k_pci
In case tricks like these don't bring you any further, try to search the
internet on how to narrow down the driver or subsystem in question. And
if you are unsure which it is: just try your best guess, somebody will
help you if you guess poorly.
Once you know the driver or subsystem you want to search for it in the
MAINTAINERS file. In the case of 'ath10k_pci' you won't find anything,
as the name is too specific. Sometimes you will need to search on the
net then; but before doing so, try to search for a somewhat shorted or
modified name, as then you might find something like this::
QUALCOMM ATHEROS ATH10K WIRELESS DRIVER
Mail: A. Some Human <shuman@xxxxxxxxxxx>
Mailing list: ath10k@xxxxxxxxxxxxxxxxxxx
Status: Supported
Web-page:
https://wireless.wiki.kernel.org/en/users/Drivers/ath10k
SCM: git
git://git.kernel.org/pub/scm/linux/kernel/git/kvalo/ath.git
Files: drivers/net/wireless/ath/ath10k/
Note: the line description will be abbreviations, if you read the plain
MAINTAINERS file found in the root of the Linux source tree. 'Mail:' for
example will be 'M:', 'Mailing list:' will be 'L', and 'Status:' will be
'S:'. These and other abbreviations are explained near the top of the file.
First look at the line 'Status', to make sure the code is 'Supported',
'Maintained', or at least has someone who provides 'Odd Fixes' when
feeling motivated. If it states 'Obsolete' then you are using some
outdated approach that was replaced by a newer solution you need to
switch to. With 'Orphan' you are out of luck, as nobody takes care of
the code anymore, which only leaves these options: stop trying to do
what you want, live with the issue, fix it yourself, or find a
programmer somewhere willing to fix it.
After checking the status, look for a line starting with 'bugs:': it
will tell you where to find a subsystem specific bug tracker to file
your issue. The example above does not have such a line; that is the
case for most sections, as Linux kernel development is completely driven
by mail and only very few subsystems use a bug tracker.
In this in many other cases you thus have to look for lines starting
with 'Mail:' instead. Those mention the name and the email addresses for
the maintainers of the particular code. Also look for a line starting
with 'Mailing list:', 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 all issue reports sent by email, make sure
to add the Linux Kernel Mailing List (LKML)
<linux-kernel@xxxxxxxxxxxxxxx> to CC. Don't omit either of the mailing
lists when sending your issue report by mail later! Maintainers are busy
people and 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 find the proper place to report: a script that tries to find all
people to contact. This script is called 'get_maintainer.pl' and located
in the scripts/ directory and relies on the MAINTAINERS file. It needs
to be called with a path to the source code in question. For drivers
compiled as module 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@xxxxxxxxxxx> (supporter:QUALCOMM ATHEROS
ATH10K WIRELESS DRIVER)
Another S. Human <asomehuman@xxxxxxxxxxx> (maintainer:NETWORKING
DRIVERS)
ath10k@xxxxxxxxxxxxxxxxxxx (open list:QUALCOMM ATHEROS ATH10K
WIRELESS DRIVER)
linux-wireless@xxxxxxxxxxxxxxx (open list:NETWORKING DRIVERS
(WIRELESS))
netdev@xxxxxxxxxxxxxxx (open list:NETWORKING DRIVERS)
linux-kernel@xxxxxxxxxxxxxxx (open list)
Don't sent your report to all of them. Sent it to the maintainers, which
the script calls "supporter:"; additionally CC the most specific mailing
list for the code as well as Linux Kernel Mailing List (LKML). In this
case you thus would need to send the report to 'Some Human
<shuman@xxxxxxxxxxx>' with 'ath10k@xxxxxxxxxxxxxxxxxxx' and
'linux-kernel@xxxxxxxxxxxxxxx' in CC.
Note: in case you cloned the Linux sources with git you might want to
call ``get_maintainer.pl`` a second time with ``--git``. The script then
will look at the commit history to find which people recently worked on
the code in question, as they might be able to help. But use such
results with care, as it can easily send you in a wrong direction. That
for example happens quickly with areas that are rarely changed (like old
or unmaintained drivers): this code is sometimes modified during
tree-wide cleanups by developers that do not care about the particular
part of the kernel at all.
```
Ciao, Thorsten