Commit 1f463794 authored by Thomas Hellström's avatar Thomas Hellström Committed by Christian König
Browse files

drm/ttm: Balance ttm_resource_cursor_init() and ttm_resource_cursor_fini()



Make the interface more symmetric by providing and using a
ttm_resource_cursor_init().

v10:
- Fix a stray newline (Matthew Brost)
- Update kerneldoc (Matthew Brost)

Signed-off-by: default avatarThomas Hellström <thomas.hellstrom@linux.intel.com>
Reviewed-by: default avatarMatthew Brost <matthew.brost@intel.com>
Reviewed-by: default avatarChristian König <christian.koenig@amd.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20241217145852.37342-2-thomas.hellstrom@linux.intel.com


Signed-off-by: default avatarChristian König <christian.koenig@amd.com>
parent 57e233c3
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -450,7 +450,8 @@ int ttm_bo_evict_first(struct ttm_device *bdev, struct ttm_resource_manager *man
	int ret = 0;

	spin_lock(&bdev->lru_lock);
	res = ttm_resource_manager_first(man, &cursor);
	ttm_resource_cursor_init(&cursor, man);
	res = ttm_resource_manager_first(&cursor);
	ttm_resource_cursor_fini(&cursor);
	if (!res) {
		ret = -ENOENT;
+2 −1
Original line number Diff line number Diff line
@@ -865,7 +865,8 @@ s64 ttm_lru_walk_for_evict(struct ttm_lru_walk *walk, struct ttm_device *bdev,
	s64 lret;

	spin_lock(&bdev->lru_lock);
	ttm_resource_manager_for_each_res(man, &cursor, res) {
	ttm_resource_cursor_init(&cursor, man);
	ttm_resource_manager_for_each_res(&cursor, res) {
		struct ttm_buffer_object *bo = res->bo;
		bool bo_needs_unlock = false;
		bool bo_locked = false;
+24 −11
Original line number Diff line number Diff line
@@ -81,6 +81,23 @@ static void ttm_bulk_move_drop_cursors(struct ttm_lru_bulk_move *bulk)
		ttm_resource_cursor_clear_bulk(cursor);
}

/**
 * ttm_resource_cursor_init() - Initialize a struct ttm_resource_cursor
 * @cursor: The cursor to initialize.
 * @man: The resource manager.
 *
 * Initialize the cursor before using it for iteration.
 */
void ttm_resource_cursor_init(struct ttm_resource_cursor *cursor,
			      struct ttm_resource_manager *man)
{
	cursor->priority = 0;
	cursor->man = man;
	ttm_lru_item_init(&cursor->hitch, TTM_LRU_HITCH);
	INIT_LIST_HEAD(&cursor->bulk_link);
	INIT_LIST_HEAD(&cursor->hitch.link);
}

/**
 * ttm_resource_cursor_fini() - Finalize the LRU list cursor usage
 * @cursor: The struct ttm_resource_cursor to finalize.
@@ -593,7 +610,6 @@ ttm_resource_cursor_check_bulk(struct ttm_resource_cursor *cursor,
/**
 * ttm_resource_manager_first() - Start iterating over the resources
 * of a resource manager
 * @man: resource manager to iterate over
 * @cursor: cursor to record the position
 *
 * Initializes the cursor and starts iterating. When done iterating,
@@ -602,17 +618,16 @@ ttm_resource_cursor_check_bulk(struct ttm_resource_cursor *cursor,
 * Return: The first resource from the resource manager.
 */
struct ttm_resource *
ttm_resource_manager_first(struct ttm_resource_manager *man,
			   struct ttm_resource_cursor *cursor)
ttm_resource_manager_first(struct ttm_resource_cursor *cursor)
{
	lockdep_assert_held(&man->bdev->lru_lock);
	struct ttm_resource_manager *man = cursor->man;

	cursor->priority = 0;
	cursor->man = man;
	ttm_lru_item_init(&cursor->hitch, TTM_LRU_HITCH);
	INIT_LIST_HEAD(&cursor->bulk_link);
	list_add(&cursor->hitch.link, &man->lru[cursor->priority]);
	if (WARN_ON_ONCE(!man))
		return NULL;

	lockdep_assert_held(&man->bdev->lru_lock);

	list_move(&cursor->hitch.link, &man->lru[cursor->priority]);
	return ttm_resource_manager_next(cursor);
}

@@ -648,8 +663,6 @@ ttm_resource_manager_next(struct ttm_resource_cursor *cursor)
		ttm_resource_cursor_clear_bulk(cursor);
	}

	ttm_resource_cursor_fini(cursor);

	return NULL;
}

+6 −5
Original line number Diff line number Diff line
@@ -325,6 +325,9 @@ struct ttm_resource_cursor {
	unsigned int priority;
};

void ttm_resource_cursor_init(struct ttm_resource_cursor *cursor,
			      struct ttm_resource_manager *man);

void ttm_resource_cursor_fini(struct ttm_resource_cursor *cursor);

/**
@@ -456,8 +459,7 @@ void ttm_resource_manager_debug(struct ttm_resource_manager *man,
				struct drm_printer *p);

struct ttm_resource *
ttm_resource_manager_first(struct ttm_resource_manager *man,
			   struct ttm_resource_cursor *cursor);
ttm_resource_manager_first(struct ttm_resource_cursor *cursor);
struct ttm_resource *
ttm_resource_manager_next(struct ttm_resource_cursor *cursor);

@@ -466,14 +468,13 @@ ttm_lru_first_res_or_null(struct list_head *head);

/**
 * ttm_resource_manager_for_each_res - iterate over all resources
 * @man: the resource manager
 * @cursor: struct ttm_resource_cursor for the current position
 * @res: the current resource
 *
 * Iterate over all the evictable resources in a resource manager.
 */
#define ttm_resource_manager_for_each_res(man, cursor, res)		\
	for (res = ttm_resource_manager_first(man, cursor); res;	\
#define ttm_resource_manager_for_each_res(cursor, res)	\
	for (res = ttm_resource_manager_first(cursor); res;	\
	     res = ttm_resource_manager_next(cursor))

struct ttm_kmap_iter *