From: sashiko-bot@kernel.org
To: "TAKANO Mitsuhiro" <takano32@gmail.com>,
linux-perf-users@vger.kernel.org
Subject: Re: [PATCH v3 3/3] perf jevents: Check the JSON keys that jevents.py never reads
Date: Wed, 11 Nov 2026 03:59:09 +0000 [thread overview]
Message-ID: <sashiko-outbox-208247@kernel.org> (raw)
In-Reply-To: <20261111034333.2019831-4-takano32@gmail.com>
Thank you for your contribution! Sashiko AI review found 2 potential
issues to consider:
- [Medium] perf jevents: module-scope variable e in __main__ breaks
pylint W0621
- [Low] perf jevents: empty tasks check in main() skips arch std errors
and arch=none
--
commit aee0fc441ea63dcedc64e1197848c350782988c1
Author: TAKANO Mitsuhiro <takano32@gmail.com>
perf jevents: Check the JSON keys that jevents.py never reads
This commit adds a --check mode to jevents.py (along with a jevents-check
make target and shell test) to report unread JSON keys that closely match
known key names and metrics missing a MetricExpr.
> diff --git a/tools/perf/pmu-events/jevents.py b/tools/perf/pmu-events/jevents.py
> index f4dca47eb49b2..3381ade201fd9 100755
> --- a/tools/perf/pmu-events/jevents.py
> +++ b/tools/perf/pmu-events/jevents.py
[ ... ]
> @@ -1510,7 +1729,12 @@ model must include the implementor such as "arm/cortex-a34".''',
> if item.name == _args.arch or _args.arch == 'all' or item.name == 'test' or item.name == 'common':
> archs.append(item.name)
>
> - if len(archs) < 2 and _args.arch != 'none':
> + if _args.check and _args.arch not in ('all', 'none') and _args.arch not in [
> + item.name for item in os.scandir(_args.starting_dir) if item.is_dir()]:
> + print(f'jevents: error: no architecture directory named \'{_args.arch}\' '
> + f'under \'{_args.starting_dir}\'', file=sys.stderr)
> + sys.exit(2)
> + if not archs and _args.arch != 'none':
> raise IOError(f'Missing architecture directory \'{_args.arch}\'')
>
> archs.sort()
> @@ -1522,16 +1746,51 @@ model must include the implementor such as "arm/cortex-a34".''',
> if item.is_file() and item.name.endswith('.json') and not item.name.endswith('metricgroups.json'):
> tasks.append((item.path, get_topic(item.name)))
>
> - for arch in archs:
> - arch_path = f'{_args.starting_dir}/{arch}'
> - preprocess_arch_std_files(arch_path)
> - ftw(arch_path, [], collect_json)
> -
> - with concurrent.futures.ProcessPoolExecutor(max_workers=_parallel_worker_count(len(tasks)),
> - initializer=_init_worker,
> - initargs=(_arch_std_events,)) as executor:
> - for path, topic, events in executor.map(_parallel_read_json_events, tasks):
> - _json_cache[(path, topic)] = events
> + failed: List[Tuple[str, Exception]] = []
> + try:
> + for arch in archs:
> + arch_path = f'{_args.starting_dir}/{arch}'
> + preprocess_arch_std_files(arch_path, failed if _args.check else None)
> + ftw(arch_path, [], collect_json)
> +
> + if not tasks:
> + print(f'jevents: error: no event table under \'{_args.starting_dir}\' '
> + f'matched arch \'{_args.arch}\'', file=sys.stderr)
> + sys.exit(2 if _args.check else 1)
[Severity: Low]
Does exiting early when tasks is empty discard errors and mistyped keys
already collected from architecture standard files, and break arch='none'
builds?
collect_json() only queues JSON files in subdirectories (len(parents) > 0).
If an architecture directory only contains top-level arch std JSON files,
exiting here in --check mode skips reporting any parse failures in failed
or mistyped keys in _json_cache from preprocess_arch_std_files(). In build
mode, when _args.arch == 'none' is used on a directory without common or
test subdirectories, this exits with status 1 instead of generating empty C
tables as the _args.arch != 'none' check above allows.
[ ... ]
> @@ -1608,4 +1869,16 @@ struct pmu_table_entry {
> _args.output_string_file.close()
>
> if __name__ == '__main__':
> - main()
> + try:
> + main()
> + except SystemExit:
> + raise
> + except KeyboardInterrupt:
> + raise
> + except BaseException as e:
> + # A build should see the traceback; a check gives its caller a status,
> + # and 2 is the one that says the tool could not do its job.
> + if _args is not None and getattr(_args, 'check', False):
> + print(f'jevents: error: {e}', file=sys.stderr)
> + sys.exit(2)
> + raise
[Severity: Medium]
Does binding e in the top-level __main__ block break the perf build when
pylint is enabled?
Because if __name__ == '__main__': runs at module scope, binding e here
causes pylint to report W0621 (redefined-outer-name) on every function and
lambda in jevents.py that uses a local variable or argument named e, such as
add_events_table_entries():
tools/perf/pmu-events/jevents.py:add_events_table_entries() {
...
for e in read_json_events(item.path, topic):
...
}
The default perf build runs pylint on jevents.py with E and W enabled
whenever pylint >= 2.16.0 is installed, so these W0621 warnings fail the
pylint-pmu-events build target. Moving this try/except inside main() or
using a distinct name like _err avoids shadowing.
--
Sashiko AI review · https://sashiko.dev/#/patchset/20261111034333.2019831-1-takano32@gmail.com?part=3
next prev parent reply other threads:[~2026-11-11 3:59 UTC|newest]
Thread overview: 52+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-11-10 22:22 [PATCH 0/3] perf jevents: Report the JSON keys that jevents.py never reads TAKANO Mitsuhiro
2026-11-10 22:22 ` [PATCH 1/3] perf jevents: Name the metric when a MetricExpr is missing TAKANO Mitsuhiro
2026-11-10 22:44 ` sashiko-bot
2026-11-10 22:22 ` [PATCH 2/3] perf jevents: Make the model argument optional TAKANO Mitsuhiro
2026-11-10 22:43 ` sashiko-bot
2026-11-10 22:22 ` [PATCH 3/3] perf jevents: Check the JSON keys that jevents.py never reads TAKANO Mitsuhiro
2026-11-10 22:49 ` sashiko-bot
2026-11-11 2:33 ` TAKANO Mitsuhiro
2026-11-11 2:34 ` [PATCH v2 0/3] perf jevents: Report " TAKANO Mitsuhiro
2026-11-11 2:34 ` [PATCH v2 1/3] perf jevents: Name the metric when a MetricExpr is missing TAKANO Mitsuhiro
2026-11-11 3:05 ` sashiko-bot
2026-11-11 2:34 ` [PATCH v2 2/3] perf jevents: Make the model argument optional TAKANO Mitsuhiro
2026-11-11 3:15 ` sashiko-bot
2026-11-11 2:34 ` [PATCH v2 3/3] perf jevents: Check the JSON keys that jevents.py never reads TAKANO Mitsuhiro
2026-11-11 3:31 ` sashiko-bot
2026-11-11 3:43 ` [PATCH v3 0/3] perf jevents: Report " TAKANO Mitsuhiro
2026-11-11 3:43 ` [PATCH v3 1/3] perf jevents: Name the metric when a MetricExpr is missing TAKANO Mitsuhiro
2026-11-11 3:54 ` sashiko-bot
2026-11-11 3:43 ` [PATCH v3 2/3] perf jevents: Make the model argument optional TAKANO Mitsuhiro
2026-11-11 3:50 ` sashiko-bot
2026-11-11 3:43 ` [PATCH v3 3/3] perf jevents: Check the JSON keys that jevents.py never reads TAKANO Mitsuhiro
2026-11-11 3:59 ` sashiko-bot [this message]
2026-11-11 4:10 ` [PATCH v4 0/3] perf jevents: Report " TAKANO Mitsuhiro
2026-11-11 4:10 ` [PATCH v4 1/3] perf jevents: Name the metric when a MetricExpr is missing TAKANO Mitsuhiro
2026-11-11 4:22 ` sashiko-bot
2026-11-11 4:10 ` [PATCH v4 2/3] perf jevents: Make the model argument optional TAKANO Mitsuhiro
2026-11-11 4:16 ` sashiko-bot
2026-11-11 4:10 ` [PATCH v4 3/3] perf jevents: Check the JSON keys that jevents.py never reads TAKANO Mitsuhiro
2026-11-11 4:19 ` sashiko-bot
2026-11-11 13:26 ` [PATCH v5 0/3] perf jevents: Check the JSON keys a table may carry TAKANO Mitsuhiro
2026-11-11 13:26 ` [PATCH v5 1/3] perf jevents: Name the metric when a MetricExpr is missing TAKANO Mitsuhiro
2026-11-11 14:11 ` sashiko-bot
2026-11-11 13:26 ` [PATCH v5 2/3] perf jevents: Make the model argument optional TAKANO Mitsuhiro
2026-11-11 14:05 ` sashiko-bot
2026-11-11 13:26 ` [PATCH v5 3/3] perf jevents: Check the JSON keys a table may carry TAKANO Mitsuhiro
2026-11-11 14:12 ` sashiko-bot
2026-11-11 15:09 ` [PATCH v6 0/3] " TAKANO Mitsuhiro
2026-11-11 15:09 ` [PATCH v6 1/3] perf jevents: Name the metric and the file when a MetricExpr is missing TAKANO Mitsuhiro
2026-11-11 16:17 ` sashiko-bot
2026-11-11 15:09 ` [PATCH v6 2/3] perf jevents: Make the model argument optional TAKANO Mitsuhiro
2026-11-11 16:28 ` sashiko-bot
2026-11-11 15:09 ` [PATCH v6 3/3] perf jevents: Check the JSON keys a table may carry TAKANO Mitsuhiro
2026-11-11 16:36 ` sashiko-bot
2026-11-12 16:28 ` [PATCH v7 0/1] perf jevents: Check the keys of the JSON tables TAKANO Mitsuhiro
2026-11-12 16:28 ` [PATCH v7 1/1] " TAKANO Mitsuhiro
2026-11-12 16:38 ` sashiko-bot
2026-11-12 17:32 ` [PATCH v8 0/1] " TAKANO Mitsuhiro
2026-11-12 17:32 ` [PATCH v8 1/1] " TAKANO Mitsuhiro
2026-11-12 17:46 ` sashiko-bot
2026-11-12 22:25 ` [PATCH v9 0/1] " TAKANO Mitsuhiro
2026-11-12 22:25 ` [PATCH v9 1/1] " TAKANO Mitsuhiro
2026-11-12 22:35 ` sashiko-bot
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=sashiko-outbox-208247@kernel.org \
--to=sashiko-bot@kernel.org \
--cc=linux-perf-users@vger.kernel.org \
--cc=sashiko-reviews@lists.linux.dev \
--cc=takano32@gmail.com \
/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.