All of lore.kernel.org
 help / color / mirror / Atom feed
From: Enze Li <lienze@kylinos.cn>
To: sj@kernel.org
Cc: akpm@linux-foundation.org,  damon@lists.linux.dev,
	 linux-mm@kvack.org, enze.li@gmx.com,lienze@kylinos.cn
Subject: Re: [PATCH] mm/damon/core: support multiple damon_call_control requests
Date: Tue, 02 Dec 2025 10:31:14 +0800	[thread overview]
Message-ID: <87zf818vil.fsf@> (raw)
In-Reply-To: <20251202021407.11818-1-lienze@kylinos.cn> (Enze Li's message of "Tue, 2 Dec 2025 10:14:07 +0800")


FTR, this is my testing patch for samples/damon/prcl.c based on tag v6.18.

8<------------------------------------------------------
diff --git a/samples/damon/prcl.c b/samples/damon/prcl.c
index b7c50f2656ce..94fd6184fb14 100644
--- a/samples/damon/prcl.c
+++ b/samples/damon/prcl.c
@@ -39,6 +39,7 @@ static int damon_sample_prcl_repeat_call_fn(void *data)
        struct damon_ctx *c = data;
        struct damon_target *t;
 
+       pr_info("repeat_call\n");
        damon_for_each_target(t, c) {
                struct damon_region *r;
                unsigned long wss = 0;
@@ -52,11 +53,22 @@ static int damon_sample_prcl_repeat_call_fn(void *data)
        return 0;
 }
 
+static int damon_sample_prcl_repeat_call_v2_fn(void *data)
+{
+       pr_info("repeat_call_v2\n");
+       return 0;
+}
+
 static struct damon_call_control repeat_call_control = {
        .fn = damon_sample_prcl_repeat_call_fn,
        .repeat = true,
 };
 
+static struct damon_call_control repeat_call_control_v2 = {
+       .fn = damon_sample_prcl_repeat_call_v2_fn,
+       .repeat = true,
+};
+
 static int damon_sample_prcl_start(void)
 {
        struct damon_target *target;
@@ -109,6 +121,9 @@ static int damon_sample_prcl_start(void)
        if (err)
                return err;
 
+       repeat_call_control_v2.data = ctx;
+       damon_call(ctx, &repeat_call_control_v2);
+
        repeat_call_control.data = ctx;
        return damon_call(ctx, &repeat_call_control);
 }
>8------------------------------------------------------

Thanks,
Enze

On Tue, Dec 02 2025 at 10:14:07 AM +0800, Enze Li wrote:

> The current implementation only supports repeated calls to a single
> damon_call_control request per context.  This limitation introduces
> inefficiencies for scenarios that require registering multiple deferred
> operations.
>
> This patch modifies the implementation of kdamond_call() to support
> repeated calls to multiple damon_call_control requests.  To demonstrate
> the effect of this change, I made minor modifications to
> samples/damon/prcl.c by adding a new request alongside the original
> damon_call_control request and performed comparative tests.
>
> Before applying the patch, I observed,
>
> [  381.661821] damon_sample_prcl: start
> [  381.668199] damon_sample_prcl: repeat_call_v2
> [  381.668208] damon_sample_prcl: repeat_call
> [  381.668211] damon_sample_prcl: wss: 0
> [  381.675194] damon_sample_prcl: repeat_call
> [  381.675202] damon_sample_prcl: wss: 0
>
> after applying the patch, I saw,
>
> [   61.750723] damon_sample_prcl: start
> [   61.757104] damon_sample_prcl: repeat_call_v2
> [   61.757106] damon_sample_prcl: repeat_call
> [   61.757107] damon_sample_prcl: wss: 0
> [   61.763067] damon_sample_prcl: repeat_call_v2
> [   61.763069] damon_sample_prcl: repeat_call
> [   61.763070] damon_sample_prcl: wss: 0
>
> Signed-off-by: Enze Li <lienze@kylinos.cn>
> ---
>  mm/damon/core.c | 20 +++++++++++++-------
>  1 file changed, 13 insertions(+), 7 deletions(-)
>
> diff --git a/mm/damon/core.c b/mm/damon/core.c
> index 109b050c795a..66b5bae44f22 100644
> --- a/mm/damon/core.c
> +++ b/mm/damon/core.c
> @@ -2526,13 +2526,19 @@ static void kdamond_call(struct damon_ctx *ctx, bool cancel)
>  			list_add(&control->list, &repeat_controls);
>  		}
>  	}
> -	control = list_first_entry_or_null(&repeat_controls,
> -			struct damon_call_control, list);
> -	if (!control || cancel)
> -		return;
> -	mutex_lock(&ctx->call_controls_lock);
> -	list_add_tail(&control->list, &ctx->call_controls);
> -	mutex_unlock(&ctx->call_controls_lock);
> +	while (true) {
> +		control = list_first_entry_or_null(&repeat_controls,
> +				struct damon_call_control, list);
> +		if (!control)
> +			break;
> +		/* Unlink from the repeate_controls list. */
> +		list_del(&control->list);
> +		if (cancel)
> +			continue;
> +		mutex_lock(&ctx->call_controls_lock);
> +		list_add(&control->list, &ctx->call_controls);
> +		mutex_unlock(&ctx->call_controls_lock);
> +	}
>  }
>  
>  /* Returns negative error code if it's not activated but should return */
>
> base-commit: 7d0a66e4bb9081d75c82ec4957c50034cb0ea449

  reply	other threads:[~2025-12-02  2:31 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-12-02  2:14 [PATCH] mm/damon/core: support multiple damon_call_control requests Enze Li
2025-12-02  2:31 ` Enze Li [this message]
2025-12-02  5:29 ` SeongJae Park
2025-12-02  7:55   ` Enze Li

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=87zf818vil.fsf@ \
    --to=lienze@kylinos.cn \
    --cc=akpm@linux-foundation.org \
    --cc=damon@lists.linux.dev \
    --cc=enze.li@gmx.com \
    --cc=linux-mm@kvack.org \
    --cc=sj@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.