* [PATCH v3] drm/panthor: Display priorities of panthor groups over debugfs
@ 2026-09-04 17:38 Nicolas Frattaroli
2026-09-07 7:28 ` Boris Brezillon
2026-09-08 11:08 ` Liviu Dudau
0 siblings, 2 replies; 3+ messages in thread
From: Nicolas Frattaroli @ 2026-09-04 17:38 UTC (permalink / raw)
To: Boris Brezillon, Steven Price, Liviu Dudau, Maarten Lankhorst,
Maxime Ripard, Thomas Zimmermann, David Airlie, Simona Vetter
Cc: dri-devel, linux-kernel, kernel, Nicolas Frattaroli
Analogous to what was added in Commit d41c79838c47 ("drm/panfrost:
Display list of device JM contexts over debugfs") for panfrost, add
similar debugfs information for panthor.
The group priority does not change over the lifetime of the group, so no
effort to synchronise with the scheduler lock is being made.
Signed-off-by: Nicolas Frattaroli <nicolas.frattaroli@collabora.com>
---
Changes in v3:
- Move group number to after the per-file specific information, which
helps readability
- Link to v2: https://patch.msgid.link/20260831-panthor-sched-group-prio-v2-1-a74c79b4b830@collabora.com
Changes in v2:
- Take groups xa lock around the loop in show_file_groups to guard
against group object UAF
- Flatten the listing, removing most of the code in show_each_file,
printing that info for each group instead
- Also show queue count for each group
- Link to v1: https://patch.msgid.link/20260818-panthor-sched-group-prio-v1-1-1836857c53e9@collabora.com
---
drivers/gpu/drm/panthor/panthor_drv.c | 1 +
drivers/gpu/drm/panthor/panthor_sched.c | 73 +++++++++++++++++++++++++++++++++
drivers/gpu/drm/panthor/panthor_sched.h | 5 +++
3 files changed, 79 insertions(+)
diff --git a/drivers/gpu/drm/panthor/panthor_drv.c b/drivers/gpu/drm/panthor/panthor_drv.c
index 46a3080b0b20..8cdba0c1a14b 100644
--- a/drivers/gpu/drm/panthor/panthor_drv.c
+++ b/drivers/gpu/drm/panthor/panthor_drv.c
@@ -1769,6 +1769,7 @@ static void panthor_debugfs_init(struct drm_minor *minor)
{
panthor_mmu_debugfs_init(minor);
panthor_gem_debugfs_init(minor);
+ panthor_sched_debugfs_init(minor);
}
#endif
diff --git a/drivers/gpu/drm/panthor/panthor_sched.c b/drivers/gpu/drm/panthor/panthor_sched.c
index 60b2417deb81..ac6aee554820 100644
--- a/drivers/gpu/drm/panthor/panthor_sched.c
+++ b/drivers/gpu/drm/panthor/panthor_sched.c
@@ -1,6 +1,7 @@
// SPDX-License-Identifier: GPL-2.0 or MIT
/* Copyright 2023 Collabora ltd. */
+#include <drm/drm_debugfs.h>
#include <drm/drm_drv.h>
#include <drm/drm_exec.h>
#include <drm/drm_file.h>
@@ -4175,3 +4176,75 @@ int panthor_sched_init(struct panthor_device *ptdev)
ptdev->scheduler = sched;
return 0;
}
+
+#ifdef CONFIG_DEBUG_FS
+
+static const char *
+panthor_sched_prio_str(enum panthor_csg_priority prio)
+{
+ switch (prio) {
+ case PANTHOR_CSG_PRIORITY_LOW:
+ return "LOW";
+ case PANTHOR_CSG_PRIORITY_MEDIUM:
+ return "MEDIUM";
+ case PANTHOR_CSG_PRIORITY_HIGH:
+ return "HIGH";
+ case PANTHOR_CSG_PRIORITY_RT:
+ return "REAL-TIME";
+ default:
+ return "UNKNOWN";
+ }
+}
+
+static int show_file_groups(struct drm_file *file, struct seq_file *m)
+{
+ struct panthor_file *pfile = file->driver_priv;
+ struct panthor_group *group;
+ unsigned long i;
+
+ if (IS_ERR_OR_NULL(pfile->groups))
+ return -ENOENT;
+
+ xa_lock(&pfile->groups->xa);
+ xa_for_each_marked(&pfile->groups->xa, i, group, GROUP_REGISTERED) {
+ seq_printf(m, "client_id %8llu pid %8d command %s: group %2lu priority %s queue count %u\n",
+ file->client_id, group->task_info.pid, group->task_info.comm, i,
+ panthor_sched_prio_str(group->priority), group->queue_count);
+ }
+ xa_unlock(&pfile->groups->xa);
+
+ return 0;
+}
+
+static int show_each_file(struct seq_file *m, void *arg)
+{
+ struct drm_info_node *node = (struct drm_info_node *)m->private;
+ struct drm_device *ddev = node->minor->dev;
+ int (*show)(struct drm_file *, struct seq_file *) =
+ node->info_ent->data;
+ struct drm_file *file;
+ int ret;
+
+ scoped_cond_guard(mutex_intr, return -EINTR, &ddev->filelist_mutex) {
+ list_for_each_entry(file, &ddev->filelist, lhead) {
+ ret = show(file, m);
+ if (ret < 0)
+ return ret;
+ }
+ }
+
+ return 0;
+}
+
+static struct drm_info_list panthor_sched_debugfs_list[] = {
+ { "sched_groups", show_each_file, 0, show_file_groups },
+};
+
+void panthor_sched_debugfs_init(struct drm_minor *minor)
+{
+ drm_debugfs_create_files(panthor_sched_debugfs_list,
+ ARRAY_SIZE(panthor_sched_debugfs_list),
+ minor->debugfs_root, minor);
+}
+
+#endif /* CONFIG_DEBUG_FS */
diff --git a/drivers/gpu/drm/panthor/panthor_sched.h b/drivers/gpu/drm/panthor/panthor_sched.h
index 9a8692de8ade..d87cbdba4d40 100644
--- a/drivers/gpu/drm/panthor/panthor_sched.h
+++ b/drivers/gpu/drm/panthor/panthor_sched.h
@@ -10,6 +10,7 @@ struct drm_file;
struct drm_gem_object;
struct drm_sched_job;
struct drm_memory_stats;
+struct drm_minor;
struct drm_panthor_group_create;
struct drm_panthor_queue_create;
struct drm_panthor_group_get_state;
@@ -55,4 +56,8 @@ void panthor_sched_report_fw_events(struct panthor_device *ptdev, u32 events);
void panthor_fdinfo_gather_group_samples(struct panthor_file *pfile);
+#ifdef CONFIG_DEBUG_FS
+void panthor_sched_debugfs_init(struct drm_minor *minor);
+#endif
+
#endif
---
base-commit: 17c6b88e85ffe5de5720004ae8c2176d52944aca
change-id: 20260814-panthor-sched-group-prio-c987f6a15690
Best regards,
--
Nicolas Frattaroli <nicolas.frattaroli@collabora.com>
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH v3] drm/panthor: Display priorities of panthor groups over debugfs
2026-09-04 17:38 [PATCH v3] drm/panthor: Display priorities of panthor groups over debugfs Nicolas Frattaroli
@ 2026-09-07 7:28 ` Boris Brezillon
2026-09-08 11:08 ` Liviu Dudau
1 sibling, 0 replies; 3+ messages in thread
From: Boris Brezillon @ 2026-09-07 7:28 UTC (permalink / raw)
To: Nicolas Frattaroli
Cc: Steven Price, Liviu Dudau, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter, dri-devel,
linux-kernel, kernel
On Fri, 04 Sep 2026 19:38:09 +0200
Nicolas Frattaroli <nicolas.frattaroli@collabora.com> wrote:
> Analogous to what was added in Commit d41c79838c47 ("drm/panfrost:
> Display list of device JM contexts over debugfs") for panfrost, add
> similar debugfs information for panthor.
>
> The group priority does not change over the lifetime of the group, so no
> effort to synchronise with the scheduler lock is being made.
>
> Signed-off-by: Nicolas Frattaroli <nicolas.frattaroli@collabora.com>
Reviewed-by: Boris Brezillon <boris.brezillon@collabora.com>
> ---
> Changes in v3:
> - Move group number to after the per-file specific information, which
> helps readability
> - Link to v2: https://patch.msgid.link/20260831-panthor-sched-group-prio-v2-1-a74c79b4b830@collabora.com
>
> Changes in v2:
> - Take groups xa lock around the loop in show_file_groups to guard
> against group object UAF
> - Flatten the listing, removing most of the code in show_each_file,
> printing that info for each group instead
> - Also show queue count for each group
> - Link to v1: https://patch.msgid.link/20260818-panthor-sched-group-prio-v1-1-1836857c53e9@collabora.com
> ---
> drivers/gpu/drm/panthor/panthor_drv.c | 1 +
> drivers/gpu/drm/panthor/panthor_sched.c | 73 +++++++++++++++++++++++++++++++++
> drivers/gpu/drm/panthor/panthor_sched.h | 5 +++
> 3 files changed, 79 insertions(+)
>
> diff --git a/drivers/gpu/drm/panthor/panthor_drv.c b/drivers/gpu/drm/panthor/panthor_drv.c
> index 46a3080b0b20..8cdba0c1a14b 100644
> --- a/drivers/gpu/drm/panthor/panthor_drv.c
> +++ b/drivers/gpu/drm/panthor/panthor_drv.c
> @@ -1769,6 +1769,7 @@ static void panthor_debugfs_init(struct drm_minor *minor)
> {
> panthor_mmu_debugfs_init(minor);
> panthor_gem_debugfs_init(minor);
> + panthor_sched_debugfs_init(minor);
> }
> #endif
>
> diff --git a/drivers/gpu/drm/panthor/panthor_sched.c b/drivers/gpu/drm/panthor/panthor_sched.c
> index 60b2417deb81..ac6aee554820 100644
> --- a/drivers/gpu/drm/panthor/panthor_sched.c
> +++ b/drivers/gpu/drm/panthor/panthor_sched.c
> @@ -1,6 +1,7 @@
> // SPDX-License-Identifier: GPL-2.0 or MIT
> /* Copyright 2023 Collabora ltd. */
>
> +#include <drm/drm_debugfs.h>
> #include <drm/drm_drv.h>
> #include <drm/drm_exec.h>
> #include <drm/drm_file.h>
> @@ -4175,3 +4176,75 @@ int panthor_sched_init(struct panthor_device *ptdev)
> ptdev->scheduler = sched;
> return 0;
> }
> +
> +#ifdef CONFIG_DEBUG_FS
> +
> +static const char *
> +panthor_sched_prio_str(enum panthor_csg_priority prio)
> +{
> + switch (prio) {
> + case PANTHOR_CSG_PRIORITY_LOW:
> + return "LOW";
> + case PANTHOR_CSG_PRIORITY_MEDIUM:
> + return "MEDIUM";
> + case PANTHOR_CSG_PRIORITY_HIGH:
> + return "HIGH";
> + case PANTHOR_CSG_PRIORITY_RT:
> + return "REAL-TIME";
> + default:
> + return "UNKNOWN";
> + }
> +}
> +
> +static int show_file_groups(struct drm_file *file, struct seq_file *m)
> +{
> + struct panthor_file *pfile = file->driver_priv;
> + struct panthor_group *group;
> + unsigned long i;
> +
> + if (IS_ERR_OR_NULL(pfile->groups))
> + return -ENOENT;
> +
> + xa_lock(&pfile->groups->xa);
> + xa_for_each_marked(&pfile->groups->xa, i, group, GROUP_REGISTERED) {
> + seq_printf(m, "client_id %8llu pid %8d command %s: group %2lu priority %s queue count %u\n",
> + file->client_id, group->task_info.pid, group->task_info.comm, i,
> + panthor_sched_prio_str(group->priority), group->queue_count);
> + }
> + xa_unlock(&pfile->groups->xa);
> +
> + return 0;
> +}
> +
> +static int show_each_file(struct seq_file *m, void *arg)
> +{
> + struct drm_info_node *node = (struct drm_info_node *)m->private;
> + struct drm_device *ddev = node->minor->dev;
> + int (*show)(struct drm_file *, struct seq_file *) =
> + node->info_ent->data;
> + struct drm_file *file;
> + int ret;
> +
> + scoped_cond_guard(mutex_intr, return -EINTR, &ddev->filelist_mutex) {
> + list_for_each_entry(file, &ddev->filelist, lhead) {
> + ret = show(file, m);
> + if (ret < 0)
> + return ret;
> + }
> + }
> +
> + return 0;
> +}
> +
> +static struct drm_info_list panthor_sched_debugfs_list[] = {
> + { "sched_groups", show_each_file, 0, show_file_groups },
> +};
> +
> +void panthor_sched_debugfs_init(struct drm_minor *minor)
> +{
> + drm_debugfs_create_files(panthor_sched_debugfs_list,
> + ARRAY_SIZE(panthor_sched_debugfs_list),
> + minor->debugfs_root, minor);
> +}
> +
> +#endif /* CONFIG_DEBUG_FS */
> diff --git a/drivers/gpu/drm/panthor/panthor_sched.h b/drivers/gpu/drm/panthor/panthor_sched.h
> index 9a8692de8ade..d87cbdba4d40 100644
> --- a/drivers/gpu/drm/panthor/panthor_sched.h
> +++ b/drivers/gpu/drm/panthor/panthor_sched.h
> @@ -10,6 +10,7 @@ struct drm_file;
> struct drm_gem_object;
> struct drm_sched_job;
> struct drm_memory_stats;
> +struct drm_minor;
> struct drm_panthor_group_create;
> struct drm_panthor_queue_create;
> struct drm_panthor_group_get_state;
> @@ -55,4 +56,8 @@ void panthor_sched_report_fw_events(struct panthor_device *ptdev, u32 events);
>
> void panthor_fdinfo_gather_group_samples(struct panthor_file *pfile);
>
> +#ifdef CONFIG_DEBUG_FS
> +void panthor_sched_debugfs_init(struct drm_minor *minor);
> +#endif
> +
> #endif
>
> ---
> base-commit: 17c6b88e85ffe5de5720004ae8c2176d52944aca
> change-id: 20260814-panthor-sched-group-prio-c987f6a15690
>
> Best regards,
> --
> Nicolas Frattaroli <nicolas.frattaroli@collabora.com>
>
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH v3] drm/panthor: Display priorities of panthor groups over debugfs
2026-09-04 17:38 [PATCH v3] drm/panthor: Display priorities of panthor groups over debugfs Nicolas Frattaroli
2026-09-07 7:28 ` Boris Brezillon
@ 2026-09-08 11:08 ` Liviu Dudau
1 sibling, 0 replies; 3+ messages in thread
From: Liviu Dudau @ 2026-09-08 11:08 UTC (permalink / raw)
To: Nicolas Frattaroli
Cc: Boris Brezillon, Steven Price, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter, dri-devel,
linux-kernel, kernel
On Fri, Sep 04, 2026 at 07:38:09PM +0200, Nicolas Frattaroli wrote:
> Analogous to what was added in Commit d41c79838c47 ("drm/panfrost:
> Display list of device JM contexts over debugfs") for panfrost, add
> similar debugfs information for panthor.
>
> The group priority does not change over the lifetime of the group, so no
> effort to synchronise with the scheduler lock is being made.
>
> Signed-off-by: Nicolas Frattaroli <nicolas.frattaroli@collabora.com>
Reviewed-by: Liviu Dudau <liviu.dudau@arm.com>
Best regards,
Liviu
> ---
> Changes in v3:
> - Move group number to after the per-file specific information, which
> helps readability
> - Link to v2: https://patch.msgid.link/20260831-panthor-sched-group-prio-v2-1-a74c79b4b830@collabora.com
>
> Changes in v2:
> - Take groups xa lock around the loop in show_file_groups to guard
> against group object UAF
> - Flatten the listing, removing most of the code in show_each_file,
> printing that info for each group instead
> - Also show queue count for each group
> - Link to v1: https://patch.msgid.link/20260818-panthor-sched-group-prio-v1-1-1836857c53e9@collabora.com
> ---
> drivers/gpu/drm/panthor/panthor_drv.c | 1 +
> drivers/gpu/drm/panthor/panthor_sched.c | 73 +++++++++++++++++++++++++++++++++
> drivers/gpu/drm/panthor/panthor_sched.h | 5 +++
> 3 files changed, 79 insertions(+)
>
> diff --git a/drivers/gpu/drm/panthor/panthor_drv.c b/drivers/gpu/drm/panthor/panthor_drv.c
> index 46a3080b0b20..8cdba0c1a14b 100644
> --- a/drivers/gpu/drm/panthor/panthor_drv.c
> +++ b/drivers/gpu/drm/panthor/panthor_drv.c
> @@ -1769,6 +1769,7 @@ static void panthor_debugfs_init(struct drm_minor *minor)
> {
> panthor_mmu_debugfs_init(minor);
> panthor_gem_debugfs_init(minor);
> + panthor_sched_debugfs_init(minor);
> }
> #endif
>
> diff --git a/drivers/gpu/drm/panthor/panthor_sched.c b/drivers/gpu/drm/panthor/panthor_sched.c
> index 60b2417deb81..ac6aee554820 100644
> --- a/drivers/gpu/drm/panthor/panthor_sched.c
> +++ b/drivers/gpu/drm/panthor/panthor_sched.c
> @@ -1,6 +1,7 @@
> // SPDX-License-Identifier: GPL-2.0 or MIT
> /* Copyright 2023 Collabora ltd. */
>
> +#include <drm/drm_debugfs.h>
> #include <drm/drm_drv.h>
> #include <drm/drm_exec.h>
> #include <drm/drm_file.h>
> @@ -4175,3 +4176,75 @@ int panthor_sched_init(struct panthor_device *ptdev)
> ptdev->scheduler = sched;
> return 0;
> }
> +
> +#ifdef CONFIG_DEBUG_FS
> +
> +static const char *
> +panthor_sched_prio_str(enum panthor_csg_priority prio)
> +{
> + switch (prio) {
> + case PANTHOR_CSG_PRIORITY_LOW:
> + return "LOW";
> + case PANTHOR_CSG_PRIORITY_MEDIUM:
> + return "MEDIUM";
> + case PANTHOR_CSG_PRIORITY_HIGH:
> + return "HIGH";
> + case PANTHOR_CSG_PRIORITY_RT:
> + return "REAL-TIME";
> + default:
> + return "UNKNOWN";
> + }
> +}
> +
> +static int show_file_groups(struct drm_file *file, struct seq_file *m)
> +{
> + struct panthor_file *pfile = file->driver_priv;
> + struct panthor_group *group;
> + unsigned long i;
> +
> + if (IS_ERR_OR_NULL(pfile->groups))
> + return -ENOENT;
> +
> + xa_lock(&pfile->groups->xa);
> + xa_for_each_marked(&pfile->groups->xa, i, group, GROUP_REGISTERED) {
> + seq_printf(m, "client_id %8llu pid %8d command %s: group %2lu priority %s queue count %u\n",
> + file->client_id, group->task_info.pid, group->task_info.comm, i,
> + panthor_sched_prio_str(group->priority), group->queue_count);
> + }
> + xa_unlock(&pfile->groups->xa);
> +
> + return 0;
> +}
> +
> +static int show_each_file(struct seq_file *m, void *arg)
> +{
> + struct drm_info_node *node = (struct drm_info_node *)m->private;
> + struct drm_device *ddev = node->minor->dev;
> + int (*show)(struct drm_file *, struct seq_file *) =
> + node->info_ent->data;
> + struct drm_file *file;
> + int ret;
> +
> + scoped_cond_guard(mutex_intr, return -EINTR, &ddev->filelist_mutex) {
> + list_for_each_entry(file, &ddev->filelist, lhead) {
> + ret = show(file, m);
> + if (ret < 0)
> + return ret;
> + }
> + }
> +
> + return 0;
> +}
> +
> +static struct drm_info_list panthor_sched_debugfs_list[] = {
> + { "sched_groups", show_each_file, 0, show_file_groups },
> +};
> +
> +void panthor_sched_debugfs_init(struct drm_minor *minor)
> +{
> + drm_debugfs_create_files(panthor_sched_debugfs_list,
> + ARRAY_SIZE(panthor_sched_debugfs_list),
> + minor->debugfs_root, minor);
> +}
> +
> +#endif /* CONFIG_DEBUG_FS */
> diff --git a/drivers/gpu/drm/panthor/panthor_sched.h b/drivers/gpu/drm/panthor/panthor_sched.h
> index 9a8692de8ade..d87cbdba4d40 100644
> --- a/drivers/gpu/drm/panthor/panthor_sched.h
> +++ b/drivers/gpu/drm/panthor/panthor_sched.h
> @@ -10,6 +10,7 @@ struct drm_file;
> struct drm_gem_object;
> struct drm_sched_job;
> struct drm_memory_stats;
> +struct drm_minor;
> struct drm_panthor_group_create;
> struct drm_panthor_queue_create;
> struct drm_panthor_group_get_state;
> @@ -55,4 +56,8 @@ void panthor_sched_report_fw_events(struct panthor_device *ptdev, u32 events);
>
> void panthor_fdinfo_gather_group_samples(struct panthor_file *pfile);
>
> +#ifdef CONFIG_DEBUG_FS
> +void panthor_sched_debugfs_init(struct drm_minor *minor);
> +#endif
> +
> #endif
>
> ---
> base-commit: 17c6b88e85ffe5de5720004ae8c2176d52944aca
> change-id: 20260814-panthor-sched-group-prio-c987f6a15690
>
> Best regards,
> --
> Nicolas Frattaroli <nicolas.frattaroli@collabora.com>
>
--
====================
| I would like to |
| fix the world, |
| but they're not |
| giving me the |
\ source code! /
---------------
¯\_(ツ)_/¯
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2026-09-08 11:08 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-09-04 17:38 [PATCH v3] drm/panthor: Display priorities of panthor groups over debugfs Nicolas Frattaroli
2026-09-07 7:28 ` Boris Brezillon
2026-09-08 11:08 ` Liviu Dudau
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®