Commit afaf2b38 authored by Daniel Vetter's avatar Daniel Vetter

Merge tag 'drm-misc-next-fixes-2023-09-11' of...

Merge tag 'drm-misc-next-fixes-2023-09-11' of git://anongit.freedesktop.org/drm/drm-misc into drm-fixes

Short summary of fixes pull:

 * nouveau: Lockdep workaround
 * fbdev/g364fb: Build fix
Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
From: Thomas Zimmermann <tzimmermann@suse.de>
Link: https://patchwork.freedesktop.org/patch/msgid/20230911141915.GA983@linux-uq9g
parents 0bb80ecc d20b484c
...@@ -56,7 +56,7 @@ static void drm_exec_unlock_all(struct drm_exec *exec) ...@@ -56,7 +56,7 @@ static void drm_exec_unlock_all(struct drm_exec *exec)
struct drm_gem_object *obj; struct drm_gem_object *obj;
unsigned long index; unsigned long index;
drm_exec_for_each_locked_object(exec, index, obj) { drm_exec_for_each_locked_object_reverse(exec, index, obj) {
dma_resv_unlock(obj->resv); dma_resv_unlock(obj->resv);
drm_gem_object_put(obj); drm_gem_object_put(obj);
} }
......
...@@ -51,6 +51,20 @@ struct drm_exec { ...@@ -51,6 +51,20 @@ struct drm_exec {
struct drm_gem_object *prelocked; struct drm_gem_object *prelocked;
}; };
/**
* drm_exec_obj() - Return the object for a give drm_exec index
* @exec: Pointer to the drm_exec context
* @index: The index.
*
* Return: Pointer to the locked object corresponding to @index if
* index is within the number of locked objects. NULL otherwise.
*/
static inline struct drm_gem_object *
drm_exec_obj(struct drm_exec *exec, unsigned long index)
{
return index < exec->num_objects ? exec->objects[index] : NULL;
}
/** /**
* drm_exec_for_each_locked_object - iterate over all the locked objects * drm_exec_for_each_locked_object - iterate over all the locked objects
* @exec: drm_exec object * @exec: drm_exec object
...@@ -59,10 +73,23 @@ struct drm_exec { ...@@ -59,10 +73,23 @@ struct drm_exec {
* *
* Iterate over all the locked GEM objects inside the drm_exec object. * Iterate over all the locked GEM objects inside the drm_exec object.
*/ */
#define drm_exec_for_each_locked_object(exec, index, obj) \ #define drm_exec_for_each_locked_object(exec, index, obj) \
for (index = 0, obj = (exec)->objects[0]; \ for ((index) = 0; ((obj) = drm_exec_obj(exec, index)); ++(index))
index < (exec)->num_objects; \
++index, obj = (exec)->objects[index]) /**
* drm_exec_for_each_locked_object_reverse - iterate over all the locked
* objects in reverse locking order
* @exec: drm_exec object
* @index: unsigned long index for the iteration
* @obj: the current GEM object
*
* Iterate over all the locked GEM objects inside the drm_exec object in
* reverse locking order. Note that @index may go below zero and wrap,
* but that will be caught by drm_exec_obj(), returning a NULL object.
*/
#define drm_exec_for_each_locked_object_reverse(exec, index, obj) \
for ((index) = (exec)->num_objects - 1; \
((obj) = drm_exec_obj(exec, index)); --(index))
/** /**
* drm_exec_until_all_locked - loop until all GEM objects are locked * drm_exec_until_all_locked - loop until all GEM objects are locked
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment