mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Julian Braha <julianbraha@gmail.com>
To: "Ahmed S. Darwish" <darwi@linutronix.de>,
	Clark Williams <clrkwllms@kernel.org>,
	Steven Rostedt <rostedt@goodmis.org>,
	Ingo Molnar <mingo@redhat.com>,
	Nathan Chancellor <nathan@kernel.org>,
	Nicolas Schier <nsc@kernel.org>
Cc: "Sebastian Andrzej Siewior" <bigeasy@linutronix.de>,
	"Frederic Weisbecker" <frederic@kernel.org>,
	"Greg Kroah-Hartman" <gregkh@linuxfoundation.org>,
	"Jonathan Corbet" <corbet@lwn.net>,
	"John Ogness" <john.ogness@linutronix.de>,
	"Derek Barbosa" <debarbos@redhat.com>,
	"Zbigniew Jędrzejewski-Szmek" <zbyszek@amutable.com>,
	"Daan De Meyer" <daan.j.demeyer@gmail.com>,
	"Luca Boccassi" <luca.boccassi@gmail.com>,
	linux-rt-devel@lists.linux.dev, debian-kernel@lists.debian.org,
	linux-kbuild@vger.kernel.org, linux-doc@vger.kernel.org,
	linux-kernel@vger.kernel.org, arighi@nvidia.com
Subject: Re: [PATCH v1 03/10] kconfig-checker: Add the configuration checker code
Date: Sun, 8 Nov 2026 18:59:41 +0000	[thread overview]
Message-ID: <9729a4c6-22f9-4102-b62f-c76a75488240@gmail.com> (raw)
In-Reply-To: <20261106091922.7560-4-darwi@linutronix.de>


