From nobody Thu Oct 9 00:37:49 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6F44B21B9F6; Sun, 22 Jun 2025 21:38:04 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750628284; cv=none; b=Rd0BIlvLTAmbjNs8xDutGY5sYO7+V929O0mwEYYDMbWH7n2Zk+U9w/3qVKShpbJ7jGWalH6Vm3Psb89770EyC3LXBb9giNVNEEgZmB8vwPWqwuySLaUhTI+osz52K8QvJ8n/+8opPZntRDntObVUDWTd8DFLPW59u79lxJjrmMU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750628284; c=relaxed/simple; bh=2SWkXiGlsBU3I4JCOOhREoA9TlYEWmDdkhbiiUqC9nQ=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=LjYhrbDpbuMwQzie+Qeej3e79jFl+9FcWw1OT/lK5LSAUW0En6H16wGuleursNPhvY714usOxep7MhP9BXipGJ3+wcfdfS4CfdBMf7eCQwKyrkjtN1u+PLF5cp1TVyGcwt387d2VTT/KrU4w9uU/j0WLjWu89xU4HcOmBczpXAQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=RsZUw/9b; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="RsZUw/9b" Received: by smtp.kernel.org (Postfix) with ESMTPSA id B5599C4CEE3; Sun, 22 Jun 2025 21:38:03 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1750628283; bh=2SWkXiGlsBU3I4JCOOhREoA9TlYEWmDdkhbiiUqC9nQ=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=RsZUw/9bBTCVa2s3TVispyvjrN+m4SvDz1lbWHqX3NzU23mT4TTCgBq0XRrU49nCa iRcmujoy9e8MDup4bavcUXMzJJ2m34elfk/E2d+07u+tqTvs+2ZHdKRBgTJfl2RpNn IN88njUNn9hul1QkjkrZsVeCHOAANpM55q1OirWIbaD4qdMZenO452gdUeaInKbHEM CWOj84wh8s1ExDb0GDZbRmtrpeuyyCa//i09XZatWuhxPngoo5/M3ZvLZ/V9+tthwX L9cZALwqgsJEOvjDlYIKBJZ/y7WsDllfNle6ONUoOzprtQF3KOU3Zya56fqVUCyvJm 7TrP0vj//bDHQ== 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 1/5] mm/damon/sysfs-schemes: decouple from damos_quota_goal_metric Date: Sun, 22 Jun 2025 14:37:55 -0700 Message-Id: <20250622213759.50930-2-sj@kernel.org> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20250622213759.50930-1-sj@kernel.org> References: <20250622213759.50930-1-sj@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Decouple DAMOS sysfs interface from damos_quota_goal_metric. For this, define and use new sysfs-schemes internal data structure that maps the user-space keywords and damos_quota_goal_metric, instead of having the implicit and unflexible array index rule. Signed-off-by: SeongJae Park --- mm/damon/sysfs-schemes.c | 55 ++++++++++++++++++++++++++++++---------- 1 file changed, 41 insertions(+), 14 deletions(-) diff --git a/mm/damon/sysfs-schemes.c b/mm/damon/sysfs-schemes.c index 30ae7518ffbf..3747dc6678f2 100644 --- a/mm/damon/sysfs-schemes.c +++ b/mm/damon/sysfs-schemes.c @@ -941,27 +941,51 @@ struct damos_sysfs_quota_goal { int nid; }; =20 -/* This should match with enum damos_quota_goal_metric */ -static const char * const damos_sysfs_quota_goal_metric_strs[] =3D { - "user_input", - "some_mem_psi_us", - "node_mem_used_bp", - "node_mem_free_bp", -}; - static struct damos_sysfs_quota_goal *damos_sysfs_quota_goal_alloc(void) { return kzalloc(sizeof(struct damos_sysfs_quota_goal), GFP_KERNEL); } =20 +struct damos_sysfs_qgoal_metric_name { + enum damos_quota_goal_metric metric; + char *name; +}; + +static +struct damos_sysfs_qgoal_metric_name damos_sysfs_qgoal_metric_names[] =3D { + { + .metric =3D DAMOS_QUOTA_USER_INPUT, + .name =3D "user_input", + }, + { + .metric =3D DAMOS_QUOTA_SOME_MEM_PSI_US, + .name =3D "some_mem_psi_us", + }, + { + .metric =3D DAMOS_QUOTA_NODE_MEM_USED_BP, + .name =3D "node_mem_used_bp", + }, + { + .metric =3D DAMOS_QUOTA_NODE_MEM_FREE_BP, + .name =3D "node_mem_free_bp", + }, +}; + static ssize_t target_metric_show(struct kobject *kobj, struct kobj_attribute *attr, char *buf) { struct damos_sysfs_quota_goal *goal =3D container_of(kobj, struct damos_sysfs_quota_goal, kobj); + int i; =20 - return sysfs_emit(buf, "%s\n", - damos_sysfs_quota_goal_metric_strs[goal->metric]); + for (i =3D 0; i < ARRAY_SIZE(damos_sysfs_qgoal_metric_names); i++) { + struct damos_sysfs_qgoal_metric_name *metric_name; + + metric_name =3D &damos_sysfs_qgoal_metric_names[i]; + if (metric_name->metric =3D=3D goal->metric) + return sysfs_emit(buf, "%s\n", metric_name->name); + } + return -EINVAL; } =20 static ssize_t target_metric_store(struct kobject *kobj, @@ -969,11 +993,14 @@ static ssize_t target_metric_store(struct kobject *ko= bj, { struct damos_sysfs_quota_goal *goal =3D container_of(kobj, struct damos_sysfs_quota_goal, kobj); - enum damos_quota_goal_metric m; + int i; + + for (i =3D 0; i < ARRAY_SIZE(damos_sysfs_qgoal_metric_names); i++) { + struct damos_sysfs_qgoal_metric_name *metric_name; =20 - for (m =3D 0; m < NR_DAMOS_QUOTA_GOAL_METRICS; m++) { - if (sysfs_streq(buf, damos_sysfs_quota_goal_metric_strs[m])) { - goal->metric =3D m; + metric_name =3D &damos_sysfs_qgoal_metric_names[i]; + if (sysfs_streq(buf, metric_name->name)) { + goal->metric =3D metric_name->metric; return count; } } --=20 2.39.5 From nobody Thu Oct 9 00:37:49 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 760AB21FF3F; Sun, 22 Jun 2025 21:38:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750628285; cv=none; b=BGA14fLLXWY4ynOIznUfg9H7tIjIzCGqDMg5LmxzBzOT0zpHrcq0A7+Vb5shPEjc3dbfEWoUOnJcvXJepTBQ85bDxtu6G2/41K2csqXhpsfvhAJpGdF/uBrMoPMORyuFYxZaqHIg1Fy+SRTp9oGFmEidMlNwDIyaMsP+OP6qMz8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750628285; c=relaxed/simple; bh=ZYMeQoFGvpOlMGZ1tBRgXborsAE0j4pUGN4+GxrhYyM=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=YjO7q8dYaSYWQpqgHqz7szeZFiMVgeEA5s5T3TuuFeFSldCvZi1iR6E8Z7B2ypql6RA8ncg/JNyjWfOlitQ5zOdW6hRYkmr77TSAbrkCqmcnHQe6ar4Eoqgk9P1S5ZmmLLy/5iKb2e9aPPH+9l8mkZp2wXYO6EYQBG7CPBIRFhw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=ZYqdLGVl; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="ZYqdLGVl" Received: by smtp.kernel.org (Postfix) with ESMTPSA id DA9CFC4CEF4; Sun, 22 Jun 2025 21:38:04 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1750628285; bh=ZYMeQoFGvpOlMGZ1tBRgXborsAE0j4pUGN4+GxrhYyM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=ZYqdLGVlfMzv+B71dgzFSSPHYLxj43eQH9utuqOr+oyeAtto9M/NfXY2lI/CklOfV sxxSi9tnnneoddVbjNyHjLEufRKdbH6q/1UwkZZL8EiKElymgAo58Luw8pIaL4V9mb Y7b8TpjcR+W2idnz7djRLZT+c7uWaSS4X0LEF7NlTwgw0/FGL2+6kE6cVgUydjqCCs CJiTSwH8ZEF/l0aDOju2dfYubOx5MHlJkvFWBDikAQPi5CcGphD0vBnvNkw29wkM6F ikn0e3RwvIe/J2B0Izy6qJoGmaPi/sQXLxqby0NnMY7oq8qiT5xvY2gd7x9xxD1kwn +cWY1Wsqc4rkQ== 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 2/5] mm/damon/sysfs-schemes: decouple from damos_action Date: Sun, 22 Jun 2025 14:37:56 -0700 Message-Id: <20250622213759.50930-3-sj@kernel.org> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20250622213759.50930-1-sj@kernel.org> References: <20250622213759.50930-1-sj@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Decouple DAMOS sysfs interface from damos_action. For this, define and use new sysfs-schemes internal data structure that maps the user-space keywords and damos_action, instead of having the implicit and unflexible array index rule. Signed-off-by: SeongJae Park --- mm/damon/sysfs-schemes.c | 80 +++++++++++++++++++++++++++++++--------- 1 file changed, 62 insertions(+), 18 deletions(-) diff --git a/mm/damon/sysfs-schemes.c b/mm/damon/sysfs-schemes.c index 3747dc6678f2..117d27544173 100644 --- a/mm/damon/sysfs-schemes.c +++ b/mm/damon/sysfs-schemes.c @@ -1614,18 +1614,52 @@ struct damon_sysfs_scheme { int target_nid; }; =20 -/* This should match with enum damos_action */ -static const char * const damon_sysfs_damos_action_strs[] =3D { - "willneed", - "cold", - "pageout", - "hugepage", - "nohugepage", - "lru_prio", - "lru_deprio", - "migrate_hot", - "migrate_cold", - "stat", +struct damos_sysfs_action_name { + enum damos_action action; + char *name; +}; + +struct damos_sysfs_action_name damos_sysfs_action_names[] =3D { + { + .action =3D DAMOS_WILLNEED, + .name =3D "willneed", + }, + { + .action =3D DAMOS_COLD, + .name =3D "cold", + }, + { + .action =3D DAMOS_PAGEOUT, + .name =3D "pageout", + }, + { + .action =3D DAMOS_HUGEPAGE, + .name =3D "hugepage", + }, + { + .action =3D DAMOS_NOHUGEPAGE, + .name =3D "nohugepage", + }, + { + .action =3D DAMOS_LRU_PRIO, + .name =3D "lru_prio", + }, + { + .action =3D DAMOS_LRU_DEPRIO, + .name =3D "lru_deprio", + }, + { + .action =3D DAMOS_MIGRATE_HOT, + .name =3D "migrate_hot", + }, + { + .action =3D DAMOS_MIGRATE_COLD, + .name =3D "migrate_cold", + }, + { + .action =3D DAMOS_STAT, + .name =3D "stat", + }, }; =20 static struct damon_sysfs_scheme *damon_sysfs_scheme_alloc( @@ -1862,9 +1896,16 @@ static ssize_t action_show(struct kobject *kobj, str= uct kobj_attribute *attr, { struct damon_sysfs_scheme *scheme =3D container_of(kobj, struct damon_sysfs_scheme, kobj); + int i; =20 - return sysfs_emit(buf, "%s\n", - damon_sysfs_damos_action_strs[scheme->action]); + for (i =3D 0; i < ARRAY_SIZE(damos_sysfs_action_names); i++) { + struct damos_sysfs_action_name *action_name; + + action_name =3D &damos_sysfs_action_names[i]; + if (action_name->action =3D=3D scheme->action) + return sysfs_emit(buf, "%s\n", action_name->name); + } + return -EINVAL; } =20 static ssize_t action_store(struct kobject *kobj, struct kobj_attribute *a= ttr, @@ -1872,11 +1913,14 @@ static ssize_t action_store(struct kobject *kobj, s= truct kobj_attribute *attr, { struct damon_sysfs_scheme *scheme =3D container_of(kobj, struct damon_sysfs_scheme, kobj); - enum damos_action action; + int i; + + for (i =3D 0; i < ARRAY_SIZE(damos_sysfs_action_names); i++) { + struct damos_sysfs_action_name *action_name; =20 - for (action =3D 0; action < NR_DAMOS_ACTIONS; action++) { - if (sysfs_streq(buf, damon_sysfs_damos_action_strs[action])) { - scheme->action =3D action; + action_name =3D &damos_sysfs_action_names[i]; + if (sysfs_streq(buf, action_name->name)) { + scheme->action =3D action_name->action; return count; } } --=20 2.39.5 From nobody Thu Oct 9 00:37:49 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5A747221578; Sun, 22 Jun 2025 21:38:06 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750628286; cv=none; b=lwHzCMMa97egBZU6A8mibruqyArFFFrQ3qGvnBPpBxc1fvJqcEl5PPrwBeGK6KpWk5psRUBxblhyXSuZPGh2BqmuAd2cUhdXYN5mfmLBgAqk3lXixUCSlGU6Amev7E4IFg6pTKzHgVE0TmWVvjlDInZKk2WEMQ20cIM7jexIdsg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750628286; c=relaxed/simple; bh=9OzPivFmaJWkkCm6QPhirCH8VNjpNc3g3HIvaejTiTY=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=hZ2/Li15wfOSZCkx6VGw3DJvU5wYoHupZEdfxcdTtj5DhKMw/PJZM5HpN7TU9KNbV22Z9eklUS8s8x5uJO/MhYKqXcy4CTrz/EFrvug1YAmgTgh3wgIqmFQJaHUXfCLYW0kWcyNSYk3knavsNcyNwJ31wZT4F0P65L4m826mU0I= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=sjQLvGNb; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="sjQLvGNb" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 008C7C4CEF6; Sun, 22 Jun 2025 21:38:05 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1750628286; bh=9OzPivFmaJWkkCm6QPhirCH8VNjpNc3g3HIvaejTiTY=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=sjQLvGNbe332yCCNHs8+KaS/WCmJkhE+IWTVPYvqRTGB2bji6mGZvrbdaYjcXMxg3 5sqDgiUba/usNxk+EiVMik9AfWP1B72k9NGXEha76+YsOAmUwCDot79XMKoqzzM1jz vgiMM3g13W7ZczlDZrfSdReJKOXq78RBxgHJKUuK9/fZbJ3Nqh1rPx4ELhS5rv+1UY ZbpeZbKPuuA582CZr/eppnlT0YD2VEm8+MFBETMhP+QyktJaJjmVmehCp0UgS5l6rP sNPKMjTR4YNShSgP9YZkOMN5CA/xV0o38bFX0jvHZLV8F77bwh+BGOetbtn4lqKxH4 XyHGxwZCnjI9w== 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 3/5] mm/damon/sysfs-schemes: decouple from damos_wmark_metric Date: Sun, 22 Jun 2025 14:37:57 -0700 Message-Id: <20250622213759.50930-4-sj@kernel.org> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20250622213759.50930-1-sj@kernel.org> References: <20250622213759.50930-1-sj@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Decouple DAMOS sysfs interface from damos_wmark_metric. For this, define and use new sysfs-schemes internal data structure that maps the user-space keywords and damos_wmark_metric, instead of having the implicit and unflexible array index rule. Signed-off-by: SeongJae Park --- mm/damon/sysfs-schemes.c | 41 ++++++++++++++++++++++++++++++---------- 1 file changed, 31 insertions(+), 10 deletions(-) diff --git a/mm/damon/sysfs-schemes.c b/mm/damon/sysfs-schemes.c index 117d27544173..3d42d24bb33a 100644 --- a/mm/damon/sysfs-schemes.c +++ b/mm/damon/sysfs-schemes.c @@ -785,10 +785,21 @@ static struct damon_sysfs_watermarks *damon_sysfs_wat= ermarks_alloc( return watermarks; } =20 -/* Should match with enum damos_wmark_metric */ -static const char * const damon_sysfs_wmark_metric_strs[] =3D { - "none", - "free_mem_rate", +struct damos_sysfs_wmark_metric_name { + enum damos_wmark_metric metric; + char *name; +}; + +static const struct damos_sysfs_wmark_metric_name +damos_sysfs_wmark_metric_names[] =3D { + { + .metric =3D DAMOS_WMARK_NONE, + .name =3D "none", + }, + { + .metric =3D DAMOS_WMARK_FREE_MEM_RATE, + .name =3D "free_mem_rate", + }, }; =20 static ssize_t metric_show(struct kobject *kobj, struct kobj_attribute *at= tr, @@ -796,9 +807,16 @@ static ssize_t metric_show(struct kobject *kobj, struc= t kobj_attribute *attr, { struct damon_sysfs_watermarks *watermarks =3D container_of(kobj, struct damon_sysfs_watermarks, kobj); + int i; =20 - return sysfs_emit(buf, "%s\n", - damon_sysfs_wmark_metric_strs[watermarks->metric]); + for (i =3D 0; i < ARRAY_SIZE(damos_sysfs_wmark_metric_names); i++) { + const struct damos_sysfs_wmark_metric_name *metric_name; + + metric_name =3D &damos_sysfs_wmark_metric_names[i]; + if (metric_name->metric =3D=3D watermarks->metric) + return sysfs_emit(buf, "%s\n", metric_name->name); + } + return -EINVAL; } =20 static ssize_t metric_store(struct kobject *kobj, struct kobj_attribute *a= ttr, @@ -806,11 +824,14 @@ static ssize_t metric_store(struct kobject *kobj, str= uct kobj_attribute *attr, { struct damon_sysfs_watermarks *watermarks =3D container_of(kobj, struct damon_sysfs_watermarks, kobj); - enum damos_wmark_metric metric; + int i; =20 - for (metric =3D 0; metric < NR_DAMOS_WMARK_METRICS; metric++) { - if (sysfs_streq(buf, damon_sysfs_wmark_metric_strs[metric])) { - watermarks->metric =3D metric; + for (i =3D 0; i < ARRAY_SIZE(damos_sysfs_wmark_metric_names); i++) { + const struct damos_sysfs_wmark_metric_name *metric_name; + + metric_name =3D &damos_sysfs_wmark_metric_names[i]; + if (sysfs_streq(buf, metric_name->name)) { + watermarks->metric =3D metric_name->metric; return count; } } --=20 2.39.5 From nobody Thu Oct 9 00:37:49 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id BBD59221F17; Sun, 22 Jun 2025 21:38:07 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750628287; cv=none; b=QxTyuSTl/OaqcWhm3OPvqss6IP30LHeHHql7aaXEuvdaTu6PaxWNJHprbYIiiqZ5P18Rtqsb2kYGjUF+pxFCBwW4eNGwgUPq4iFG98eEjHQyGeucS8R3Pc11CnI3j0p/W9NLmZiDkiSkMFnPDjRZQrqknaSjq0IL3MDaxCS5HOM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750628287; c=relaxed/simple; bh=hoaJf6LTS/M19C68gmFwoJKbJwBssOw4AFc9E/nGoAI=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=WUu0yOYr/GYDBDgKIcemK6AUC6xWEGC8BD2o3WfnX7Hrm0FBGIo6DQrx90Oz0Bi0MlfinHUIOrlHGP31hJeq7MHEh075ZKU2CDGx5UJrQ75yRAsn45uSDErFgNsOk/QNvtVs4TH+dT0/EYBt0wHp0o2rWaZE5ZlmFn4zeoj3L2I= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=Kek/JUaH; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="Kek/JUaH" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 1D8AEC4CEF1; Sun, 22 Jun 2025 21:38:07 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1750628287; bh=hoaJf6LTS/M19C68gmFwoJKbJwBssOw4AFc9E/nGoAI=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Kek/JUaHvhnRV+TgYEcPUyum/L0sgKl2hAG2236Vda5DzmDVB57UTVZfFdJ7a9aYK u9nZkEzJMsEtEq2yJZP4IekQ+68tHVj1/cHjocA3MMmsZUaSMsaCttdvRXm7aQuehh Sn3nzQVPBhHysMdTQCGTvXvJFznPe4MZ7X3fYHtdYwYZYp/QCrYVWkhMFKVA3saDkD CKHcBwaPPusaE8yunMo91b6Gu6WKqW3AUBHV25HnNzWBuT/GUONTRaAxoXqHyFlZ66 QQGtNsw4+Fg2RwdUCdIe6ZC/FQ5MIDqmcBQhTPgvVCAYDftIv0o+VDVrbb0MvOwm1J j1N8hoQt4tzZg== 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 4/5] mm/damon/sysfs-schemes: decouple from damos_filter_type Date: Sun, 22 Jun 2025 14:37:58 -0700 Message-Id: <20250622213759.50930-5-sj@kernel.org> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20250622213759.50930-1-sj@kernel.org> References: <20250622213759.50930-1-sj@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Decouple DAMOS sysfs interface from damos_filter_type. For this, define and use new sysfs-schemes internal data structure that maps the user-space keywords and damos_filter_type, instead of having the implicit and unflexible array index rule. Signed-off-by: SeongJae Park --- mm/damon/sysfs-schemes.c | 75 ++++++++++++++++++++++++++++++---------- 1 file changed, 57 insertions(+), 18 deletions(-) diff --git a/mm/damon/sysfs-schemes.c b/mm/damon/sysfs-schemes.c index 3d42d24bb33a..5243b94cec24 100644 --- a/mm/damon/sysfs-schemes.c +++ b/mm/damon/sysfs-schemes.c @@ -341,16 +341,45 @@ static struct damon_sysfs_scheme_filter *damon_sysfs_= scheme_filter_alloc( return filter; } =20 -/* Should match with enum damos_filter_type */ -static const char * const damon_sysfs_scheme_filter_type_strs[] =3D { - "anon", - "active", - "memcg", - "young", - "hugepage_size", - "unmapped", - "addr", - "target", +struct damos_sysfs_filter_type_name { + enum damos_filter_type type; + char *name; +}; + +static const struct damos_sysfs_filter_type_name +damos_sysfs_filter_type_names[] =3D { + { + .type =3D DAMOS_FILTER_TYPE_ANON, + .name =3D "anon", + }, + { + .type =3D DAMOS_FILTER_TYPE_ACTIVE, + .name =3D "active", + }, + { + .type =3D DAMOS_FILTER_TYPE_MEMCG, + .name =3D "memcg", + }, + { + .type =3D DAMOS_FILTER_TYPE_YOUNG, + .name =3D "young", + }, + { + .type =3D DAMOS_FILTER_TYPE_HUGEPAGE_SIZE, + .name =3D "hugepage_size", + }, + { + .type =3D DAMOS_FILTER_TYPE_UNMAPPED, + .name =3D "unmapped", + }, + { + .type =3D DAMOS_FILTER_TYPE_ADDR, + .name =3D "addr", + }, + { + .type =3D DAMOS_FILTER_TYPE_TARGET, + .name =3D "target", + }, }; =20 static ssize_t type_show(struct kobject *kobj, @@ -358,9 +387,16 @@ static ssize_t type_show(struct kobject *kobj, { struct damon_sysfs_scheme_filter *filter =3D container_of(kobj, struct damon_sysfs_scheme_filter, kobj); + int i; =20 - return sysfs_emit(buf, "%s\n", - damon_sysfs_scheme_filter_type_strs[filter->type]); + for (i =3D 0; i < ARRAY_SIZE(damos_sysfs_filter_type_names); i++) { + const struct damos_sysfs_filter_type_name *type_name; + + type_name =3D &damos_sysfs_filter_type_names[i]; + if (type_name->type =3D=3D filter->type) + return sysfs_emit(buf, "%s\n", type_name->name); + } + return -EINVAL; } =20 static bool damos_sysfs_scheme_filter_valid_type( @@ -385,16 +421,19 @@ static ssize_t type_store(struct kobject *kobj, { struct damon_sysfs_scheme_filter *filter =3D container_of(kobj, struct damon_sysfs_scheme_filter, kobj); - enum damos_filter_type type; ssize_t ret =3D -EINVAL; + int i; + + for (i =3D 0; i < ARRAY_SIZE(damos_sysfs_filter_type_names); i++) { + const struct damos_sysfs_filter_type_name *type_name; =20 - for (type =3D 0; type < NR_DAMOS_FILTER_TYPES; type++) { - if (sysfs_streq(buf, damon_sysfs_scheme_filter_type_strs[ - type])) { + type_name =3D &damos_sysfs_filter_type_names[i]; + if (sysfs_streq(buf, type_name->name)) { if (!damos_sysfs_scheme_filter_valid_type( - filter->handle_layer, type)) + filter->handle_layer, + type_name->type)) break; - filter->type =3D type; + filter->type =3D type_name->type; ret =3D count; break; } --=20 2.39.5 From nobody Thu Oct 9 00:37:49 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C32652222A0; Sun, 22 Jun 2025 21:38:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750628288; cv=none; b=LXmZ0duc1WHv0Jy3wJl6BQpF2M7UrhSs2b/BiphKEgjf8DBFlLyRhAg6zYLUUvgkNSQV4bLiNrxXy8qqGOHV40mWDFeiGs/8NtuUnomLM0e8luhOx1KhzcjsdFSmwB3eUbuJ3bf08ec1ssZFgdjQ3glB2Xmfv6GXIH+vpeIkJcU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750628288; c=relaxed/simple; bh=ymfyB5LlwDbRaP7p17J2Z3u41y4+obtRgutiM/OpQ2k=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=Se2HuzRNJMWCG0mibqaWwWu7wvHhZ0E6fZaePEWUEEwcxVoRyGoTQ/K3SufKr+e7tYKUTR1QadCb4b8E1FhUHGmm+BH84cFaW68fGtYQSvp7prGEYfGtKNqyunTb1fxTSCT2j8UkhEGSeTodFhbUO7GCrxvGHcLVE7wrsgXUbE4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=hCeBDslP; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="hCeBDslP" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 440C3C4CEED; Sun, 22 Jun 2025 21:38:08 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1750628288; bh=ymfyB5LlwDbRaP7p17J2Z3u41y4+obtRgutiM/OpQ2k=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=hCeBDslPZK3Y0nq+wMvdaiYBEHpwK0wkveZwzRxTNHBgSHv4DcgQ4oANd/DmmNuQ9 Bc0qJxz/gbmIGvwWfGN6VuyoNdH4xA9rbagaNXPtiS3o7CdaimZkZEwXNYXH/oZhfH vwYps+1bjg5qKjf5bKcjoOPnMSUIthU9fs7yJnFyC++/ybsLxMzcQFcoC4A5zp4BFr tVPvz36P1rvsV3hc2jj2Vc21a1AGGF89lGG+ntV7TltlERogmBxUF54XN8FyG1ih1h P/owAe8s+bD5QRw2FyyPyqjCOrZpSBaQOUwbnb+y/4UjTtJPmVtNDFSjXmqPJVBrVb 9K5Bppypg8+tg== 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 5/5] mm/damon/sysfs: decouple from damon_ops_id Date: Sun, 22 Jun 2025 14:37:59 -0700 Message-Id: <20250622213759.50930-6-sj@kernel.org> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20250622213759.50930-1-sj@kernel.org> References: <20250622213759.50930-1-sj@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Decouple DAMON sysfs interface from damon_ops_id. For this, define and use new mm/damon/sysfs.c internal data structure that maps the user-space keywords and damon_ops_id, instead of having the implicit and unflexible array index rule. Signed-off-by: SeongJae Park --- mm/damon/sysfs.c | 56 +++++++++++++++++++++++++++++++++++------------- 1 file changed, 41 insertions(+), 15 deletions(-) diff --git a/mm/damon/sysfs.c b/mm/damon/sysfs.c index 1af6aff35d84..1b1476b79cdb 100644 --- a/mm/damon/sysfs.c +++ b/mm/damon/sysfs.c @@ -811,11 +811,24 @@ static const struct kobj_type damon_sysfs_attrs_ktype= =3D { * context directory */ =20 -/* This should match with enum damon_ops_id */ -static const char * const damon_sysfs_ops_strs[] =3D { - "vaddr", - "fvaddr", - "paddr", +struct damon_sysfs_ops_name { + enum damon_ops_id ops_id; + char *name; +}; + +static const struct damon_sysfs_ops_name damon_sysfs_ops_names[] =3D { + { + .ops_id =3D DAMON_OPS_VADDR, + .name =3D "vaddr", + }, + { + .ops_id =3D DAMON_OPS_FVADDR, + .name =3D "fvaddr", + }, + { + .ops_id =3D DAMON_OPS_PADDR, + .name =3D "paddr", + }, }; =20 struct damon_sysfs_context { @@ -934,14 +947,16 @@ static void damon_sysfs_context_rm_dirs(struct damon_= sysfs_context *context) static ssize_t avail_operations_show(struct kobject *kobj, struct kobj_attribute *attr, char *buf) { - enum damon_ops_id id; int len =3D 0; + int i; + + for (i =3D 0; i < ARRAY_SIZE(damon_sysfs_ops_names); i++) { + const struct damon_sysfs_ops_name *ops_name; =20 - for (id =3D 0; id < NR_DAMON_OPS; id++) { - if (!damon_is_registered_ops(id)) + ops_name =3D &damon_sysfs_ops_names[i]; + if (!damon_is_registered_ops(ops_name->ops_id)) continue; - len +=3D sysfs_emit_at(buf, len, "%s\n", - damon_sysfs_ops_strs[id]); + len +=3D sysfs_emit_at(buf, len, "%s\n", ops_name->name); } return len; } @@ -951,8 +966,16 @@ static ssize_t operations_show(struct kobject *kobj, { struct damon_sysfs_context *context =3D container_of(kobj, struct damon_sysfs_context, kobj); + int i; =20 - return sysfs_emit(buf, "%s\n", damon_sysfs_ops_strs[context->ops_id]); + for (i =3D 0; i < ARRAY_SIZE(damon_sysfs_ops_names); i++) { + const struct damon_sysfs_ops_name *ops_name; + + ops_name =3D &damon_sysfs_ops_names[i]; + if (ops_name->ops_id =3D=3D context->ops_id) + return sysfs_emit(buf, "%s\n", ops_name->name); + } + return -EINVAL; } =20 static ssize_t operations_store(struct kobject *kobj, @@ -960,11 +983,14 @@ static ssize_t operations_store(struct kobject *kobj, { struct damon_sysfs_context *context =3D container_of(kobj, struct damon_sysfs_context, kobj); - enum damon_ops_id id; + int i; + + for (i =3D 0; i < ARRAY_SIZE(damon_sysfs_ops_names); i++) { + const struct damon_sysfs_ops_name *ops_name; =20 - for (id =3D 0; id < NR_DAMON_OPS; id++) { - if (sysfs_streq(buf, damon_sysfs_ops_strs[id])) { - context->ops_id =3D id; + ops_name =3D &damon_sysfs_ops_names[i]; + if (sysfs_streq(buf, ops_name->name)) { + context->ops_id =3D ops_name->ops_id; return count; } } --=20 2.39.5