Change-Id: I34924a40392653e72eeeef143c30ab312cbbf9fa Signed-off-by: Chunming Zhou <david1.zhou at amd.com> --- drivers/gpu/drm/ttm/ttm_bo.c | 23 +++++++++++++++++++++++ include/drm/ttm/ttm_bo_api.h | 1 + include/drm/ttm/ttm_bo_driver.h | 10 ++++++++++ 3 files changed, 34 insertions(+) diff --git a/drivers/gpu/drm/ttm/ttm_bo.c b/drivers/gpu/drm/ttm/ttm_bo.c index 98e06f8bf23b..b740d8f390ca 100644 --- a/drivers/gpu/drm/ttm/ttm_bo.c +++ b/drivers/gpu/drm/ttm/ttm_bo.c @@ -1556,6 +1556,7 @@ int ttm_bo_device_init(struct ttm_bo_device *bdev, 0x10000000); INIT_DELAYED_WORK(&bdev->wq, ttm_bo_delayed_workqueue); INIT_LIST_HEAD(&bdev->ddestroy); + INIT_LIST_HEAD(&bdev->process_list); bdev->dev_mapping = mapping; bdev->glob = glob; bdev->need_dma32 = need_dma32; @@ -1569,6 +1570,28 @@ int ttm_bo_device_init(struct ttm_bo_device *bdev, } EXPORT_SYMBOL(ttm_bo_device_init); +int ttm_process_init(struct ttm_process *process, struct ttm_bo_device *bdev, + struct reservation_object *resv) +{ + int i, j; + + INIT_LIST_HEAD(&process->process_list); + for (i = 0; i < TTM_NUM_MEM_TYPES; i++) { + for (j = 0; j < TTM_MAX_BO_PRIORITY; j++) { + INIT_LIST_HEAD(&process->fixed_lru[i][j]); + INIT_LIST_HEAD(&process->dynamic_lru[i][j]); + } + } + spin_lock(&bdev->glob->lru_lock); + list_add_tail(&process->process_list, &bdev->process_list); + spin_unlock(&bdev->glob->lru_lock); + + process->resv = resv; + + return 0; +} +EXPORT_SYMBOL(ttm_process_init); + /* * buffer object vm functions. */ diff --git a/include/drm/ttm/ttm_bo_api.h b/include/drm/ttm/ttm_bo_api.h index c67977aa1a0e..8cb4b48f387a 100644 --- a/include/drm/ttm/ttm_bo_api.h +++ b/include/drm/ttm/ttm_bo_api.h @@ -172,6 +172,7 @@ struct ttm_buffer_object { */ struct ttm_bo_device *bdev; + struct ttm_process *process; enum ttm_bo_type type; void (*destroy) (struct ttm_buffer_object *); unsigned long num_pages; diff --git a/include/drm/ttm/ttm_bo_driver.h b/include/drm/ttm/ttm_bo_driver.h index 3234cc322e70..91120923de81 100644 --- a/include/drm/ttm/ttm_bo_driver.h +++ b/include/drm/ttm/ttm_bo_driver.h @@ -438,6 +438,13 @@ struct ttm_bo_global { #define TTM_NUM_MEM_TYPES 8 +struct ttm_process { + struct list_head process_list; + struct list_head fixed_lru[TTM_NUM_MEM_TYPES][TTM_MAX_BO_PRIORITY]; + struct list_head dynamic_lru[TTM_NUM_MEM_TYPES][TTM_MAX_BO_PRIORITY]; + struct reservation_object *resv; +}; + /** * struct ttm_bo_device - Buffer object driver device-specific data. * @@ -459,6 +466,7 @@ struct ttm_bo_device { * Constant after bo device init / atomic. */ struct list_head device_list; + struct list_head process_list; struct ttm_bo_global *glob; struct ttm_bo_driver *driver; struct ttm_mem_type_manager man[TTM_NUM_MEM_TYPES]; @@ -575,6 +583,8 @@ int ttm_bo_device_init(struct ttm_bo_device *bdev, struct ttm_bo_global *glob, struct address_space *mapping, uint64_t file_page_offset, bool need_dma32); +int ttm_process_init(struct ttm_process *process, struct ttm_bo_device *bdev, + struct reservation_object *resv); /** * ttm_bo_unmap_virtual * -- 2.14.1