From patchwork Thu Mar 6 17:58:59 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: SeongJae Park X-Patchwork-Id: 14005062 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 B12B9C282D1 for ; Thu, 6 Mar 2025 17:59:25 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 229AA280006; Thu, 6 Mar 2025 12:59:20 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 1DD62280003; Thu, 6 Mar 2025 12:59:20 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 02F24280006; Thu, 6 Mar 2025 12:59:19 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id C635E280003 for ; Thu, 6 Mar 2025 12:59:19 -0500 (EST) Received: from smtpin22.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id CD36E12223A for ; Thu, 6 Mar 2025 17:59:19 +0000 (UTC) X-FDA: 83191888038.22.9D3FE81 Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by imf24.hostedemail.com (Postfix) with ESMTP id 31933180008 for ; Thu, 6 Mar 2025 17:59:17 +0000 (UTC) Authentication-Results: imf24.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=bmBJepJD; spf=pass (imf24.hostedemail.com: domain of sj@kernel.org designates 139.178.84.217 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=1741283958; 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=DVMdBAEeXdwKKDh6TnSK6RDDxoxO/l1K0SEnJYSadMY=; b=78sRL9WGJgBNyDGO4g1omqO0iZ6jSLPytSi2RfRpW29r4+jrC6KE8Beu04Hz/KPqYCpz0O vJ5gWpMvVlrhH+ozgTflFpvxUk5ythGRnncj0mEMkWB+y5d5iJZHlXfAzXVRcjd22xv2D9 V/PEtPX/pctI7JAJJld02qJoc4mBFCM= ARC-Authentication-Results: i=1; imf24.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=bmBJepJD; spf=pass (imf24.hostedemail.com: domain of sj@kernel.org designates 139.178.84.217 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=1741283958; a=rsa-sha256; cv=none; b=Erw3ohC7hUYcHcJf5TkoewrYLrKRFzktuiTSMtpaeM1ceK3AJ5VAqz+zkM2Ia/+VUi/oGE C13e8mC0yhoqjvJlKSIMH1eqRWh1sPxMrRNcHQjbVLOSR/PzAPUquGXYXtv9YwfcV2g5Yx aB4SnxI3IGmwph2NDDLkNVxIDIv4scw= Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by dfw.source.kernel.org (Postfix) with ESMTP id 914365C599E; Thu, 6 Mar 2025 17:57:00 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id E1CFEC4CEE9; Thu, 6 Mar 2025 17:59:16 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1741283957; bh=kjRBOvHWNbdf/mQwA1XYqEBxVUEwRjN/LUXLXxN91ho=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=bmBJepJD665aLJmGQxhQbg3r5uCZI03NRdxNpdG+KwHddc86qPBdSRAQMFQ3yfnD5 09FCigyvExD6n59jKLLfJQFgVHXaekyCo6Xxgu9m01Lfm5jpm3mqHwHQ40bZxrmGpN 1Aef85s16/6RGAPVPLckJ8/8Il0wJShRPayR0ziXlJNWe2oEzYM8a/1Soix28O8znn iLRgp53OMwhf35xMdsEndfPegP/HRBVMiQorpbOYyCukclBrIiy27d2Wt9h2HWurOI UpoGbqg6MBK9TFXQhiYZVs2s0oRLfTryt6K3wb0VRCAkrg9w1THC6kFWRNiYevY7KX eNxld9XLVJ0Zg== 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 04/13] mm/damon/sysfs: handle commit command using damon_call() Date: Thu, 6 Mar 2025 09:58:59 -0800 Message-Id: <20250306175908.66300-5-sj@kernel.org> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20250306175908.66300-1-sj@kernel.org> References: <20250306175908.66300-1-sj@kernel.org> MIME-Version: 1.0 X-Stat-Signature: 6j49fz3a9utrh1zp7b89bnzynwiz87oa X-Rspamd-Server: rspam11 X-Rspamd-Queue-Id: 31933180008 X-Rspam-User: X-HE-Tag: 1741283957-883981 X-HE-Meta: U2FsdGVkX1+6gA9o1E1ZE4J6quV78WtI36QMnMANJ1Qrl2OwJyxuLxQr7qb7O29oQEeFa+KokkURs/4EPxU4XtrN71EUdLBJsDF53i8dH6UucxsUJMSGrXg7WS3hLHRe6JX1rL4U1y7oPbDuEsnq6SE9EOQ/+KGzGXZELqeeOM+UHxfk8ZecMGM+IwcTPNCLGJgsyOpD8x4qmlr/b7Mi7CqJp18dkgHSx7pgK4ctkt0WdYK8qIKhhBu0KkGlooE1Oye40y8itQ4Vpp31BEAYtF5Gxu9psK5UOSfyhAhEdhb1IVKO0MsJYvreg2gynk3w+0PJ1smIZOrfFRN/0UexVBe2/G7IL/5cqUVZlaGTyl3WmIb0sVFGPkKSmuzIQiDTPrvq+EwQb/uyH7NZEFzXEbnjqx+pK+iEnVMDpKQRbxfylp8kYp2uWBu035irjFaQKtrnOO4/p5d8fEKTzcnG0saTjz2dBqUwDZ4At4S95au6GjmlIMJYN2SiWzEcSwkpJWoOZfJlJiEnsu6lRuj5WqF/tsdXjEFTSMFRoMmov/XHfGlXk+sbryz76z9HDL+sVA4RolDpdXnYXpLigSrtgJKAMsITsJ7OkAtMAqNnV6SPkUsZMASD61HpXT4fGNF7zc9eE6Yhh34wb5rfhIesZUtmkFO0m64JvcY6GcqSbXjCyr2UzexHcteuBjGp/srKlbmSfePUULFiQO3t0HMlKrrdv6PCHN3UOVpD/mXdeVHrKjYB/cAMDjhdLkWr/XzPGrbgzCVvIG+SBSdbAKqA51H8u7SwEIHWGb5r2VDGPExSrgEl5FisV+uQIjPGomqkgJYvLojh3CybHlv9HhnyA99guwNEFaO+uWZxX9AhUAIysfp2j6lBelHCwY1NGFivlL4q50ruB9NmhB9dUp76XGMkaRYC374v3viDkzcq+qp9402xvpPMSQdX6gwtfgEBKAZpkmpcP4BelNCslkj 4YPUTTzN V2k/69M274J1qNe8rLJ8RlL+ISqmgYZB5Ao9K4bfdx/C8i1KEnczOUs98DEXpTVnUF7TcGQqb0W2iaXpgfQULwp33xdjFN8g1vMavOcnGrxEQRln9X2LdN5H5ej0f/Hxg8xucWI/25YMKQzcIP7KxhWSl0cx3+Mca/i9RhWUHUKF5E/wS+hXH7Q5S1/p/gc6yeNJxV4mih0NYhlFEPxS3Jnc4p7UYI3lZ2Y9/gUlARBk3sLBLEV7zclmigYd5suBdWZ+4dn5kDDpSvNXpxaFH4LaeSw== 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: DAMON sysfs interface is using damon_callback->after_aggregation hook with its self-implemented synchronization mechanism for the hook. It is inefficient, complicated, and take up to one aggregation interval to complete, which can be long on some configs. Use damon_call() instead. It provides a synchronization mechanism that built inside DAMON's core layer, so more efficient than DAMON sysfs interface's own one. Also it isolates the implementation inside the core layer, and hence it makes the code easier to maintain. Finally, it takes up to one sampling interval, which is much shorter than the aggregation interval in common setups. Signed-off-by: SeongJae Park --- mm/damon/sysfs.c | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/mm/damon/sysfs.c b/mm/damon/sysfs.c index 87e4c6e3614e..c55a2cee4b74 100644 --- a/mm/damon/sysfs.c +++ b/mm/damon/sysfs.c @@ -1451,8 +1451,9 @@ static struct damon_ctx *damon_sysfs_build_ctx( * * Returns error if the sysfs input is wrong. */ -static int damon_sysfs_commit_input(struct damon_sysfs_kdamond *kdamond) +static int damon_sysfs_commit_input(void *data) { + struct damon_sysfs_kdamond *kdamond = data; struct damon_ctx *param_ctx, *test_ctx; int err; @@ -1550,11 +1551,6 @@ static int damon_sysfs_cmd_request_callback(struct damon_ctx *c, bool active, if (!kdamond || kdamond->damon_ctx != c) goto out; switch (damon_sysfs_cmd_request.cmd) { - case DAMON_SYSFS_CMD_COMMIT: - if (!after_aggregation) - goto out; - err = damon_sysfs_commit_input(kdamond); - break; default: break; } @@ -1712,11 +1708,7 @@ static int damon_sysfs_update_schemes_tried_regions( * @cmd: The command to handle. * @kdamond: The kobject wrapper for the associated kdamond. * - * This function handles a DAMON sysfs command for a kdamond. For commands - * that need to access running DAMON context-internal data, it requests - * handling of the command to the DAMON callback - * (@damon_sysfs_cmd_request_callback()) and wait until it is properly handled, - * or the context is completed. + * This function handles a DAMON sysfs command for a kdamond. * * Return: 0 on success, negative error code otherwise. */ @@ -1730,6 +1722,9 @@ static int damon_sysfs_handle_cmd(enum damon_sysfs_cmd cmd, return damon_sysfs_turn_damon_on(kdamond); case DAMON_SYSFS_CMD_OFF: return damon_sysfs_turn_damon_off(kdamond); + case DAMON_SYSFS_CMD_COMMIT: + return damon_sysfs_damon_call( + damon_sysfs_commit_input, kdamond); case DAMON_SYSFS_CMD_COMMIT_SCHEMES_QUOTA_GOALS: return damon_sysfs_damon_call( damon_sysfs_commit_schemes_quota_goals,