mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
To: "Theodore Ts'o" <tytso@mit.edu>
Cc: workflows@vger.kernel.org, ksummit@lists.linux.dev,
	linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org,
	Jonathan Corbet <corbet@lwn.net>,
	Shuah Khan <skhan@linuxfoundation.org>,
	Randy Dunlap <rdunlap@infradead.org>,
	Mark Brown <broonie@kernel.org>,
	Laurent Pinchart <laurent.pinchart@ideasonboard.com>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	Leon Romanovsky <leon@kernel.org>,
	Konstantin Ryabitsev <konstantin@linuxfoundation.org>,
	Thorsten Leemhuis <linux@leemhuis.info>,
	"Michael S. Tsirkin" <mst@redhat.com>,
	Kees Cook <kees@kernel.org>,
	Geert Uytterhoeven <geert@linux-m68k.org>,
	Dan Carpenter <error27@gmail.com>,
	Miguel Ojeda <ojeda@kernel.org>,
	Alexei Starovoitov <alexei.starovoitov@gmail.com>,
	Julia Lawall <julia.lawall@inria.fr>, SJ Park <sj@kernel.org>,
	Bradley Morgan <brads@mainlining.org>,
	Sasha Levin <sashal@kernel.org>,
	stable@vger.kernel.org
Subject: Re: [PATCH v5 6/6] agents: add a skill to write KUnit tests
Date: Thu, 12 Nov 2026 01:57:39 +0100	[thread overview]
Message-ID: <20261112015739.2ad28e01@foz.lan> (raw)
In-Reply-To: <20261111225940.1573565-7-tytso@mit.edu>

On Wed, 11 Nov 2026 17:59:38 -0500
"Theodore Ts'o" <tytso@mit.edu> wrote:

> Add a skill under agents/skills/writing-kunit-tests/ to guide coding
> assistants when designing, implementing, verifying, or reviewing KUnit
> unit tests. Point the skill at the KUnit and process documentation and
> cover unit testing principles (testing behaviors rather than
> implementation details, keeping tests focused and DAMP, choosing
> non-default and distinct test values, using narrow expectations, and
> maintaining test isolation), KUnit resource management and static stub
> idioms, and verification with kunit.py.
> 
> Update Documentation/process/coding-assistants.rst to list the new skill
> and note that skills only inspect and report unless their task is to
> write or modify code or tests.

You should probably make it a little bit more generic, also mentioning 
tools/unittests/. 

Currently, we have there Python unit tests meant to detect bugs related
to documentation build, covering basically kernel-doc.

Goal is mainly to avoid regressions, as it was somewhat frequent in the
past that changes at kernel-doc complex regular expressions would break
something.

Regards,
Mauro

