All of lore.kernel.org
 help / color / mirror / Atom feed
From: Petr Mladek <pmladek@suse.com>
To: Yafang Shao <laoar.shao@gmail.com>
Cc: jpoimboe@kernel.org, jikos@kernel.org, mbenes@suse.cz,
	joe.lawrence@redhat.com, song@kernel.org,
	live-patching@vger.kernel.org
Subject: Re: [PATCH v10 2/9] selftests/livepatch: Adapt atomic replace tests to provides/obsoletes
Date: Thu, 1 Oct 2026 17:57:04 +0200	[thread overview]
Message-ID: <ar6C0B2aWg-4ayVU@pathway.suse.cz> (raw)
In-Reply-To: <20260930030323.14396-3-laoar.shao@gmail.com>

On Wed 2026-09-30 11:03:16, Yafang Shao wrote:
> The legacy "replace" field in struct klp_patch will be replaced by the
> provides/obsoletes mechanism. As a result, the atomic replace
> selftests fail to build against kernels that only support
> provides/obsoletes.
> 
> Adapt the selftests so that they build and run on both old and new
> kernels. On kernels without the legacy "replace" support, the
> replace-related test cases are skipped with a SKIP message instead
> of being run.
> 
> Also introduce the CONFIG_KLP_HAS_PROVIDES compile-time marker in
> kernel/livepatch/Kconfig. It defaults to n and will be set to y once
> the provides/obsoletes support is implemented later in this series.
> 
> The provides/obsoletes-based selftests will be added later in this
> series, after the legacy "replace" field has been substituted by the
> new mechanism.
> 
> Suggested-by: Petr Mladek <pmladek@suse.com>
> Signed-off-by: Yafang Shao <laoar.shao@gmail.com>
> Acked-by: Song Liu <song@kernel.org>

Looks good and passes selftests. Feel free to use:

Reviewed-by: Petr Mladek <pmladek@suse.com>
Tested-by: Petr Mladek <pmladek@suse.com>

Thouhg, see few nits below:

> --- a/tools/testing/selftests/livepatch/test-callbacks.sh
> +++ b/tools/testing/selftests/livepatch/test-callbacks.sh
> @@ -458,16 +459,17 @@ $MOD_TARGET_BUSY: ${MOD_TARGET_BUSY}_exit"
>  #   execute as each patch progresses through its (un)patching
>  #   transition.
>  
> -start_test "multiple livepatches"
> +function test_multiple_livepatches() {

I really like the approach with bash functions. It separates
the test code from the skip-check.

> +	start_test "multiple livepatches"
>  
> -load_lp $MOD_LIVEPATCH
> -load_lp $MOD_LIVEPATCH2
> -disable_lp $MOD_LIVEPATCH2
> -disable_lp $MOD_LIVEPATCH
> -unload_lp $MOD_LIVEPATCH2
> -unload_lp $MOD_LIVEPATCH
> +	load_lp $MOD_LIVEPATCH
> +	load_lp $MOD_LIVEPATCH2
> +	disable_lp $MOD_LIVEPATCH2
> +	disable_lp $MOD_LIVEPATCH
> +	unload_lp $MOD_LIVEPATCH2
> +	unload_lp $MOD_LIVEPATCH
>  
> -check_result "% insmod test_modules/$MOD_LIVEPATCH.ko
> +	check_result "% insmod test_modules/$MOD_LIVEPATCH.ko
>  livepatch: enabling patch '$MOD_LIVEPATCH'
>  livepatch: '$MOD_LIVEPATCH': initializing patching transition
>  $MOD_LIVEPATCH: pre_patch_callback: vmlinux
> @@ -548,6 +552,15 @@ $MOD_LIVEPATCH2: post_unpatch_callback: vmlinux
>  livepatch: '$MOD_LIVEPATCH2': unpatching complete
>  % rmmod $MOD_LIVEPATCH2
>  % rmmod $MOD_LIVEPATCH"
> +}
> +
>  
> +if [[ "$HAS_PROVIDES_ATTR" != "1" ]]; then
> +	test_multiple_livepatches
> +	test_atomic_replace
> +else
> +	skip "multiple livepatches" "legacy replace attribute not present"
> +	skip "atomic replace" "legacy replace attribute not present"
> +fi

I would revert the logic and ordering:

  + Positive checks are easier to read ;-)
  + It would make sense to have the obsolete checks in the "else" part.
  + It would be the same ordering as in the .c files.

