[PATCH 1/5] drm/ttm: use a static ttm_mem_global instance

Zhang, Jerry(Junwei) Jerry.Zhang at amd.com
Mon Oct 22 06:47:05 UTC 2018


On 10/20/2018 12:41 AM, Christian König wrote:
> 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 at amd.com>

Patch 1, 2, 3, 5 look good for me.
Reviewed-by: Junwei Zhang <Jerry.Zhang at amd.com>

a question for patch 4.

Jerry
> ---
>   drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c         | 44 -------------------------
>   drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h         |  1 -
>   drivers/gpu/drm/ast/ast_drv.h                   |  1 -
>   drivers/gpu/drm/ast/ast_ttm.c                   | 32 ++----------------
>   drivers/gpu/drm/bochs/bochs.h                   |  1 -
>   drivers/gpu/drm/bochs/bochs_mm.c                | 30 ++---------------
>   drivers/gpu/drm/cirrus/cirrus_drv.h             |  1 -
>   drivers/gpu/drm/cirrus/cirrus_ttm.c             | 32 ++----------------
>   drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.h |  1 -
>   drivers/gpu/drm/hisilicon/hibmc/hibmc_ttm.c     | 31 +++--------------
>   drivers/gpu/drm/mgag200/mgag200_drv.h           |  1 -
>   drivers/gpu/drm/mgag200/mgag200_ttm.c           | 32 ++----------------
>   drivers/gpu/drm/nouveau/nouveau_drv.h           |  1 -
>   drivers/gpu/drm/nouveau/nouveau_ttm.c           | 34 ++-----------------
>   drivers/gpu/drm/qxl/qxl_drv.h                   |  1 -
>   drivers/gpu/drm/qxl/qxl_ttm.c                   | 28 ----------------
>   drivers/gpu/drm/radeon/radeon.h                 |  1 -
>   drivers/gpu/drm/radeon/radeon_ttm.c             | 26 ---------------
>   drivers/gpu/drm/ttm/ttm_bo.c                    | 10 ++++--
>   drivers/gpu/drm/ttm/ttm_memory.c                |  5 +--
>   drivers/gpu/drm/virtio/virtgpu_drv.h            |  1 -
>   drivers/gpu/drm/virtio/virtgpu_ttm.c            | 27 ---------------
>   drivers/gpu/drm/vmwgfx/vmwgfx_drv.c             |  4 +--
>   drivers/gpu/drm/vmwgfx/vmwgfx_drv.h             |  3 +-
>   drivers/gpu/drm/vmwgfx/vmwgfx_ttm_glue.c        | 27 ---------------
>   drivers/staging/vboxvideo/vbox_drv.h            |  1 -
>   drivers/staging/vboxvideo/vbox_ttm.c            | 24 --------------
>   include/drm/ttm/ttm_bo_driver.h                 |  8 ++---
>   include/drm/ttm/ttm_memory.h                    |  4 +--
>   29 files changed, 32 insertions(+), 380 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
> index 3a6802846698..fda252022b15 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
> @@ -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;
>   	}
>   }
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h
> index fe8f276e9811..e114f209b701 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h
> @@ -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;
> diff --git a/drivers/gpu/drm/ast/ast_drv.h b/drivers/gpu/drm/ast/ast_drv.h
> index e6c4cd3dc50e..6ae11a477643 100644
> --- a/drivers/gpu/drm/ast/ast_drv.h
> +++ b/drivers/gpu/drm/ast/ast_drv.h
> @@ -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;
> diff --git a/drivers/gpu/drm/ast/ast_ttm.c b/drivers/gpu/drm/ast/ast_ttm.c
> index d21fbd26785a..8a59d6fc1160 100644
> --- a/drivers/gpu/drm/ast/ast_ttm.c
> +++ b/drivers/gpu/drm/ast/ast_ttm.c
> @@ -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;
>   }
>   
>   
> diff --git a/drivers/gpu/drm/bochs/bochs.h b/drivers/gpu/drm/bochs/bochs.h
> index 375bf92cd04f..c7c2f85b28fa 100644
> --- a/drivers/gpu/drm/bochs/bochs.h
> +++ b/drivers/gpu/drm/bochs/bochs.h
> @@ -80,7 +80,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;
> diff --git a/drivers/gpu/drm/bochs/bochs_mm.c b/drivers/gpu/drm/bochs/bochs_mm.c
> index e794986e6b7c..22fe13545992 100644
> --- a/drivers/gpu/drm/bochs/bochs_mm.c
> +++ b/drivers/gpu/drm/bochs/bochs_mm.c
> @@ -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;
>   }
>   
>   
> diff --git a/drivers/gpu/drm/cirrus/cirrus_drv.h b/drivers/gpu/drm/cirrus/cirrus_drv.h
> index ce9db7aab225..1c784dc2ac17 100644
> --- a/drivers/gpu/drm/cirrus/cirrus_drv.h
> +++ b/drivers/gpu/drm/cirrus/cirrus_drv.h
> @@ -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;
> diff --git a/drivers/gpu/drm/cirrus/cirrus_ttm.c b/drivers/gpu/drm/cirrus/cirrus_ttm.c
> index 2e2141f26c5b..7801c56c3c9b 100644
> --- a/drivers/gpu/drm/cirrus/cirrus_ttm.c
> +++ b/drivers/gpu/drm/cirrus/cirrus_ttm.c
> @@ -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;
>   }
>   
>   
> diff --git a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.h b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.h
> index e195521eb41e..a890546b666e 100644
> --- a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.h
> +++ b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.h
> @@ -50,7 +50,6 @@ struct hibmc_drm_private {
>   	struct drm_atomic_state *suspend_state;
>   
>   	/* ttm */
> -	struct drm_global_reference mem_global_ref;
>   	struct ttm_bo_global_ref bo_global_ref;
>   	struct ttm_bo_device bdev;
>   	bool initialized;
> diff --git a/drivers/gpu/drm/hisilicon/hibmc/hibmc_ttm.c b/drivers/gpu/drm/hisilicon/hibmc/hibmc_ttm.c
> index 786269f0c0f1..b15d60f1b1d1 100644
> --- a/drivers/gpu/drm/hisilicon/hibmc/hibmc_ttm.c
> +++ b/drivers/gpu/drm/hisilicon/hibmc/hibmc_ttm.c
> @@ -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)
> diff --git a/drivers/gpu/drm/mgag200/mgag200_drv.h b/drivers/gpu/drm/mgag200/mgag200_drv.h
> index 04f1dfba12e5..e5348955a3cc 100644
> --- a/drivers/gpu/drm/mgag200/mgag200_drv.h
> +++ b/drivers/gpu/drm/mgag200/mgag200_drv.h
> @@ -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;
> diff --git a/drivers/gpu/drm/mgag200/mgag200_ttm.c b/drivers/gpu/drm/mgag200/mgag200_ttm.c
> index 3444b539e7f4..11bdc8121a7d 100644
> --- a/drivers/gpu/drm/mgag200/mgag200_ttm.c
> +++ b/drivers/gpu/drm/mgag200/mgag200_ttm.c
> @@ -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;
>   }
>   
>   
> diff --git a/drivers/gpu/drm/nouveau/nouveau_drv.h b/drivers/gpu/drm/nouveau/nouveau_drv.h
> index 6e1acaec3400..937b8e61f654 100644
> --- a/drivers/gpu/drm/nouveau/nouveau_drv.h
> +++ b/drivers/gpu/drm/nouveau/nouveau_drv.h
> @@ -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;
> diff --git a/drivers/gpu/drm/nouveau/nouveau_ttm.c b/drivers/gpu/drm/nouveau/nouveau_ttm.c
> index a293383c8654..69448b02649e 100644
> --- a/drivers/gpu/drm/nouveau/nouveau_ttm.c
> +++ b/drivers/gpu/drm/nouveau/nouveau_ttm.c
> @@ -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
> diff --git a/drivers/gpu/drm/qxl/qxl_drv.h b/drivers/gpu/drm/qxl/qxl_drv.h
> index 01220d386b0a..b2c1cef0005a 100644
> --- a/drivers/gpu/drm/qxl/qxl_drv.h
> +++ b/drivers/gpu/drm/qxl/qxl_drv.h
> @@ -133,7 +133,6 @@ struct qxl_framebuffer {
>   
>   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;
>   };
> diff --git a/drivers/gpu/drm/qxl/qxl_ttm.c b/drivers/gpu/drm/qxl/qxl_ttm.c
> index db2a0036e9c4..bb8cc9b16780 100644
> --- a/drivers/gpu/drm/qxl/qxl_ttm.c
> +++ b/drivers/gpu/drm/qxl/qxl_ttm.c
> @@ -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;
>   	}
>   }
> diff --git a/drivers/gpu/drm/radeon/radeon.h b/drivers/gpu/drm/radeon/radeon.h
> index 1a6f6edb3515..06fb952b6290 100644
> --- a/drivers/gpu/drm/radeon/radeon.h
> +++ b/drivers/gpu/drm/radeon/radeon.h
> @@ -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;
> diff --git a/drivers/gpu/drm/radeon/radeon_ttm.c b/drivers/gpu/drm/radeon/radeon_ttm.c
> index dac4ec5a120b..2104429ddbac 100644
> --- a/drivers/gpu/drm/radeon/radeon_ttm.c
> +++ b/drivers/gpu/drm/radeon/radeon_ttm.c
> @@ -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;
>   	}
>   }
> diff --git a/drivers/gpu/drm/ttm/ttm_bo.c b/drivers/gpu/drm/ttm/ttm_bo.c
> index 9edece6510d3..3006050b1720 100644
> --- a/drivers/gpu/drm/ttm/ttm_bo.c
> +++ b/drivers/gpu/drm/ttm/ttm_bo.c
> @@ -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);
>   
> diff --git a/drivers/gpu/drm/ttm/ttm_memory.c b/drivers/gpu/drm/ttm/ttm_memory.c
> index 450387c92b63..7704e17c402f 100644
> --- a/drivers/gpu/drm/ttm/ttm_memory.c
> +++ b/drivers/gpu/drm/ttm/ttm_memory.c
> @@ -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 @@ int ttm_mem_global_init(struct ttm_mem_global *glob)
>   	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)
>   {
> diff --git a/drivers/gpu/drm/virtio/virtgpu_drv.h b/drivers/gpu/drm/virtio/virtgpu_drv.h
> index 65605e207bbe..dec42d421e00 100644
> --- a/drivers/gpu/drm/virtio/virtgpu_drv.h
> +++ b/drivers/gpu/drm/virtio/virtgpu_drv.h
> @@ -133,7 +133,6 @@ struct virtio_gpu_framebuffer {
>   
>   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;
>   };
> diff --git a/drivers/gpu/drm/virtio/virtgpu_ttm.c b/drivers/gpu/drm/virtio/virtgpu_ttm.c
> index 0ec46b47b423..b99ecc6d97d3 100644
> --- a/drivers/gpu/drm/virtio/virtgpu_ttm.c
> +++ b/drivers/gpu/drm/virtio/virtgpu_ttm.c
> @@ -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;
>   	}
>   }
> diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c
> index bb6dbbe18835..57df776d987c 100644
> --- a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c
> +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c
> @@ -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");
> diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h
> index 1abe21758b0d..df15a745efc3 100644
> --- a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h
> +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h
> @@ -366,7 +366,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;
>   
> @@ -1288,7 +1287,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)
> diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_ttm_glue.c b/drivers/gpu/drm/vmwgfx/vmwgfx_ttm_glue.c
> index f3ce43c41978..0ac473cd5136 100644
> --- a/drivers/gpu/drm/vmwgfx/vmwgfx_ttm_glue.c
> +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_ttm_glue.c
> @@ -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);
>   }
> diff --git a/drivers/staging/vboxvideo/vbox_drv.h b/drivers/staging/vboxvideo/vbox_drv.h
> index 594f84272957..41f760b77704 100644
> --- a/drivers/staging/vboxvideo/vbox_drv.h
> +++ b/drivers/staging/vboxvideo/vbox_drv.h
> @@ -95,7 +95,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;
> diff --git a/drivers/staging/vboxvideo/vbox_ttm.c b/drivers/staging/vboxvideo/vbox_ttm.c
> index 2329a55d4636..88cdacf2b0f0 100644
> --- a/drivers/staging/vboxvideo/vbox_ttm.c
> +++ b/drivers/staging/vboxvideo/vbox_ttm.c
> @@ -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)
> diff --git a/include/drm/ttm/ttm_bo_driver.h b/include/drm/ttm/ttm_bo_driver.h
> index c6ee07d10281..4ae6fc33f761 100644
> --- a/include/drm/ttm/ttm_bo_driver.h
> +++ b/include/drm/ttm/ttm_bo_driver.h
> @@ -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);
>   }
>   
>   /**
> diff --git a/include/drm/ttm/ttm_memory.h b/include/drm/ttm/ttm_memory.h
> index 737b5fed8003..3ff48a0a2d7b 100644
> --- a/include/drm/ttm/ttm_memory.h
> +++ b/include/drm/ttm/ttm_memory.h
> @@ -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);



More information about the amd-gfx mailing list