[PATCH] drm/amdgpu/userq: move runpm handling into core userq code

Khatri, Sunil sukhatri at amd.com
Mon Apr 14 09:19:10 UTC 2025


On 4/13/2025 11:54 PM, Alex Deucher wrote:
> 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<alexander.deucher at amd.com>
> ---
>   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");
We should update the comment "pm_runtime_get_sync() failed for userqueue 
create". With that change its reviewed. Reviewed-by: Sunil Khatri 
<sunil.khatri at amd.com>
Regards Sunil Khatri
> -		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 = {
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/amd-gfx/attachments/20250414/308407e8/attachment.htm>


More information about the amd-gfx mailing list