diff options
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c')
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c | 8 |
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 | ||
621 | out: | 620 | out: |
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; |
918 | out: | 919 | out: |
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 | } |