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 5AB2EC83F09 for ; Sun, 6 Jul 2025 21:45:26 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 69E718D0003; Sun, 6 Jul 2025 17:45:25 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 64FE88D0002; Sun, 6 Jul 2025 17:45:25 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 565718D0003; Sun, 6 Jul 2025 17:45:25 -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 3ED888D0002 for ; Sun, 6 Jul 2025 17:45:25 -0400 (EDT) Received: from smtpin22.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay08.hostedemail.com (Postfix) with ESMTP id 9DD1B14025E for ; Sun, 6 Jul 2025 21:45:24 +0000 (UTC) X-FDA: 83635171368.22.3448ADE Received: from sea.source.kernel.org (sea.source.kernel.org [172.234.252.31]) by imf16.hostedemail.com (Postfix) with ESMTP id D5E5E180004 for ; Sun, 6 Jul 2025 21:45:22 +0000 (UTC) Authentication-Results: imf16.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=Ibt9kFji; spf=pass (imf16.hostedemail.com: domain of sj@kernel.org designates 172.234.252.31 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=1751838323; 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=5GaBtJB5C61tfmjK6BIbEXoBx97lIxIWKLwb3TzGi3Y=; b=axNDK974cBCWA0C7b76tjYSd2dvqcBXKdngxxXUgIVN0MsJMHsJbcrtSNZiluD8xgA60Zi PEwsmK4njeU29ZCLegovMXvOcnS91prfQHSedcXtWMp9CNcMMFN80/mkiPviz6eHJAI2ND jMMSfNK2Hvf5TP2G2zxh+441N2zBZmg= ARC-Authentication-Results: i=1; imf16.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=Ibt9kFji; spf=pass (imf16.hostedemail.com: domain of sj@kernel.org designates 172.234.252.31 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=1751838323; a=rsa-sha256; cv=none; b=zI+Ud7q1W0UgTmxOVCL9efFZeo9Twchnz4kKZ4LI7MDpvGwrafOAkAo7k3LSzvUdciVeLE ylP4lCppExeW9FfTDTf4rk0Tkl7KRH8GdG67XPaPUCtJ1Tw0nCTTwXzlm82BIAGozQcMmR DKVBxtiDD64AU7tjvIQYX3U7J+iIMn8= Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by sea.source.kernel.org (Postfix) with ESMTP id 7F8C443CF3; Sun, 6 Jul 2025 21:45:21 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 43717C4CEED; Sun, 6 Jul 2025 21:45:21 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1751838321; bh=fuwfaSr+3I1Fal35XypZa6Kem5PO110174ZtTHvNU5Q=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Ibt9kFjigAs2QRJmsNS9Gxti+O2/aPAbTYv/uI+13WlXaXVUo9uW6IxQGfGl5bZge GXKF0E7wY+JQz2YqD05ZDEOJM3oB2U1uQM1IW3j96rtx6SQ63Rfhibwvgt4EFgUuhl kxRLDiMZFlo6o2SHAckx0WQsUfScSkE2LfUn0lXwUJgvORv6p+K6WNxt5L6H496Mgf uVg2FByZa4eIDAjkSm+u1LSTmZPdMCqHqCYn2r64GIjauIzRAgkRz1ur7NlnsrnK1R mNIQ6vVIPIpYQj9+zLK1iOBD/kE7gXldfj1fUpoGUkr1JyPfCTT63DKer/538BP8QG Y3ysO+eOcLZdg== From: SeongJae Park To: SeongJae Park Cc: Andrew Morton , damon@lists.linux.dev, kernel-team@meta.com, linux-kernel@vger.kernel.org, linux-mm@kvack.org Subject: Re: [RFC PATCH 02/14] mm/damon/core: introduce repeat mode damon_call() Date: Sun, 6 Jul 2025 14:45:18 -0700 Message-Id: <20250706214518.56529-1-sj@kernel.org> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20250706200018.42704-3-sj@kernel.org> References: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Rspamd-Server: rspam10 X-Rspamd-Queue-Id: D5E5E180004 X-Rspam-User: X-Stat-Signature: tt3gpm99oy9mmb9axh6btdcccw1dnwhs X-HE-Tag: 1751838322-369857 X-HE-Meta: U2FsdGVkX1/HuQH5hWKnysdOvqmhaBaQasF2bTjJSH5lOG3bph3xLbOUeMkhk+CUFyBexmr0OHxGZxH1yKQrK5nXjyoGs89h1yuGr5lFinpdkt5YSv504buAuH8g14TDJMvwUF4JeBienmnCla99CJzbsFQf7tvV1FYdf2jcf/h9tm8m6UkJLJq2PIcQzSnTDWNs7XfMwBKNILgS+4nOUE3hR3u4DVZ3I8vkERGoyC3WixUBGL5l/NH2l1FlfKg//Z15JLpMVu1GPQ3wLEL86guOtTcoOldagRkaJoc8nQqkLKC8GvBbLXCcW+iz7WuG5SSFdgZZz9geTYnotXj1iRAVii1XDk5+SBUGJirbx71XA3WbbNV9BTUNgkbr4zokl0MROOheDEjwhvxMRKLbk6t3aiak/jeXldU2Wb8TnaH70LmBp9AU5accjtSReIyXVSZG/NbDdzMau62TQ17F6FbtnL0WTh702izKOTFn4wEWLEIV96YXSRN9RsnkNKhvMLMdrYRts3bb4hW5+ueoG9libnpLcEHR6VL9N7hTKejib1MtT0TUzLHr4JTAB4F4PZ0VxH5U6L2uBFTM8GOkCkQgvBzzdxj/EDQf8rCa0eVrc876hqQF95MFQzKeP5SdTxbF3WVnyygJVjq2cdUv1B30PI+Gmp854vejYtJs4gKwNZHytdEMfdneYBHjKEXNMwumPZj/5pfMwQmyD5L9Lu1IKhAS37t23j0xrpxfsU32L7eDwbtFIkt/pi5KO4xmmDOU0olQFGKO3Iqj5Y456WIHsRhqHXnf0J/kyED+1d9l3H+h66KYUjMse+mPnuty+4S+Maf6/v777s+rP82pqUx7ygBQ/bO1oDmVIkFAf+WZ2g9ql3UedP3u1XqRQrkzQ13K5X2FV1yfxsxeMkFAgwqkYJqbQpcztMJlVhoDE8RJyrF6U764hub2gSFMJvilEwCYkANCpaGSifqRjGZ KqLwNvu7 9nBw0fYre6+flN5BMjoVXa4g4NnT+d24Y5d+mlB6ojsxjtJPndYnZqle3sf8zLfreBWxhNysRIlz8hEi+mds/Mx5Rpmx9Yr1pwMt9j+pXZwKYptMeq90ZZdjoYvvGCOVwXMGz24wKNqK6Jz1TA8uwMd8qqKSL3lYCrW/4aM+1tOykqAqTUye7ugEiMGQxFaCyF9pRSDm70CQ/sE3ruy8VD0+AsZT00raamKPhq0OmojZs1N/pjqXmm+PGQsvxVB3zJOT8Wok/r4UmHpTrCfl9gpWa4PXU4wYQ1TLLWKyVqjlpiOsCfjiaJ9O4Sg== 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: On Sun, 6 Jul 2025 13:00:06 -0700 SeongJae Park wrote: > damon_call() can be useful for reading or writing DAMON internal data > for one time. A common pattern of DAMON core usage from DAMON modules > is doing such reads and writes repeatedly, for example, to periodically > update the DAMOS stats. To do that with damon_call(), callers should > call damon_call() repeatedly, with their own delay loop. Each caller > doing that is repetitive. Introduce a repeat mode damon_call(). > Callers can use the mode by setting a new field in damon_call_control. > If the mode is turned on, damon_call() returns success immediately, and > DAMON repeats invoking the callback function inside the kdamond main > loop. > > Signed-off-by: SeongJae Park > --- [...] > @@ -2389,6 +2393,7 @@ static void kdamond_usleep(unsigned long usecs) > static void kdamond_call(struct damon_ctx *ctx, bool cancel) > { > struct damon_call_control *control; > + LIST_HEAD(repeat_controls); > int ret = 0; > > while (true) { > @@ -2407,8 +2412,18 @@ static void kdamond_call(struct damon_ctx *ctx, bool cancel) > mutex_lock(&ctx->call_controls_lock); > list_del(&control->list); > mutex_unlock(&ctx->call_controls_lock); > - complete(&control->completion); > + if (!control->repeat) > + complete(&control->completion); > + else > + 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); > } Below fixup should be added on this. Without it, the repeat_controls handling is never executed, so callback will be invoked only once. diff --git a/mm/damon/core.c b/mm/damon/core.c index 7a4dc76dd023..3c0c3cef43e7 100644 --- a/mm/damon/core.c +++ b/mm/damon/core.c @@ -2402,7 +2402,7 @@ static void kdamond_call(struct damon_ctx *ctx, bool cancel) struct damon_call_control, list); mutex_unlock(&ctx->call_controls_lock); if (!control) - return; + break; if (cancel) { control->canceled = true; } else { I'll add this on next version of this series. Thanks, SJ [...]