[-- Attachment #1.1: Type: text/plain, Size: 4239 bytes --]

On 11/6/26 09:19, Ahmed S. Darwish wrote:
> Introduce a kernel configuration checker.
> 
> Validate the passed kernel .config against a YAML rules file and report
> problematic configuration issues by severity.
> 
> For correctness, readability, and long-term maintainability, type-annotate
> all the Python code and split the tool's logic into a clean set of classes.
> 
> Create a proper Python objects data model for the kconfig checker to work
> with.  Confine all direct YAML dictionary access to YAML files loading,
> validation, and data model construction.
> 
> Document the tool's development rules on top.
> 
> Signed-off-by: Ahmed S. Darwish <darwi@linutronix.de>
> ---
>  tools/kconfig-checker/check.py | 558 +++++++++++++++++++++++++++++++++
>  1 file changed, 558 insertions(+)
>  create mode 100755 tools/kconfig-checker/check.py
> 
> diff --git a/tools/kconfig-checker/check.py b/tools/kconfig-checker/check.py
> new file mode 100755
> index 000000000000..476cd13e59eb
> --- /dev/null
> +++ b/tools/kconfig-checker/check.py
> @@ -0,0 +1,558 @@
> +#!/usr/bin/env python3
> +#
> +# SPDX-License-Identifier: GPL-2.0-only
> +#
> +# Kernel .config checker
> +#
> +# Main usage:
> +#
> +#     $ check.py list-rules
> +#     $ check.py check -c path/to/linux/.config -r preempt_rt
> +#
> +# Notes:
> +#
> +# - All code is to be fully type-annotated. Before introducing changes,
> +#   please verify type-safety using:
> +#
> +#     $ mypy --strict --no-warn-return-any check.py
> +#
> +# - The minimum required Python version must not be newer than what is
> +#   required by the kernel build at Documentation/process/changes.rst.
> +#
> +# - The tool must not depend on being run inside the kernel source tree.
> +#   This simplifies invocation, testing and possible future packaging.
> +#
> +# - The YAML rule files are only treated as a serialization format.  After
> +#   loading and schema validation, such rules are parsed into an internal
> +#   data model: Severity, Rule, SymbolRule, PatternRule, Rules, and other
> +#   related python objects.
> +#
> +#   All checker logic must operate on that typed model, and not on the raw
> +#   YAML dictionaries.
> +#
> +# - Minimize external dependencies: this tool is also intended to be run
> +#   from distribution kernel-package scripts in the future.
> +#
> +# Script exit codes:
> +#
> +#   os.EX_CONFIG          passed kernel .config does not match rules
> +#   os.EX_NOINPUT         input file(s) could not be opened
> +#   os.EX_DATAERR         YAML/schema/rule data is malformed
> +#   os.EX_UNAVAILABLE     Python version or dependency is unavailable
> +#
> +
> +from __future__ import annotations
> +
> +import argparse
> +import os
> +import re
> +import sys
> +import textwrap
> +
> +from dataclasses import dataclass
> +from enum import Enum, auto
> +from pathlib import Path
> +from typing import Any, NoReturn, Optional
> +
> +#
> +# Initial sanity checks:
> +#
> +
> +def error(message: str, code: int) -> NoReturn:
> +    print(f'Error: {message}', file=sys.stderr)
> +    sys.exit(code)
> +
> +if sys.version_info < (3, 9):
> +    error('Python 3.9 or later is required', os.EX_UNAVAILABLE)
> +
> +try:
> +    import jsonschema               # type: ignore
> +    import yaml as yaml_m           # type: ignore
> +except ModuleNotFoundError as e:
> +    error(f'Missing Python module: {e.name}', os.EX_UNAVAILABLE)
> +
> +#
> +# Actual script:
> +#
> +
> +class KernelConfig:
> +    """.config file parser"""
> +
> +    def __init__(self, file: Path):
> +        try:
> +            self.lines = file.read_text().splitlines()
> +        except OSError as e:
> +            error(f'Could not open {file}: {e.strerror}', os.EX_NOINPUT)
> +
> +        self.symbols = self._parse_symbols()
> +
> +    def _parse_symbols(self) -> dict[str, str]:
> +        """Extract CONFIG_* symbol assignments from .config"""
> +        symbol_set = re.compile(r'^(CONFIG_[A-Za-z0-9_]+)=([ym])$')
> +        symbol_unset = re.compile(r'^# (CONFIG_[A-Za-z0-9_]+) is not set$')

What does this do for Kconfig's int, hex, and string options?

- Julian Braha

[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 236 bytes --]

  parent reply	other threads:[~2026-11-08 18:59 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-11-06  9:19 [PATCH v1 00/10] tools: Introduce a kernel configuration checker Ahmed S. Darwish
2026-11-06  9:19 ` [PATCH v1 01/10] kconfig-checker: Add schema for rule files Ahmed S. Darwish
2026-11-08 18:59   ` Julian Braha
2026-11-06  9:19 ` [PATCH v1 02/10] kconfig-checker: Introduce PREEMPT_RT configuration rules Ahmed S. Darwish
2026-11-07  9:20   ` sashiko-bot
2026-11-06  9:19 ` [PATCH v1 03/10] kconfig-checker: Add the configuration checker code Ahmed S. Darwish
2026-11-07  9:20   ` sashiko-bot
2026-11-08 18:59   ` Julian Braha [this message]
2026-11-06  9:19 ` [PATCH v1 04/10] kconfig: Introduce checkconfig target Ahmed S. Darwish
2026-11-07  9:20   ` sashiko-bot
2026-11-08 18:59   ` Julian Braha
2026-11-06  9:19 ` [PATCH v1 05/10] Documentation: Describe kconfig-checker usage and design Ahmed S. Darwish
2026-11-06  9:19 ` [PATCH v1 06/10] kconfig-checker: Split schema to support component reuse Ahmed S. Darwish
2026-11-07  9:20   ` sashiko-bot
2026-11-06  9:19 ` [PATCH v1 07/10] kconfig-checker: Introduce overlays schema Ahmed S. Darwish
2026-11-07  9:20   ` sashiko-bot
2026-11-06  9:19 ` [PATCH v1 08/10] kconfig-checker: Add support for rule overlays Ahmed S. Darwish
2026-11-06  9:19 ` [PATCH v1 09/10] Documentation: Describe kconfig-checker overlays Ahmed S. Darwish
2026-11-07  9:20   ` sashiko-bot
2026-11-06  9:19 ` [PATCH v1 10/10] kconfig: Introduce OVERLAY= for make checkconfig Ahmed S. Darwish
2026-11-08 18:59 ` [PATCH v1 00/10] tools: Introduce a kernel configuration checker Julian Braha

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=9729a4c6-22f9-4102-b62f-c76a75488240@gmail.com \
    --to=julianbraha@gmail.com \
    --cc=arighi@nvidia.com \
    --cc=bigeasy@linutronix.de \
    --cc=clrkwllms@kernel.org \
    --cc=corbet@lwn.net \
    --cc=daan.j.demeyer@gmail.com \
    --cc=darwi@linutronix.de \
    --cc=debarbos@redhat.com \
    --cc=debian-kernel@lists.debian.org \
    --cc=frederic@kernel.org \
    --cc=gregkh@linuxfoundation.org \
    --cc=john.ogness@linutronix.de \
    --cc=linux-doc@vger.kernel.org \
    --cc=linux-kbuild@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-rt-devel@lists.linux.dev \
    --cc=luca.boccassi@gmail.com \
    --cc=mingo@redhat.com \
    --cc=nathan@kernel.org \
    --cc=nsc@kernel.org \
    --cc=rostedt@goodmis.org \
    --cc=zbyszek@amutable.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®