From patchwork Wed Feb 26 06:36:42 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: SeongJae Park X-Patchwork-Id: 13991593 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 5E46AC021B8 for ; Wed, 26 Feb 2025 06:37:05 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 9194328000C; Wed, 26 Feb 2025 01:37:02 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 8A268280007; Wed, 26 Feb 2025 01:37:02 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 67E0C28000C; Wed, 26 Feb 2025 01:37:02 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0015.hostedemail.com [216.40.44.15]) by kanga.kvack.org (Postfix) with ESMTP id 45072280007 for ; Wed, 26 Feb 2025 01:37:02 -0500 (EST) Received: from smtpin07.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id EF7D7120ABA for ; Wed, 26 Feb 2025 06:37:01 +0000 (UTC) X-FDA: 83161138242.07.9648052 Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by imf24.hostedemail.com (Postfix) with ESMTP id 60E97180009 for ; Wed, 26 Feb 2025 06:37:00 +0000 (UTC) Authentication-Results: imf24.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=u1VUa9Tl; 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=1740551820; 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=y6pTGc3hHOvYGU2VpQ9/38MIvOLpauz36Q1otDmBvYY=; b=J3okBSEZBxUJFUF35O2EKLet9S6CZ5R56RRgwSM15X+fujrE32hNTgZBF7hLyOI/yj4iF1 0ZsX3QQCRhn5RVGWEEa0phS/CeBoR/74zO8sL7hBX8m5akbXcvy9pgPpjmsacPPaBXj0+R QlDY6bUn9UupxX7P27285kEGZzOxlNk= ARC-Authentication-Results: i=1; imf24.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=u1VUa9Tl; 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=1740551820; a=rsa-sha256; cv=none; b=INuuIATc42+df2xJMJ8QsUisKoTyI/eU+68LCDiqJNei1iIvNzY8+5UgGas68bwBisN2wG SZ7tLfs3+DMQBDUGlLqDk8GF+8t0F2gk+ORJZFoOdL6JI9IV+7uoOyCFK/6HBEYZypMznL KylLMpmIwa6TfWnmtcowvYeSFOUPGj8= Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by dfw.source.kernel.org (Postfix) with ESMTP id C0DBB5C5B3F; Wed, 26 Feb 2025 06:36:20 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 4FECBC4CEEA; Wed, 26 Feb 2025 06:36:59 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1740551819; bh=A9kUtW/vUg0eJWtZD6pmVLozHOg4c74YXKaYzr3PmRI=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=u1VUa9TlCpJ6kmtrlPET5GNYjsXSI2WrULZys0ykm4efcjqil6Y+mFt2nGwzo5eLJ ePQC78kT9F7g3yy7DGEm5r21ku2OpNLSV+S2mK1272WKYfBQ1gPZpBScgWneMkbcI+ Owd5vUURIHYkBFHqIdvDRGsIYYzJV1mIl9O18ksRlWIHEqAKwMRVx/KznMkjhNYaLE optqYDTULzCapSsFFGZmxXuzJblRowlcC51/Pgr6KI/ZjyB/y92QCkzcdFm0oSDRLA upDbHHpdf0v+5OHZRPE79eKaxcLeYRV6/xkJyvlpqfJDBECuo3MpOfXBk49BRU0Sy0 w3AwyPHF3QPFw== 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 04/13] mm/damon/sysfs: handle commit command using damon_call() Date: Tue, 25 Feb 2025 22:36:42 -0800 Message-Id: <20250226063651.513178-5-sj@kernel.org> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20250226063651.513178-1-sj@kernel.org> References: <20250226063651.513178-1-sj@kernel.org> MIME-Version: 1.0 X-Rspam-User: X-Rspamd-Queue-Id: 60E97180009 X-Stat-Signature: jizr1d5fnb8awegfrnnndk9sin4rck8p X-Rspamd-Server: rspam03 X-HE-Tag: 1740551820-558590 X-HE-Meta: U2FsdGVkX1/duKt0GakpWNhhVHXdkL/NpEwUGi8qDiyJ6zQidObrdqs3SjnsZJTbcECRxTobiCODlN3SpCrWvT/wiCv7aPRguAsKLiLYXO5BaqiugNlL+oiX3aElFgzMwhkJcQQuDZifvFFeSrczvdE3WF/FcgoFmhZdEHndWsM6rOGHUew9+2XSwP+5Mss3UevhrC20eA8kIiCQdSfZEh/Ss7NG1aqapnduRYB8LiXeoRMnNX3OmjYBZZH8X2IhtiKoiksY5ko2kYYb+Wa0GMVGNFLq424xz0W19KriiMySTk9mjVKiPvXC07lYsIGCLy3wslN1iuCeTcR3t4WqP6oby3RqMxFl/8dduBiHm2EwvcCM8+v/coHsDSO8S82tlvJt78ean2YJ1qqaZdPO3fEWIHkihulWkBNm7ISoIoz7LHM7agjWla3E+RIOWEvpdjiPDky228I7eeb5ciG26VYov1dJ84MOIGUhPfhBxdTIf8ez0/fBZxMJzKB9NAofDDJio8MBoi4+oB6j/1vTXDjXTXDzyZmqDoOW9z62j3zeYrWs4Z8SB5J5lVuP2QkQBLVHzJX33azx8Gi36WmevWBSCcqWG3QPYt06qLTE6zHx+GxLJWG/2IAyR7IZCJDRUbf64x8ohkhUKFtUOC0bJX/smF4XkWuYfAiMZObVD1+OlWiNJ8ogSJc7GK9YdMIz009ZtP2JoSxqDQM3shKDjK3ItNFwsEv5fBvfLUGABpjDT0E/mhIUlNxLZFJW0wsMc/Y/g045yZGp9NPkaO+0Y9R+3YjK7bZtCRn5Yb8pd3xap3ubRzGKuVA5RYfvVog78eUM8FQXjUATGfJtIqORvk8FHAk3Q7rsEKtL+zs76D3W3a0IbmZjgUcht70OGI3FPIq3wTExOT9k/tn7L0omzp4nN7PSwfFZTY8L/DN3GiCU79efaCPhOB7fp6DVCHiKezXQhtr6ONoDKdUheZa FEZJs+aP 8pBKuVlVZ5ldcmPNuh0bHDas94H1xIpr1dC36UIU8powzKavHYgOwcjctcWLvbfMIgZEhwXBbYuJlvvBr+vANWss8ZF7CPj0WFqzrYf/JEf31r9/QPg8a1x/Uf99X+bGyfJ2CQSYDwtyVItYCEQBEzsf3qlSCWX5cSeD3J1YpRFpztOTuE817jcrkKimLzsuAkTn5i2DjpiodywoWSmIFyHJNyqgk+aIdKtaw2WL5QfWQ+nzgW9aBpATKcC9qdABoy7oCXnei5ktEu1brv2k3vKaWUg== 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. Instead use damon_call(). 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 makes it easier to be maintained. 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,