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)
next prev parent reply other threads:[~2026-09-05 12:25 UTC|newest]
Thread overview: 24+ 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 15:13 ` Borislav Petkov
2026-09-05 15:22 ` Karl Mehltretter
2026-09-05 15:33 ` Borislav Petkov
2026-09-05 16:20 ` Jonathan Corbet
2026-09-05 16:27 ` Borislav Petkov
2026-09-05 16:45 ` Karl Mehltretter
2026-09-05 17:47 ` Andreas Kemnade
2026-09-05 18:50 ` Borislav Petkov
2026-09-06 8:19 ` Andreas Kemnade
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-10 17:33 ` Niklas Cassel
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]
2026-09-06 3:58 ` Randy Dunlap
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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.