From: Pierre-Eric Pelloux-Prayer <[email protected]>

For now use the same logic as the existing one, but it's not 100%
correct since:
1) most operations don't need the GPUs
2) some operations that need it are actually deferred

Signed-off-by: Pierre-Eric Pelloux-Prayer <[email protected]>
Signed-off-by: Shahyan Soltani <[email protected]>
---
 drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
index 4e4814caf61a..6edd03647c2d 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
@@ -978,6 +978,14 @@ int amdgpu_gem_va_ioctl(struct drm_device *dev, void *data,
        if (r)
                goto error;
 
+       /* FIXME: only PRT operations use the GPU to update mapping, but
+        * some operations are deferred to fences callbacks so it's not
+        * trivial to fix.
+        */
+       r = pm_runtime_resume_and_get(adev->dev);
+       if (r < 0)
+               return r;
+
        switch (args->operation) {
        case AMDGPU_VA_OP_MAP:
                r = amdgpu_vm_bo_map(adev, bo_va, args->va_address,
@@ -1031,6 +1039,8 @@ int amdgpu_gem_va_ioctl(struct drm_device *dev, void 
*data,
 
        }
 
+       pm_runtime_put_autosuspend(adev->dev);
+
 error:
        dma_fence_chain_free(timeline_chain);
        if (timeline_syncobj)
-- 
2.55.0

Reply via email to