@@ -709,7 +709,7 @@ int msm_ioctl_gem_submit(struct drm_device *dev, void *data,
709
709
struct msm_drm_private * priv = dev -> dev_private ;
710
710
struct drm_msm_gem_submit * args = data ;
711
711
struct msm_file_private * ctx = file -> driver_priv ;
712
- struct msm_gem_submit * submit ;
712
+ struct msm_gem_submit * submit = NULL ;
713
713
struct msm_gpu * gpu = priv -> gpu ;
714
714
struct msm_gpu_submitqueue * queue ;
715
715
struct msm_ringbuffer * ring ;
@@ -753,7 +753,7 @@ int msm_ioctl_gem_submit(struct drm_device *dev, void *data,
753
753
trace_msm_gpu_submit (pid_nr (pid ), ring -> id , submitid ,
754
754
args -> nr_bos , args -> nr_cmds );
755
755
756
- ret = mutex_lock_interruptible (& dev -> struct_mutex );
756
+ ret = mutex_lock_interruptible (& queue -> lock );
757
757
if (ret )
758
758
goto out_post_unlock ;
759
759
@@ -874,10 +874,8 @@ int msm_ioctl_gem_submit(struct drm_device *dev, void *data,
874
874
* Allocate an id which can be used by WAIT_FENCE ioctl to map back
875
875
* to the underlying fence.
876
876
*/
877
- mutex_lock (& queue -> lock );
878
877
submit -> fence_id = idr_alloc_cyclic (& queue -> fence_idr ,
879
878
submit -> user_fence , 0 , INT_MAX , GFP_KERNEL );
880
- mutex_unlock (& queue -> lock );
881
879
if (submit -> fence_id < 0 ) {
882
880
ret = submit -> fence_id = 0 ;
883
881
submit -> fence_id = 0 ;
@@ -912,12 +910,12 @@ int msm_ioctl_gem_submit(struct drm_device *dev, void *data,
912
910
submit_cleanup (submit , !!ret );
913
911
if (has_ww_ticket )
914
912
ww_acquire_fini (& submit -> ticket );
915
- msm_gem_submit_put (submit );
916
913
out_unlock :
917
914
if (ret && (out_fence_fd >= 0 ))
918
915
put_unused_fd (out_fence_fd );
919
- mutex_unlock (& dev -> struct_mutex );
920
-
916
+ mutex_unlock (& queue -> lock );
917
+ if (submit )
918
+ msm_gem_submit_put (submit );
921
919
out_post_unlock :
922
920
if (!IS_ERR_OR_NULL (post_deps )) {
923
921
for (i = 0 ; i < args -> nr_out_syncobjs ; ++ i ) {
0 commit comments