From nobody Fri Jun 19 17:04:21 2026 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 0CDBBC433EF for ; Thu, 31 Mar 2022 15:16:48 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238104AbiCaPSd (ORCPT ); Thu, 31 Mar 2022 11:18:33 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51538 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S238016AbiCaPSa (ORCPT ); Thu, 31 Mar 2022 11:18:30 -0400 Received: from m12-15.163.com (m12-15.163.com [220.181.12.15]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 656D2211ECF for ; Thu, 31 Mar 2022 08:16:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=163.com; s=s110527; h=From:Subject:Date:Message-Id:MIME-Version; bh=Tz1+j yzSmP98e5ooAatmzdnU3iInwBIM2H0hqBxqsjQ=; b=psM+ebjRvi0rA8IRmjsJy 5kvMXiucEUqKbJzipWmIfwEijotiVEwkdZSpGwwrPkBxW0ykRt/F6uWsT+xRo3DN qrRrtVBNIAtrX+2HphE6ucFZOSliaypCnfLob8ngiYLoygrXQ7Z/3MqG+uscGwXh KrHd0jy+ksCLtDkNX6q4r8= Received: from localhost (unknown [119.123.75.76]) by smtp11 (Coremail) with SMTP id D8CowABHgXyzxUViQeNcAQ--.3707S2; Thu, 31 Mar 2022 23:16:04 +0800 (CST) From: wujunwen To: arnd@arndb.de, gregkh@linuxfoundation.org Cc: linux-kernel@vger.kernel.org, wujunwen Subject: [PATCH v2] char: misc:use DEFINE_PROC_SHOW_ATTRIBUTE micro to simplify misc proc_fops Date: Thu, 31 Mar 2022 15:15:57 +0000 Message-Id: <20220331151557.3946-1-wudaemon@163.com> X-Mailer: git-send-email 2.25.1 MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-CM-TRANSID: D8CowABHgXyzxUViQeNcAQ--.3707S2 X-Coremail-Antispam: 1Uf129KBjvJXoWxWrW5Zw1fAFy5tFWxKF17KFg_yoW5Wr48pF 4fZ347JF4UJF4xWrW3ta1DuF9IqFn7Xa4q9rnrG3yfZF1DZr12gF1DAa47ZFy5G3ykWrnx XFs0kry5Cw1jy3DanT9S1TB71UUUUUUqnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDUYxBIdaVFxhVjvjDU0xZFpf9x0pEAhLnUUUUU= X-Originating-IP: [119.123.75.76] X-CM-SenderInfo: 5zxgtvxprqqiywtou0bp/1tbiLBTUbVspdNuNnQAAsM Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" DEFINE_PROC_SHOW_ATTRIBUTE is used to simply seq_file flow ,so we can use it to simplify misc proc_fops. Signed-off-by: wujunwen --- V1 -> V2: Fix compile error with no "CONFIG_PROC_FS" drivers/char/misc.c | 41 ++++++++++++++--------------------------- 1 file changed, 14 insertions(+), 27 deletions(-) diff --git a/drivers/char/misc.c b/drivers/char/misc.c index ca5141ed5ef3..076b7f08aa7a 100644 --- a/drivers/char/misc.c +++ b/drivers/char/misc.c @@ -64,40 +64,23 @@ static DEFINE_MUTEX(misc_mtx); static DECLARE_BITMAP(misc_minors, DYNAMIC_MINORS); =20 #ifdef CONFIG_PROC_FS -static void *misc_seq_start(struct seq_file *seq, loff_t *pos) -{ - mutex_lock(&misc_mtx); - return seq_list_start(&misc_list, *pos); -} =20 -static void *misc_seq_next(struct seq_file *seq, void *v, loff_t *pos) +static int misc_show(struct seq_file *seq, void *v) { - return seq_list_next(v, &misc_list, pos); -} + const struct miscdevice *p; =20 -static void misc_seq_stop(struct seq_file *seq, void *v) -{ + mutex_lock(&misc_mtx); + list_for_each_entry(p, &misc_list, list) { + seq_printf(seq, "%3i %s\n", p->minor, p->name ? p->name : ""); + } mutex_unlock(&misc_mtx); -} - -static int misc_seq_show(struct seq_file *seq, void *v) -{ - const struct miscdevice *p =3D list_entry(v, struct miscdevice, list); - - seq_printf(seq, "%3i %s\n", p->minor, p->name ? p->name : ""); return 0; } =20 - -static const struct seq_operations misc_seq_ops =3D { - .start =3D misc_seq_start, - .next =3D misc_seq_next, - .stop =3D misc_seq_stop, - .show =3D misc_seq_show, -}; +DEFINE_PROC_SHOW_ATTRIBUTE(misc); #endif =20 -static int misc_open(struct inode *inode, struct file *file) +static int misc_fops_open(struct inode *inode, struct file *file) { int minor =3D iminor(inode); struct miscdevice *c; @@ -148,7 +131,7 @@ static struct class *misc_class; =20 static const struct file_operations misc_fops =3D { .owner =3D THIS_MODULE, - .open =3D misc_open, + .open =3D misc_fops_open, .llseek =3D noop_llseek, }; =20 @@ -266,9 +249,11 @@ static char *misc_devnode(struct device *dev, umode_t = *mode) static int __init misc_init(void) { int err; +#ifdef CONFIG_PROC_FS struct proc_dir_entry *ret; =20 - ret =3D proc_create_seq("misc", 0, NULL, &misc_seq_ops); + ret =3D proc_create("misc", 0, NULL, &misc_proc_ops); +#endif misc_class =3D class_create(THIS_MODULE, "misc"); err =3D PTR_ERR(misc_class); if (IS_ERR(misc_class)) @@ -284,8 +269,10 @@ static int __init misc_init(void) pr_err("unable to get major %d for misc devices\n", MISC_MAJOR); class_destroy(misc_class); fail_remove: +#ifdef CONFIG_PROC_FS if (ret) remove_proc_entry("misc", NULL); +#endif return err; } subsys_initcall(misc_init); --=20 2.25.1