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 9AEEDC77B7C for ; Sun, 22 Jun 2025 21:38:19 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 2F61A6B00A4; Sun, 22 Jun 2025 17:38:11 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 2A6006B00A5; Sun, 22 Jun 2025 17:38:11 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 195326B00AA; Sun, 22 Jun 2025 17:38:11 -0400 (EDT) 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 08EEA6B00A4 for ; Sun, 22 Jun 2025 17:38:11 -0400 (EDT) Received: from smtpin14.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay04.hostedemail.com (Postfix) with ESMTP id CB8561A0F28 for ; Sun, 22 Jun 2025 21:38:10 +0000 (UTC) X-FDA: 83584349940.14.417BB69 Received: from nyc.source.kernel.org (nyc.source.kernel.org [147.75.193.91]) by imf23.hostedemail.com (Postfix) with ESMTP id 3C6DB140006 for ; Sun, 22 Jun 2025 21:38:09 +0000 (UTC) Authentication-Results: imf23.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=hCeBDslP; spf=pass (imf23.hostedemail.com: domain of sj@kernel.org designates 147.75.193.91 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=1750628289; 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=Y2qIDodhLzRYOygBIXDQZ49QtWX16imQXSPYPuND0qo=; b=43tHRqNhiHeC8PiP979zFUOg46SMhNRK02Ji0Ywbjl/hbwVdGiRu2Fr1xdr9Bfwe9tgEQB 3qrxhz/W34VPAuo0syAfzqOOOfq86OXwQI3O81+ehW25tZlBrCKV+JI9pJJ7rNXFO7cUuP hCX/OhuO1EDur/romVmq3jz5RX2MJ5A= ARC-Authentication-Results: i=1; imf23.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=hCeBDslP; spf=pass (imf23.hostedemail.com: domain of sj@kernel.org designates 147.75.193.91 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=1750628289; a=rsa-sha256; cv=none; b=RRYrObPfej4+TeKhUx5Ep9X9eWhkQQY36dom5uf2r456w+9bPr7LYqgNLhCCFe/28tghRo IxcdTBxaLW54CUCiInsVtZMNtABs+PW5+Nd3MUz+WseHEYWNwdmLhRs9cSsFpnyGWHoona gOYSl/tVFP2ohhZwQmGxaY0js2+/5sM= Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by nyc.source.kernel.org (Postfix) with ESMTP id 9F082A4ECAE; Sun, 22 Jun 2025 21:38:08 +0000 (UTC) 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> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Rspam-User: X-Rspamd-Server: rspam09 X-Rspamd-Queue-Id: 3C6DB140006 X-Stat-Signature: yj4tzf7rrk8m4g6n4zcym8h8dar1138i X-HE-Tag: 1750628289-362180 X-HE-Meta: U2FsdGVkX19MgnRrq26O0huI2YSxZQCnjgeRZWfbkKlZfO4g8QLHDj4+DecD9XZpHZtT5qYxXSnYRLbcOagQgCpAucrZamidC0NPNSG41plpiTtPlGPkQSatm2X9mFsC5xzRQr0fGlhF4mUjJMin3YMbJ75/7ibGjRdns/NtMn9JFJddHx+eJgqwz8zphrmP3f5P4Eiu3LXM7xAsgufI0qkbJzU+uOVN3Z/uvWYLiliUaGpXTIAq+C5zrRPN0aAjMv3UbKVtdH2jIOIcwEjuoTo/P13+pD3+lbpZDj/Iv8dFu95zhKbZ/S/uIR+RpcGuIS1s3UgA9f2/p+b2jj7Gt7TtDWomsNHh0vbUa36MzHh4CNWb/yPJSf/G1z3LJAG1NAGulPUYEPsH0a5Md/X5eQAkW1tEMCTqYvGB4BX5I5hvg0rbnAi02cLlZsW2dFPU4BVIrQ4hUWcrraE8u8Q16AOYTinlUWd8rFfEO2xstMtRRtq6e7kisEEyQv/Es9RrTgPYaDHBEpxh3W1sZx0SLHV3TKzmQjNZ1ilHa5VjYoNdYtgupdRYlvHgh8kRGAjuwFVZfym9UYpciD0Beuh9+KLL2+4CMrrjCXN3SYfdD9FhgfDnDMzs4ug0iYwskHZGk21gG6cZ35O7rdOugOMkWjpOmjWYOLEoMonEJezpBDsfEJcd8cZemi3c5EKcYLEJydQLQ/Ool8qKImKURQ6+GKYXa6jJWV2bdGZeTNYCw3QfhmNS5MfE6DSH3FDvkU+TEgYiBjLoZhyOemGpN+H8PVz8CkYR4UC7vqi0Hs9Wm0Qs4Qc57QpCo0pvOGJrMvhe9Cn9ri244uOZz00c+X3zYsPsf+OXUiNZh+KwkMYaOxSquaxxKGMSZvU9ZGedscZEymMQj1HBoqdvncdN08qyG5W2/poF92QGSjKaO2QHy1t+xSQgy+GdqVS0pIoKSiYmGuIiTLYJhIFq0SfKWco +eMeqmKj eF3fv8jpxTk282WqlTpms1Kew3+5EVdah5dtgNUDUc3koFYl8D1VK2F/grBp7SvM1/15BxfTNxBPSWO9Ckydo6EaUENo2JyKGkAWKfM4UCOAFNIM2GjKo9FNtFoUdaYZRPm6fowBasZjPpiZG0LU0wfBrp7jOXKXiPJOvLUmSZ8YQvl0RdyDsV/fvNsJ/sp1b+PqGUypM2EssRwjvskbo8wRV37tMssMmJhi4krP/WR5BurP2rcKWHSmoD5IG6BpcvVW7g5wNYMWTcRtnl0qfML0gUQ== 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: 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 = { * context directory */ -/* This should match with enum damon_ops_id */ -static const char * const damon_sysfs_ops_strs[] = { - "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[] = { + { + .ops_id = DAMON_OPS_VADDR, + .name = "vaddr", + }, + { + .ops_id = DAMON_OPS_FVADDR, + .name = "fvaddr", + }, + { + .ops_id = DAMON_OPS_PADDR, + .name = "paddr", + }, }; 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 = 0; + int i; + + for (i = 0; i < ARRAY_SIZE(damon_sysfs_ops_names); i++) { + const struct damon_sysfs_ops_name *ops_name; - for (id = 0; id < NR_DAMON_OPS; id++) { - if (!damon_is_registered_ops(id)) + ops_name = &damon_sysfs_ops_names[i]; + if (!damon_is_registered_ops(ops_name->ops_id)) continue; - len += sysfs_emit_at(buf, len, "%s\n", - damon_sysfs_ops_strs[id]); + len += 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 = container_of(kobj, struct damon_sysfs_context, kobj); + int i; - return sysfs_emit(buf, "%s\n", damon_sysfs_ops_strs[context->ops_id]); + for (i = 0; i < ARRAY_SIZE(damon_sysfs_ops_names); i++) { + const struct damon_sysfs_ops_name *ops_name; + + ops_name = &damon_sysfs_ops_names[i]; + if (ops_name->ops_id == context->ops_id) + return sysfs_emit(buf, "%s\n", ops_name->name); + } + return -EINVAL; } 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 = container_of(kobj, struct damon_sysfs_context, kobj); - enum damon_ops_id id; + int i; + + for (i = 0; i < ARRAY_SIZE(damon_sysfs_ops_names); i++) { + const struct damon_sysfs_ops_name *ops_name; - for (id = 0; id < NR_DAMON_OPS; id++) { - if (sysfs_streq(buf, damon_sysfs_ops_strs[id])) { - context->ops_id = id; + ops_name = &damon_sysfs_ops_names[i]; + if (sysfs_streq(buf, ops_name->name)) { + context->ops_id = ops_name->ops_id; return count; } } -- 2.39.5