[PATCH 3/4] drm/msm/debugfs: Use cleanup.h for gpu state dump
From: Rob Clark
Date: Sun Nov 01 2026 - 12:47:50 EST
We need to move the gpu lock around a bit for the next patch. Use
scoped_guard/etc so we don't have to make the error path handling more
complicated.
Signed-off-by: Rob Clark <robin.clark@xxxxxxxxxxxxxxxx>
---
drivers/gpu/drm/msm/msm_debugfs.c | 31 ++++++++++++-------------------
1 file changed, 12 insertions(+), 19 deletions(-)
diff --git a/drivers/gpu/drm/msm/msm_debugfs.c b/drivers/gpu/drm/msm/msm_debugfs.c
index f12701e286ec..b0ddc02f67b5 100644
--- a/drivers/gpu/drm/msm/msm_debugfs.c
+++ b/drivers/gpu/drm/msm/msm_debugfs.c
@@ -70,43 +70,36 @@ static int msm_gpu_open(struct inode *inode, struct file *file)
struct drm_device *dev = inode->i_private;
struct msm_drm_private *priv = dev->dev_private;
struct msm_gpu *gpu = priv->gpu;
- struct msm_gpu_show_priv *show_priv;
int ret;
if (!gpu || !gpu->funcs->gpu_state_get)
return -ENODEV;
- show_priv = kmalloc_obj(*show_priv);
+ struct msm_gpu_show_priv *show_priv __free(kfree)
+ = kmalloc_obj(*show_priv);
if (!show_priv)
return -ENOMEM;
- ret = mutex_lock_interruptible(&gpu->lock);
- if (ret)
- goto free_priv;
-
- pm_runtime_get_sync(&gpu->pdev->dev);
- msm_gpu_hw_init(gpu);
- show_priv->state = gpu->funcs->gpu_state_get(gpu);
- pm_runtime_put_sync(&gpu->pdev->dev);
-
- mutex_unlock(&gpu->lock);
+ scoped_guard (pm_runtime_active, &gpu->pdev->dev) {
+ scoped_cond_guard (mutex_intr, return PTR_ERR(scope.lock), &gpu->lock) {
+ msm_gpu_hw_init(gpu);
+ show_priv->state = gpu->funcs->gpu_state_get(gpu);
+ }
+ }
if (IS_ERR(show_priv->state)) {
- ret = PTR_ERR(show_priv->state);
- goto free_priv;
+ return PTR_ERR(show_priv->state);
}
show_priv->dev = dev;
ret = single_open(file, msm_gpu_show, show_priv);
if (ret)
- goto free_priv;
+ return ret;
- return 0;
+ retain_and_null_ptr(show_priv);
-free_priv:
- kfree(show_priv);
- return ret;
+ return 0;
}
static const struct file_operations msm_gpu_fops = {
--
2.56.0