From: Karl Mehltretter <kmehltretter@gmail.com>
To: Arnd Bergmann <arnd@arndb.de>
Cc: Jonathan Corbet <corbet@lwn.net>,
Geert Uytterhoeven <geert@linux-m68k.org>,
linux-m68k@lists.linux-m68k.org,
Dmitry Torokhov <dmitry.torokhov@gmail.com>,
linux-input@vger.kernel.org, linux-doc@vger.kernel.org,
Shuah Khan <skhan@linuxfoundation.org>,
Randy Dunlap <rdunlap@infradead.org>,
Thomas Gleixner <tglx@kernel.org>,
Ingo Molnar <mingo@redhat.com>, Borislav Petkov <bp@alien8.de>,
Dave Hansen <dave.hansen@linux.intel.com>,
x86@kernel.org, Steve Wahl <steve.wahl@hpe.com>,
Dimitri Sivanich <dimitri.sivanich@hpe.com>,
Mike Travis <mike.travis@hpe.com>,
Tony Luck <tony.luck@intel.com>,
"linux-edac@vger.kernel.org" <linux-edac@vger.kernel.org>,
Krzysztof Kozlowski <krzk@kernel.org>,
linux-samsung-soc@vger.kernel.org,
linux-arm-kernel@lists.infradead.org,
Tony Lindgren <tony@atomide.com>,
Kevin Hilman <khilman@baylibre.com>,
Linux-OMAP <linux-omap@vger.kernel.org>,
Dominik Brodowski <linux@dominikbrodowski.net>,
Damien Le Moal <dlemoal@kernel.org>,
Niklas Cassel <cassel@kernel.org>,
linux-ide@vger.kernel.org,
Ethan Nelson-Moore <enelsonmoore@gmail.com>,
Michael Schmitz <schmitzmic@gmail.com>,
Andreas Kemnade <andreas@kemnade.info>
Subject: Re: [PATCH v2 0/9] docs: kernel-parameters: Remove ten entries for parameters that no longer exist
Date: Sat, 5 Sep 2026 14:25:02 +0200 [thread overview]
Message-ID: <apwIbDr0kyquxVoL@gmail.com> (raw)
In-Reply-To: <693303da-350b-4295-b008-6fee8bb4c591@app.fastmail.com>
On Sat, Sep 05, 2026 at 12:12:51PM +0100, Arnd Bergmann wrote:
> On Sat, Sep 5, 2026, at 11:46, Karl Mehltretter wrote:
> > kernel-parameters.txt still documents ten boot parameters whose parsing
> > code was removed with the drivers or platforms that used them, one of
> > them (atarimouse=) since before the git history. One patch per
> > parameter, each with a Fixes: tag for the commit that removed the
> > parser, so the maintainers of that area are on their own patch only;
> > the two pata_legacy module parameters share the last one. Each entry
> > was checked with git grep for its __setup(), early_param() and
> > module_param() handler and with git log -S for the removing commit.
>
> These all look good to me,
>
> Acked-by: Arnd Bergmann <arnd@arndb.de>
>
> If you have a script that you can easily run on another tree,
> could you send me the script or the output for this one?
>
> https://git.kernel.org/pub/scm/linux/kernel/git/soc/soc.git/log/?h=board-remove
>
Thanks for the review! Yes, here is the script, improved a bit since the
series was made.
It does not show anything on your branch though. board-remove at
c12d647b0229 removes 40 registrations, none of them a documented
parameter that loses its parser. The three documented names among them
(debug, irq, noalign) are still registered by other code.
Run it with
check-kernel-parameters.py -C ~/soc --diff 8d3ae59288f1 board-remove
Its report mode turned up a second batch of stale entries on mainline
(r128=, mga=, i810=, tdfx=, smart2=, shapers=, hd=, goldfish, js= and a
few more), which I might send later.
Thanks
Karl
The script:
#!/usr/bin/env python3
# SPDX-License-Identifier: GPL-2.0
"""Find documented boot parameters that nothing parses any more.
Reads Documentation/admin-guide/kernel-parameters.txt at a git revision and
looks for the registration of every documented name in the code at the same
revision: __setup(), early_param(), core_param(), module_param() and friends.
Names without a registration are printed together with whether the name at
least still appears as a string somewhere (cmdline_find_option() style
parsing), so a human can decide. A parameter that was only ever parsed by
hand, without any of the macros, is invisible in both modes.
Usage:
check-kernel-parameters.py [-C tree] [REV] report for one revision
check-kernel-parameters.py [-C tree] --diff A B names parsed at A but not at B
Runs entirely on git objects (git grep / git show), no checkout needed.
"""
import argparse, re, subprocess, sys
REG = r'(__setup|__setup_param|early_param|early_param_on_off|core_param|core_param_unsafe|late_param|module_param|module_param_unsafe|module_param_named|module_param_named_unsafe|module_param_cb|module_param_cb_unsafe|module_param_call|device_param_cb|module_param_string|module_param_array|module_param_array_named|module_param_hw|module_param_hw_named|module_param_hw_array|__core_param_cb|torture_param|param_check_\w+)\s*\('
LEGEND_STOP = 'Kernel parameters' # the tag legend ends at this heading, the parameter list follows
def git(tree, *a):
r = subprocess.run(['git', '-C', tree, *a], capture_output=True, text=True, errors='replace')
if r.returncode and 'grep' not in a[0]:
sys.exit(f'git {a[0]} failed: {r.stderr.strip()}')
return r.stdout
def documented(tree, rev):
"""Return {name: line} for every parameter entry in kernel-parameters.txt at rev."""
txt = git(tree, 'show', f'{rev}:Documentation/admin-guide/kernel-parameters.txt')
names = {}
in_list = False
for n, line in enumerate(txt.split('\n'), 1):
if not in_list:
if line.strip() == LEGEND_STOP: in_list = True
continue
m = re.match(r'^\t([A-Za-z][A-Za-z0-9_.-]*)(?:=|\s|$)', line)
if not m: continue
name = m.group(1)
if name.isupper() and '.' not in name: continue # a stray tag, not a parameter
names.setdefault(name, n)
return names
def registered(tree, rev):
"""Return the set of names registered by the parameter macros at rev."""
out = git(tree, 'grep', '-h', '-E', REG, rev, '--', ':!Documentation', ':!tools', ':!scripts')
names = set()
for line in out.split('\n'):
for m in re.finditer(REG + r'\s*"?([A-Za-z0-9_.-]+)', line):
name = m.group(2)
if m.group(1) == 'torture_param': # torture_param(type, name, init, msg): the type comes first
mm = re.search(r'torture_param\s*\(\s*\w+\s*,\s*([A-Za-z0-9_]+)', line)
if mm: name = mm.group(1)
names.add(name.rstrip('='))
return names
def string_hits(tree, rev, name):
"""Files at rev that contain the name as a quoted string (manual command line parsing);
a dotted name is looked up whole first (arm64.nobti style tables), then by its last part."""
for probe in ([name, name.rsplit('.', 1)[-1]] if '.' in name else [name]):
out = git(tree, 'grep', '-l', '-F', f'"{probe}', rev, '--', ':!Documentation', ':!tools', ':!scripts')
hits = [l.split(':', 1)[1] for l in out.split('\n') if l]
if hits: return hits
return []
def parsed_at(tree, rev):
docs = documented(tree, rev)
regs = registered(tree, rev)
def ok(name):
if name in regs: return True
base = name.rsplit('.', 1)[-1] # module.param= is registered as module_param(param)
return base in regs
return docs, {n for n in docs if ok(n)}
def report(tree, rev):
docs, ok = parsed_at(tree, rev)
missing = sorted(n for n in docs if n not in ok)
print(f'{len(docs)} documented parameters at {rev}, {len(missing)} without a registration macro:')
for n in missing:
hits = string_hits(tree, rev, n)
tag = f'string appears in {hits[0]}' + (f' (+{len(hits)-1})' if len(hits) > 1 else '') if hits else 'NOT FOUND anywhere'
print(f' {n:40} kernel-parameters.txt:{docs[n]:<6} {tag}')
def diff(tree, a, b):
docs_a, ok_a = parsed_at(tree, a)
docs_b, ok_b = parsed_at(tree, b)
lost = sorted(n for n in ok_a if n in docs_b and n not in ok_b)
print(f'documented parameters parsed at {a} but no longer at {b}: {len(lost)}')
for n in lost:
hits = string_hits(tree, b, n)
print(f' {n:40} kernel-parameters.txt:{docs_b[n]:<6} ' + (f'string still in {hits[0]}' if hits else 'no string left either'))
if __name__ == '__main__':
ap = argparse.ArgumentParser()
ap.add_argument('-C', dest='tree', default='.')
ap.add_argument('--diff', nargs=2, metavar=('A', 'B'))
ap.add_argument('rev', nargs='?', default='HEAD')
a = ap.parse_args()
if a.diff: diff(a.tree, *a.diff)
else: report(a.tree, a.rev)
prev parent reply other threads:[~2026-09-05 12:25 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-05 9:46 [PATCH v2 0/9] docs: kernel-parameters: Remove ten entries for parameters that no longer exist Karl Mehltretter
2026-09-05 9:46 ` [PATCH v2 1/9] docs: kernel-parameters: Drop the atarimouse= entry Karl Mehltretter
2026-09-05 9:46 ` [PATCH v2 2/9] docs: kernel-parameters: Drop the bau= entry Karl Mehltretter
2026-09-05 9:46 ` [PATCH v2 3/9] docs: kernel-parameters: Drop the edac_report= entry Karl Mehltretter
2026-09-05 9:46 ` [PATCH v2 4/9] docs: kernel-parameters: Drop the enable_timer_pin_1 entry Karl Mehltretter
2026-09-05 9:46 ` [PATCH v2 5/9] docs: kernel-parameters: Drop the mini2440= entry Karl Mehltretter
2026-09-05 9:46 ` [PATCH v2 6/9] docs: kernel-parameters: Drop the nomfgpt entry Karl Mehltretter
2026-09-05 9:46 ` [PATCH v2 7/9] docs: kernel-parameters: Drop the omap_mux= entry Karl Mehltretter
2026-09-05 9:46 ` [PATCH v2 8/9] docs: kernel-parameters: Drop the pcmv= entry Karl Mehltretter
2026-09-05 9:46 ` [PATCH v2 9/9] docs: kernel-parameters: Drop the pata_legacy.qdi and pata_legacy.winbond entries Karl Mehltretter
2026-09-05 12:29 ` Karl Mehltretter
2026-09-05 10:12 ` [PATCH v2 0/9] docs: kernel-parameters: Remove ten entries for parameters that no longer exist Arnd Bergmann
2026-09-05 12:25 ` Karl Mehltretter [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=apwIbDr0kyquxVoL@gmail.com \
--to=kmehltretter@gmail.com \
--cc=andreas@kemnade.info \
--cc=arnd@arndb.de \
--cc=bp@alien8.de \
--cc=cassel@kernel.org \
--cc=corbet@lwn.net \
--cc=dave.hansen@linux.intel.com \
--cc=dimitri.sivanich@hpe.com \
--cc=dlemoal@kernel.org \
--cc=dmitry.torokhov@gmail.com \
--cc=enelsonmoore@gmail.com \
--cc=geert@linux-m68k.org \
--cc=khilman@baylibre.com \
--cc=krzk@kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-doc@vger.kernel.org \
--cc=linux-edac@vger.kernel.org \
--cc=linux-ide@vger.kernel.org \
--cc=linux-input@vger.kernel.org \
--cc=linux-m68k@lists.linux-m68k.org \
--cc=linux-omap@vger.kernel.org \
--cc=linux-samsung-soc@vger.kernel.org \
--cc=linux@dominikbrodowski.net \
--cc=mike.travis@hpe.com \
--cc=mingo@redhat.com \
--cc=rdunlap@infradead.org \
--cc=schmitzmic@gmail.com \
--cc=skhan@linuxfoundation.org \
--cc=steve.wahl@hpe.com \
--cc=tglx@kernel.org \
--cc=tony.luck@intel.com \
--cc=tony@atomide.com \
--cc=x86@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox