On 7/29/22 18:40, Rob Clark wrote: > On Fri, Jul 29, 2022 at 8:27 AM Dmitry Osipenko > <dmitry.osipenko@xxxxxxxxxxxxx> wrote: >> >> 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). >> > > It is expected (mentioned in comment on drm_gem_lru::lock) that all > lru's are sharing the same lock. Possibly that could be made more > obvious? Having per-lru locks wouldn't really work for accessing the > single drm_gem_object::lru_node. Right, my bad. I began to update the DRM-SHMEM shrinker patches on top of the shrinker helper, but missed that the lock is shared when was looking at this patch again today. Adding comment to the code about the shared lock may help a tad, but it's not really necessary. It was my fault that I forgot about it. Thank you! -- Best regards, Dmitry