Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c3ea576e authored by Christian König's avatar Christian König Committed by Alex Deucher
Browse files

drm/ttm: add optional LRU removal callback v2



Useful for driver specific LRU handling.

v2: fix typo in comment

Reviewed-by: default avatarSinclair Yeh <syeh@vmware.com>
Signed-off-by: default avatarChristian König <christian.koenig@amd.com>
Reviewed-by: default avatarAlex Deucher <alexander.deucher@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 00cfd664
Loading
Loading
Loading
Loading
+7 −5
Original line number Diff line number Diff line
@@ -186,8 +186,12 @@ EXPORT_SYMBOL(ttm_bo_add_to_lru);

int ttm_bo_del_from_lru(struct ttm_buffer_object *bo)
{
	struct ttm_bo_device *bdev = bo->bdev;
	int put_count = 0;

	if (bdev->driver->lru_removal)
		bdev->driver->lru_removal(bo);

	if (!list_empty(&bo->swap)) {
		list_del_init(&bo->swap);
		++put_count;
@@ -197,11 +201,6 @@ int ttm_bo_del_from_lru(struct ttm_buffer_object *bo)
		++put_count;
	}

	/*
	 * TODO: Add a driver hook to delete from
	 * driver-specific LRU's here.
	 */

	return put_count;
}

@@ -235,6 +234,9 @@ void ttm_bo_move_to_lru_tail(struct ttm_buffer_object *bo)

	lockdep_assert_held(&bo->resv->lock.base);

	if (bdev->driver->lru_removal)
		bdev->driver->lru_removal(bo);

	if (bo->mem.placement & TTM_PL_FLAG_NO_EVICT) {
		list_del_init(&bo->swap);
		list_del_init(&bo->lru);
+6 −0
Original line number Diff line number Diff line
@@ -434,6 +434,12 @@ struct ttm_bo_driver {
	 */
	int (*io_mem_reserve)(struct ttm_bo_device *bdev, struct ttm_mem_reg *mem);
	void (*io_mem_free)(struct ttm_bo_device *bdev, struct ttm_mem_reg *mem);

	/**
	 * Optional driver callback for when BO is removed from the LRU.
	 * Called with LRU lock held immediately before the removal.
	 */
	void (*lru_removal)(struct ttm_buffer_object *bo);
};

/**