@@ -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.
*/
@@ -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;
@@ -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
*
Change-Id: I34924a40392653e72eeeef143c30ab312cbbf9fa Signed-off-by: Chunming Zhou <david1.zhou@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(+)