@@ -43,6 +43,7 @@
#include <linux/module.h>
#include <linux/atomic.h>
#include <linux/dma-resv.h>
+#include <drm/drm_evictable_lru.h>
#include "ttm_module.h"
@@ -593,15 +594,17 @@ int ttm_mem_evict_first(struct ttm_device *bdev,
struct ww_acquire_ctx *ticket)
{
struct ttm_buffer_object *bo = NULL, *busy_bo = NULL;
- struct ttm_resource_cursor cursor;
+ struct drm_lru_cursor cursor;
struct ttm_resource *res;
+ struct drm_lru_entity *entity;
bool locked = false;
int ret;
spin_lock(bdev->lru_lock);
- ttm_resource_manager_for_each_res(man, &cursor, res) {
+ drm_lru_for_each_entity(man->lru_mgr, &cursor, entity) {
bool busy;
+ res = container_of(entity, struct ttm_resource, lru_entity);
if (!ttm_bo_evict_swapout_allowable(res->bo, ctx, place,
&locked, &busy)) {
if (busy && !busy_bo && ticket !=
@@ -33,6 +33,7 @@
#include <drm/ttm/ttm_device.h>
#include <drm/ttm/ttm_tt.h>
#include <drm/ttm/ttm_placement.h>
+#include <drm/drm_evictable_lru.h>
#include "ttm_module.h"
@@ -141,7 +142,8 @@ int ttm_global_swapout(struct ttm_operation_ctx *ctx, gfp_t gfp_flags)
int ttm_device_swapout(struct ttm_device *bdev, struct ttm_operation_ctx *ctx,
gfp_t gfp_flags)
{
- struct ttm_resource_cursor cursor;
+ struct drm_lru_cursor cursor;
+ struct drm_lru_entity *entity;
struct ttm_resource_manager *man;
struct ttm_resource *res;
unsigned i;
@@ -153,10 +155,12 @@ int ttm_device_swapout(struct ttm_device *bdev, struct ttm_operation_ctx *ctx,
if (!man || !man->use_tt)
continue;
- ttm_resource_manager_for_each_res(man, &cursor, res) {
- struct ttm_buffer_object *bo = res->bo;
+ drm_lru_for_each_entity(man->lru_mgr, &cursor, entity) {
+ struct ttm_buffer_object *bo;
uint32_t num_pages;
+ res = container_of(entity, struct ttm_resource, lru_entity);
+ bo = res->bo;
if (!bo || bo->resource != res)
continue;
@@ -488,57 +488,6 @@ void ttm_resource_manager_debug(struct ttm_resource_manager *man,
}
EXPORT_SYMBOL(ttm_resource_manager_debug);
-/**
- * ttm_resource_manager_first
- *
- * @man: resource manager to iterate over
- * @cursor: cursor to record the position
- *
- * Returns the first resource from the resource manager.
- */
-struct ttm_resource *
-ttm_resource_manager_first(struct ttm_resource_manager *man,
- struct ttm_resource_cursor *cursor)
-{
- struct ttm_resource *res;
-
- lockdep_assert_held(man->bdev->lru_lock);
-
- for (cursor->priority = 0; cursor->priority < DRM_MAX_LRU_PRIORITY;
- ++cursor->priority)
- list_for_each_entry(res, &man->lru[cursor->priority], lru)
- return res;
-
- return NULL;
-}
-
-/**
- * ttm_resource_manager_next
- *
- * @man: resource manager to iterate over
- * @cursor: cursor to record the position
- * @res: the current resource pointer
- *
- * Returns the next resource from the resource manager.
- */
-struct ttm_resource *
-ttm_resource_manager_next(struct ttm_resource_manager *man,
- struct ttm_resource_cursor *cursor,
- struct ttm_resource *res)
-{
- lockdep_assert_held(man->bdev->lru_lock);
-
- list_for_each_entry_continue(res, &man->lru[cursor->priority], lru)
- return res;
-
- for (++cursor->priority; cursor->priority < DRM_MAX_LRU_PRIORITY;
- ++cursor->priority)
- list_for_each_entry(res, &man->lru[cursor->priority], lru)
- return res;
-
- return NULL;
-}
-
static void ttm_kmap_iter_iomap_map_local(struct ttm_kmap_iter *iter,
struct iosys_map *dmap,
pgoff_t i)
@@ -207,6 +207,7 @@ struct ttm_bus_placement {
* @placement: Placement flags.
* @bus: Placement on io bus accessible to the CPU
* @bo: weak reference to the BO, protected by ttm_device::lru_lock
+ * @lru_entity: lru entity for this ttm resource.
*
* Structure indicating the placement and space resources used by a
* buffer object.
@@ -223,17 +224,7 @@ struct ttm_resource {
* @lru: Least recently used list, see &ttm_resource_manager.lru
*/
struct list_head lru;
-};
-
-/**
- * struct ttm_resource_cursor
- *
- * @priority: the current priority
- *
- * Cursor to iterate over the resources in a manager.
- */
-struct ttm_resource_cursor {
- unsigned int priority;
+ struct drm_lru_entity lru_entity;
};
/**
@@ -402,26 +393,6 @@ uint64_t ttm_resource_manager_usage(struct ttm_resource_manager *man);
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);
-struct ttm_resource *
-ttm_resource_manager_next(struct ttm_resource_manager *man,
- struct ttm_resource_cursor *cursor,
- struct ttm_resource *res);
-
-/**
- * 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; \
- res = ttm_resource_manager_next(man, cursor, res))
-
struct ttm_kmap_iter *
ttm_kmap_iter_iomap_init(struct ttm_kmap_iter_iomap *iter_io,
struct io_mapping *iomap,
Since TTM resource LRU list is moved to drm LRU manager layer, use drm lru manager iterator instead of TTM resource manager iterator. TTM resource manager iterator is deleted. No function change. Signed-off-by: Oak Zeng <oak.zeng@intel.com> --- drivers/gpu/drm/ttm/ttm_bo.c | 7 ++-- drivers/gpu/drm/ttm/ttm_device.c | 10 ++++-- drivers/gpu/drm/ttm/ttm_resource.c | 51 ------------------------------ include/drm/ttm/ttm_resource.h | 33 ++----------------- 4 files changed, 14 insertions(+), 87 deletions(-)