From patchwork Fri Mar 31 09:07:28 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Christian_K=C3=B6nig?= X-Patchwork-Id: 13195566 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 gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id D8DD6C6FD18 for ; Fri, 31 Mar 2023 09:07:40 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 5FFDF10F167; Fri, 31 Mar 2023 09:07:40 +0000 (UTC) Received: from mail-ed1-x52a.google.com (mail-ed1-x52a.google.com [IPv6:2a00:1450:4864:20::52a]) by gabe.freedesktop.org (Postfix) with ESMTPS id 1E29F10F132 for ; Fri, 31 Mar 2023 09:07:35 +0000 (UTC) Received: by mail-ed1-x52a.google.com with SMTP id y4so87066644edo.2 for ; Fri, 31 Mar 2023 02:07:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; t=1680253653; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=jLPdWsqQB73KrxcrCLg72LM8CSwXLthb0XaW5oV0BOk=; b=F1NCUed0qo6/HEqzSm7/7OQ+wO5QB1xdC9SGVT/yWx/mmB/cjMOaIncpF7EJZqpeNF nwFm51OFjJVttfJeK4AI8PQUfDK1MUG/G/Yb3hfzsEEkqZJ4pw4T671Nkba1Y2G40BJp PzAPlFgEbgE6JJbURWK3bfMoHWTINLxfBJvMZHf8EPR9/5Lun2uKs0erVV2HSt3TTWG/ OA50QM9NXygVoY5cdriHpn/xOc2BFFOMnoJYM+hPvSgbAXPeZtF389v4HYqjMlTxcFnP DX6vgsxAxQJ1HvJ+LEur6R+DpQx3bPGKdyHEBMCvHPXA5hFGnlSXHGvK83MMeplGnpq0 0kOg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1680253653; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=jLPdWsqQB73KrxcrCLg72LM8CSwXLthb0XaW5oV0BOk=; b=pWOc4o/smn6QWjNlrLJ4/QyKNwKKiV1GkSruhbV6R5ts0P8u5ZCQ16llOXBZAmkxKT M+Scdhb1iTqxVnBiTXBEuCVXe7lAnsPZxj+uVysqF5/mNaBQRa4nwamK/2iX33VAN0Z6 wjw24Z2U83HhFwU3Ic+slwRXorShIG9MuYlhgafE8Tm02y6bYBarn6ycVhLs4L94WfB+ Vfs6Uvgcc042QAla6jWLZi94y/DTsdTsGrmU2UeceiEB9+6ytBneS9XstJM6iXbBqehR UiE5E2IG5o51cCMmVhQVrhIvYzG1o7EDE7dLvJvYC0798qdgpitdBTYuB3y4tgyIBDNu PjnA== X-Gm-Message-State: AAQBX9eBYEMzartkE/ZqXQs1xvK3chpgKxKkD+myckVzrVUylaQxYTmL RJyUv6Xm4P8eeGxq2nUGVFglxc5xnuvBFg== X-Google-Smtp-Source: AKy350ZCbK89UZh+HCd72joAqY+ANCW3gVBFiH3JG2w7o37aMSeoSyKhh5RxnVUOPUNJn2Vw79WHMw== X-Received: by 2002:a17:906:6b8b:b0:93f:9b68:a0f4 with SMTP id l11-20020a1709066b8b00b0093f9b68a0f4mr9673452ejr.26.1680253653493; Fri, 31 Mar 2023 02:07:33 -0700 (PDT) Received: from able.fritz.box (p4fc2092b.dip0.t-ipconnect.de. [79.194.9.43]) by smtp.gmail.com with ESMTPSA id r2-20020a170906a20200b009323f08827dsm779960ejy.13.2023.03.31.02.07.32 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 31 Mar 2023 02:07:33 -0700 (PDT) From: " =?utf-8?q?Christian_K=C3=B6nig?= " X-Google-Original-From: =?utf-8?q?Christian_K=C3=B6nig?= To: intel-gfx@lists.freedesktop.org Date: Fri, 31 Mar 2023 11:07:28 +0200 Message-Id: <20230331090729.2183-4-christian.koenig@amd.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230331090729.2183-1-christian.koenig@amd.com> References: <20230331090729.2183-1-christian.koenig@amd.com> MIME-Version: 1.0 Subject: [Intel-gfx] [PATCH 4/5] drm/debugfs: rework drm_debugfs_create_files implementation X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" Use managed memory allocation for this. That allows us to not keep track of all the files any more. Signed-off-by: Christian König --- drivers/accel/drm_accel.c | 2 - drivers/gpu/drm/drm_debugfs.c | 75 +++++++++------------------------- drivers/gpu/drm/drm_drv.c | 2 - drivers/gpu/drm/drm_internal.h | 5 --- drivers/gpu/drm/tegra/dc.c | 9 +++- drivers/gpu/drm/tegra/dsi.c | 1 + drivers/gpu/drm/tegra/hdmi.c | 3 +- drivers/gpu/drm/tegra/sor.c | 1 + include/drm/drm_debugfs.h | 4 +- include/drm/drm_file.h | 4 -- 10 files changed, 34 insertions(+), 72 deletions(-) diff --git a/drivers/accel/drm_accel.c b/drivers/accel/drm_accel.c index e28fb64cbd5e..82c54bc2dcad 100644 --- a/drivers/accel/drm_accel.c +++ b/drivers/accel/drm_accel.c @@ -100,8 +100,6 @@ void accel_debugfs_register(struct drm_device *dev) { struct drm_minor *minor = dev->accel; - INIT_LIST_HEAD(&minor->debugfs_list); - mutex_init(&minor->debugfs_lock); minor->debugfs_root = dev->debugfs_root; drm_debugfs_create_files(accel_debugfs_list, ACCEL_DEBUGFS_ENTRIES, diff --git a/drivers/gpu/drm/drm_debugfs.c b/drivers/gpu/drm/drm_debugfs.c index 427c5eb4eca0..c8e2d4f9f00d 100644 --- a/drivers/gpu/drm/drm_debugfs.c +++ b/drivers/gpu/drm/drm_debugfs.c @@ -201,7 +201,7 @@ void drm_debugfs_create_files(const struct drm_info_list *files, int count, if (features && !drm_core_check_all_features(dev, features)) continue; - tmp = kmalloc(sizeof(struct drm_info_node), GFP_KERNEL); + tmp = drmm_kzalloc(dev, sizeof(*tmp), GFP_KERNEL); if (tmp == NULL) continue; @@ -210,14 +210,28 @@ void drm_debugfs_create_files(const struct drm_info_list *files, int count, 0444, root, tmp, &drm_debugfs_fops); tmp->info_ent = &files[i]; - - mutex_lock(&minor->debugfs_lock); - list_add(&tmp->list, &minor->debugfs_list); - mutex_unlock(&minor->debugfs_lock); } } EXPORT_SYMBOL(drm_debugfs_create_files); +int drm_debugfs_remove_files(const struct drm_info_list *files, int count, + struct dentry *root, struct drm_minor *minor) +{ + int i; + + for (i = 0; i < count; i++) { + struct dentry *dent = debugfs_lookup(files[i].name, root); + + if (!dent) + continue; + + drmm_kfree(minor->dev, d_inode(dent)->i_private); + debugfs_remove(dent); + } + return 0; +} +EXPORT_SYMBOL(drm_debugfs_remove_files); + void drm_debugfs_dev_init(struct drm_device *dev, struct dentry *root) { dev->debugfs_root = debugfs_create_dir(dev->unique, root); @@ -247,11 +261,8 @@ int drm_debugfs_register(struct drm_minor *minor, int minor_id, struct drm_device *dev = minor->dev; char name[64]; - INIT_LIST_HEAD(&minor->debugfs_list); - mutex_init(&minor->debugfs_lock); sprintf(name, "%d", minor_id); - minor->debugfs_symlink = debugfs_create_symlink(name, root, - dev->unique); + debugfs_create_symlink(name, root, dev->unique); /* TODO: Only for compatibility with drivers */ minor->debugfs_root = dev->debugfs_root; @@ -262,52 +273,6 @@ int drm_debugfs_register(struct drm_minor *minor, int minor_id, return 0; } -int drm_debugfs_remove_files(const struct drm_info_list *files, int count, - struct drm_minor *minor) -{ - struct list_head *pos, *q; - struct drm_info_node *tmp; - int i; - - mutex_lock(&minor->debugfs_lock); - for (i = 0; i < count; i++) { - list_for_each_safe(pos, q, &minor->debugfs_list) { - tmp = list_entry(pos, struct drm_info_node, list); - if (tmp->info_ent == &files[i]) { - debugfs_remove(tmp->dent); - list_del(pos); - kfree(tmp); - } - } - } - mutex_unlock(&minor->debugfs_lock); - return 0; -} -EXPORT_SYMBOL(drm_debugfs_remove_files); - -static void drm_debugfs_remove_all_files(struct drm_minor *minor) -{ - struct drm_info_node *node, *tmp; - - mutex_lock(&minor->debugfs_lock); - list_for_each_entry_safe(node, tmp, &minor->debugfs_list, list) { - debugfs_remove(node->dent); - list_del(&node->list); - kfree(node); - } - mutex_unlock(&minor->debugfs_lock); -} - -void drm_debugfs_cleanup(struct drm_minor *minor) -{ - if (!minor->debugfs_symlink) - return; - - drm_debugfs_remove_all_files(minor); - debugfs_remove(minor->debugfs_symlink); - minor->debugfs_symlink = NULL; -} - /** * drm_debugfs_add_file - Add a given file to the DRM device debugfs file list * @dev: drm device for the ioctl diff --git a/drivers/gpu/drm/drm_drv.c b/drivers/gpu/drm/drm_drv.c index f928b4490ece..9466349769fa 100644 --- a/drivers/gpu/drm/drm_drv.c +++ b/drivers/gpu/drm/drm_drv.c @@ -198,7 +198,6 @@ static int drm_minor_register(struct drm_device *dev, unsigned int type) return 0; err_debugfs: - drm_debugfs_cleanup(minor); return ret; } @@ -222,7 +221,6 @@ static void drm_minor_unregister(struct drm_device *dev, unsigned int type) device_del(minor->kdev); dev_set_drvdata(minor->kdev, NULL); /* safety belt */ - drm_debugfs_cleanup(minor); } /* diff --git a/drivers/gpu/drm/drm_internal.h b/drivers/gpu/drm/drm_internal.h index c5fadbd3fd7d..fb2d6601cba8 100644 --- a/drivers/gpu/drm/drm_internal.h +++ b/drivers/gpu/drm/drm_internal.h @@ -184,7 +184,6 @@ void drm_debugfs_dev_fini(struct drm_device *dev); void drm_debugfs_dev_register(struct drm_device *dev); int drm_debugfs_register(struct drm_minor *minor, int minor_id, struct dentry *root); -void drm_debugfs_cleanup(struct drm_minor *minor); void drm_debugfs_connector_add(struct drm_connector *connector); void drm_debugfs_connector_remove(struct drm_connector *connector); void drm_debugfs_crtc_add(struct drm_crtc *crtc); @@ -201,10 +200,6 @@ static inline int drm_debugfs_register(struct drm_minor *minor, int minor_id, return 0; } -static inline void drm_debugfs_cleanup(struct drm_minor *minor) -{ -} - static inline void drm_debugfs_connector_add(struct drm_connector *connector) { } diff --git a/drivers/gpu/drm/tegra/dc.c b/drivers/gpu/drm/tegra/dc.c index a67453cee883..e53d1b88dc99 100644 --- a/drivers/gpu/drm/tegra/dc.c +++ b/drivers/gpu/drm/tegra/dc.c @@ -1745,8 +1745,15 @@ static void tegra_dc_early_unregister(struct drm_crtc *crtc) unsigned int count = ARRAY_SIZE(debugfs_files); struct drm_minor *minor = crtc->dev->primary; struct tegra_dc *dc = to_tegra_dc(crtc); + struct dentry *root; + +#ifdef CONFIG_DEBUG_FS + root = crtc->debugfs_entry; +#else + root = NULL; +#endif - drm_debugfs_remove_files(dc->debugfs_files, count, minor); + drm_debugfs_remove_files(dc->debugfs_files, count, root, minor); kfree(dc->debugfs_files); dc->debugfs_files = NULL; } diff --git a/drivers/gpu/drm/tegra/dsi.c b/drivers/gpu/drm/tegra/dsi.c index de1333dc0d86..90c6782a663c 100644 --- a/drivers/gpu/drm/tegra/dsi.c +++ b/drivers/gpu/drm/tegra/dsi.c @@ -256,6 +256,7 @@ static void tegra_dsi_early_unregister(struct drm_connector *connector) struct tegra_dsi *dsi = to_dsi(output); drm_debugfs_remove_files(dsi->debugfs_files, count, + connector->debugfs_entry, connector->dev->primary); kfree(dsi->debugfs_files); dsi->debugfs_files = NULL; diff --git a/drivers/gpu/drm/tegra/hdmi.c b/drivers/gpu/drm/tegra/hdmi.c index 40ec3e6cf204..53387aa8b147 100644 --- a/drivers/gpu/drm/tegra/hdmi.c +++ b/drivers/gpu/drm/tegra/hdmi.c @@ -1114,7 +1114,8 @@ static void tegra_hdmi_early_unregister(struct drm_connector *connector) unsigned int count = ARRAY_SIZE(debugfs_files); struct tegra_hdmi *hdmi = to_hdmi(output); - drm_debugfs_remove_files(hdmi->debugfs_files, count, minor); + drm_debugfs_remove_files(hdmi->debugfs_files, count, + connector->debugfs_entry, minor); kfree(hdmi->debugfs_files); hdmi->debugfs_files = NULL; } diff --git a/drivers/gpu/drm/tegra/sor.c b/drivers/gpu/drm/tegra/sor.c index 8af632740673..cd286a5c2a9f 100644 --- a/drivers/gpu/drm/tegra/sor.c +++ b/drivers/gpu/drm/tegra/sor.c @@ -1707,6 +1707,7 @@ static void tegra_sor_early_unregister(struct drm_connector *connector) struct tegra_sor *sor = to_sor(output); drm_debugfs_remove_files(sor->debugfs_files, count, + connector->debugfs_entry, connector->dev->primary); kfree(sor->debugfs_files); sor->debugfs_files = NULL; diff --git a/include/drm/drm_debugfs.h b/include/drm/drm_debugfs.h index 7616f457ce70..84ee27dc2317 100644 --- a/include/drm/drm_debugfs.h +++ b/include/drm/drm_debugfs.h @@ -126,8 +126,8 @@ struct drm_debugfs_entry { void drm_debugfs_create_files(const struct drm_info_list *files, int count, struct dentry *root, struct drm_minor *minor); -int drm_debugfs_remove_files(const struct drm_info_list *files, - int count, struct drm_minor *minor); +int drm_debugfs_remove_files(const struct drm_info_list *files, int count, + struct dentry *root, struct drm_minor *minor); void drm_debugfs_add_file(struct drm_device *dev, const char *name, int (*show)(struct seq_file*, void*), void *data); diff --git a/include/drm/drm_file.h b/include/drm/drm_file.h index 1fe08fcaa149..e687ce27624e 100644 --- a/include/drm/drm_file.h +++ b/include/drm/drm_file.h @@ -78,11 +78,7 @@ struct drm_minor { struct device *kdev; /* Linux device */ struct drm_device *dev; - struct dentry *debugfs_symlink; struct dentry *debugfs_root; - - struct list_head debugfs_list; - struct mutex debugfs_lock; /* Protects debugfs_list. */ }; /**