@@ -1561,12 +1561,10 @@ EXPORT_SYMBOL(drm_gem_unlock_reservations);
15611561 * drm_gem_lru_init - initialize a LRU
15621562 *
15631563 * @lru: The LRU to initialize
1564- * @lock: The lock protecting the LRU
15651564 */
15661565void
1567- drm_gem_lru_init (struct drm_gem_lru * lru , struct mutex * lock )
1566+ drm_gem_lru_init (struct drm_gem_lru * lru )
15681567{
1569- lru -> lock = lock ;
15701568 lru -> count = 0 ;
15711569 INIT_LIST_HEAD (& lru -> list );
15721570}
@@ -1591,14 +1589,10 @@ drm_gem_lru_remove_locked(struct drm_gem_object *obj)
15911589void
15921590drm_gem_lru_remove (struct drm_gem_object * obj )
15931591{
1594- struct drm_gem_lru * lru = obj -> lru ;
1595-
1596- if (!lru )
1597- return ;
1598-
1599- mutex_lock (lru -> lock );
1600- drm_gem_lru_remove_locked (obj );
1601- mutex_unlock (lru -> lock );
1592+ mutex_lock (& obj -> dev -> gem_lru_mutex );
1593+ if (obj -> lru )
1594+ drm_gem_lru_remove_locked (obj );
1595+ mutex_unlock (& obj -> dev -> gem_lru_mutex );
16021596}
16031597EXPORT_SYMBOL (drm_gem_lru_remove );
16041598
@@ -1613,7 +1607,7 @@ EXPORT_SYMBOL(drm_gem_lru_remove);
16131607void
16141608drm_gem_lru_move_tail_locked (struct drm_gem_lru * lru , struct drm_gem_object * obj )
16151609{
1616- lockdep_assert_held_once (lru -> lock );
1610+ lockdep_assert_held_once (& obj -> dev -> gem_lru_mutex );
16171611
16181612 if (obj -> lru )
16191613 drm_gem_lru_remove_locked (obj );
@@ -1637,9 +1631,9 @@ EXPORT_SYMBOL(drm_gem_lru_move_tail_locked);
16371631void
16381632drm_gem_lru_move_tail (struct drm_gem_lru * lru , struct drm_gem_object * obj )
16391633{
1640- mutex_lock (lru -> lock );
1634+ mutex_lock (& obj -> dev -> gem_lru_mutex );
16411635 drm_gem_lru_move_tail_locked (lru , obj );
1642- mutex_unlock (lru -> lock );
1636+ mutex_unlock (& obj -> dev -> gem_lru_mutex );
16431637}
16441638EXPORT_SYMBOL (drm_gem_lru_move_tail );
16451639
@@ -1653,14 +1647,16 @@ EXPORT_SYMBOL(drm_gem_lru_move_tail);
16531647 * of the shrink callback to check for this (ie. dma_resv_test_signaled())
16541648 * or if necessary block until the buffer becomes idle.
16551649 *
1650+ * @dev: DRM device the LRU belongs to
16561651 * @lru: The LRU to scan
16571652 * @nr_to_scan: The number of pages to try to reclaim
16581653 * @remaining: The number of pages left to reclaim, should be initialized by caller
16591654 * @shrink: Callback to try to shrink/reclaim the object.
16601655 * @ticket: Optional ww_acquire_ctx context to use for locking
16611656 */
16621657unsigned long
1663- drm_gem_lru_scan (struct drm_gem_lru * lru ,
1658+ drm_gem_lru_scan (struct drm_device * dev ,
1659+ struct drm_gem_lru * lru ,
16641660 unsigned int nr_to_scan ,
16651661 unsigned long * remaining ,
16661662 bool (* shrink )(struct drm_gem_object * obj , struct ww_acquire_ctx * ticket ),
@@ -1670,9 +1666,9 @@ drm_gem_lru_scan(struct drm_gem_lru *lru,
16701666 struct drm_gem_object * obj ;
16711667 unsigned freed = 0 ;
16721668
1673- drm_gem_lru_init (& still_in_lru , lru -> lock );
1669+ drm_gem_lru_init (& still_in_lru );
16741670
1675- mutex_lock (lru -> lock );
1671+ mutex_lock (& dev -> gem_lru_mutex );
16761672
16771673 while (freed < nr_to_scan ) {
16781674 obj = list_first_entry_or_null (& lru -> list , typeof (* obj ), lru_node );
@@ -1695,7 +1691,7 @@ drm_gem_lru_scan(struct drm_gem_lru *lru,
16951691 * rest of the loop body, to reduce contention with other
16961692 * code paths that need the LRU lock
16971693 */
1698- mutex_unlock (lru -> lock );
1694+ mutex_unlock (& dev -> gem_lru_mutex );
16991695
17001696 if (ticket )
17011697 ww_acquire_init (ticket , & reservation_ww_class );
@@ -1729,7 +1725,7 @@ drm_gem_lru_scan(struct drm_gem_lru *lru,
17291725
17301726tail :
17311727 drm_gem_object_put (obj );
1732- mutex_lock (lru -> lock );
1728+ mutex_lock (& dev -> gem_lru_mutex );
17331729 }
17341730
17351731 /*
@@ -1741,7 +1737,7 @@ drm_gem_lru_scan(struct drm_gem_lru *lru,
17411737 list_splice_tail (& still_in_lru .list , & lru -> list );
17421738 lru -> count += still_in_lru .count ;
17431739
1744- mutex_unlock (lru -> lock );
1740+ mutex_unlock (& dev -> gem_lru_mutex );
17451741
17461742 return freed ;
17471743}
0 commit comments