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 293A7C83F10 for ; Sat, 12 Jul 2025 19:50:50 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 56D4E6B00C4; Sat, 12 Jul 2025 15:50:34 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 51D3E6B00CC; Sat, 12 Jul 2025 15:50:34 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 40C9E6B00CD; Sat, 12 Jul 2025 15:50:34 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0014.hostedemail.com [216.40.44.14]) by kanga.kvack.org (Postfix) with ESMTP id 2E6C56B00C4 for ; Sat, 12 Jul 2025 15:50:34 -0400 (EDT) Received: from smtpin23.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id AE75212B0E8 for ; Sat, 12 Jul 2025 19:50:33 +0000 (UTC) X-FDA: 83656654746.23.53E5BC5 Received: from sea.source.kernel.org (sea.source.kernel.org [172.234.252.31]) by imf06.hostedemail.com (Postfix) with ESMTP id E75F5180002 for ; Sat, 12 Jul 2025 19:50:31 +0000 (UTC) Authentication-Results: imf06.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=OtrVhYwe; dmarc=pass (policy=quarantine) header.from=kernel.org; spf=pass (imf06.hostedemail.com: domain of sj@kernel.org designates 172.234.252.31 as permitted sender) smtp.mailfrom=sj@kernel.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1752349832; 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=HVc+TqgVNigv6nlTcFD9jkIYpOBkv5xqLH2hQaNM+gE=; b=XjnvCACsyyBwGr8tPjLTXH0DyIcjMDq1AU3HN0O4h/uRlItByYZtkACxXkSWDuCURREAc9 pqr9j9NRod0cQqUP50ug0jduAfKKFWyDqiC4k7q/IJUHmf4EQiiHvIOSy7E8KdbAHfIlIR Z1tVYQlzgAnHv2frhsE+cEFBHOjD9SQ= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1752349832; a=rsa-sha256; cv=none; b=7GYGxKDdgUvrXXpkhvANIP3CMYdbY3CqsTYKNtt7cbyKM6zGU3xe/IMLCNn08+VN+voRPP 2NRGOtludIsB0Eamp3N609008vquv+QEnerzIelY/mD7s6FR1m3yuBGlLZQmiwMCGCvNYd HhHQ5h4Jc8ECPmuqjT2bj1xNlKN3Tcs= ARC-Authentication-Results: i=1; imf06.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=OtrVhYwe; dmarc=pass (policy=quarantine) header.from=kernel.org; spf=pass (imf06.hostedemail.com: domain of sj@kernel.org designates 172.234.252.31 as permitted sender) smtp.mailfrom=sj@kernel.org Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by sea.source.kernel.org (Postfix) with ESMTP id 0F15646C9D; Sat, 12 Jul 2025 19:50:31 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id B96C9C4CEEF; Sat, 12 Jul 2025 19:50:30 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1752349830; bh=fckFdBccHNMeF+WTVksjus+tZiKmAgrc4GdBEfhl2Po=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=OtrVhYweZizfT32E7ls+t1kchwrgFxHUjb9c1BbmL95Qfm01XXrbctAVIj/9mpm26 XkmAmqA0yHJ9mowqc6gc/ANfsas9iKQdViE+R/wDMws+3RzEVLgigA2LH426inpdYt HVyYCPpKmvRU1L/bbD3Uh7i5h6fgTZIk8Ihx2NbTd6BcciXIdEL4WwegqdbZV1uBNV 2Oo9qxoZitDEOt5ZU0u8z27lKspWUVUU0DXEhvumCUfAfURynO77TeMe7vt7+YY2YG 3D023D8dBh9nYvl5ieMIK+4jpYk4i7NCz3n+cqaVGxc7JowoxIc1UJ5KdyzgJ/c7B6 ew3ThgVFJl+4w== From: SeongJae Park To: Andrew Morton Cc: SeongJae Park , damon@lists.linux.dev, kernel-team@meta.com, linux-kernel@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH 09/14] mm/damon/core: add cleanup_target() ops callback Date: Sat, 12 Jul 2025 12:50:11 -0700 Message-Id: <20250712195016.151108-10-sj@kernel.org> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20250712195016.151108-1-sj@kernel.org> References: <20250712195016.151108-1-sj@kernel.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Stat-Signature: cq69im1nityh8cznnox4g78s754969r5 X-Rspamd-Queue-Id: E75F5180002 X-Rspamd-Server: rspam10 X-Rspam-User: X-HE-Tag: 1752349831-35622 X-HE-Meta: U2FsdGVkX1+a1Yro3lgklsi+j9CfPwhLA+NGpsmNSRxP4DxwDELqp1oPA20GWwaBgACgumeo0JRqg3BNBBo8ndIsQIsLlzwf/7GTy7HLeLdg6TpgeruLmWc2jI5oFVWX1WHInggi9x4Hklq6CJppff3zudQA3WlQ+NoGZISQnTAbH6GsWz4XSkZNO/CclopIsJ7e/SWXDA4sS7k4nHAfBZJUqo5x0t+4S38Q2puFQwhY4a8wkxxgsWchzRAaJj7bdSanc5VvQUw6vpbgIenTOp1EezqPo83YbBUY6tgCB1yf35YhLs10oHv2zJVTe54n4cHKEooA96GNy/W7kceVz2/nh16d/IgWMt1X5DlWwiDauQLElZME8yuBrPt5V+9asWfFj4aCFXMfmH03gDS6Cf3ITy91jS+JXzFvb7E06PjX+CXZ8YLdr9y11jHty8bx94fs0HEkyLV+uw3Zew2lBFFVsqFAXIow2sGqsaqG8YxGFBbFrr2dhvXr33V1McyIzQKCtsdIc3pcmjgBP5EE3ZpMrbdiXgg8Ag/i84TtPPjswHG8K+9M+/1wqVacZDD4kVgHWIqnTMRXga3IzGDhzffJy9AlhoFa+njHAfw5Sf9sWgIAFt0J93SaIfZS+mvztJDQkxRW0Jiyh3yaCn2SOiuVergX4TdQ1kqVcJLUvit+EYPjzJTg/CFpne/0YDkRLXOboRlNCxI7F/VsRQgamVw9iW6zGuj4z+D4Gg1ztGxUxbIANQkbSg/CzwW5jAOdcXmwIrJMI3MCwVu1e1y3TKUPNEhQsu/W+wmlas2vPzPBwjZ1Y07pv2qGYhsEI38kQxKhnK3NWrT7iHu/txpv0rqXgH+Zi5m+dcWxPbTzqKGuF7c69cEfpREg61QuqLyKDoI/nqS0v7FmSo3Pp80P7ZKfrT2/UMwsdyFs2e6NxgeWL67qcca52dXzMW+FXR39WeBYAgP8DH6oRRGZNC9 TWCS04s9 W0/DRonV9MPHH9mdp2Z/1PXSK1+4VxML7h9RtK2bXJGJ5utFEvclLzXz/W0OE64fBkoIYNJg5ru618LH0V6oO0juo/NSxooXst7QjR+TbEK8d/zbew2TUKO5qNc3kI1CU/g+1RE1mugswFXNERpTRf9qh4O942pPjnAFHWPCROajG20iBDrN3EigxQJzwcFy6svIZIAL6XZ3tZt3wOY0N16C2Pib8ORT3JkGAF2MmAG6VHo0DPR7/J4TAr7QfID8OVuIUYzcqwkOIY3BEBLRw/DMkq9yqpOLcEqSGQUJmXDBiMczihhg5NXEwWxZJ9yV6KAvV 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 b83987275ff9..27305d39f600 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 b82a838b5a0e..678c9b4e038c 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) @@ -1137,7 +1141,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; @@ -1156,7 +1160,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