diff options
Diffstat (limited to 'drivers/gpu/drm/drm_gem.c')
| -rw-r--r-- | drivers/gpu/drm/drm_gem.c | 9 | 
1 files changed, 7 insertions, 2 deletions
| diff --git a/drivers/gpu/drm/drm_gem.c b/drivers/gpu/drm/drm_gem.c index 7a3cb08dc942..a5d392f7e11f 100644 --- a/drivers/gpu/drm/drm_gem.c +++ b/drivers/gpu/drm/drm_gem.c @@ -1388,10 +1388,13 @@ EXPORT_SYMBOL(drm_gem_lru_move_tail);   *   * @lru: The LRU to scan   * @nr_to_scan: The number of pages to try to reclaim + * @remaining: The number of pages left to reclaim, should be initialized by caller   * @shrink: Callback to try to shrink/reclaim the object.   */  unsigned long -drm_gem_lru_scan(struct drm_gem_lru *lru, unsigned nr_to_scan, +drm_gem_lru_scan(struct drm_gem_lru *lru, +		 unsigned int nr_to_scan, +		 unsigned long *remaining,  		 bool (*shrink)(struct drm_gem_object *obj))  {  	struct drm_gem_lru still_in_lru; @@ -1430,8 +1433,10 @@ drm_gem_lru_scan(struct drm_gem_lru *lru, unsigned nr_to_scan,  		 * hit shrinker in response to trying to get backing pages  		 * for this obj (ie. while it's lock is already held)  		 */ -		if (!dma_resv_trylock(obj->resv)) +		if (!dma_resv_trylock(obj->resv)) { +			*remaining += obj->size >> PAGE_SHIFT;  			goto tail; +		}  		if (shrink(obj)) {  			freed += obj->size >> PAGE_SHIFT; |