> --- a/tools/testing/selftests/livepatch/test-kprobe.sh
> +++ b/tools/testing/selftests/livepatch/test-kprobe.sh
> @@ -196,6 +200,16 @@ livepatch: '$MOD_REPLACE': starting unpatching transition
>  livepatch: '$MOD_REPLACE': completing unpatching transition
>  livepatch: '$MOD_REPLACE': unpatching complete
>  % rmmod $MOD_REPLACE"
> +}
> +
> +
> +if [[ "$HAS_PROVIDES_ATTR" != "1" ]]; then
> +	test_multiple_livepatches
> +	test_atomic_replace_livepatch
> +else
> +	skip "multiple livepatches" "legacy replace attribute not present"
> +	skip "atomic replace livepatch" "legacy replace attribute not present"
> +fi

Same here.

>  
>  # - load a target module that provides /proc/test_klp_mod_target with
> diff --git a/tools/testing/selftests/livepatch/test_modules/test_klp_callbacks_demo2.c b/tools/testing/selftests/livepatch/test_modules/test_klp_callbacks_demo2.c
> index 5417573e80af..6c46ce575f5c 100644
> --- a/tools/testing/selftests/livepatch/test_modules/test_klp_callbacks_demo2.c
> +++ b/tools/testing/selftests/livepatch/test_modules/test_klp_callbacks_demo2.c
> @@ -7,9 +7,16 @@
>  #include <linux/kernel.h>
>  #include <linux/livepatch.h>
>  
> +#ifdef CONFIG_KLP_HAS_PROVIDES

JFYI, this is the related check in the .c code.

> +/*
> + * TODO: Add provides/obsoletes module parameters for the
> + * provides/obsoletes based tests (to be added later).
> + */
> +#else
>  static int replace;
>  module_param(replace, int, 0644);
>  MODULE_PARM_DESC(replace, "replace (default=0)");
> +#endif
>  
>  static const char *const module_state[] = {
>  	[MODULE_STATE_LIVE]	= "[MODULE_STATE_LIVE] Normal state",

Best Regardss,
Petr

  reply	other threads:[~2026-10-01 15:57 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-09-30  3:03 [PATCH v10 0/9] livepatch: Add support for scoped atomic replace Yafang Shao
2026-09-30  3:03 ` [PATCH v10 1/9] selftests/livepatch: Clarify test module file names Yafang Shao
2026-10-01 15:27   ` Petr Mladek
2026-09-30  3:03 ` [PATCH v10 2/9] selftests/livepatch: Adapt atomic replace tests to provides/obsoletes Yafang Shao
2026-10-01 15:57   ` Petr Mladek [this message]
2026-10-02 12:01   ` Miroslav Benes
2026-09-30  3:03 ` [PATCH v10 3/9] livepatch: Make klp_find_func() non static Yafang Shao
2026-10-02 14:19   ` Petr Mladek
2026-09-30  3:03 ` [PATCH v10 4/9] livepatch: Call klp_init_patch_early() earlier Yafang Shao
2026-10-02 15:58   ` Petr Mladek
2026-09-30  3:03 ` [PATCH v10 5/9] livepatch: Implement provides and obsoletes for scoped atomic replace Yafang Shao
2026-10-02 12:01   ` Miroslav Benes
2026-10-02 17:06   ` Petr Mladek
2026-10-04 15:46     ` Yafang Shao
2026-10-08 10:30       ` Petr Mladek
2026-10-08 11:04         ` Yafang Shao
2026-10-09  8:33           ` Yafang Shao
2026-09-30  3:03 ` [PATCH v10 6/9] livepatch: Deprecate stack_order Yafang Shao
2026-09-30  3:03 ` [PATCH v10 7/9] selftests/livepatch: Add provides/obsoletes test scenarios Yafang Shao
2026-09-30  3:13   ` sashiko-bot
2026-09-30  3:29     ` Yafang Shao
2026-10-02 12:27   ` Miroslav Benes
2026-09-30  3:03 ` [PATCH v10 8/9] selftests/livepatch: Add state test for provides/obsoletes Yafang Shao
2026-09-30  3:03 ` [PATCH v10 9/9] selftests/livepatch: Add function " Yafang Shao

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=ar6C0B2aWg-4ayVU@pathway.suse.cz \
    --to=pmladek@suse.com \
    --cc=jikos@kernel.org \
    --cc=joe.lawrence@redhat.com \
    --cc=jpoimboe@kernel.org \
    --cc=laoar.shao@gmail.com \
    --cc=live-patching@vger.kernel.org \
    --cc=mbenes@suse.cz \
    --cc=song@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.