On 7/26/22 20:50, Rob Clark wrote: > +/** > + * drm_gem_lru_move_tail_locked - move the object to the tail of the LRU > + * > + * If the object is already in this LRU it will be moved to the > + * tail. Otherwise it will be removed from whichever other LRU > + * it is in (if any) and moved into this LRU. > + * > + * Call with LRU lock held. > + * > + * @lru: The LRU to move the object into. > + * @obj: The GEM object to move into this LRU > + */ > +void > +drm_gem_lru_move_tail_locked(struct drm_gem_lru *lru, struct drm_gem_object *obj) > +{ > + lockdep_assert_held_once(lru->lock); > + > + if (obj->lru) > + lru_remove(obj); The obj->lru also needs to be locked if lru != obj->lru, isn't it? And then we should add lockdep_assert_held_once(obj->lru->lock). -- Best regards, Dmitry