mirror of
https://github.com/torvalds/linux.git
synced 2026-05-26 08:02:27 +02:00
drm/amdgpu/userq: move runpm handling into core userq code
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. Reviewed-by: Sunil Khatri <sunil.khatri@amd.com> Reviewed-by: Shaoyun.liu <Shaoyun.liu@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
9315860d05
commit
987718c559
|
|
@ -23,6 +23,8 @@
|
|||
*/
|
||||
|
||||
#include <drm/drm_exec.h>
|
||||
#include <linux/pm_runtime.h>
|
||||
|
||||
#include "amdgpu.h"
|
||||
#include "amdgpu_vm.h"
|
||||
#include "amdgpu_userqueue.h"
|
||||
|
|
@ -257,6 +259,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;
|
||||
}
|
||||
|
||||
|
|
@ -280,6 +286,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 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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
@ -294,12 +293,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");
|
||||
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");
|
||||
|
|
@ -327,9 +320,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);
|
||||
|
|
@ -341,14 +331,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 = {
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user