drm/ttm: use a static ttm_mem_global instance
As the name says we only need one global instance of ttm_mem_global. Drop all the driver initialization and just use a single exported instance which is initialized during BO global initialization. Signed-off-by: Christian König <christian.koenig@amd.com> Reviewed-by: Junwei Zhang <Jerry.Zhang@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
		
							parent
							
								
									7e07834c12
								
							
						
					
					
						commit
						27eb1fa913
					
				| @ -65,33 +65,6 @@ static void amdgpu_ttm_debugfs_fini(struct amdgpu_device *adev); | ||||
|  * Global memory. | ||||
|  */ | ||||
| 
 | ||||
| /**
 | ||||
|  * amdgpu_ttm_mem_global_init - Initialize and acquire reference to | ||||
|  * memory object | ||||
|  * | ||||
|  * @ref: Object for initialization. | ||||
|  * | ||||
|  * This is called by drm_global_item_ref() when an object is being | ||||
|  * initialized. | ||||
|  */ | ||||
| static int amdgpu_ttm_mem_global_init(struct drm_global_reference *ref) | ||||
| { | ||||
| 	return ttm_mem_global_init(ref->object); | ||||
| } | ||||
| 
 | ||||
| /**
 | ||||
|  * amdgpu_ttm_mem_global_release - Drop reference to a memory object | ||||
|  * | ||||
|  * @ref: Object being removed | ||||
|  * | ||||
|  * This is called by drm_global_item_unref() when an object is being | ||||
|  * released. | ||||
|  */ | ||||
| static void amdgpu_ttm_mem_global_release(struct drm_global_reference *ref) | ||||
| { | ||||
| 	ttm_mem_global_release(ref->object); | ||||
| } | ||||
| 
 | ||||
| /**
 | ||||
|  * amdgpu_ttm_global_init - Initialize global TTM memory reference structures. | ||||
|  * | ||||
| @ -108,20 +81,6 @@ static int amdgpu_ttm_global_init(struct amdgpu_device *adev) | ||||
| 	/* ensure reference is false in case init fails */ | ||||
| 	adev->mman.mem_global_referenced = false; | ||||
| 
 | ||||
| 	global_ref = &adev->mman.mem_global_ref; | ||||
| 	global_ref->global_type = DRM_GLOBAL_TTM_MEM; | ||||
| 	global_ref->size = sizeof(struct ttm_mem_global); | ||||
| 	global_ref->init = &amdgpu_ttm_mem_global_init; | ||||
| 	global_ref->release = &amdgpu_ttm_mem_global_release; | ||||
| 	r = drm_global_item_ref(global_ref); | ||||
| 	if (r) { | ||||
| 		DRM_ERROR("Failed setting up TTM memory accounting " | ||||
| 			  "subsystem.\n"); | ||||
| 		goto error_mem; | ||||
| 	} | ||||
| 
 | ||||
| 	adev->mman.bo_global_ref.mem_glob = | ||||
| 		adev->mman.mem_global_ref.object; | ||||
| 	global_ref = &adev->mman.bo_global_ref.ref; | ||||
| 	global_ref->global_type = DRM_GLOBAL_TTM_BO; | ||||
| 	global_ref->size = sizeof(struct ttm_bo_global); | ||||
| @ -140,8 +99,6 @@ static int amdgpu_ttm_global_init(struct amdgpu_device *adev) | ||||
| 	return 0; | ||||
| 
 | ||||
| error_bo: | ||||
| 	drm_global_item_unref(&adev->mman.mem_global_ref); | ||||
| error_mem: | ||||
| 	return r; | ||||
| } | ||||
| 
 | ||||
| @ -150,7 +107,6 @@ static void amdgpu_ttm_global_fini(struct amdgpu_device *adev) | ||||
| 	if (adev->mman.mem_global_referenced) { | ||||
| 		mutex_destroy(&adev->mman.gtt_window_lock); | ||||
| 		drm_global_item_unref(&adev->mman.bo_global_ref.ref); | ||||
| 		drm_global_item_unref(&adev->mman.mem_global_ref); | ||||
| 		adev->mman.mem_global_referenced = false; | ||||
| 	} | ||||
| } | ||||
|  | ||||
| @ -40,7 +40,6 @@ | ||||
| 
 | ||||
