Re: [PATCH] drm/radeon: Prevent multiple error lines on suspend

From: Christian König
Date: Mon Dec 11 2023 - 05:55:03 EST


Am 10.12.23 um 19:24 schrieb Woody Suwalski:
Hello, it has been now over 2 weeks and I have not seen any response to this patch.
Has it been lost in the cracks of the wide internet ? :-(

Well your patch is malformed ("#" before each line in the commit message) and probably ended up being ignored because of that.

Apart from that it would probably be much easier to move the call to radeon_debugfs_ring_init() into the if (ring->ring_obj == NULL) check in the caller.

Regards,
Christian.


Thanks, Woody


Woody Suwalski wrote:
# Fix to avoid multiple error lines printed on every suspend by Radeon driver's debugfs.
#
# radeon_debugfs_init() calls debugfs_create_file() for every ring.
#
# This results in printing multiple error lines to the screen and dmesg similar to this:
# debugfs: File 'radeon_ring_vce2' in directory '0000:00:01.0' already present!
#
# The fix is to run lookup for the file before trying to (re)create that debug file.

# Signed-off-by: Woody Suwalski <terraluna977@xxxxxxxxx>

diff --git a/drivers/gpu/drm/radeon/radeon_ring.c b/drivers/gpu/drm/radeon/radeon_ring.c
index e6534fa9f1fb..72b1d2d31295 100644
--- a/drivers/gpu/drm/radeon/radeon_ring.c
+++ b/drivers/gpu/drm/radeon/radeon_ring.c
@@ -549,10 +549,15 @@ static void radeon_debugfs_ring_init(struct radeon_device *rdev, struct radeon_r
 #if defined(CONFIG_DEBUG_FS)
     const char *ring_name = radeon_debugfs_ring_idx_to_name(ring->idx);
     struct dentry *root = rdev->ddev->primary->debugfs_root;
-
-    if (ring_name)
-        debugfs_create_file(ring_name, 0444, root, ring,
-                    &radeon_debugfs_ring_info_fops);
+    struct dentry *lookup;
+
+    if (ring_name) {
+        if ((lookup = debugfs_lookup(ring_name, root)) == NULL)
+            debugfs_create_file(ring_name, 0444, root, ring,
+                        &radeon_debugfs_ring_info_fops);
+        else
+            dput(lookup);
+    }

 #endif
 }