On 06-03-2026 06:34 pm, Christian König wrote:
On 3/6/26 12:33, Sunil Khatri wrote:
Debugfs files for amdgpu are better to be handled in the dedicated
amdgpu_debugfs.c/.h files.

Signed-off-by: Sunil Khatri <[email protected]>
---
  drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c | 53 +++++++++++++++++++++
  drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.h |  4 ++
  drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c   | 47 +-----------------
  3 files changed, 58 insertions(+), 46 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c
index f51c3443159d..63b702ec972b 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c
@@ -39,6 +39,7 @@
#include "amdgpu_reset.h"
  #include "amdgpu_psp_ta.h"
+#include "amdgpu_userq.h"
#if defined(CONFIG_DEBUG_FS) @@ -2156,6 +2157,53 @@ static const struct file_operations amdgpu_pt_info_fops = {
        .release = single_release,
  };
+static int amdgpu_mqd_info_read(struct seq_file *m, void *unused)
+{
+       struct amdgpu_usermode_queue *queue = m->private;
+       struct amdgpu_bo *bo;
+       int r;
+
+       if (!queue || !queue->mqd.obj)
+               return -EINVAL;
+
+       bo = amdgpu_bo_ref(queue->mqd.obj);
+       r = amdgpu_bo_reserve(bo, true);
+       if (r) {
+               amdgpu_bo_unref(&bo);
+               return -EINVAL;
+       }
+
+       seq_printf(m, "queue_type: %d\n", queue->queue_type);
+       seq_printf(m, "mqd_gpu_address: 0x%llx\n", 
amdgpu_bo_gpu_offset(queue->mqd.obj));
+
+       amdgpu_bo_unreserve(bo);
+       amdgpu_bo_unref(&bo);
+
+       return 0;
+}
+
+static int amdgpu_mqd_info_open(struct inode *inode, struct file *file)
+{
+       return single_open(file, amdgpu_mqd_info_read, inode->i_private);
+}
+
+static const struct file_operations amdgpu_mqd_info_fops = {
+       .owner = THIS_MODULE,
+       .open = amdgpu_mqd_info_open,
+       .read = seq_read,
+       .llseek = seq_lseek,
+       .release = single_release,
+};
+
+void amdgpu_debugfs_userq_init(struct drm_file *file, struct 
amdgpu_usermode_queue *queue, int qid)
+{
+       char queue_name[32];
+
+       scnprintf(queue_name, sizeof(queue_name), "queue_%d", qid);
+       queue->debugfs_queue = debugfs_create_dir(queue_name, 
file->debugfs_client);
+       debugfs_create_file("mqd_info", 0444, queue->debugfs_queue, queue, 
&amdgpu_mqd_info_fops);
+}
+
  void amdgpu_debugfs_vm_init(struct drm_file *file)
  {
        debugfs_create_file("vm_pagetable_info", 0444, file->debugfs_client, 
file,
@@ -2174,4 +2222,9 @@ int amdgpu_debugfs_regs_init(struct amdgpu_device *adev)
  void amdgpu_debugfs_vm_init(struct drm_file *file)
  {
  }
+void amdgpu_debugfs_userq_init(struct drm_file *file,
+                              struct amdgpu_usermode_queue *queue,
+                              int qid)
+{
+}
  #endif
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.h 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.h
index e7b3c38e5186..e88b4a1e564c 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.h
@@ -25,6 +25,7 @@
  /*
   * Debugfs
   */
+struct amdgpu_usermode_queue;
int amdgpu_debugfs_regs_init(struct amdgpu_device *adev);
  int amdgpu_debugfs_init(struct amdgpu_device *adev);
@@ -34,4 +35,7 @@ void amdgpu_debugfs_firmware_init(struct amdgpu_device *adev);
  void amdgpu_debugfs_gem_init(struct amdgpu_device *adev);
  void amdgpu_debugfs_mes_event_log_init(struct amdgpu_device *adev);
  void amdgpu_debugfs_vm_init(struct drm_file *file);
+void amdgpu_debugfs_userq_init(struct drm_file *file,
+                              struct amdgpu_usermode_queue *queue,
+                              int qid);
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c
index 1543ca324f43..472936f90c19 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_userq.c
@@ -709,46 +709,6 @@ static int amdgpu_userq_priority_permit(struct drm_file 
*filp,
        return -EACCES;
  }
-#if defined(CONFIG_DEBUG_FS)
-static int amdgpu_mqd_info_read(struct seq_file *m, void *unused)
-{
-       struct amdgpu_usermode_queue *queue = m->private;
-       struct amdgpu_bo *bo;
-       int r;
-
-       if (!queue || !queue->mqd.obj)
-               return -EINVAL;
-
-       bo = amdgpu_bo_ref(queue->mqd.obj);
-       r = amdgpu_bo_reserve(bo, true);
-       if (r) {
-               amdgpu_bo_unref(&bo);
-               return -EINVAL;
-       }
-
-       seq_printf(m, "queue_type: %d\n", queue->queue_type);
-       seq_printf(m, "mqd_gpu_address: 0x%llx\n", 
amdgpu_bo_gpu_offset(queue->mqd.obj));
-
-       amdgpu_bo_unreserve(bo);
-       amdgpu_bo_unref(&bo);
-
-       return 0;
-}
-
-static int amdgpu_mqd_info_open(struct inode *inode, struct file *file)
-{
-       return single_open(file, amdgpu_mqd_info_read, inode->i_private);
-}
-
-static const struct file_operations amdgpu_mqd_info_fops = {
-       .owner = THIS_MODULE,
-       .open = amdgpu_mqd_info_open,
-       .read = seq_read,
-       .llseek = seq_lseek,
-       .release = single_release,
-};
-#endif
-
  static int
  amdgpu_userq_create(struct drm_file *filp, union drm_amdgpu_userq *args)
  {
@@ -886,12 +846,7 @@ amdgpu_userq_create(struct drm_file *filp, union 
drm_amdgpu_userq *args)
        up_read(&adev->reset_domain->sem);
#if defined(CONFIG_DEBUG_FS)
-       char queue_name[32];
-
-       scnprintf(queue_name, sizeof(queue_name), "queue_%d", qid);
-       /* Queue dentry per client to hold MQD information   */
-       queue->debugfs_queue = debugfs_create_dir(queue_name, 
filp->debugfs_client);
-       debugfs_create_file("mqd_info", 0444, queue->debugfs_queue, queue, 
&amdgpu_mqd_info_fops);
+       amdgpu_debugfs_userq_init(filp, queue, qid);
  #endif
That #if defined protection can now be dropped.
Ah, yes this ain't needed anymore. Will drop that check and push the code. Thanks for the review Christian.

Thanks
Sunil Khatri

With that fixed Reviewed-by: Christian König <[email protected]>.

Regards,
Christian.

        amdgpu_userq_init_hang_detect_work(queue);

Reply via email to