From nobody Mon Dec 1 22:05:48 2025 Received: from mta21.hihonor.com (mta21.honor.com [81.70.160.142]) (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 8584D199252; Fri, 28 Nov 2025 03:10:29 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=81.70.160.142 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764299431; cv=none; b=H3cdYdeg1SJ8k6IqoOh5pOW/Y0vjF08p+ACin5mosdzUrZLNXn0r0p7USwUkBKWi253HFq4n0/vLd3YFMcK4YRXRz7t0CMyAcz7BIzc6tCi8J6vNgQg3p+n3aBusdyTcRbKR2/eig0kXSSuku4zFDF7nNakZgCvGMvzAJLtI4Rg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764299431; c=relaxed/simple; bh=hk9UQh9z/96n9IuZCKnIWje2f+aFL+5nYxKb4bxDZbU=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=X0+l0oRWrcJflI02YzPpcOMKrmiXVsjPPAwrZKVbhjQXXN71FmxsvxXZvpSmb0vfhtxAJ+X57CJdzLfE1i0hmMwNqCMr3zQ9EsOJb9EW9CbfaWxXb1CUBBo9SqHFn75mm5eBUOdbsDlftRcggy9z4iZHliYBPTuzsbAeFoAuzq8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=honor.com; spf=pass smtp.mailfrom=honor.com; arc=none smtp.client-ip=81.70.160.142 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=honor.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=honor.com Received: from w002.hihonor.com (unknown [10.68.28.120]) by mta21.hihonor.com (SkyGuard) with ESMTPS id 4dHdBy1DhFzYmZ9w; Fri, 28 Nov 2025 10:52:58 +0800 (CST) Received: from localhost.localdomain (10.144.5.36) by w002.hihonor.com (10.68.28.120) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.11; Fri, 28 Nov 2025 10:54:19 +0800 From: Zicheng Wang To: , , , , CC: , , , , , , , , , , , , , , Zicheng Wang Subject: [PATCH 1/3] mm/lru_gen: add procfs support for lru_gen interfaces Date: Fri, 28 Nov 2025 10:53:13 +0800 Message-ID: <20251128025315.3520689-2-wangzicheng@honor.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20251128025315.3520689-1-wangzicheng@honor.com> References: <20251128025315.3520689-1-wangzicheng@honor.com> 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 X-ClientProxiedBy: w012.hihonor.com (10.68.27.189) To w002.hihonor.com (10.68.28.120) Content-Type: text/plain; charset="utf-8" This patch refactors the lru_gen and lru_gen_full control files to allow their interfaces to be exposed under either debugfs or procfs. Two main changes: 1. minimal code modification by reusing the existing seq_operations. 2. lru_gen file mode update from 0644 to 0664, so that Android's group "system" can write to the file when procfs interface is enabled. Signed-off-by: Zicheng Wang --- mm/vmscan.c | 37 +++++++++++++++++++++++++++++++++++-- 1 file changed, 35 insertions(+), 2 deletions(-) diff --git a/mm/vmscan.c b/mm/vmscan.c index 674999999..dd30f3949 100644 --- a/mm/vmscan.c +++ b/mm/vmscan.c @@ -58,6 +58,7 @@ #include #include #include +#include =20 #include #include @@ -5324,9 +5325,17 @@ static const struct attribute_group lru_gen_attr_gro= up =3D { }; =20 /*************************************************************************= ***** - * debugfs interface + * lru_gen interface *************************************************************************= *****/ =20 +static inline bool lru_gen_show_is_full(const struct file *file) +{ + /* procfs: i_private =3D (void *)1 means full + * debugfs: also works because debugfs sets i_private + */ + return file->f_inode->i_private !=3D NULL; +} + static void *lru_gen_seq_start(struct seq_file *m, loff_t *pos) { struct mem_cgroup *memcg; @@ -5435,7 +5444,7 @@ static void lru_gen_seq_show_full(struct seq_file *m,= struct lruvec *lruvec, static int lru_gen_seq_show(struct seq_file *m, void *v) { unsigned long seq; - bool full =3D debugfs_get_aux_num(m->file); + bool full =3D lru_gen_show_is_full(m->file); struct lruvec *lruvec =3D v; struct lru_gen_folio *lrugen =3D &lruvec->lrugen; int nid =3D lruvec_pgdat(lruvec)->node_id; @@ -5671,6 +5680,7 @@ static int lru_gen_seq_open(struct inode *inode, stru= ct file *file) return seq_open(file, &lru_gen_seq_ops); } =20 +#ifndef CONFIG_LRU_GEN_PROCFS_CTRL static const struct file_operations lru_gen_rw_fops =3D { .open =3D lru_gen_seq_open, .read =3D seq_read, @@ -5685,6 +5695,22 @@ static const struct file_operations lru_gen_ro_fops = =3D { .llseek =3D seq_lseek, .release =3D seq_release, }; +#else +static const struct proc_ops lru_gen_proc_rw_ops =3D { + .proc_open =3D lru_gen_seq_open, + .proc_read =3D seq_read, + .proc_write =3D lru_gen_seq_write, + .proc_lseek =3D seq_lseek, + .proc_release =3D seq_release, +}; + +static const struct proc_ops lru_gen_proc_ro_ops =3D { + .proc_open =3D lru_gen_seq_open, + .proc_read =3D seq_read, + .proc_lseek =3D seq_lseek, + .proc_release =3D seq_release, +}; +#endif =20 /*************************************************************************= ***** * initialization @@ -5772,10 +5798,17 @@ static int __init init_lru_gen(void) if (sysfs_create_group(mm_kobj, &lru_gen_attr_group)) pr_err("lru_gen: failed to create sysfs group\n"); =20 +#ifndef CONFIG_LRU_GEN_PROCFS_CTRL debugfs_create_file_aux_num("lru_gen", 0644, NULL, NULL, false, &lru_gen_rw_fops); debugfs_create_file_aux_num("lru_gen_full", 0444, NULL, NULL, true, &lru_gen_ro_fops); +#else + proc_create_data("lru_gen", 0664, NULL, + &lru_gen_proc_rw_ops, NULL); + proc_create_data("lru_gen_full", 0444, NULL, + &lru_gen_proc_ro_ops, (void *)1); +#endif =20 return 0; }; --=20 2.25.1