From: Tom Chung <[email protected]>

[Why]
Opening the CRC data file during active rendering can fail with -EINVAL.
The wait for commit->hw_done returns remaining jiffies on success, but
the CRC path was treating that as an error.

[How]
Handle wait_for_completion_interruptible_timeout() correctly:
positive return as success, 0 as timeout, and negative as error.

Reviewed-by: Ray Wu <[email protected]>
Signed-off-by: Tom Chung <[email protected]>
Signed-off-by: James Lin <[email protected]>
---
 drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crc.c | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crc.c 
b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crc.c
index 2663593aa35c..e9834d7b6534 100644
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crc.c
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crc.c
@@ -613,8 +613,13 @@ int amdgpu_dm_crtc_set_crc_source(struct drm_crtc *crtc, 
const char *src_name)
                 */
                ret = wait_for_completion_interruptible_timeout(
                        &commit->hw_done, 10 * HZ);
-               if (ret)
+               if (ret < 0)
+                       goto cleanup;
+
+               if (ret == 0) {
+                       ret = -ETIMEDOUT;
                        goto cleanup;
+               }
        }
 
        enable = amdgpu_dm_is_valid_crc_source(source);
-- 
2.43.0

Reply via email to