<!DOCTYPE html><html><head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
<p><br>
</p>
<div class="moz-cite-prefix">On 4/13/2025 11:54 PM, Alex Deucher
wrote:<br>
</div>
<blockquote type="cite" cite="mid:20250413182415.2712146-1-alexander.deucher@amd.com">
<pre wrap="" class="moz-quote-pre">Pull it out of the MES code and into the generic code.
It's not MES specific and needs to be applied to all user
queues regardless of the backend.
Signed-off-by: Alex Deucher <a class="moz-txt-link-rfc2396E" href="mailto:alexander.deucher@amd.com"><alexander.deucher@amd.com></a>
---
drivers/gpu/drm/amd/amdgpu/amdgpu_userqueue.c | 13 +++++++++++++
drivers/gpu/drm/amd/amdgpu/mes_userqueue.c | 15 ---------------
2 files changed, 13 insertions(+), 15 deletions(-)
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_userqueue.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_userqueue.c
index 98e1ed794c346..08a94822eb17c 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_userqueue.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_userqueue.c
@@ -24,6 +24,8 @@
#include <drm/drm_auth.h>
#include <drm/drm_exec.h>
+#include <linux/pm_runtime.h>
+
#include "amdgpu.h"
#include "amdgpu_vm.h"
#include "amdgpu_userqueue.h"
@@ -258,6 +260,10 @@ amdgpu_userqueue_destroy(struct drm_file *filp, int queue_id)
amdgpu_bo_unref(&queue->db_obj.obj);
amdgpu_userqueue_cleanup(uq_mgr, queue, queue_id);
mutex_unlock(&uq_mgr->userq_mutex);
+
+ pm_runtime_mark_last_busy(adev_to_drm(adev)->dev);
+ pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);
+
return r;
}
@@ -311,6 +317,13 @@ amdgpu_userqueue_create(struct drm_file *filp, union drm_amdgpu_userq *args)
return -EINVAL;
}
+ r = pm_runtime_get_sync(adev_to_drm(adev)->dev);
+ if (r < 0) {
+ dev_err(adev->dev, "pm_runtime_get_sync() failed for userqueue mqd create\n");
+ pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);
+ return r;
+ }
+
/*
* There could be a situation that we are creating a new queue while
* the other queues under this UQ_mgr are suspended. So if there is any
diff --git a/drivers/gpu/drm/amd/amdgpu/mes_userqueue.c b/drivers/gpu/drm/amd/amdgpu/mes_userqueue.c
index e175f05bba6a9..b3157df8ae107 100644
--- a/drivers/gpu/drm/amd/amdgpu/mes_userqueue.c
+++ b/drivers/gpu/drm/amd/amdgpu/mes_userqueue.c
@@ -25,7 +25,6 @@
#include "amdgpu_gfx.h"
#include "mes_userqueue.h"
#include "amdgpu_userq_fence.h"
-#include <linux/pm_runtime.h>
#define AMDGPU_USERQ_PROC_CTX_SZ PAGE_SIZE
#define AMDGPU_USERQ_GANG_CTX_SZ PAGE_SIZE
@@ -313,12 +312,6 @@ static int mes_userq_mqd_create(struct amdgpu_userq_mgr *uq_mgr,
queue->userq_prop = userq_props;
- r = pm_runtime_get_sync(adev_to_drm(adev)->dev);
- if (r < 0) {
- dev_err(adev->dev, "pm_runtime_get_sync() failed for userqueue mqd create\n");</pre>
</blockquote>
We should update the comment "<span style="white-space: pre-wrap">pm_runtime_get_sync() failed for userqueue create". With that change its reviewed.
</span>Reviewed-by:
Sunil Khatri <a class="moz-txt-link-rfc2396E" href="mailto:sunil.khatri@amd.com"><sunil.khatri@amd.com></a><br>
<span style="white-space: pre-wrap">
Regards
Sunil Khatri
</span>
<blockquote type="cite" cite="mid:20250413182415.2712146-1-alexander.deucher@amd.com">
<pre wrap="" class="moz-quote-pre">
- goto deference_pm;
- }
-
r = mqd_hw_default->init_mqd(adev, (void *)queue->mqd.cpu_ptr, userq_props);
if (r) {
DRM_ERROR("Failed to initialize MQD for userqueue\n");
@@ -346,9 +339,6 @@ static int mes_userq_mqd_create(struct amdgpu_userq_mgr *uq_mgr,
free_mqd:
amdgpu_userqueue_destroy_object(uq_mgr, &queue->mqd);
- pm_runtime_mark_last_busy(adev_to_drm(adev)->dev);
-deference_pm:
- pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);
free_props:
kfree(userq_props);
@@ -360,14 +350,9 @@ static void
mes_userq_mqd_destroy(struct amdgpu_userq_mgr *uq_mgr,
struct amdgpu_usermode_queue *queue)
{
- struct amdgpu_device *adev = uq_mgr->adev;
-
amdgpu_userqueue_destroy_object(uq_mgr, &queue->fw_obj);
kfree(queue->userq_prop);
amdgpu_userqueue_destroy_object(uq_mgr, &queue->mqd);
-
- pm_runtime_mark_last_busy(adev_to_drm(adev)->dev);
- pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);
}
const struct amdgpu_userq_funcs userq_mes_funcs = {
</pre>
</blockquote>
</body>
</html>