aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c')
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
index 5fdc0394561e..8727c3099554 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
@@ -608,7 +608,6 @@ static int amdgpu_cs_ib_vm_chunk(struct amdgpu_device *adev,
608 } 608 }
609 } 609 }
610 610
611 mutex_lock(&vm->mutex);
612 r = amdgpu_bo_vm_update_pte(parser, vm); 611 r = amdgpu_bo_vm_update_pte(parser, vm);
613 if (r) { 612 if (r) {
614 goto out; 613 goto out;
@@ -619,7 +618,6 @@ static int amdgpu_cs_ib_vm_chunk(struct amdgpu_device *adev,
619 parser->filp); 618 parser->filp);
620 619
621out: 620out:
622 mutex_unlock(&vm->mutex);
623 return r; 621 return r;
624} 622}
625 623
@@ -827,6 +825,8 @@ int amdgpu_cs_ioctl(struct drm_device *dev, void *data, struct drm_file *filp)
827{ 825{
828 struct amdgpu_device *adev = dev->dev_private; 826 struct amdgpu_device *adev = dev->dev_private;
829 union drm_amdgpu_cs *cs = data; 827 union drm_amdgpu_cs *cs = data;
828 struct amdgpu_fpriv *fpriv = filp->driver_priv;
829 struct amdgpu_vm *vm = &fpriv->vm;
830 struct amdgpu_cs_parser *parser; 830 struct amdgpu_cs_parser *parser;
831 bool reserved_buffers = false; 831 bool reserved_buffers = false;
832 int i, r; 832 int i, r;
@@ -844,7 +844,7 @@ int amdgpu_cs_ioctl(struct drm_device *dev, void *data, struct drm_file *filp)
844 r = amdgpu_cs_handle_lockup(adev, r); 844 r = amdgpu_cs_handle_lockup(adev, r);
845 return r; 845 return r;
846 } 846 }
847 847 mutex_lock(&vm->mutex);
848 r = amdgpu_cs_parser_relocs(parser); 848 r = amdgpu_cs_parser_relocs(parser);
849 if (r == -ENOMEM) 849 if (r == -ENOMEM)
850 DRM_ERROR("Not enough memory for command submission!\n"); 850 DRM_ERROR("Not enough memory for command submission!\n");
@@ -911,12 +911,14 @@ int amdgpu_cs_ioctl(struct drm_device *dev, void *data, struct drm_file *filp)
911 911
912 mutex_unlock(&job->job_lock); 912 mutex_unlock(&job->job_lock);
913 amdgpu_cs_parser_fini_late(parser); 913 amdgpu_cs_parser_fini_late(parser);
914 mutex_unlock(&vm->mutex);
914 return 0; 915 return 0;
915 } 916 }
916 917
917 cs->out.handle = parser->ibs[parser->num_ibs - 1].sequence; 918 cs->out.handle = parser->ibs[parser->num_ibs - 1].sequence;
918out: 919out:
919 amdgpu_cs_parser_fini(parser, r, reserved_buffers); 920 amdgpu_cs_parser_fini(parser, r, reserved_buffers);
921 mutex_unlock(&vm->mutex);
920 r = amdgpu_cs_handle_lockup(adev, r); 922 r = amdgpu_cs_handle_lockup(adev, r);
921 return r; 923 return r;
922} 924}