On Thu, Aug 26, 2021 at 2:33 AM Daniel Vetter <daniel.vetter@xxxxxxxx> wrote: > > Originally drm_sched_job_init was the point of no return, after which > drivers really should submit a job. I've split that up, which allows > us to fix this issue pretty easily. > > Only thing we have to take care of is to not skip to error paths after > that. Other drivers do this the same for out-fence and similar things. > > v2: It's not really a bugfix, just an improvement, since all > drm_sched_job_arm does is reserve the fence number. And gaps should be > fine, as long as the drm_sched_job doesn't escape anywhere at all. > > For robustness it's still better to align with other drivers here and > not bail out after job_arm(). > > v3: I misplaced drm_sched_job_arm by _one_ line! Thanks to Rob for > testing and debug help. > > Cc: Rob Clark <robdclark@xxxxxxxxxxxx> > Cc: Rob Clark <robdclark@xxxxxxxxx> > Cc: Sean Paul <sean@xxxxxxxxxx> > Cc: Sumit Semwal <sumit.semwal@xxxxxxxxxx> > Cc: "Christian König" <christian.koenig@xxxxxxx> > Cc: linux-arm-msm@xxxxxxxxxxxxxxx > Cc: dri-devel@xxxxxxxxxxxxxxxxxxxxx > Cc: freedreno@xxxxxxxxxxxxxxxxxxxxx > Cc: linux-media@xxxxxxxxxxxxxxx > Cc: linaro-mm-sig@xxxxxxxxxxxxxxxx > Signed-off-by: Daniel Vetter <daniel.vetter@xxxxxxxxx> t-b && r-b BR, -R > --- > drivers/gpu/drm/msm/msm_gem_submit.c | 13 ++++++------- > 1 file changed, 6 insertions(+), 7 deletions(-) > > diff --git a/drivers/gpu/drm/msm/msm_gem_submit.c b/drivers/gpu/drm/msm/msm_gem_submit.c > index 4d1c4d5f6a2a..71b8c8f752a3 100644 > --- a/drivers/gpu/drm/msm/msm_gem_submit.c > +++ b/drivers/gpu/drm/msm/msm_gem_submit.c > @@ -52,8 +52,6 @@ static struct msm_gem_submit *submit_create(struct drm_device *dev, > return ERR_PTR(ret); > } > > - drm_sched_job_arm(&job->base); > - > xa_init_flags(&submit->deps, XA_FLAGS_ALLOC); > > kref_init(&submit->ref); > @@ -880,6 +878,8 @@ int msm_ioctl_gem_submit(struct drm_device *dev, void *data, > > submit->nr_cmds = i; > > + drm_sched_job_arm(&submit->base); > + > submit->user_fence = dma_fence_get(&submit->base.s_fence->finished); > > /* > @@ -891,17 +891,16 @@ int msm_ioctl_gem_submit(struct drm_device *dev, void *data, > if (submit->fence_id < 0) { > ret = submit->fence_id = 0; > submit->fence_id = 0; > - goto out; > } > > - if (args->flags & MSM_SUBMIT_FENCE_FD_OUT) { > + if (ret == 0 && args->flags & MSM_SUBMIT_FENCE_FD_OUT) { > struct sync_file *sync_file = sync_file_create(submit->user_fence); > if (!sync_file) { > ret = -ENOMEM; > - goto out; > + } else { > + fd_install(out_fence_fd, sync_file->file); > + args->fence_fd = out_fence_fd; > } > - fd_install(out_fence_fd, sync_file->file); > - args->fence_fd = out_fence_fd; > } > > submit_attach_object_fences(submit); > -- > 2.32.0 >