On 5/20/26 12:16, Thomas Hellström wrote: > Use __UNIQUE_ID as done elsewhere in the kernel rather than a > hand-rolled __PASTE to craft a unique id. > > Also use __maybe_unused rather than (void) to signify that a > variable, althrough written to, may not actually be used. > > v2: > - Move assignment to declaration (Christian) > - Declare the retry pointer as void *const. > > Signed-off-by: Thomas Hellström <[email protected]>
Reviewed-by: Christian König <[email protected]> > --- > include/drm/drm_exec.h | 21 ++++++++++++--------- > 1 file changed, 12 insertions(+), 9 deletions(-) > > diff --git a/include/drm/drm_exec.h b/include/drm/drm_exec.h > index dee6ebdbe416..18f84faabbb9 100644 > --- a/include/drm/drm_exec.h > +++ b/include/drm/drm_exec.h > @@ -95,6 +95,17 @@ drm_exec_obj(struct drm_exec *exec, unsigned long index) > #define drm_exec_for_each_locked_object_reverse(exec, obj) \ > __drm_exec_for_each_locked_object_reverse(exec, obj, > __UNIQUE_ID(drm_exec)) > > +/* > + * Helper to drm_exec_until_all_locked(). Don't use directly. > + * > + * Since labels can't be defined local to the loop's body we use a jump > pointer > + * to make sure that the retry is only used from within the loop's body. > + */ > +#define __drm_exec_until_all_locked(exec, _label) \ > +_label: > \ > + for (void *const __maybe_unused __drm_exec_retry_ptr = &&_label; \ > + drm_exec_cleanup(exec);) > + > /** > * drm_exec_until_all_locked - loop until all GEM objects are locked > * @exec: drm_exec object > @@ -102,17 +113,9 @@ drm_exec_obj(struct drm_exec *exec, unsigned long index) > * Core functionality of the drm_exec object. Loops until all GEM objects are > * locked and no more contention exists. At the beginning of the loop it is > * guaranteed that no GEM object is locked. > - * > - * Since labels can't be defined local to the loops body we use a jump > pointer > - * to make sure that the retry is only used from within the loops body. > */ > #define drm_exec_until_all_locked(exec) > \ > -__PASTE(__drm_exec_, __LINE__): > \ > - for (void *__drm_exec_retry_ptr; ({ \ > - __drm_exec_retry_ptr = &&__PASTE(__drm_exec_, __LINE__);\ > - (void)__drm_exec_retry_ptr; \ > - drm_exec_cleanup(exec); \ > - });) > + __drm_exec_until_all_locked(exec, __UNIQUE_ID(drm_exec)) > > /** > * drm_exec_retry_on_contention - restart the loop to grap all locks
