From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id B354DC83F0A for ; Sun, 6 Jul 2025 20:00:50 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 567336B0403; Sun, 6 Jul 2025 16:00:37 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 518726B0404; Sun, 6 Jul 2025 16:00:37 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 407266B0405; Sun, 6 Jul 2025 16:00:37 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id 293B26B0403 for ; Sun, 6 Jul 2025 16:00:37 -0400 (EDT) Received: from smtpin18.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id EB2A4B73B7 for ; Sun, 6 Jul 2025 20:00:36 +0000 (UTC) X-FDA: 83634907272.18.5AC27DF Received: from nyc.source.kernel.org (nyc.source.kernel.org [147.75.193.91]) by imf03.hostedemail.com (Postfix) with ESMTP id 57AA020009 for ; Sun, 6 Jul 2025 20:00:35 +0000 (UTC) Authentication-Results: imf03.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=sAqi3+RJ; spf=pass (imf03.hostedemail.com: domain of sj@kernel.org designates 147.75.193.91 as permitted sender) smtp.mailfrom=sj@kernel.org; dmarc=pass (policy=quarantine) header.from=kernel.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1751832035; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=41D6hoI74faVM2Lx2Mcyo4TiY0cxwVbMjF+It4oG4e0=; b=wLY0YExrwDbnKKP4mw+B/tIpWhlXOMi2+dAF5JsU4+rXD5vrWcfFiUrPoPjyzhz1L6RiqL 1T6R6ybjvg41v2h8o/QpAHHSCsfWEoUbK5kMmfhWABfn9lpC9fdPXI98jcLfxtkJVzcxps zGV1w/Z9mA4g2UK85Dx1SFx7DtA7oXY= ARC-Authentication-Results: i=1; imf03.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=sAqi3+RJ; spf=pass (imf03.hostedemail.com: domain of sj@kernel.org designates 147.75.193.91 as permitted sender) smtp.mailfrom=sj@kernel.org; dmarc=pass (policy=quarantine) header.from=kernel.org ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1751832035; a=rsa-sha256; cv=none; b=UEXewjuU4LQX6dL4ggmcZRh1mZfJ39LzTcvv3CtjpXvqQY5JHzm4x1WSVxNJ02pv/hHPgl XnDT+wcPcTSwQ4Ic6k8wpW1VHmwHepxG112YSHFvsT2+FkLnfSBrc9kuPg+nuRH3NDrEpZ LoU/yPuq83w6DuR8ueP2ozETgzmpH1w= Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by nyc.source.kernel.org (Postfix) with ESMTP id D4D9BA53E15; Sun, 6 Jul 2025 20:00:34 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 7C1B2C4CEF2; Sun, 6 Jul 2025 20:00:34 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1751832034; bh=4kAaXCChET6SPUEFVOVLQUp7PQZ6yAFwNr2FE2D6vJA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=sAqi3+RJgJAWDhlMgSPcliDtIJL40yZvJcgwtX5kaJs0AznUwEru+Z8DgE5ftQ3J7 arBc5jSCbrracd0a1Ug7Y7fCpiutotnskeue42bVVxSR0motuBS4+COHM7rmlYDkYa oy/aKiOrtgM/5YiktRpTfBeh1yk5aDktt5T7ws/aIDZOWaEoJv88MQ/7bR9wWlkpsE gevViW2N6C4H2TZLECWN9U4lyxUU3/swTSG0+v3QovQkVtvrpNH0kC6k5Xo0UOkarW GCMoY6Yc5vv0tIrjKOBQvs1xIrYBmdPxs826ekV4NQzfclkbcI11BzoHudP3WauSsn plpXkvAC7Ze7Q== From: SeongJae Park To: Cc: SeongJae Park , Andrew Morton , damon@lists.linux.dev, kernel-team@meta.com, linux-kernel@vger.kernel.org, linux-mm@kvack.org Subject: [RFC PATCH 09/14] mm/damon/core: add cleanup_target() ops callback Date: Sun, 6 Jul 2025 13:00:13 -0700 Message-Id: <20250706200018.42704-10-sj@kernel.org> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20250706200018.42704-1-sj@kernel.org> References: <20250706200018.42704-1-sj@kernel.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Stat-Signature: aesd5yc6awos59uyhswsr4cftiztrg9s X-Rspam-User: X-Rspamd-Server: rspam02 X-Rspamd-Queue-Id: 57AA020009 X-HE-Tag: 1751832035-950009 X-HE-Meta: U2FsdGVkX18WlCExVPY8lJd0mhB759Chd7HvI5jGRrJoGHS8OkWTOnSsH1h+sS75afO44VzQJH05JHPw7A9vYhKlQqs81SjaRnWHvPQ2Tg5vaWbOax96HUoKipV4Ne3tARxH/cf3KxVGQbhNZzEke4eh0j4pHkQKb8MbOD7WAbi5bLBYgMpMXc8ncN372JXxkMpg5aQQ0CNrkHP58sLbkmCodMstk+8FYkZgDeoqxUY+d6Z9qux2HueySB8poptukkdZWyB9AvRUhK4e44TbbKCk/dqxHDaQtlLJfPag1yksizFVStz19yNFtm3377Q4VzFaWbXid1j+VJurw1+woXq7aH+IduhUOP+7GYyDq8fZDEAxaj9ocsxdQoPJgU6192yRngHC3tboeEmgCWenv/SHulizCNa1T1RsUmI83Wdo1PkE/bvPeUBPRlQ2g0h2Jj+f152jqAYZ0kHUb0yBcul9t2qHPoW7rb/BQGMxkqf34yGyfRGLI8GFTk1ef0OFlkIrpP9liaBC680GkLfqPRkQpjcXS76oop50roswS3javbxNAXps2CyLa58ARG3iFFtgu+EQASVqFrxuCM5lP0dK5nxOk9jrhKq1KCZhOsUq/YeZy5UvNGSoVCwXkUS56mJoDb3YowT8hwxaSX/fA5D8Km52Bpb2yS7RVdi0CPrIn5DV03U4y95jgG7R7+srdepr6HgMay162FwN2VHvRjpMz/xMVNvYsGGTQGHkeznDKUCeNGNHT36gpHAqloblKBz/26FXHAuVU0sayA5LehzgZHXI9OvMjl88SSaGt5cricYfNW3gsKkcXYBspc0WPv4v7srJdJuKDp4zmdPdawGA5QictqTW7ZaGGXak5MSwxB/RDHPi28Y4OuVi8wAsUDkqsIOINiQUiv0EXF7gfJQ/DXYUgF/crH6f4tT2PbkEp7imotsEFK8i5IecmnLQciJIR4OYsxHpayxxjB+ QrKMutXS LuhoSCAlIus5ECylRZVPlj0W7Unyjxk6L6X3lOasx81G17R3kXJsgzmSZEZiiUZKy1r4dtGUC4lIc9FRe/jlMQWs0Aihk8a/WJcQr9pYNwxaOFFKA8lPdE23Umj/sDftlDLFuMbv4UXzTqXqErByZGuXHK5LFGi77fJhIe8k9iXA8NAQOew7LZzfbISWthaR4S0v/jZV4x9LtozSt2JfA2z4WtK8S9oHWAVr0ghOMbqoNbXVUPe7eAGPaXkfCO2+YLLh8MySqP6XE6swiW1C8vQMmvcIkfEsTKEzyHZX2LVFp1wsIOfjjb+RNzA== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: Some DAMON operation sets may need additional cleanup per target. For example, [f]vaddr need to put pids of each target. Each user and core logic is doing that redundantly. Add another DAMON ops callback that will be used for doing such cleanups in operations set layer. Signed-off-by: SeongJae Park --- include/linux/damon.h | 4 +++- mm/damon/core.c | 12 ++++++++---- mm/damon/sysfs.c | 4 ++-- mm/damon/tests/core-kunit.h | 4 ++-- mm/damon/tests/vaddr-kunit.h | 2 +- 5 files changed, 16 insertions(+), 10 deletions(-) diff --git a/include/linux/damon.h b/include/linux/damon.h index 2d51b575d660..52b307db63de 100644 --- a/include/linux/damon.h +++ b/include/linux/damon.h @@ -608,6 +608,7 @@ enum damon_ops_id { * filters (&struct damos_filter) that handled by itself. * @target_valid should check whether the target is still valid for the * monitoring. + * @cleanup_target is called before the target will be deallocated. * @cleanup is called from @kdamond just before its termination. */ struct damon_operations { @@ -623,6 +624,7 @@ struct damon_operations { struct damon_target *t, struct damon_region *r, struct damos *scheme, unsigned long *sz_filter_passed); bool (*target_valid)(struct damon_target *t); + void (*cleanup_target)(struct damon_target *t); void (*cleanup)(struct damon_ctx *context); }; @@ -933,7 +935,7 @@ struct damon_target *damon_new_target(void); void damon_add_target(struct damon_ctx *ctx, struct damon_target *t); bool damon_targets_empty(struct damon_ctx *ctx); void damon_free_target(struct damon_target *t); -void damon_destroy_target(struct damon_target *t); +void damon_destroy_target(struct damon_target *t, struct damon_ctx *ctx); unsigned int damon_nr_regions(struct damon_target *t); struct damon_ctx *damon_new_ctx(void); diff --git a/mm/damon/core.c b/mm/damon/core.c index eaa2306ff324..ce1087b5436f 100644 --- a/mm/damon/core.c +++ b/mm/damon/core.c @@ -502,8 +502,12 @@ void damon_free_target(struct damon_target *t) kfree(t); } -void damon_destroy_target(struct damon_target *t) +void damon_destroy_target(struct damon_target *t, struct damon_ctx *ctx) { + + if (ctx && ctx->ops.cleanup_target) + ctx->ops.cleanup_target(t); + damon_del_target(t); damon_free_target(t); } @@ -551,7 +555,7 @@ static void damon_destroy_targets(struct damon_ctx *ctx) struct damon_target *t, *next_t; damon_for_each_target_safe(t, next_t, ctx) - damon_destroy_target(t); + damon_destroy_target(t, ctx); } void damon_destroy_ctx(struct damon_ctx *ctx) @@ -1097,7 +1101,7 @@ static int damon_commit_targets( if (damon_target_has_pid(dst)) put_pid(dst_target->pid); - damon_destroy_target(dst_target); + damon_destroy_target(dst_target, dst); damon_for_each_scheme(s, dst) { if (s->quota.charge_target_from == dst_target) { s->quota.charge_target_from = NULL; @@ -1116,7 +1120,7 @@ static int damon_commit_targets( err = damon_commit_target(new_target, false, src_target, damon_target_has_pid(src)); if (err) { - damon_destroy_target(new_target); + damon_destroy_target(new_target, NULL); return err; } damon_add_target(dst, new_target); diff --git a/mm/damon/sysfs.c b/mm/damon/sysfs.c index c0193de6fb9a..f2f9f756f5a2 100644 --- a/mm/damon/sysfs.c +++ b/mm/damon/sysfs.c @@ -1303,7 +1303,7 @@ static void damon_sysfs_destroy_targets(struct damon_ctx *ctx) damon_for_each_target_safe(t, next, ctx) { if (has_pid) put_pid(t->pid); - damon_destroy_target(t); + damon_destroy_target(t, ctx); } } @@ -1389,7 +1389,7 @@ static void damon_sysfs_before_terminate(struct damon_ctx *ctx) damon_for_each_target_safe(t, next, ctx) { put_pid(t->pid); - damon_destroy_target(t); + damon_destroy_target(t, ctx); } } diff --git a/mm/damon/tests/core-kunit.h b/mm/damon/tests/core-kunit.h index 298c67557fae..dfedfff19940 100644 --- a/mm/damon/tests/core-kunit.h +++ b/mm/damon/tests/core-kunit.h @@ -58,7 +58,7 @@ static void damon_test_target(struct kunit *test) damon_add_target(c, t); KUNIT_EXPECT_EQ(test, 1u, nr_damon_targets(c)); - damon_destroy_target(t); + damon_destroy_target(t, c); KUNIT_EXPECT_EQ(test, 0u, nr_damon_targets(c)); damon_destroy_ctx(c); @@ -310,7 +310,7 @@ static void damon_test_set_regions(struct kunit *test) KUNIT_EXPECT_EQ(test, r->ar.start, expects[expect_idx++]); KUNIT_EXPECT_EQ(test, r->ar.end, expects[expect_idx++]); } - damon_destroy_target(t); + damon_destroy_target(t, NULL); } static void damon_test_nr_accesses_to_accesses_bp(struct kunit *test) diff --git a/mm/damon/tests/vaddr-kunit.h b/mm/damon/tests/vaddr-kunit.h index 7cd944266a92..d2b37ccf2cc0 100644 --- a/mm/damon/tests/vaddr-kunit.h +++ b/mm/damon/tests/vaddr-kunit.h @@ -149,7 +149,7 @@ static void damon_do_test_apply_three_regions(struct kunit *test, KUNIT_EXPECT_EQ(test, r->ar.end, expected[i * 2 + 1]); } - damon_destroy_target(t); + damon_destroy_target(t, NULL); } /* -- 2.39.5