> 
> Signed-off-by: Theodore Ts'o <tytso@mit.edu>
> ---
>  Documentation/process/coding-assistants.rst |  11 +-
>  agents/skills/writing-kunit-tests/SKILL.md  | 344 ++++++++++++++++++++
>  2 files changed, 351 insertions(+), 4 deletions(-)
>  create mode 100644 agents/skills/writing-kunit-tests/SKILL.md
> 
> diff --git a/Documentation/process/coding-assistants.rst b/Documentation/process/coding-assistants.rst
> index f0bae6bfe9a0..bb927fea5024 100644
> --- a/Documentation/process/coding-assistants.rst
> +++ b/Documentation/process/coding-assistants.rst
> @@ -28,10 +28,11 @@ skill with a ``SKILL.md`` entry point in the `Agent Skills format
>  documents that apply to its task and adds only what assistants tend to get
>  wrong.
>  
> -Skills inspect and report. They do not change files, create commits or tags,
> -or send mail. A skill returns its result with the evidence for it, or says what
> -is missing. Do not fill a missing result with a guess or a placeholder, and do
> -not finalize the work until it is resolved.
> +Unless a skill's task is to write or modify code or tests, skills only inspect
> +and report: they do not change files, create commits or tags, or send mail. A
> +skill returns its result with the evidence for it, or says what is missing. Do
> +not fill a missing result with a guess or a placeholder, and do not finalize
> +the work until it is resolved.
>  
>  The following skills are available:
>  
> @@ -43,6 +44,8 @@ The following skills are available:
>    tree.
>  * agents/skills/commit-message/SKILL.md writes, rewrites or reviews a commit
>    message or cover letter, and writes the text of a pull request.
> +* agents/skills/writing-kunit-tests/SKILL.md designs, writes, verifies, or
> +  reviews KUnit unit tests.
>  
>  Licensing and Legal Requirements
>  ================================
> diff --git a/agents/skills/writing-kunit-tests/SKILL.md b/agents/skills/writing-kunit-tests/SKILL.md
> new file mode 100644
> index 000000000000..1f19b585b9b4
> --- /dev/null
> +++ b/agents/skills/writing-kunit-tests/SKILL.md
> @@ -0,0 +1,344 @@
> +---
> +# SPDX-License-Identifier: GPL-2.0-only
> +name: writing-kunit-tests
> +description: >-
> +  Design, implement, verify, or review KUnit unit tests for the Linux kernel.
> +  Use when writing new KUnit tests, expanding existing KUnit test suites,
> +  adding regression tests with KUnit, or reviewing KUnit test patches.
> +---
> +
> +# Write KUnit tests
> +
> +Before writing or modifying any code, read the relevant kernel documentation:
> +- **KUnit Framework & Style**:
> +  `Documentation/dev-tools/kunit/usage.rst`,
> +  `Documentation/dev-tools/kunit/style.rst`,
> +  `Documentation/dev-tools/kunit/start.rst`, and
> +  `Documentation/dev-tools/kunit/api/functionredirection.rst`
> +- **Kernel Development & Patch Submission**:
> +  `Documentation/process/development-process.rst`,
> +  `Documentation/process/coding-style.rst`,
> +  `Documentation/process/submitting-patches.rst`, and
> +  `Documentation/process/license-rules.rst`
> +- **AI Coding Assistants & Tool-Generated Content**:
> +  `Documentation/process/coding-assistants.rst` and
> +  `Documentation/process/generated-content.rst`
> +
> +Also inspect existing KUnit tests in the target subsystem (e.g., `*-test.c` or
> +`tests/*_kunit.c`) to follow established local conventions for file naming,
> +symbol visibility, Kconfig, and Makefile integration.
> +
> +---
> +
> +## 1. Core Unit Testing Principles
> +
> +Apply the following software testing best practices to ensure KUnit tests have
> +high **fidelity** (fail when code is broken), **resilience** (only fail when
> +actual behavior breaks, not during internal refactoring), **precision**
> +(pinpoint the exact defect on failure), and **clarity** (serve as executable
> +documentation):
> +
> +### 1.1 Test Behaviors, Not Functions or Implementation Details
> +- **Avoid a 1:1 function-to-test mapping**: A single C function often exhibits
> +  multiple distinct behaviors (e.g., normal insertion, merging with left/right
> +  neighbors, splitting an existing entry, error handling), and a single logical
> +  behavior may span multiple functions (e.g., insert followed by lookup and
> +  removal). Write separate test cases for each distinct behavior.
> +- **Test public/subsystem APIs over internal details**: Exercise the unit
> +  through its intended interface rather than testing private helper functions in
> +  isolation whenever possible. If internal implementation details are
> +  refactored without changing observable behavior, existing tests should
> +  continue to pass.
> +- **Do not write "change-detector" tests**: Never write tests that merely
> +  mirror the implementation line-by-line or assert an exact sequence of
> +  internal helper calls without checking the resulting state or output.
> +
> +### 1.2 Keep Tests Focused
> +- **One scenario per test case**: Each `static void test_...(struct kunit *test)`
> +  function should test a single scenario or behavior.
> +- **Do not chain unrelated scenarios in one test**: Avoid mutating state across
> +  a long sequence of unrelated scenarios in a single test function where side
> +  effects from an earlier check can mask bugs or invalidate assumptions in
> +  later checks.
> +- **Include the scenario and expected outcome in test names**: Name test
> +  functions so a developer can tell what scenario is being exercised and what
> +  should happen from the function name alone (e.g.,
> +  `test_es_insert_adjacent_same_status_merges_extents` or
> +  `unpack_u32_with_null_name_fails` rather than just `test_insert` or
> +  `test_unpack`).
> +
> +### 1.3 Make Tests DAMP, Not Overly DRY
> +- **Prioritize readability by inspection (DAMP — Descriptive and Meaningful
> +  Phrases)**: Because tests do not have their own tests, their correctness must
> +  be obvious to a human reviewer reading top-to-bottom. Do not over-abstract
> +  tests just to eliminate a few lines of duplication.
> +- **Keep cause and effect together**: Set up the specific inputs that drive a
> +  test's outcome directly inside the test case body right before the call under
> +  test and its `KUNIT_EXPECT_*` checks. Never hide the critical input values
> +  that determine an expected output inside a distant `.init` function.
> +- **Include only relevant details (hide noise)**: Use helper functions to hide
> +  irrelevant boilerplate setup (such as allocating a dummy `super_block`,
> +  initializing locks, or zeroing unrelated struct fields), but pass the values
> +  that actually matter to the test explicitly as arguments at the call site:
> +
> +  ```c
> +  /* BAD: Critical values hidden inside helper, or noisy setup inline */
> +  inode = create_test_inode();
> +  KUNIT_EXPECT_EQ(test, get_quota_blocks(inode), 42); /* Where did 42 come from? */
> +
> +  /* GOOD: Helper hides boilerplate; test-relevant value is explicit */
> +  inode = create_test_inode_with_reserved_blocks(test, 42);
> +  KUNIT_EXPECT_EQ(test, get_quota_blocks(inode), 42);
> +  ```
> +
> +### 1.4 Don't Put Logic in Tests & Prefer Literals/Constants
> +- **State expected outputs directly**: Never compute expected values in
> +  assertions using arithmetic, bit shifts, string concatenation, loops, or
> +  conditionals that duplicate the production algorithm. Computing expectations
> +  in tests can introduce bugs in the test itself or mask a shared bug in
> +  production code.
> +- **Prefer literals or named constants in assertions**: Compare actual results
> +  against concrete literals or self-explanatory constants rather than dynamic
> +  expressions derived from the system under test.
> +
> +### 1.5 Choose Robust Test Values & Think Beyond Line Coverage
> +- **Test with non-default values**: In the kernel, structs are frequently
> +  zero-allocated (`kzalloc` / `kunit_kzalloc`). If you test a setter, parser,
> +  or lookup using `0`, `false`, `NULL`, or enum value `0`, a broken
> +  implementation that never writes the field will still pass! Always use
> +  non-zero, non-default test values for positive tests.
> +- **Use distinct values for each parameter**: When calling a function that
> +  takes multiple arguments of the same or compatible types (e.g.,
> +  `ext4_es_insert_extent(inode, lblk, len, pblk, status, ...)`), use clearly
> +  distinct values (e.g., `lblk = 10`, `len = 5`, `pblk = 1000`) so swapped
> +  arguments or off-by-one mixups are caught immediately.
> +- **Think beyond line coverage**:
> +  - **Branch & Condition coverage**: For compound boolean conditions like
> +    `if ((a && b) || !c)`, write test cases that exercise each condition
> +    independently, not just a single path that executes the line.
> +  - **Boundary & Edge cases**: Test `0`, `1`, exact power-of-two/cluster
> +    boundaries, maximum legal limits (e.g., `INT_MAX`, `ULONG_MAX`,
> +    `EXT_MAX_BLOCKS`), overflow/underflow boundaries, empty trees/lists,
> +    single-element collections, and multi-element spans.
> +  - **Error paths**: Test invalid inputs, `-EINVAL` / `-ENOMEM` / `-ENOSPC`
> +    conditions, and verify that error paths leave data structures in a valid,
> +    uncorrupted state without leaking resources.
> +
> +### 1.6 Prefer Narrow Assertions & Make Failures Actionable
> +- **Actionable failure messages**: When a test fails, the test name and KUnit
> +  failure log alone should be enough to start debugging without adding
> +  `printk`s and re-running.
> +- **Use specific KUnit expectation macros**:
> +  - Use `KUNIT_EXPECT_EQ(test, actual, expected)`, `KUNIT_EXPECT_NE`,
> +    `KUNIT_EXPECT_LT`, `KUNIT_EXPECT_LE`, `KUNIT_EXPECT_GT`, `KUNIT_EXPECT_GE`
> +    for integers/enums (instead of `KUNIT_EXPECT_TRUE(test, a == b)`, which
> +    only prints `Expected true, got false`).
> +  - Use `KUNIT_EXPECT_PTR_EQ`, `KUNIT_EXPECT_NULL`, `KUNIT_EXPECT_NOT_NULL`,
> +    `KUNIT_EXPECT_NOT_ERR_OR_NULL` for pointers.
> +  - Use `KUNIT_EXPECT_STREQ` / `KUNIT_EXPECT_MEMEQ` for strings and buffers.
> +- **Use `_MSG` variants in loops and helpers**: Whenever an expectation is
> +  inside a helper function, loop, or table-driven check, use
> +  `KUNIT_EXPECT_*_MSG(test, ..., "context fmt", ...)` so the failure output
> +  identifies the exact case or index that failed.
> +- **Prefer narrow assertions**: Assert only the struct fields or properties
> +  relevant to the behavior under test, rather than asserting every unrelated
> +  field of a large struct (which creates brittle tests that break whenever
> +  unrelated fields change).
> +
> +### 1.7 Test Isolation, Order Independence, and Zero Flakiness
> +- **Complete independence between test cases**: Every test case must pass when
> +  run by itself (`kunit.py run suite.test`), in any order, or repeatedly.
> +- **Never leak mutable shared state**: Avoid file-scope mutable globals. Prefer
> +  allocating per-test context in `test->priv` via `kunit_kzalloc(test, ...)` in
> +  `.init`. If a suite shares a fixture structure, ensure `.init` and `.exit`
> +  completely reset all trees, lists, flags, and stub counters before and after
> +  every single test case.
> +- **No "sleep gambling"**: Never use `msleep()` or arbitrary delays to wait for
> +  asynchronous work in unit tests. Test synchronous entry points, flush
> +  workqueues deterministically, or inject synchronous stubs.
> +
> +### 1.8 High Fidelity & Smart Use of Test Doubles (Real > Fake > Stub > Mock)
> +- **Prefer real implementations first**: Use real kernel data structures (e.g.,
> +  `rbtree`, `xarray`, `list_head`, in-memory anonymous `super_block` / `inode`,
> +  or `kunit_device_register()`) whenever they run fast and deterministically in
> +  memory.
> +- **Use fakes or stubs to isolate heavyweight dependencies**: When code under
> +  test interacts with hardware, disk I/O, journals, block allocators, or global
> +  kernel state, isolate it using:
> +  1. **Lightweight in-memory fakes** (e.g., an ops struct backed by a memory
> +     buffer), or
> +  2. **KUnit static stubs** (`KUNIT_STATIC_STUB_REDIRECT` and
> +     `kunit_activate_static_stub`).
> +- **Avoid overusing mocks / interaction verification**:
> +  - Prefer **state testing** (verifying return values and resulting data
> +    structure state) over **interaction testing** (verifying that function X
> +    was called).
> +  - Only verify **state-changing** external calls (e.g., verifying that a
> +    delayed-allocation block reservation was claimed or released), never
> +    read-only query helpers.
> +  - When verifying stub calls, only check arguments relevant to the behavior
> +    being tested.
> +
> +### 1.9 Parameterize Repetitive Tests Judiciously
> +- **Use parameterized or table-driven tests for input/output matrices**: When
> +  testing the same behavior across many input combinations (e.g., extent
> +  merge/split geometries, timestamp bit-decoding tables, hash test vectors),
> +  use `KUNIT_ARRAY_PARAM` / `KUNIT_ARRAY_PARAM_DESC` with `KUNIT_CASE_PARAM`
> +  (or a clean table-driven helper) to avoid copy-pasting identical test
> +  functions.
> +- **Do not put conditional logic inside parameterized tests**: If a
> +  parameterized test requires `if (param->expect_error)` or
> +  `switch (param->mode)` inside the test function to decide what assertions to
> +  run, split it into separate parameterized or standalone tests instead.
> +
> +---
> +
> +## 2. KUnit Framework Idioms & Mechanics
> +
> +### 2.1 Expectations vs. Assertions
> +- **`KUNIT_EXPECT_*`**: Records a test failure and logs diagnostic details, but
> +  **continues** executing the rest of the test case. Use `KUNIT_EXPECT_*` for
> +  the behavioral checks in your test.
> +- **`KUNIT_ASSERT_*`**: Immediately **aborts** the current test case
> +  (terminating the KUnit kthread) on failure. Use `KUNIT_ASSERT_*` for
> +  preconditions whose failure makes continuing impossible or unsafe (e.g.,
> +  `KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ptr)` after memory allocation or object
> +  lookup before dereferencing `ptr`).
> +- **CRITICAL**: **Never** use `KUNIT_ASSERT_*` in `.exit()`, `.suite_exit()`,
> +  or `kunit_resource` / action cleanup callbacks. Aborting during teardown
> +  skips subsequent cleanup steps and causes memory or resource leaks in the
> +  running kernel.
> +
> +### 2.2 Resource & Memory Management
> +- **Managed memory**: Always prefer `kunit_kmalloc()`, `kunit_kzalloc()`,
> +  `kunit_kcalloc()`, `kunit_kmalloc_array()`, and `kunit_kstrdup()` over raw
> +  `kmalloc`/`kzalloc`. KUnit automatically frees these allocations when the
> +  test case exits—even if a `KUNIT_ASSERT_*` aborts the test midway.
> +- **Deferred cleanup actions**: For non-memory resources (e.g., unregistering a
> +  shrinker, freeing slab cache objects, releasing locks/superblocks, cleaning
> +  up trees), either clean them up in `.exit` or register a deferred action
> +  immediately after acquisition using `kunit_add_action_or_reset()`:
> +
> +  ```c
> +  KUNIT_DEFINE_ACTION_WRAPPER(my_resource_cleanup, my_resource_cleanup_wrapper,
> +                              struct my_resource *);
> +  ...
> +  ret = kunit_add_action_or_reset(test, my_resource_cleanup_wrapper, res);
> +  KUNIT_ASSERT_EQ(test, ret, 0);
> +  ```
> +  Always use `KUNIT_DEFINE_ACTION_WRAPPER()` rather than casting function
> +  pointers to `kunit_action_t`, as casting function pointers breaks Control
> +  Flow Integrity (CFI).
> +- **Safe `.exit` functions**: Remember that `.exit` and `.suite_exit` run even
> +  if `.init` or `.suite_init` failed or exited early. Always guard `.exit`
> +  cleanup against NULL or partially initialized pointers.
> +- **Fake devices**: When code under test requires a `struct device *` (e.g.,
> +  for `devm_*` managed APIs), use `kunit_device_register(test, "name")` from
> +  `<kunit/device.h>`.
> +
> +### 2.3 Testing Static Functions & Isolating Dependencies
> +Check how the target subsystem exposes internal functions to KUnit tests and
> +follow the local convention:
> +
> +1. **Subsystem export macros** (e.g., `EXPORT_SYMBOL_FOR_EXT4_TEST(fn)` or
> +   `VISIBLE_IF_KUNIT` / `EXPORT_SYMBOL_IF_KUNIT(fn)` from
> +   `<kunit/visibility.h>` paired with
> +   `MODULE_IMPORT_NS("EXPORTED_FOR_KUNIT_TESTING");` in the test file).
> +2. **Conditionally `#include`ing the test file** at the bottom of the `.c` file
> +   under `#if IS_ENABLED(CONFIG_<SUBSYSTEM>_KUNIT_TEST)` if the subsystem
> +   already uses that pattern to test `static` functions directly.
> +3. **Function Redirection (Static Stubs)**: To intercept calls to external
> +   functions during a test without refactoring production APIs:
> +   - In the real function (right after variable declarations):
> +     ```c
> +     #include <kunit/static_stub.h>
> +     ...
> +     KUNIT_STATIC_STUB_REDIRECT(my_external_fn, arg1, arg2);
> +     ```
> +   - In the KUnit test:
> +     ```c
> +     kunit_activate_static_stub(test, my_external_fn, my_external_fn_stub);
> +     ```
> +   - If the stub needs the current `struct kunit *`, call
> +     `kunit_get_current_test()` (`#include <kunit/test-bug.h>`).
> +4. **Suppressing expected warning backtraces**: If a test intentionally
> +   triggers `WARN()` / `WARN_ON()`, wrap the call in
> +   `kunit_warning_suppress(test)` and verify with
> +   `KUNIT_EXPECT_SUPPRESSED_WARNING_COUNT(test, 1)` so intentional warnings do
> +   not pollute kernel logs.
> +
> +### 2.4 Suite, File, and Kconfig Nomenclature
> +Unless the subsystem has an established convention (such as `fs/ext4/*-test.c`
> +linked into `ext4-test.o`), follow `Documentation/dev-tools/kunit/style.rst`:
> +
> +- **Subsystem & Suite naming**: Name the suite `<subsystem>_<area>` using
> +  underscores, without redundant `_kunit` or `_test` suffixes in `.name`
> +  (unless matching existing suites in that directory).
> +- **File naming**: Place new standalone test files in `tests/<suite>_kunit.c`
> +  (or match the subsystem's existing `*-test.c` / `*_kunit.c` pattern).
> +- **Kconfig**:
> +  ```kconfig
> +  config FOO_KUNIT_TEST
> +  	tristate "KUnit test for foo" if !KUNIT_ALL_TESTS
> +  	depends on FOO && KUNIT
> +  	default KUNIT_ALL_TESTS
> +  	help
> +  	  This builds unit tests for foo.
> +
> +  	  For more information on KUnit and unit tests in general,
> +  	  please refer to the KUnit documentation in
> +  	  Documentation/dev-tools/kunit/.
> +
> +  	  If unsure, say N.
> +  ```
> +
> +---
> +
> +## 3. Building, Running, and Verifying Tests
> +
> +Build and run the KUnit tests before finalizing or committing changes:
> +
> +1. **Run the test suite with `kunit.py`**:
> +   ```bash
> +   ./tools/testing/kunit/kunit.py run <suite_name>
> +   ```
> +   (If a `.kunitconfig` exists in the repo root or subsystem directory, pass
> +   `--kunitconfig=.kunitconfig` or `--kunitconfig=<subdir>/.kunitconfig`, or
> +   add needed configs via `--kconfig_add CONFIG_...=y`).
> +2. **Verify zero build warnings**: Ensure the added or modified files compile
> +   with zero compiler warnings or errors.
> +3. **Verify test isolation**: Run individual test cases using glob filtering to
> +   confirm no test depends on state left behind by an earlier test:
> +   ```bash
> +   ./tools/testing/kunit/kunit.py run "<suite_name>.<test_case_name>"
> +   ```
> +4. **Verify test fidelity**: Confirm that the tests actually exercise the
> +   intended code paths (e.g., via GCOV/coverage if configured, or by
> +   verifying that breaking the condition under test causes the KUnit
> +   expectation to fail).
> +
> +---
> +
> +## 4. Coding Style, Licensing, and Commits
> +
> +Follow `Documentation/process/coding-style.rst`,
> +`Documentation/process/submitting-patches.rst`,
> +`Documentation/process/license-rules.rst`, and
> +`Documentation/process/coding-assistants.rst`:
> +
> +- **SPDX & Module Macros**:
> +  - Line 1 of every new `.c` test file must be
> +    `// SPDX-License-Identifier: GPL-2.0` (or the appropriate
> +    GPL-2.0-compatible identifier).
> +  - Include `MODULE_LICENSE("GPL");` and `MODULE_DESCRIPTION("...");` at the
> +    bottom of the test module.
> +- **Checkpatch**: Run `./scripts/checkpatch.pl` on the changes and fix all
> +  reported `ERROR`, `WARNING`, and `CHECK` issues.
> +- **Commits**: When asked to create a commit, use the `commit-message` skill
> +  (`agents/skills/commit-message/SKILL.md`). Explain what behaviors and edge
> +  cases are covered, any minimal production code hooks added (such as
> +  `KUNIT_STATIC_STUB_REDIRECT` or KUnit symbol exports), and how the tests were
> +  verified. Never add a `Signed-off-by:` tag.
> +- **Report verification status**: Clearly state what was built and tested
> +  (including `kunit.py` and `checkpatch.pl` results), and explicitly note
> +  anything that could not be built or verified.



Thanks,
Mauro

  reply	other threads:[~2026-11-12  1:02 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-11-11 22:59 [PATCH v5 0/6] agents: add skills for Fixes tags, stable tags, similar bugs, and commit messages Theodore Ts'o
2026-11-11 22:59 ` [PATCH v5 1/6] agents: add infrastructure for agent resources Theodore Ts'o
2026-11-11 22:59 ` [PATCH v5 2/6] agents: add a skill to determine Fixes tags Theodore Ts'o
2026-11-11 22:59 ` [PATCH v5 3/6] agents: add a skill to determine stable tags Theodore Ts'o
2026-11-12  1:10   ` Andrew Morton
2026-11-11 22:59 ` [PATCH v5 4/6] agents: add a skill to find other instances of a fixed bug Theodore Ts'o
2026-11-11 22:59 ` [PATCH v5 5/6] agents: add a skill to write commit messages Theodore Ts'o
2026-11-11 22:59 ` [PATCH v5 6/6] agents: add a skill to write KUnit tests Theodore Ts'o
2026-11-12  0:57   ` Mauro Carvalho Chehab [this message]
2026-11-12  1:12   ` Andrew Morton

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=20261112015739.2ad28e01@foz.lan \
    --to=mchehab+huawei@kernel.org \
    --cc=alexei.starovoitov@gmail.com \
    --cc=brads@mainlining.org \
    --cc=broonie@kernel.org \
    --cc=corbet@lwn.net \
    --cc=error27@gmail.com \
    --cc=geert@linux-m68k.org \
    --cc=gregkh@linuxfoundation.org \
    --cc=julia.lawall@inria.fr \
    --cc=kees@kernel.org \
    --cc=konstantin@linuxfoundation.org \
    --cc=ksummit@lists.linux.dev \
    --cc=laurent.pinchart@ideasonboard.com \
    --cc=leon@kernel.org \
    --cc=linux-doc@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux@leemhuis.info \
    --cc=mst@redhat.com \
    --cc=ojeda@kernel.org \
    --cc=rdunlap@infradead.org \
    --cc=sashal@kernel.org \
    --cc=sj@kernel.org \
    --cc=skhan@linuxfoundation.org \
    --cc=stable@vger.kernel.org \
    --cc=tytso@mit.edu \
    --cc=workflows@vger.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

all inboxes | Powered by JetHome®