| struct amdgpu_mman { | ||||
| 	struct ttm_bo_global_ref        bo_global_ref; | ||||
| 	struct drm_global_reference	mem_global_ref; | ||||
| 	struct ttm_bo_device		bdev; | ||||
| 	bool				mem_global_referenced; | ||||
| 	bool				initialized; | ||||
|  | ||||
| @ -104,7 +104,6 @@ struct ast_private { | ||||
| 	int fb_mtrr; | ||||
| 
 | ||||
| 	struct { | ||||
| 		struct drm_global_reference mem_global_ref; | ||||
| 		struct ttm_bo_global_ref bo_global_ref; | ||||
| 		struct ttm_bo_device bdev; | ||||
| 	} ttm; | ||||
|  | ||||
| @ -36,37 +36,11 @@ ast_bdev(struct ttm_bo_device *bd) | ||||
| 	return container_of(bd, struct ast_private, ttm.bdev); | ||||
| } | ||||
| 
 | ||||
| static int | ||||
| ast_ttm_mem_global_init(struct drm_global_reference *ref) | ||||
| { | ||||
| 	return ttm_mem_global_init(ref->object); | ||||
| } | ||||
| 
 | ||||
| static void | ||||
| ast_ttm_mem_global_release(struct drm_global_reference *ref) | ||||
| { | ||||
| 	ttm_mem_global_release(ref->object); | ||||
| } | ||||
| 
 | ||||
| static int ast_ttm_global_init(struct ast_private *ast) | ||||
| { | ||||
| 	struct drm_global_reference *global_ref; | ||||
| 	int r; | ||||
| 
 | ||||
| 	global_ref = &ast->ttm.mem_global_ref; | ||||
| 	global_ref->global_type = DRM_GLOBAL_TTM_MEM; | ||||
| 	global_ref->size = sizeof(struct ttm_mem_global); | ||||
| 	global_ref->init = &ast_ttm_mem_global_init; | ||||
| 	global_ref->release = &ast_ttm_mem_global_release; | ||||
| 	r = drm_global_item_ref(global_ref); | ||||
| 	if (r != 0) { | ||||
| 		DRM_ERROR("Failed setting up TTM memory accounting " | ||||
| 			  "subsystem.\n"); | ||||
| 		return r; | ||||
| 	} | ||||
| 
 | ||||
| 	ast->ttm.bo_global_ref.mem_glob = | ||||
| 		ast->ttm.mem_global_ref.object; | ||||
| 	global_ref = &ast->ttm.bo_global_ref.ref; | ||||
| 	global_ref->global_type = DRM_GLOBAL_TTM_BO; | ||||
| 	global_ref->size = sizeof(struct ttm_bo_global); | ||||
| @ -75,7 +49,6 @@ static int ast_ttm_global_init(struct ast_private *ast) | ||||
| 	r = drm_global_item_ref(global_ref); | ||||
| 	if (r != 0) { | ||||
| 		DRM_ERROR("Failed setting up TTM BO subsystem.\n"); | ||||
| 		drm_global_item_unref(&ast->ttm.mem_global_ref); | ||||
| 		return r; | ||||
| 	} | ||||
| 	return 0; | ||||
| @ -84,12 +57,11 @@ static int ast_ttm_global_init(struct ast_private *ast) | ||||
| static void | ||||
| ast_ttm_global_release(struct ast_private *ast) | ||||
| { | ||||
| 	if (ast->ttm.mem_global_ref.release == NULL) | ||||
| 	if (ast->ttm.bo_global_ref.ref.release == NULL) | ||||
| 		return; | ||||
| 
 | ||||
| 	drm_global_item_unref(&ast->ttm.bo_global_ref.ref); | ||||
| 	drm_global_item_unref(&ast->ttm.mem_global_ref); | ||||
| 	ast->ttm.mem_global_ref.release = NULL; | ||||
| 	ast->ttm.bo_global_ref.ref.release = NULL; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
|  | ||||
| @ -76,7 +76,6 @@ struct bochs_device { | ||||
| 
 | ||||
| 	/* ttm */ | ||||
| 	struct { | ||||
| 		struct drm_global_reference mem_global_ref; | ||||
| 		struct ttm_bo_global_ref bo_global_ref; | ||||
| 		struct ttm_bo_device bdev; | ||||
| 		bool initialized; | ||||
|  | ||||
| @ -16,35 +16,11 @@ static inline struct bochs_device *bochs_bdev(struct ttm_bo_device *bd) | ||||
| 	return container_of(bd, struct bochs_device, ttm.bdev); | ||||
| } | ||||
| 
 | ||||
| static int bochs_ttm_mem_global_init(struct drm_global_reference *ref) | ||||
| { | ||||
| 	return ttm_mem_global_init(ref->object); | ||||
| } | ||||
| 
 | ||||
| static void bochs_ttm_mem_global_release(struct drm_global_reference *ref) | ||||
| { | ||||
| 	ttm_mem_global_release(ref->object); | ||||
| } | ||||
| 
 | ||||
| static int bochs_ttm_global_init(struct bochs_device *bochs) | ||||
| { | ||||
| 	struct drm_global_reference *global_ref; | ||||
| 	int r; | ||||
| 
 | ||||
| 	global_ref = &bochs->ttm.mem_global_ref; | ||||
| 	global_ref->global_type = DRM_GLOBAL_TTM_MEM; | ||||
| 	global_ref->size = sizeof(struct ttm_mem_global); | ||||
| 	global_ref->init = &bochs_ttm_mem_global_init; | ||||
| 	global_ref->release = &bochs_ttm_mem_global_release; | ||||
| 	r = drm_global_item_ref(global_ref); | ||||
| 	if (r != 0) { | ||||
| 		DRM_ERROR("Failed setting up TTM memory accounting " | ||||
| 			  "subsystem.\n"); | ||||
| 		return r; | ||||
| 	} | ||||
| 
 | ||||
| 	bochs->ttm.bo_global_ref.mem_glob = | ||||
| 		bochs->ttm.mem_global_ref.object; | ||||
| 	global_ref = &bochs->ttm.bo_global_ref.ref; | ||||
| 	global_ref->global_type = DRM_GLOBAL_TTM_BO; | ||||
| 	global_ref->size = sizeof(struct ttm_bo_global); | ||||
| @ -53,7 +29,6 @@ static int bochs_ttm_global_init(struct bochs_device *bochs) | ||||
| 	r = drm_global_item_ref(global_ref); | ||||
| 	if (r != 0) { | ||||
| 		DRM_ERROR("Failed setting up TTM BO subsystem.\n"); | ||||
| 		drm_global_item_unref(&bochs->ttm.mem_global_ref); | ||||
| 		return r; | ||||
| 	} | ||||
| 
 | ||||
| @ -62,12 +37,11 @@ static int bochs_ttm_global_init(struct bochs_device *bochs) | ||||
| 
 | ||||
| static void bochs_ttm_global_release(struct bochs_device *bochs) | ||||
| { | ||||
| 	if (bochs->ttm.mem_global_ref.release == NULL) | ||||
| 	if (bochs->ttm.bo_global_ref.ref.release == NULL) | ||||
| 		return; | ||||
| 
 | ||||
| 	drm_global_item_unref(&bochs->ttm.bo_global_ref.ref); | ||||
| 	drm_global_item_unref(&bochs->ttm.mem_global_ref); | ||||
| 	bochs->ttm.mem_global_ref.release = NULL; | ||||
| 	bochs->ttm.bo_global_ref.ref.release = NULL; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
|  | ||||
| @ -136,7 +136,6 @@ struct cirrus_device { | ||||
| 	int fb_mtrr; | ||||
| 
 | ||||
| 	struct { | ||||
| 		struct drm_global_reference mem_global_ref; | ||||
| 		struct ttm_bo_global_ref bo_global_ref; | ||||
| 		struct ttm_bo_device bdev; | ||||
| 	} ttm; | ||||
|  | ||||
| @ -36,37 +36,11 @@ cirrus_bdev(struct ttm_bo_device *bd) | ||||
| 	return container_of(bd, struct cirrus_device, ttm.bdev); | ||||
| } | ||||
| 
 | ||||
| static int | ||||
| cirrus_ttm_mem_global_init(struct drm_global_reference *ref) | ||||
| { | ||||
| 	return ttm_mem_global_init(ref->object); | ||||
| } | ||||
| 
 | ||||
| static void | ||||
| cirrus_ttm_mem_global_release(struct drm_global_reference *ref) | ||||
| { | ||||
| 	ttm_mem_global_release(ref->object); | ||||
| } | ||||
| 
 | ||||
| static int cirrus_ttm_global_init(struct cirrus_device *cirrus) | ||||
| { | ||||
| 	struct drm_global_reference *global_ref; | ||||
| 	int r; | ||||
| 
 | ||||
| 	global_ref = &cirrus->ttm.mem_global_ref; | ||||
| 	global_ref->global_type = DRM_GLOBAL_TTM_MEM; | ||||
| 	global_ref->size = sizeof(struct ttm_mem_global); | ||||
| 	global_ref->init = &cirrus_ttm_mem_global_init; | ||||
| 	global_ref->release = &cirrus_ttm_mem_global_release; | ||||
| 	r = drm_global_item_ref(global_ref); | ||||
| 	if (r != 0) { | ||||
| 		DRM_ERROR("Failed setting up TTM memory accounting " | ||||
| 			  "subsystem.\n"); | ||||
| 		return r; | ||||
| 	} | ||||
| 
 | ||||
| 	cirrus->ttm.bo_global_ref.mem_glob = | ||||
| 		cirrus->ttm.mem_global_ref.object; | ||||
| 	global_ref = &cirrus->ttm.bo_global_ref.ref; | ||||
| 	global_ref->global_type = DRM_GLOBAL_TTM_BO; | ||||
| 	global_ref->size = sizeof(struct ttm_bo_global); | ||||
| @ -75,7 +49,6 @@ static int cirrus_ttm_global_init(struct cirrus_device *cirrus) | ||||
| 	r = drm_global_item_ref(global_ref); | ||||
| 	if (r != 0) { | ||||
| 		DRM_ERROR("Failed setting up TTM BO subsystem.\n"); | ||||
| 		drm_global_item_unref(&cirrus->ttm.mem_global_ref); | ||||
| 		return r; | ||||
| 	} | ||||
| 	return 0; | ||||
| @ -84,12 +57,11 @@ static int cirrus_ttm_global_init(struct cirrus_device *cirrus) | ||||
| static void | ||||
| cirrus_ttm_global_release(struct cirrus_device *cirrus) | ||||
| { | ||||
| 	if (cirrus->ttm.mem_global_ref.release == NULL) | ||||
| 	if (cirrus->ttm.bo_global_ref.ref.release == NULL) | ||||
| 		return; | ||||
| 
 | ||||
| 	drm_global_item_unref(&cirrus->ttm.bo_global_ref.ref); | ||||
| 	drm_global_item_unref(&cirrus->ttm.mem_global_ref); | ||||
| 	cirrus->ttm.mem_global_ref.release = NULL; | ||||
| 	cirrus->ttm.bo_global_ref.ref.release = NULL; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
|  | ||||
| @ -49,7 +49,6 @@ struct hibmc_drm_private { | ||||
| 	bool mode_config_initialized; | ||||
| 
 | ||||
| 	/* ttm */ | ||||
| 	struct drm_global_reference mem_global_ref; | ||||
| 	struct ttm_bo_global_ref bo_global_ref; | ||||
| 	struct ttm_bo_device bdev; | ||||
| 	bool initialized; | ||||
|  | ||||
| @ -29,34 +29,10 @@ hibmc_bdev(struct ttm_bo_device *bd) | ||||
| 	return container_of(bd, struct hibmc_drm_private, bdev); | ||||
| } | ||||
| 
 | ||||
| static int | ||||
| hibmc_ttm_mem_global_init(struct drm_global_reference *ref) | ||||
| { | ||||
| 	return ttm_mem_global_init(ref->object); | ||||
| } | ||||
| 
 | ||||
| static void | ||||
| hibmc_ttm_mem_global_release(struct drm_global_reference *ref) | ||||
| { | ||||
| 	ttm_mem_global_release(ref->object); | ||||
| } | ||||
| 
 | ||||
| static int hibmc_ttm_global_init(struct hibmc_drm_private *hibmc) | ||||
| { | ||||
| 	int ret; | ||||
| 
 | ||||
| 	hibmc->mem_global_ref.global_type = DRM_GLOBAL_TTM_MEM; | ||||
| 	hibmc->mem_global_ref.size = sizeof(struct ttm_mem_global); | ||||
| 	hibmc->mem_global_ref.init = &hibmc_ttm_mem_global_init; | ||||
| 	hibmc->mem_global_ref.release = &hibmc_ttm_mem_global_release; | ||||
| 	ret = drm_global_item_ref(&hibmc->mem_global_ref); | ||||
| 	if (ret) { | ||||
| 		DRM_ERROR("could not get ref on ttm global: %d\n", ret); | ||||
| 		return ret; | ||||
| 	} | ||||
| 
 | ||||
| 	hibmc->bo_global_ref.mem_glob = | ||||
| 		hibmc->mem_global_ref.object; | ||||
| 	hibmc->bo_global_ref.ref.global_type = DRM_GLOBAL_TTM_BO; | ||||
| 	hibmc->bo_global_ref.ref.size = sizeof(struct ttm_bo_global); | ||||
| 	hibmc->bo_global_ref.ref.init = &ttm_bo_global_ref_init; | ||||
| @ -64,7 +40,6 @@ static int hibmc_ttm_global_init(struct hibmc_drm_private *hibmc) | ||||
| 	ret = drm_global_item_ref(&hibmc->bo_global_ref.ref); | ||||
| 	if (ret) { | ||||
| 		DRM_ERROR("failed setting up TTM BO subsystem: %d\n", ret); | ||||
| 		drm_global_item_unref(&hibmc->mem_global_ref); | ||||
| 		return ret; | ||||
| 	} | ||||
| 	return 0; | ||||
| @ -73,9 +48,11 @@ static int hibmc_ttm_global_init(struct hibmc_drm_private *hibmc) | ||||
| static void | ||||
| hibmc_ttm_global_release(struct hibmc_drm_private *hibmc) | ||||
| { | ||||
| 	if (hibmc->bo_global_ref.ref.release == NULL) | ||||
| 		return; | ||||
| 
 | ||||
| 	drm_global_item_unref(&hibmc->bo_global_ref.ref); | ||||
| 	drm_global_item_unref(&hibmc->mem_global_ref); | ||||
| 	hibmc->mem_global_ref.release = NULL; | ||||
| 	hibmc->bo_global_ref.ref.release = NULL; | ||||
| } | ||||
| 
 | ||||
| static void hibmc_bo_ttm_destroy(struct ttm_buffer_object *tbo) | ||||
|  | ||||
| @ -212,7 +212,6 @@ struct mga_device { | ||||
| 	int fb_mtrr; | ||||
| 
 | ||||
| 	struct { | ||||
| 		struct drm_global_reference mem_global_ref; | ||||
| 		struct ttm_bo_global_ref bo_global_ref; | ||||
| 		struct ttm_bo_device bdev; | ||||
| 	} ttm; | ||||
|  | ||||
| @ -36,37 +36,11 @@ mgag200_bdev(struct ttm_bo_device *bd) | ||||
| 	return container_of(bd, struct mga_device, ttm.bdev); | ||||
| } | ||||
| 
 | ||||
| static int | ||||
| mgag200_ttm_mem_global_init(struct drm_global_reference *ref) | ||||
| { | ||||
| 	return ttm_mem_global_init(ref->object); | ||||
| } | ||||
| 
 | ||||
| static void | ||||
| mgag200_ttm_mem_global_release(struct drm_global_reference *ref) | ||||
| { | ||||
| 	ttm_mem_global_release(ref->object); | ||||
| } | ||||
| 
 | ||||
| static int mgag200_ttm_global_init(struct mga_device *ast) | ||||
| { | ||||
| 	struct drm_global_reference *global_ref; | ||||
| 	int r; | ||||
| 
 | ||||
| 	global_ref = &ast->ttm.mem_global_ref; | ||||
| 	global_ref->global_type = DRM_GLOBAL_TTM_MEM; | ||||
| 	global_ref->size = sizeof(struct ttm_mem_global); | ||||
| 	global_ref->init = &mgag200_ttm_mem_global_init; | ||||
| 	global_ref->release = &mgag200_ttm_mem_global_release; | ||||
| 	r = drm_global_item_ref(global_ref); | ||||
| 	if (r != 0) { | ||||
| 		DRM_ERROR("Failed setting up TTM memory accounting " | ||||
| 			  "subsystem.\n"); | ||||
| 		return r; | ||||
| 	} | ||||
| 
 | ||||
| 	ast->ttm.bo_global_ref.mem_glob = | ||||
| 		ast->ttm.mem_global_ref.object; | ||||
| 	global_ref = &ast->ttm.bo_global_ref.ref; | ||||
| 	global_ref->global_type = DRM_GLOBAL_TTM_BO; | ||||
| 	global_ref->size = sizeof(struct ttm_bo_global); | ||||
| @ -75,7 +49,6 @@ static int mgag200_ttm_global_init(struct mga_device *ast) | ||||
| 	r = drm_global_item_ref(global_ref); | ||||
| 	if (r != 0) { | ||||
| 		DRM_ERROR("Failed setting up TTM BO subsystem.\n"); | ||||
| 		drm_global_item_unref(&ast->ttm.mem_global_ref); | ||||
| 		return r; | ||||
| 	} | ||||
| 	return 0; | ||||
| @ -84,12 +57,11 @@ static int mgag200_ttm_global_init(struct mga_device *ast) | ||||
| static void | ||||
| mgag200_ttm_global_release(struct mga_device *ast) | ||||
| { | ||||
| 	if (ast->ttm.mem_global_ref.release == NULL) | ||||
| 	if (ast->ttm.bo_global_ref.ref.release == NULL) | ||||
| 		return; | ||||
| 
 | ||||
| 	drm_global_item_unref(&ast->ttm.bo_global_ref.ref); | ||||
| 	drm_global_item_unref(&ast->ttm.mem_global_ref); | ||||
| 	ast->ttm.mem_global_ref.release = NULL; | ||||
| 	ast->ttm.bo_global_ref.ref.release = NULL; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
|  | ||||
| @ -146,7 +146,6 @@ struct nouveau_drm { | ||||
| 
 | ||||
| 	/* TTM interface support */ | ||||
| 	struct { | ||||
| 		struct drm_global_reference mem_global_ref; | ||||
| 		struct ttm_bo_global_ref bo_global_ref; | ||||
| 		struct ttm_bo_device bdev; | ||||
| 		atomic_t validate_sequence; | ||||
|  | ||||
| @ -174,38 +174,12 @@ nouveau_ttm_mmap(struct file *filp, struct vm_area_struct *vma) | ||||
| 	return ttm_bo_mmap(filp, vma, &drm->ttm.bdev); | ||||
| } | ||||
| 
 | ||||
| static int | ||||
| nouveau_ttm_mem_global_init(struct drm_global_reference *ref) | ||||
| { | ||||
| 	return ttm_mem_global_init(ref->object); | ||||
| } | ||||
| 
 | ||||
| static void | ||||
| nouveau_ttm_mem_global_release(struct drm_global_reference *ref) | ||||
| { | ||||
| 	ttm_mem_global_release(ref->object); | ||||
| } | ||||
| 
 | ||||
| int | ||||
| nouveau_ttm_global_init(struct nouveau_drm *drm) | ||||
| { | ||||
| 	struct drm_global_reference *global_ref; | ||||
| 	int ret; | ||||
| 
 | ||||
| 	global_ref = &drm->ttm.mem_global_ref; | ||||
| 	global_ref->global_type = DRM_GLOBAL_TTM_MEM; | ||||
| 	global_ref->size = sizeof(struct ttm_mem_global); | ||||
| 	global_ref->init = &nouveau_ttm_mem_global_init; | ||||
| 	global_ref->release = &nouveau_ttm_mem_global_release; | ||||
| 
 | ||||
| 	ret = drm_global_item_ref(global_ref); | ||||
| 	if (unlikely(ret != 0)) { | ||||
| 		DRM_ERROR("Failed setting up TTM memory accounting\n"); | ||||
| 		drm->ttm.mem_global_ref.release = NULL; | ||||
| 		return ret; | ||||
| 	} | ||||
| 
 | ||||
| 	drm->ttm.bo_global_ref.mem_glob = global_ref->object; | ||||
| 	global_ref = &drm->ttm.bo_global_ref.ref; | ||||
| 	global_ref->global_type = DRM_GLOBAL_TTM_BO; | ||||
| 	global_ref->size = sizeof(struct ttm_bo_global); | ||||
| @ -215,8 +189,7 @@ nouveau_ttm_global_init(struct nouveau_drm *drm) | ||||
| 	ret = drm_global_item_ref(global_ref); | ||||
| 	if (unlikely(ret != 0)) { | ||||
| 		DRM_ERROR("Failed setting up TTM BO subsystem\n"); | ||||
| 		drm_global_item_unref(&drm->ttm.mem_global_ref); | ||||
| 		drm->ttm.mem_global_ref.release = NULL; | ||||
| 		drm->ttm.bo_global_ref.ref.release = NULL; | ||||
| 		return ret; | ||||
| 	} | ||||
| 
 | ||||
| @ -226,12 +199,11 @@ nouveau_ttm_global_init(struct nouveau_drm *drm) | ||||
| void | ||||
| nouveau_ttm_global_release(struct nouveau_drm *drm) | ||||
| { | ||||
| 	if (drm->ttm.mem_global_ref.release == NULL) | ||||
| 	if (drm->ttm.bo_global_ref.ref.release == NULL) | ||||
| 		return; | ||||
| 
 | ||||
| 	drm_global_item_unref(&drm->ttm.bo_global_ref.ref); | ||||
| 	drm_global_item_unref(&drm->ttm.mem_global_ref); | ||||
| 	drm->ttm.mem_global_ref.release = NULL; | ||||
| 	drm->ttm.bo_global_ref.ref.release = NULL; | ||||
| } | ||||
| 
 | ||||
| static int | ||||
|  | ||||
| @ -128,7 +128,6 @@ struct qxl_output { | ||||
| 
 | ||||
| struct qxl_mman { | ||||
| 	struct ttm_bo_global_ref        bo_global_ref; | ||||
| 	struct drm_global_reference	mem_global_ref; | ||||
| 	bool				mem_global_referenced; | ||||
| 	struct ttm_bo_device		bdev; | ||||
| }; | ||||
|  | ||||
| @ -46,37 +46,11 @@ static struct qxl_device *qxl_get_qdev(struct ttm_bo_device *bdev) | ||||
| 	return qdev; | ||||
| } | ||||
| 
 | ||||
| static int qxl_ttm_mem_global_init(struct drm_global_reference *ref) | ||||
| { | ||||
| 	return ttm_mem_global_init(ref->object); | ||||
| } | ||||
| 
 | ||||
| static void qxl_ttm_mem_global_release(struct drm_global_reference *ref) | ||||
| { | ||||
| 	ttm_mem_global_release(ref->object); | ||||
| } | ||||
| 
 | ||||
| static int qxl_ttm_global_init(struct qxl_device *qdev) | ||||
| { | ||||
| 	struct drm_global_reference *global_ref; | ||||
| 	int r; | ||||
| 
 | ||||
| 	qdev->mman.mem_global_referenced = false; | ||||
| 	global_ref = &qdev->mman.mem_global_ref; | ||||
| 	global_ref->global_type = DRM_GLOBAL_TTM_MEM; | ||||
| 	global_ref->size = sizeof(struct ttm_mem_global); | ||||
| 	global_ref->init = &qxl_ttm_mem_global_init; | ||||
| 	global_ref->release = &qxl_ttm_mem_global_release; | ||||
| 
 | ||||
| 	r = drm_global_item_ref(global_ref); | ||||
| 	if (r != 0) { | ||||
| 		DRM_ERROR("Failed setting up TTM memory accounting " | ||||
| 			  "subsystem.\n"); | ||||
| 		return r; | ||||
| 	} | ||||
| 
 | ||||
| 	qdev->mman.bo_global_ref.mem_glob = | ||||
| 		qdev->mman.mem_global_ref.object; | ||||
| 	global_ref = &qdev->mman.bo_global_ref.ref; | ||||
| 	global_ref->global_type = DRM_GLOBAL_TTM_BO; | ||||
| 	global_ref->size = sizeof(struct ttm_bo_global); | ||||
| @ -85,7 +59,6 @@ static int qxl_ttm_global_init(struct qxl_device *qdev) | ||||
| 	r = drm_global_item_ref(global_ref); | ||||
| 	if (r != 0) { | ||||
| 		DRM_ERROR("Failed setting up TTM BO subsystem.\n"); | ||||
| 		drm_global_item_unref(&qdev->mman.mem_global_ref); | ||||
| 		return r; | ||||
| 	} | ||||
| 
 | ||||
| @ -97,7 +70,6 @@ static void qxl_ttm_global_fini(struct qxl_device *qdev) | ||||
| { | ||||
| 	if (qdev->mman.mem_global_referenced) { | ||||
| 		drm_global_item_unref(&qdev->mman.bo_global_ref.ref); | ||||
| 		drm_global_item_unref(&qdev->mman.mem_global_ref); | ||||
| 		qdev->mman.mem_global_referenced = false; | ||||
| 	} | ||||
| } | ||||
|  | ||||
| @ -449,7 +449,6 @@ struct radeon_surface_reg { | ||||
|  */ | ||||
| struct radeon_mman { | ||||
| 	struct ttm_bo_global_ref        bo_global_ref; | ||||
| 	struct drm_global_reference	mem_global_ref; | ||||
| 	struct ttm_bo_device		bdev; | ||||
| 	bool				mem_global_referenced; | ||||
| 	bool				initialized; | ||||
|  | ||||
| @ -64,36 +64,12 @@ static struct radeon_device *radeon_get_rdev(struct ttm_bo_device *bdev) | ||||
| /*
 | ||||
|  * Global memory. | ||||
|  */ | ||||
| static int radeon_ttm_mem_global_init(struct drm_global_reference *ref) | ||||
| { | ||||
| 	return ttm_mem_global_init(ref->object); | ||||
| } | ||||
| 
 | ||||
| static void radeon_ttm_mem_global_release(struct drm_global_reference *ref) | ||||
| { | ||||
| 	ttm_mem_global_release(ref->object); | ||||
| } | ||||
| 
 | ||||
| static int radeon_ttm_global_init(struct radeon_device *rdev) | ||||
| { | ||||
| 	struct drm_global_reference *global_ref; | ||||
| 	int r; | ||||
| 
 | ||||
| 	rdev->mman.mem_global_referenced = false; | ||||
| 	global_ref = &rdev->mman.mem_global_ref; | ||||
| 	global_ref->global_type = DRM_GLOBAL_TTM_MEM; | ||||
| 	global_ref->size = sizeof(struct ttm_mem_global); | ||||
| 	global_ref->init = &radeon_ttm_mem_global_init; | ||||
| 	global_ref->release = &radeon_ttm_mem_global_release; | ||||
| 	r = drm_global_item_ref(global_ref); | ||||
| 	if (r != 0) { | ||||
| 		DRM_ERROR("Failed setting up TTM memory accounting " | ||||
| 			  "subsystem.\n"); | ||||
| 		return r; | ||||
| 	} | ||||
| 
 | ||||
| 	rdev->mman.bo_global_ref.mem_glob = | ||||
| 		rdev->mman.mem_global_ref.object; | ||||
| 	global_ref = &rdev->mman.bo_global_ref.ref; | ||||
| 	global_ref->global_type = DRM_GLOBAL_TTM_BO; | ||||
| 	global_ref->size = sizeof(struct ttm_bo_global); | ||||
| @ -102,7 +78,6 @@ static int radeon_ttm_global_init(struct radeon_device *rdev) | ||||
| 	r = drm_global_item_ref(global_ref); | ||||
| 	if (r != 0) { | ||||
| 		DRM_ERROR("Failed setting up TTM BO subsystem.\n"); | ||||
| 		drm_global_item_unref(&rdev->mman.mem_global_ref); | ||||
| 		return r; | ||||
| 	} | ||||
| 
 | ||||
| @ -114,7 +89,6 @@ static void radeon_ttm_global_fini(struct radeon_device *rdev) | ||||
| { | ||||
| 	if (rdev->mman.mem_global_referenced) { | ||||
| 		drm_global_item_unref(&rdev->mman.bo_global_ref.ref); | ||||
| 		drm_global_item_unref(&rdev->mman.mem_global_ref); | ||||
| 		rdev->mman.mem_global_referenced = false; | ||||
| 	} | ||||
| } | ||||
|  | ||||
| @ -1526,18 +1526,22 @@ void ttm_bo_global_release(struct ttm_bo_global *glob) | ||||
| { | ||||
| 	kobject_del(&glob->kobj); | ||||
| 	kobject_put(&glob->kobj); | ||||
| 	ttm_mem_global_release(&ttm_mem_glob); | ||||
| } | ||||
| EXPORT_SYMBOL(ttm_bo_global_release); | ||||
| 
 | ||||
| int ttm_bo_global_init(struct ttm_bo_global *glob, | ||||
| 		       struct ttm_mem_global *mem_glob) | ||||
| int ttm_bo_global_init(struct ttm_bo_global *glob) | ||||
| { | ||||
| 	int ret; | ||||
| 	unsigned i; | ||||
| 
 | ||||
| 	ret = ttm_mem_global_init(&ttm_mem_glob); | ||||
| 	if (ret) | ||||
| 		return ret; | ||||
| 
 | ||||
| 	mutex_init(&glob->device_list_mutex); | ||||
| 	spin_lock_init(&glob->lru_lock); | ||||
| 	glob->mem_glob = mem_glob; | ||||
| 	glob->mem_glob = &ttm_mem_glob; | ||||
| 	glob->mem_glob->bo_glob = glob; | ||||
| 	glob->dummy_read_page = alloc_page(__GFP_ZERO | GFP_DMA32); | ||||
| 
 | ||||
|  | ||||
| @ -41,6 +41,9 @@ | ||||
| 
 | ||||
| #define TTM_MEMORY_ALLOC_RETRIES 4 | ||||
| 
 | ||||
| struct ttm_mem_global ttm_mem_glob; | ||||
| EXPORT_SYMBOL(ttm_mem_glob); | ||||
| 
 | ||||
| struct ttm_mem_zone { | ||||
| 	struct kobject kobj; | ||||
| 	struct ttm_mem_global *glob; | ||||
| @ -464,7 +467,6 @@ out_no_zone: | ||||
| 	ttm_mem_global_release(glob); | ||||
| 	return ret; | ||||
| } | ||||
| EXPORT_SYMBOL(ttm_mem_global_init); | ||||
| 
 | ||||
| void ttm_mem_global_release(struct ttm_mem_global *glob) | ||||
| { | ||||
| @ -486,7 +488,6 @@ void ttm_mem_global_release(struct ttm_mem_global *glob) | ||||
| 	kobject_del(&glob->kobj); | ||||
| 	kobject_put(&glob->kobj); | ||||
| } | ||||
| EXPORT_SYMBOL(ttm_mem_global_release); | ||||
| 
 | ||||
| static void ttm_check_swapping(struct ttm_mem_global *glob) | ||||
| { | ||||
|  | ||||
| @ -143,7 +143,6 @@ struct virtio_gpu_fbdev { | ||||
| 
 | ||||
| struct virtio_gpu_mman { | ||||
| 	struct ttm_bo_global_ref        bo_global_ref; | ||||
| 	struct drm_global_reference	mem_global_ref; | ||||
| 	bool				mem_global_referenced; | ||||
| 	struct ttm_bo_device		bdev; | ||||
| }; | ||||
|  | ||||
| @ -50,37 +50,12 @@ virtio_gpu_device *virtio_gpu_get_vgdev(struct ttm_bo_device *bdev) | ||||
| 	return vgdev; | ||||
| } | ||||
| 
 | ||||
| static int virtio_gpu_ttm_mem_global_init(struct drm_global_reference *ref) | ||||
| { | ||||
| 	return ttm_mem_global_init(ref->object); | ||||
| } | ||||
| 
 | ||||
| static void virtio_gpu_ttm_mem_global_release(struct drm_global_reference *ref) | ||||
| { | ||||
| 	ttm_mem_global_release(ref->object); | ||||
| } | ||||
| 
 | ||||
| static int virtio_gpu_ttm_global_init(struct virtio_gpu_device *vgdev) | ||||
| { | ||||
| 	struct drm_global_reference *global_ref; | ||||
| 	int r; | ||||
| 
 | ||||
| 	vgdev->mman.mem_global_referenced = false; | ||||
| 	global_ref = &vgdev->mman.mem_global_ref; | ||||
| 	global_ref->global_type = DRM_GLOBAL_TTM_MEM; | ||||
| 	global_ref->size = sizeof(struct ttm_mem_global); | ||||
| 	global_ref->init = &virtio_gpu_ttm_mem_global_init; | ||||
| 	global_ref->release = &virtio_gpu_ttm_mem_global_release; | ||||
| 
 | ||||
| 	r = drm_global_item_ref(global_ref); | ||||
| 	if (r != 0) { | ||||
| 		DRM_ERROR("Failed setting up TTM memory accounting " | ||||
| 			  "subsystem.\n"); | ||||
| 		return r; | ||||
| 	} | ||||
| 
 | ||||
| 	vgdev->mman.bo_global_ref.mem_glob = | ||||
| 		vgdev->mman.mem_global_ref.object; | ||||
| 	global_ref = &vgdev->mman.bo_global_ref.ref; | ||||
| 	global_ref->global_type = DRM_GLOBAL_TTM_BO; | ||||
| 	global_ref->size = sizeof(struct ttm_bo_global); | ||||
| @ -89,7 +64,6 @@ static int virtio_gpu_ttm_global_init(struct virtio_gpu_device *vgdev) | ||||
| 	r = drm_global_item_ref(global_ref); | ||||
| 	if (r != 0) { | ||||
| 		DRM_ERROR("Failed setting up TTM BO subsystem.\n"); | ||||
| 		drm_global_item_unref(&vgdev->mman.mem_global_ref); | ||||
| 		return r; | ||||
| 	} | ||||
| 
 | ||||
| @ -101,7 +75,6 @@ static void virtio_gpu_ttm_global_fini(struct virtio_gpu_device *vgdev) | ||||
| { | ||||
| 	if (vgdev->mman.mem_global_referenced) { | ||||
| 		drm_global_item_unref(&vgdev->mman.bo_global_ref.ref); | ||||
| 		drm_global_item_unref(&vgdev->mman.mem_global_ref); | ||||
| 		vgdev->mman.mem_global_referenced = false; | ||||
| 	} | ||||
| } | ||||
|  | ||||
| @ -828,8 +828,8 @@ static int vmw_driver_load(struct drm_device *dev, unsigned long chipset) | ||||
| 		goto out_err4; | ||||
| 	} | ||||
| 
 | ||||
| 	dev_priv->tdev = ttm_object_device_init | ||||
| 		(dev_priv->mem_global_ref.object, 12, &vmw_prime_dmabuf_ops); | ||||
| 	dev_priv->tdev = ttm_object_device_init(&ttm_mem_glob, 12, | ||||
| 						&vmw_prime_dmabuf_ops); | ||||
| 
 | ||||
| 	if (unlikely(dev_priv->tdev == NULL)) { | ||||
| 		DRM_ERROR("Unable to initialize TTM object management.\n"); | ||||
|  | ||||
| @ -418,7 +418,6 @@ enum { | ||||
| struct vmw_private { | ||||
| 	struct ttm_bo_device bdev; | ||||
| 	struct ttm_bo_global_ref bo_global_ref; | ||||
| 	struct drm_global_reference mem_global_ref; | ||||
| 
 | ||||
| 	struct vmw_fifo_state fifo; | ||||
| 
 | ||||
| @ -1363,7 +1362,7 @@ vmw_bo_reference(struct vmw_buffer_object *buf) | ||||
| 
 | ||||
| static inline struct ttm_mem_global *vmw_mem_glob(struct vmw_private *dev_priv) | ||||
| { | ||||
| 	return (struct ttm_mem_global *) dev_priv->mem_global_ref.object; | ||||
| 	return &ttm_mem_glob; | ||||
| } | ||||
| 
 | ||||
| static inline void vmw_fifo_resource_inc(struct vmw_private *dev_priv) | ||||
|  | ||||
| @ -43,36 +43,11 @@ int vmw_mmap(struct file *filp, struct vm_area_struct *vma) | ||||
| 	return ttm_bo_mmap(filp, vma, &dev_priv->bdev); | ||||
| } | ||||
| 
 | ||||
| static int vmw_ttm_mem_global_init(struct drm_global_reference *ref) | ||||
| { | ||||
| 	DRM_INFO("global init.\n"); | ||||
| 	return ttm_mem_global_init(ref->object); | ||||
| } | ||||
| 
 | ||||
| static void vmw_ttm_mem_global_release(struct drm_global_reference *ref) | ||||
| { | ||||
| 	ttm_mem_global_release(ref->object); | ||||
| } | ||||
| 
 | ||||
| int vmw_ttm_global_init(struct vmw_private *dev_priv) | ||||
| { | ||||
| 	struct drm_global_reference *global_ref; | ||||
| 	int ret; | ||||
| 
 | ||||
| 	global_ref = &dev_priv->mem_global_ref; | ||||
| 	global_ref->global_type = DRM_GLOBAL_TTM_MEM; | ||||
| 	global_ref->size = sizeof(struct ttm_mem_global); | ||||
| 	global_ref->init = &vmw_ttm_mem_global_init; | ||||
| 	global_ref->release = &vmw_ttm_mem_global_release; | ||||
| 
 | ||||
| 	ret = drm_global_item_ref(global_ref); | ||||
| 	if (unlikely(ret != 0)) { | ||||
| 		DRM_ERROR("Failed setting up TTM memory accounting.\n"); | ||||
| 		return ret; | ||||
| 	} | ||||
| 
 | ||||
| 	dev_priv->bo_global_ref.mem_glob = | ||||
| 		dev_priv->mem_global_ref.object; | ||||
| 	global_ref = &dev_priv->bo_global_ref.ref; | ||||
| 	global_ref->global_type = DRM_GLOBAL_TTM_BO; | ||||
| 	global_ref->size = sizeof(struct ttm_bo_global); | ||||
| @ -87,12 +62,10 @@ int vmw_ttm_global_init(struct vmw_private *dev_priv) | ||||
| 
 | ||||
| 	return 0; | ||||
| out_no_bo: | ||||
| 	drm_global_item_unref(&dev_priv->mem_global_ref); | ||||
| 	return ret; | ||||
| } | ||||
| 
 | ||||
| void vmw_ttm_global_release(struct vmw_private *dev_priv) | ||||
| { | ||||
| 	drm_global_item_unref(&dev_priv->bo_global_ref.ref); | ||||
| 	drm_global_item_unref(&dev_priv->mem_global_ref); | ||||
| } | ||||
|  | ||||
| @ -99,7 +99,6 @@ struct vbox_private { | ||||
| 	int fb_mtrr; | ||||
| 
 | ||||
| 	struct { | ||||
| 		struct drm_global_reference mem_global_ref; | ||||
| 		struct ttm_bo_global_ref bo_global_ref; | ||||
| 		struct ttm_bo_device bdev; | ||||
| 	} ttm; | ||||
|  | ||||
| @ -35,16 +35,6 @@ static inline struct vbox_private *vbox_bdev(struct ttm_bo_device *bd) | ||||
| 	return container_of(bd, struct vbox_private, ttm.bdev); | ||||
| } | ||||
| 
 | ||||
| static int vbox_ttm_mem_global_init(struct drm_global_reference *ref) | ||||
| { | ||||
| 	return ttm_mem_global_init(ref->object); | ||||
| } | ||||
| 
 | ||||
| static void vbox_ttm_mem_global_release(struct drm_global_reference *ref) | ||||
| { | ||||
| 	ttm_mem_global_release(ref->object); | ||||
| } | ||||
| 
 | ||||
| /**
 | ||||
|  * Adds the vbox memory manager object/structures to the global memory manager. | ||||
|  */ | ||||
| @ -53,18 +43,6 @@ static int vbox_ttm_global_init(struct vbox_private *vbox) | ||||
| 	struct drm_global_reference *global_ref; | ||||
| 	int ret; | ||||
| 
 | ||||
| 	global_ref = &vbox->ttm.mem_global_ref; | ||||
| 	global_ref->global_type = DRM_GLOBAL_TTM_MEM; | ||||
| 	global_ref->size = sizeof(struct ttm_mem_global); | ||||
| 	global_ref->init = &vbox_ttm_mem_global_init; | ||||
| 	global_ref->release = &vbox_ttm_mem_global_release; | ||||
| 	ret = drm_global_item_ref(global_ref); | ||||
| 	if (ret) { | ||||
| 		DRM_ERROR("Failed setting up TTM memory subsystem.\n"); | ||||
| 		return ret; | ||||
| 	} | ||||
| 
 | ||||
| 	vbox->ttm.bo_global_ref.mem_glob = vbox->ttm.mem_global_ref.object; | ||||
| 	global_ref = &vbox->ttm.bo_global_ref.ref; | ||||
| 	global_ref->global_type = DRM_GLOBAL_TTM_BO; | ||||
| 	global_ref->size = sizeof(struct ttm_bo_global); | ||||
| @ -74,7 +52,6 @@ static int vbox_ttm_global_init(struct vbox_private *vbox) | ||||
| 	ret = drm_global_item_ref(global_ref); | ||||
| 	if (ret) { | ||||
| 		DRM_ERROR("Failed setting up TTM BO subsystem.\n"); | ||||
| 		drm_global_item_unref(&vbox->ttm.mem_global_ref); | ||||
| 		return ret; | ||||
| 	} | ||||
| 
 | ||||
| @ -87,7 +64,6 @@ static int vbox_ttm_global_init(struct vbox_private *vbox) | ||||
| static void vbox_ttm_global_release(struct vbox_private *vbox) | ||||
| { | ||||
| 	drm_global_item_unref(&vbox->ttm.bo_global_ref.ref); | ||||
| 	drm_global_item_unref(&vbox->ttm.mem_global_ref); | ||||
| } | ||||
| 
 | ||||
| static void vbox_bo_ttm_destroy(struct ttm_buffer_object *tbo) | ||||
|  | ||||
| @ -570,8 +570,7 @@ void ttm_bo_mem_put_locked(struct ttm_buffer_object *bo, | ||||
| 			   struct ttm_mem_reg *mem); | ||||
| 
 | ||||
| void ttm_bo_global_release(struct ttm_bo_global *glob); | ||||
| int ttm_bo_global_init(struct ttm_bo_global *glob, | ||||
| 		       struct ttm_mem_global *mem_glob); | ||||
| int ttm_bo_global_init(struct ttm_bo_global *glob); | ||||
| 
 | ||||
| int ttm_bo_device_release(struct ttm_bo_device *bdev); | ||||
| 
 | ||||
| @ -895,7 +894,6 @@ extern const struct ttm_mem_type_manager_func ttm_bo_manager_func; | ||||
| 
 | ||||
| struct ttm_bo_global_ref { | ||||
| 	struct drm_global_reference ref; | ||||
| 	struct ttm_mem_global *mem_glob; | ||||
| }; | ||||
| 
 | ||||
| /**
 | ||||
| @ -909,9 +907,7 @@ struct ttm_bo_global_ref { | ||||
|  */ | ||||
| static inline int ttm_bo_global_ref_init(struct drm_global_reference *ref) | ||||
| { | ||||
| 	struct ttm_bo_global_ref *bo_ref = | ||||
| 		container_of(ref, struct ttm_bo_global_ref, ref); | ||||
| 	return ttm_bo_global_init(ref->object, bo_ref->mem_glob); | ||||
| 	return ttm_bo_global_init(ref->object); | ||||
| } | ||||
| 
 | ||||
| /**
 | ||||
|  | ||||
| @ -63,7 +63,7 @@ | ||||
| 
 | ||||
| #define TTM_MEM_MAX_ZONES 2 | ||||
| struct ttm_mem_zone; | ||||
| struct ttm_mem_global { | ||||
| extern struct ttm_mem_global { | ||||
| 	struct kobject kobj; | ||||
| 	struct ttm_bo_global *bo_glob; | ||||
| 	struct workqueue_struct *swap_queue; | ||||
| @ -78,7 +78,7 @@ struct ttm_mem_global { | ||||
| #else | ||||
| 	struct ttm_mem_zone *zone_dma32; | ||||
| #endif | ||||
| }; | ||||
| } ttm_mem_glob; | ||||
| 
 | ||||
| extern int ttm_mem_global_init(struct ttm_mem_global *glob); | ||||
| extern void ttm_mem_global_release(struct ttm_mem_global *glob); | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user