On 3/31/26 11:20, Thomas Hellström wrote: > The code was reading drm_exec internal state to determine whether > the drm_exec structure had been initialized or not, and therefore > needed cleaning up, relying on undocumented behaviour. > > Instead add a bool to struct msm_gem_submit to indicate whether > drm_exec cleaning up is needed. > > Signed-off-by: Thomas Hellström <[email protected]>
Acked-by: Christian König <[email protected]> > --- > drivers/gpu/drm/msm/msm_gem.h | 1 + > drivers/gpu/drm/msm/msm_gem_submit.c | 4 +++- > 2 files changed, 4 insertions(+), 1 deletion(-) > > diff --git a/drivers/gpu/drm/msm/msm_gem.h b/drivers/gpu/drm/msm/msm_gem.h > index cb32093fda47..762e546d25ef 100644 > --- a/drivers/gpu/drm/msm/msm_gem.h > +++ b/drivers/gpu/drm/msm/msm_gem.h > @@ -452,6 +452,7 @@ struct msm_gem_submit { > bool bos_pinned : 1; > bool fault_dumped:1;/* Limit devcoredump dumping to one per submit */ > bool in_rb : 1; /* "sudo" mode, copy cmds into RB */ > + bool has_exec : 1; /* @exec is initialized. */ > struct msm_ringbuffer *ring; > unsigned int nr_cmds; > unsigned int nr_bos; > diff --git a/drivers/gpu/drm/msm/msm_gem_submit.c > b/drivers/gpu/drm/msm/msm_gem_submit.c > index 75d9f3574370..26ea8a28be47 100644 > --- a/drivers/gpu/drm/msm/msm_gem_submit.c > +++ b/drivers/gpu/drm/msm/msm_gem_submit.c > @@ -278,6 +278,7 @@ static int submit_lock_objects_vmbind(struct > msm_gem_submit *submit) > int ret = 0; > > drm_exec_init(&submit->exec, flags, submit->nr_bos); > + submit->has_exec = true; > > drm_exec_until_all_locked (&submit->exec) { > ret = drm_gpuvm_prepare_vm(submit->vm, exec, 1); > @@ -304,6 +305,7 @@ static int submit_lock_objects(struct msm_gem_submit > *submit) > return submit_lock_objects_vmbind(submit); > > drm_exec_init(&submit->exec, flags, submit->nr_bos); > + submit->has_exec = true; > > drm_exec_until_all_locked (&submit->exec) { > ret = drm_exec_lock_obj(&submit->exec, > @@ -523,7 +525,7 @@ static void submit_cleanup(struct msm_gem_submit *submit, > bool error) > if (error) > submit_unpin_objects(submit); > > - if (submit->exec.objects) > + if (submit->has_exec) > drm_exec_fini(&submit->exec); > > /* if job wasn't enqueued to scheduler, early retirement: */
