Commit 27eb1fa9 authored by Christian König's avatar Christian König Committed by Alex Deucher

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: default avatarChristian König <christian.koenig@amd.com>
Reviewed-by: default avatarJunwei Zhang <Jerry.Zhang@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 7e07834c
...@@ -65,33 +65,6 @@ static void amdgpu_ttm_debugfs_fini(struct amdgpu_device *adev); ...@@ -65,33 +65,6 @@ static void amdgpu_ttm_debugfs_fini(struct amdgpu_device *adev);
* Global memory. * 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. * amdgpu_ttm_global_init - Initialize global TTM memory reference structures.
* *
...@@ -108,20 +81,6 @@ static int amdgpu_ttm_global_init(struct amdgpu_device *adev) ...@@ -108,20 +81,6 @@ static int amdgpu_ttm_global_init(struct amdgpu_device *adev)
/* ensure reference is false in case init fails */ /* ensure reference is false in case init fails */
adev->mman.mem_global_referenced = false; 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 = &adev->mman.bo_global_ref.ref;
global_ref->global_type = DRM_GLOBAL_TTM_BO; global_ref->global_type = DRM_GLOBAL_TTM_BO;
global_ref->size = sizeof(struct ttm_bo_global); global_ref->size = sizeof(struct ttm_bo_global);
...@@ -140,8 +99,6 @@ static int amdgpu_ttm_global_init(struct amdgpu_device *adev) ...@@ -140,8 +99,6 @@ static int amdgpu_ttm_global_init(struct amdgpu_device *adev)
return 0; return 0;
error_bo: error_bo:
drm_global_item_unref(&adev->mman.mem_global_ref);
error_mem:
return r; return r;
} }
...@@ -150,7 +107,6 @@ static void amdgpu_ttm_global_fini(struct amdgpu_device *adev) ...@@ -150,7 +107,6 @@ static void amdgpu_ttm_global_fini(struct amdgpu_device *adev)
if (adev->mman.mem_global_referenced) { if (adev->mman.mem_global_referenced) {
mutex_destroy(&adev->mman.gtt_window_lock); mutex_destroy(&adev->mman.gtt_window_lock);
drm_global_item_unref(&adev->mman.bo_global_ref.ref); 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; adev->mman.mem_global_referenced = false;
} }
} }
......
...@@ -40,7 +40,6 @@ ...@@ -40,7 +40,6 @@
struct amdgpu_mman { struct amdgpu_mman {
struct ttm_bo_global_ref bo_global_ref; struct ttm_bo_global_ref bo_global_ref;
struct drm_global_reference mem_global_ref;
struct ttm_bo_device bdev; struct ttm_bo_device bdev;
bool mem_global_referenced; bool mem_global_referenced;
bool initialized; bool initialized;
......
...@@ -104,7 +104,6 @@ struct ast_private { ...@@ -104,7 +104,6 @@ struct ast_private {
int fb_mtrr; int fb_mtrr;
struct { struct {
struct drm_global_reference mem_global_ref;
struct ttm_bo_global_ref bo_global_ref; struct ttm_bo_global_ref bo_global_ref;
struct ttm_bo_device bdev; struct ttm_bo_device bdev;
} ttm; } ttm;
......
...@@ -36,37 +36,11 @@ ast_bdev(struct ttm_bo_device *bd) ...@@ -36,37 +36,11 @@ ast_bdev(struct ttm_bo_device *bd)
return container_of(bd, struct ast_private, ttm.bdev); 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) static int ast_ttm_global_init(struct ast_private *ast)
{ {
struct drm_global_reference *global_ref; struct drm_global_reference *global_ref;
int r; 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 = &ast->ttm.bo_global_ref.ref;
global_ref->global_type = DRM_GLOBAL_TTM_BO; global_ref->global_type = DRM_GLOBAL_TTM_BO;
global_ref->size = sizeof(struct ttm_bo_global); global_ref->size = sizeof(struct ttm_bo_global);
...@@ -75,7 +49,6 @@ static int ast_ttm_global_init(struct ast_private *ast) ...@@ -75,7 +49,6 @@ static int ast_ttm_global_init(struct ast_private *ast)
r = drm_global_item_ref(global_ref); r = drm_global_item_ref(global_ref);
if (r != 0) { if (r != 0) {
DRM_ERROR("Failed setting up TTM BO subsystem.\n"); DRM_ERROR("Failed setting up TTM BO subsystem.\n");
drm_global_item_unref(&ast->ttm.mem_global_ref);
return r; return r;
} }
return 0; return 0;
...@@ -84,12 +57,11 @@ static int ast_ttm_global_init(struct ast_private *ast) ...@@ -84,12 +57,11 @@ static int ast_ttm_global_init(struct ast_private *ast)
static void static void
ast_ttm_global_release(struct ast_private *ast) 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; return;
drm_global_item_unref(&ast->ttm.bo_global_ref.ref); drm_global_item_unref(&ast->ttm.bo_global_ref.ref);
drm_global_item_unref(&ast->ttm.mem_global_ref); ast->ttm.bo_global_ref.ref.release = NULL;
ast->ttm.mem_global_ref.release = NULL;
} }
......
...@@ -76,7 +76,6 @@ struct bochs_device { ...@@ -76,7 +76,6 @@ struct bochs_device {
/* ttm */ /* ttm */
struct { struct {
struct drm_global_reference mem_global_ref;
struct ttm_bo_global_ref bo_global_ref; struct ttm_bo_global_ref bo_global_ref;
struct ttm_bo_device bdev; struct ttm_bo_device bdev;
bool initialized; bool initialized;
......
...@@ -16,35 +16,11 @@ static inline struct bochs_device *bochs_bdev(struct ttm_bo_device *bd) ...@@ -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); 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) static int bochs_ttm_global_init(struct bochs_device *bochs)
{ {
struct drm_global_reference *global_ref; struct drm_global_reference *global_ref;
int r; 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 = &bochs->ttm.bo_global_ref.ref;
global_ref->global_type = DRM_GLOBAL_TTM_BO; global_ref->global_type = DRM_GLOBAL_TTM_BO;
global_ref->size = sizeof(struct ttm_bo_global); global_ref->size = sizeof(struct ttm_bo_global);
...@@ -53,7 +29,6 @@ static int bochs_ttm_global_init(struct bochs_device *bochs) ...@@ -53,7 +29,6 @@ static int bochs_ttm_global_init(struct bochs_device *bochs)
r = drm_global_item_ref(global_ref); r = drm_global_item_ref(global_ref);
if (r != 0) { if (r != 0) {
DRM_ERROR("Failed setting up TTM BO subsystem.\n"); DRM_ERROR("Failed setting up TTM BO subsystem.\n");
drm_global_item_unref(&bochs->ttm.mem_global_ref);
return r; return r;
} }
...@@ -62,12 +37,11 @@ static int bochs_ttm_global_init(struct bochs_device *bochs) ...@@ -62,12 +37,11 @@ static int bochs_ttm_global_init(struct bochs_device *bochs)
static void bochs_ttm_global_release(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; return;
drm_global_item_unref(&bochs->ttm.bo_global_ref.ref); drm_global_item_unref(&bochs->ttm.bo_global_ref.ref);
drm_global_item_unref(&bochs->ttm.mem_global_ref); bochs->ttm.bo_global_ref.ref.release = NULL;
bochs->ttm.mem_global_ref.release = NULL;
} }
......
...@@ -136,7 +136,6 @@ struct cirrus_device { ...@@ -136,7 +136,6 @@ struct cirrus_device {
int fb_mtrr; int fb_mtrr;
struct { struct {
struct drm_global_reference mem_global_ref;
struct ttm_bo_global_ref bo_global_ref; struct ttm_bo_global_ref bo_global_ref;
struct ttm_bo_device bdev; struct ttm_bo_device bdev;
} ttm; } ttm;
......
...@@ -36,37 +36,11 @@ cirrus_bdev(struct ttm_bo_device *bd) ...@@ -36,37 +36,11 @@ cirrus_bdev(struct ttm_bo_device *bd)
return container_of(bd, struct cirrus_device, ttm.bdev); 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) static int cirrus_ttm_global_init(struct cirrus_device *cirrus)
{ {
struct drm_global_reference *global_ref; struct drm_global_reference *global_ref;
int r; 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 = &cirrus->ttm.bo_global_ref.ref;
global_ref->global_type = DRM_GLOBAL_TTM_BO; global_ref->global_type = DRM_GLOBAL_TTM_BO;
global_ref->size = sizeof(struct ttm_bo_global); global_ref->size = sizeof(struct ttm_bo_global);
...@@ -75,7 +49,6 @@ static int cirrus_ttm_global_init(struct cirrus_device *cirrus) ...@@ -75,7 +49,6 @@ static int cirrus_ttm_global_init(struct cirrus_device *cirrus)
r = drm_global_item_ref(global_ref); r = drm_global_item_ref(global_ref);
if (r != 0) { if (r != 0) {
DRM_ERROR("Failed setting up TTM BO subsystem.\n"); DRM_ERROR("Failed setting up TTM BO subsystem.\n");
drm_global_item_unref(&cirrus->ttm.mem_global_ref);
return r; return r;
} }
return 0; return 0;
...@@ -84,12 +57,11 @@ static int cirrus_ttm_global_init(struct cirrus_device *cirrus) ...@@ -84,12 +57,11 @@ static int cirrus_ttm_global_init(struct cirrus_device *cirrus)
static void static void
cirrus_ttm_global_release(struct cirrus_device *cirrus) 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; return;
drm_global_item_unref(&cirrus->ttm.bo_global_ref.ref); drm_global_item_unref(&cirrus->ttm.bo_global_ref.ref);
drm_global_item_unref(&cirrus->ttm.mem_global_ref); cirrus->ttm.bo_global_ref.ref.release = NULL;
cirrus->ttm.mem_global_ref.release = NULL;
} }
......
...@@ -49,7 +49,6 @@ struct hibmc_drm_private { ...@@ -49,7 +49,6 @@ struct hibmc_drm_private {
bool mode_config_initialized; bool mode_config_initialized;
/* ttm */ /* ttm */
struct drm_global_reference mem_global_ref;
struct ttm_bo_global_ref bo_global_ref; struct ttm_bo_global_ref bo_global_ref;
struct ttm_bo_device bdev; struct ttm_bo_device bdev;
bool initialized; bool initialized;
......
...@@ -29,34 +29,10 @@ hibmc_bdev(struct ttm_bo_device *bd) ...@@ -29,34 +29,10 @@ hibmc_bdev(struct ttm_bo_device *bd)
return container_of(bd, struct hibmc_drm_private, bdev); 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) static int hibmc_ttm_global_init(struct hibmc_drm_private *hibmc)
{ {
int ret; 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.global_type = DRM_GLOBAL_TTM_BO;
hibmc->bo_global_ref.ref.size = sizeof(struct ttm_bo_global); hibmc->bo_global_ref.ref.size = sizeof(struct ttm_bo_global);
hibmc->bo_global_ref.ref.init = &ttm_bo_global_ref_init; 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) ...@@ -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); ret = drm_global_item_ref(&hibmc->bo_global_ref.ref);
if (ret) { if (ret) {
DRM_ERROR("failed setting up TTM BO subsystem: %d\n", ret); DRM_ERROR("failed setting up TTM BO subsystem: %d\n", ret);
drm_global_item_unref(&hibmc->mem_global_ref);
return ret; return ret;
} }
return 0; return 0;
...@@ -73,9 +48,11 @@ static int hibmc_ttm_global_init(struct hibmc_drm_private *hibmc) ...@@ -73,9 +48,11 @@ static int hibmc_ttm_global_init(struct hibmc_drm_private *hibmc)
static void static void
hibmc_ttm_global_release(struct hibmc_drm_private *hibmc) 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->bo_global_ref.ref);
drm_global_item_unref(&hibmc->mem_global_ref); hibmc->bo_global_ref.ref.release = NULL;
hibmc->mem_global_ref.release = NULL;
} }
static void hibmc_bo_ttm_destroy(struct ttm_buffer_object *tbo) static void hibmc_bo_ttm_destroy(struct ttm_buffer_object *tbo)
......
...@@ -212,7 +212,6 @@ struct mga_device { ...@@ -212,7 +212,6 @@ struct mga_device {
int fb_mtrr; int fb_mtrr;
struct { struct {
struct drm_global_reference mem_global_ref;
struct ttm_bo_global_ref bo_global_ref; struct ttm_bo_global_ref bo_global_ref;
struct ttm_bo_device bdev; struct ttm_bo_device bdev;
} ttm; } ttm;
......
...@@ -36,37 +36,11 @@ mgag200_bdev(struct ttm_bo_device *bd) ...@@ -36,37 +36,11 @@ mgag200_bdev(struct ttm_bo_device *bd)
return container_of(bd, struct mga_device, ttm.bdev); 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) static int mgag200_ttm_global_init(struct mga_device *ast)
{ {
struct drm_global_reference *global_ref; struct drm_global_reference *global_ref;
int r; 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 = &ast->ttm.bo_global_ref.ref;
global_ref->global_type = DRM_GLOBAL_TTM_BO; global_ref->global_type = DRM_GLOBAL_TTM_BO;
global_ref->size = sizeof(struct ttm_bo_global); global_ref->size = sizeof(struct ttm_bo_global);
...@@ -75,7 +49,6 @@ static int mgag200_ttm_global_init(struct mga_device *ast) ...@@ -75,7 +49,6 @@ static int mgag200_ttm_global_init(struct mga_device *ast)
r = drm_global_item_ref(global_ref); r = drm_global_item_ref(global_ref);
if (r != 0) { if (r != 0) {
DRM_ERROR("Failed setting up TTM BO subsystem.\n"); DRM_ERROR("Failed setting up TTM BO subsystem.\n");
drm_global_item_unref(&ast->ttm.mem_global_ref);
return r; return r;
} }
return 0; return 0;
...@@ -84,12 +57,11 @@ static int mgag200_ttm_global_init(struct mga_device *ast) ...@@ -84,12 +57,11 @@ static int mgag200_ttm_global_init(struct mga_device *ast)
static void static void
mgag200_ttm_global_release(struct mga_device *ast) 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; return;
drm_global_item_unref(&ast->ttm.bo_global_ref.ref); drm_global_item_unref(&ast->ttm.bo_global_ref.ref);
drm_global_item_unref(&ast->ttm.mem_global_ref); ast->ttm.bo_global_ref.ref.release = NULL;
ast->ttm.mem_global_ref.release = NULL;
} }
......
...@@ -146,7 +146,6 @@ struct nouveau_drm { ...@@ -146,7 +146,6 @@ struct nouveau_drm {
/* TTM interface support */ /* TTM interface support */
struct { struct {
struct drm_global_reference mem_global_ref;
struct ttm_bo_global_ref bo_global_ref; struct ttm_bo_global_ref bo_global_ref;
struct ttm_bo_device bdev; struct ttm_bo_device bdev;
atomic_t validate_sequence; atomic_t validate_sequence;
......
...@@ -174,38 +174,12 @@ nouveau_ttm_mmap(struct file *filp, struct vm_area_struct *vma) ...@@ -174,38 +174,12 @@ nouveau_ttm_mmap(struct file *filp, struct vm_area_struct *vma)
return ttm_bo_mmap(filp, vma, &drm->ttm.bdev); 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 int
nouveau_ttm_global_init(struct nouveau_drm *drm) nouveau_ttm_global_init(struct nouveau_drm *drm)
{ {
struct drm_global_reference *global_ref; struct drm_global_reference *global_ref;
int ret; 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 = &drm->ttm.bo_global_ref.ref;
global_ref->global_type = DRM_GLOBAL_TTM_BO; global_ref->global_type = DRM_GLOBAL_TTM_BO;
global_ref->size = sizeof(struct ttm_bo_global); global_ref->size = sizeof(struct ttm_bo_global);
...@@ -215,8 +189,7 @@ nouveau_ttm_global_init(struct nouveau_drm *drm) ...@@ -215,8 +189,7 @@ nouveau_ttm_global_init(struct nouveau_drm *drm)
ret = drm_global_item_ref(global_ref); ret = drm_global_item_ref(global_ref);
if (unlikely(ret != 0)) { if (unlikely(ret != 0)) {
DRM_ERROR("Failed setting up TTM BO subsystem\n"); DRM_ERROR("Failed setting up TTM BO subsystem\n");
drm_global_item_unref(&drm->ttm.mem_global_ref); drm->ttm.bo_global_ref.ref.release = NULL;
drm->ttm.mem_global_ref.release = NULL;
return ret; return ret;
} }
...@@ -226,12 +199,11 @@ nouveau_ttm_global_init(struct nouveau_drm *drm) ...@@ -226,12 +199,11 @@ nouveau_ttm_global_init(struct nouveau_drm *drm)
void void
nouveau_ttm_global_release(struct nouveau_drm *drm) 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; return;
drm_global_item_unref(&drm->ttm.bo_global_ref.ref); drm_global_item_unref(&drm->ttm.bo_global_ref.ref);
drm_global_item_unref(&drm->ttm.mem_global_ref); drm->ttm.bo_global_ref.ref.release = NULL;
drm->ttm.mem_global_ref.release = NULL;
} }
static int static int
......
...@@ -128,7 +128,6 @@ struct qxl_output { ...@@ -128,7 +128,6 @@ struct qxl_output {
struct qxl_mman { struct qxl_mman {
struct ttm_bo_global_ref bo_global_ref; struct ttm_bo_global_ref bo_global_ref;
struct drm_global_reference mem_global_ref;
bool mem_global_referenced; bool mem_global_referenced;
struct ttm_bo_device bdev; struct ttm_bo_device bdev;
}; };
......
...@@ -46,37 +46,11 @@ static struct qxl_device *qxl_get_qdev(struct ttm_bo_device *bdev) ...@@ -46,37 +46,11 @@ static struct qxl_device *qxl_get_qdev(struct ttm_bo_device *bdev)
return qdev; 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) static int qxl_ttm_global_init(struct qxl_device *qdev)
{ {
struct drm_global_reference *global_ref; struct drm_global_reference *global_ref;
int r; 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 = &qdev->mman.bo_global_ref.ref;
global_ref->global_type = DRM_GLOBAL_TTM_BO; global_ref->global_type = DRM_GLOBAL_TTM_BO;
global_ref->size = sizeof(struct ttm_bo_global); global_ref->size = sizeof(struct ttm_bo_global);
...@@ -85,7 +59,6 @@ static int qxl_ttm_global_init(struct qxl_device *qdev) ...@@ -85,7 +59,6 @@ static int qxl_ttm_global_init(struct qxl_device *qdev)
r = drm_global_item_ref(global_ref); r = drm_global_item_ref(global_ref);
if (r != 0) { if (r != 0) {
DRM_ERROR("Failed setting up TTM BO subsystem.\n"); DRM_ERROR("Failed setting up TTM BO subsystem.\n");
drm_global_item_unref(&qdev->mman.mem_global_ref);
return r; return r;
} }
...@@ -97,7 +70,6 @@ static void qxl_ttm_global_fini(struct qxl_device *qdev) ...@@ -97,7 +70,6 @@ static void qxl_ttm_global_fini(struct qxl_device *qdev)
{ {
if (qdev->mman.mem_global_referenced) { if (qdev->mman.mem_global_referenced) {
drm_global_item_unref(&qdev->mman.bo_global_ref.ref); 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; qdev->mman.mem_global_referenced = false;
} }
} }
......
...@@ -449,7 +449,6 @@ struct radeon_surface_reg { ...@@ -449,7 +449,6 @@ struct radeon_surface_reg {
*/ */
struct radeon_mman { struct radeon_mman {
struct ttm_bo_global_ref bo_global_ref; struct ttm_bo_global_ref bo_global_ref;
struct drm_global_reference mem_global_ref;
struct ttm_bo_device bdev; struct ttm_bo_device bdev;
bool mem_global_referenced; bool mem_global_referenced;
bool initialized; bool initialized;
......
...@@ -64,36 +64,12 @@ static struct radeon_device *radeon_get_rdev(struct ttm_bo_device *bdev) ...@@ -64,36 +64,12 @@ static struct radeon_device *radeon_get_rdev(struct ttm_bo_device *bdev)
/* /*
* Global memory. * 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) static int radeon_ttm_global_init(struct radeon_device *rdev)
{ {
struct drm_global_reference *global_ref; struct drm_global_reference *global_ref;
int r; int r;
rdev->mman.mem_global_referenced = false; 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 = &rdev->mman.bo_global_ref.ref;
global_ref->global_type = DRM_GLOBAL_TTM_BO; global_ref->global_type = DRM_GLOBAL_TTM_BO;
global_ref->size = sizeof(struct ttm_bo_global); global_ref->size = sizeof(struct ttm_bo_global);
...@@ -102,7 +78,6 @@ static int radeon_ttm_global_init(struct radeon_device *rdev) ...@@ -102,7 +78,6 @@ static int radeon_ttm_global_init(struct radeon_device *rdev)
r = drm_global_item_ref(global_ref); r = drm_global_item_ref(global_ref);
if (r != 0) { if (r != 0) {
DRM_ERROR("Failed setting up TTM BO subsystem.\n"); DRM_ERROR("Failed setting up TTM BO subsystem.\n");
drm_global_item_unref(&rdev->mman.mem_global_ref);
return r; return r;
} }
...@@ -114,7 +89,6 @@ static void radeon_ttm_global_fini(struct radeon_device *rdev) ...@@ -114,7 +89,6 @@ static void radeon_ttm_global_fini(struct radeon_device *rdev)
{ {
if (rdev->mman.mem_global_referenced) { if (rdev->mman.mem_global_referenced) {
drm_global_item_unref(&rdev->mman.bo_global_ref.ref); 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; rdev->mman.mem_global_referenced = false;
} }
} }
......
...@@ -1526,18 +1526,22 @@ void ttm_bo_global_release(struct ttm_bo_global *glob) ...@@ -1526,18 +1526,22 @@ void ttm_bo_global_release(struct ttm_bo_global *glob)
{ {
kobject_del(&glob->kobj); kobject_del(&glob->kobj);
kobject_put(&glob->kobj); kobject_put(&glob->kobj);
ttm_mem_global_release(&ttm_mem_glob);
} }
EXPORT_SYMBOL(ttm_bo_global_release); EXPORT_SYMBOL(ttm_bo_global_release);
int ttm_bo_global_init(struct ttm_bo_global *glob, int ttm_bo_global_init(struct ttm_bo_global *glob)
struct ttm_mem_global *mem_glob)
{ {
int ret; int ret;
unsigned i; unsigned i;
ret = ttm_mem_global_init(&ttm_mem_glob);
if (ret)
return ret;
mutex_init(&glob->device_list_mutex); mutex_init(&glob->device_list_mutex);
spin_lock_init(&glob->lru_lock); spin_lock_init(&glob->lru_lock);
glob->mem_glob = mem_glob; glob->mem_glob = &ttm_mem_glob;
glob->mem_glob->bo_glob = glob; glob->mem_glob->bo_glob = glob;
glob->dummy_read_page = alloc_page(__GFP_ZERO | GFP_DMA32); glob->dummy_read_page = alloc_page(__GFP_ZERO | GFP_DMA32);
......
...@@ -41,6 +41,9 @@ ...@@ -41,6 +41,9 @@
#define TTM_MEMORY_ALLOC_RETRIES 4 #define TTM_MEMORY_ALLOC_RETRIES 4
struct ttm_mem_global ttm_mem_glob;
EXPORT_SYMBOL(ttm_mem_glob);
struct ttm_mem_zone { struct ttm_mem_zone {
struct kobject kobj; struct kobject kobj;
struct ttm_mem_global *glob; struct ttm_mem_global *glob;
...@@ -464,7 +467,6 @@ int ttm_mem_global_init(struct ttm_mem_global *glob) ...@@ -464,7 +467,6 @@ int ttm_mem_global_init(struct ttm_mem_global *glob)
ttm_mem_global_release(glob); ttm_mem_global_release(glob);
return ret; return ret;
} }
EXPORT_SYMBOL(ttm_mem_global_init);
void ttm_mem_global_release(struct ttm_mem_global *glob) void ttm_mem_global_release(struct ttm_mem_global *glob)
{ {
...@@ -486,7 +488,6 @@ 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_del(&glob->kobj);
kobject_put(&glob->kobj); kobject_put(&glob->kobj);
} }
EXPORT_SYMBOL(ttm_mem_global_release);
static void ttm_check_swapping(struct ttm_mem_global *glob) static void ttm_check_swapping(struct ttm_mem_global *glob)
{ {
......
...@@ -143,7 +143,6 @@ struct virtio_gpu_fbdev { ...@@ -143,7 +143,6 @@ struct virtio_gpu_fbdev {
struct virtio_gpu_mman { struct virtio_gpu_mman {
struct ttm_bo_global_ref bo_global_ref; struct ttm_bo_global_ref bo_global_ref;
struct drm_global_reference mem_global_ref;
bool mem_global_referenced; bool mem_global_referenced;
struct ttm_bo_device bdev; struct ttm_bo_device bdev;
}; };
......
...@@ -50,37 +50,12 @@ virtio_gpu_device *virtio_gpu_get_vgdev(struct ttm_bo_device *bdev) ...@@ -50,37 +50,12 @@ virtio_gpu_device *virtio_gpu_get_vgdev(struct ttm_bo_device *bdev)
return vgdev; 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) static int virtio_gpu_ttm_global_init(struct virtio_gpu_device *vgdev)
{ {
struct drm_global_reference *global_ref; struct drm_global_reference *global_ref;
int r; int r;
vgdev->mman.mem_global_referenced = false; 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 = &vgdev->mman.bo_global_ref.ref;
global_ref->global_type = DRM_GLOBAL_TTM_BO; global_ref->global_type = DRM_GLOBAL_TTM_BO;
global_ref->size = sizeof(struct ttm_bo_global); global_ref->size = sizeof(struct ttm_bo_global);
...@@ -89,7 +64,6 @@ static int virtio_gpu_ttm_global_init(struct virtio_gpu_device *vgdev) ...@@ -89,7 +64,6 @@ static int virtio_gpu_ttm_global_init(struct virtio_gpu_device *vgdev)
r = drm_global_item_ref(global_ref); r = drm_global_item_ref(global_ref);
if (r != 0) { if (r != 0) {
DRM_ERROR("Failed setting up TTM BO subsystem.\n"); DRM_ERROR("Failed setting up TTM BO subsystem.\n");
drm_global_item_unref(&vgdev->mman.mem_global_ref);
return r; return r;
} }
...@@ -101,7 +75,6 @@ static void virtio_gpu_ttm_global_fini(struct virtio_gpu_device *vgdev) ...@@ -101,7 +75,6 @@ static void virtio_gpu_ttm_global_fini(struct virtio_gpu_device *vgdev)
{ {
if (vgdev->mman.mem_global_referenced) { if (vgdev->mman.mem_global_referenced) {
drm_global_item_unref(&vgdev->mman.bo_global_ref.ref); 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; vgdev->mman.mem_global_referenced = false;
} }
} }
......
...@@ -828,8 +828,8 @@ static int vmw_driver_load(struct drm_device *dev, unsigned long chipset) ...@@ -828,8 +828,8 @@ static int vmw_driver_load(struct drm_device *dev, unsigned long chipset)
goto out_err4; goto out_err4;
} }
dev_priv->tdev = ttm_object_device_init dev_priv->tdev = ttm_object_device_init(&ttm_mem_glob, 12,
(dev_priv->mem_global_ref.object, 12, &vmw_prime_dmabuf_ops); &vmw_prime_dmabuf_ops);
if (unlikely(dev_priv->tdev == NULL)) { if (unlikely(dev_priv->tdev == NULL)) {
DRM_ERROR("Unable to initialize TTM object management.\n"); DRM_ERROR("Unable to initialize TTM object management.\n");
......
...@@ -418,7 +418,6 @@ enum { ...@@ -418,7 +418,6 @@ enum {
struct vmw_private { struct vmw_private {
struct ttm_bo_device bdev; struct ttm_bo_device bdev;
struct ttm_bo_global_ref bo_global_ref; struct ttm_bo_global_ref bo_global_ref;
struct drm_global_reference mem_global_ref;
struct vmw_fifo_state fifo; struct vmw_fifo_state fifo;
...@@ -1363,7 +1362,7 @@ vmw_bo_reference(struct vmw_buffer_object *buf) ...@@ -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) 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) 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) ...@@ -43,36 +43,11 @@ int vmw_mmap(struct file *filp, struct vm_area_struct *vma)
return ttm_bo_mmap(filp, vma, &dev_priv->bdev); 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) int vmw_ttm_global_init(struct vmw_private *dev_priv)
{ {
struct drm_global_reference *global_ref; struct drm_global_reference *global_ref;
int ret; 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 = &dev_priv->bo_global_ref.ref;
global_ref->global_type = DRM_GLOBAL_TTM_BO; global_ref->global_type = DRM_GLOBAL_TTM_BO;
global_ref->size = sizeof(struct ttm_bo_global); global_ref->size = sizeof(struct ttm_bo_global);
...@@ -87,12 +62,10 @@ int vmw_ttm_global_init(struct vmw_private *dev_priv) ...@@ -87,12 +62,10 @@ int vmw_ttm_global_init(struct vmw_private *dev_priv)
return 0; return 0;
out_no_bo: out_no_bo:
drm_global_item_unref(&dev_priv->mem_global_ref);
return ret; return ret;
} }
void vmw_ttm_global_release(struct vmw_private *dev_priv) 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->bo_global_ref.ref);
drm_global_item_unref(&dev_priv->mem_global_ref);
} }
...@@ -99,7 +99,6 @@ struct vbox_private { ...@@ -99,7 +99,6 @@ struct vbox_private {
int fb_mtrr; int fb_mtrr;
struct { struct {
struct drm_global_reference mem_global_ref;
struct ttm_bo_global_ref bo_global_ref; struct ttm_bo_global_ref bo_global_ref;
struct ttm_bo_device bdev; struct ttm_bo_device bdev;
} ttm; } ttm;
......
...@@ -35,16 +35,6 @@ static inline struct vbox_private *vbox_bdev(struct ttm_bo_device *bd) ...@@ -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); 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. * 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) ...@@ -53,18 +43,6 @@ static int vbox_ttm_global_init(struct vbox_private *vbox)
struct drm_global_reference *global_ref; struct drm_global_reference *global_ref;
int ret; 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 = &vbox->ttm.bo_global_ref.ref;
global_ref->global_type = DRM_GLOBAL_TTM_BO; global_ref->global_type = DRM_GLOBAL_TTM_BO;
global_ref->size = sizeof(struct ttm_bo_global); global_ref->size = sizeof(struct ttm_bo_global);
...@@ -74,7 +52,6 @@ static int vbox_ttm_global_init(struct vbox_private *vbox) ...@@ -74,7 +52,6 @@ static int vbox_ttm_global_init(struct vbox_private *vbox)
ret = drm_global_item_ref(global_ref); ret = drm_global_item_ref(global_ref);
if (ret) { if (ret) {
DRM_ERROR("Failed setting up TTM BO subsystem.\n"); DRM_ERROR("Failed setting up TTM BO subsystem.\n");
drm_global_item_unref(&vbox->ttm.mem_global_ref);
return ret; return ret;
} }
...@@ -87,7 +64,6 @@ static int vbox_ttm_global_init(struct vbox_private *vbox) ...@@ -87,7 +64,6 @@ static int vbox_ttm_global_init(struct vbox_private *vbox)
static void vbox_ttm_global_release(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.bo_global_ref.ref);
drm_global_item_unref(&vbox->ttm.mem_global_ref);
} }
static void vbox_bo_ttm_destroy(struct ttm_buffer_object *tbo) 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, ...@@ -570,8 +570,7 @@ void ttm_bo_mem_put_locked(struct ttm_buffer_object *bo,
struct ttm_mem_reg *mem); struct ttm_mem_reg *mem);
void ttm_bo_global_release(struct ttm_bo_global *glob); void ttm_bo_global_release(struct ttm_bo_global *glob);
int ttm_bo_global_init(struct ttm_bo_global *glob, int ttm_bo_global_init(struct ttm_bo_global *glob);
struct ttm_mem_global *mem_glob);
int ttm_bo_device_release(struct ttm_bo_device *bdev); 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; ...@@ -895,7 +894,6 @@ extern const struct ttm_mem_type_manager_func ttm_bo_manager_func;
struct ttm_bo_global_ref { struct ttm_bo_global_ref {
struct drm_global_reference ref; struct drm_global_reference ref;
struct ttm_mem_global *mem_glob;
}; };
/** /**
...@@ -909,9 +907,7 @@ struct ttm_bo_global_ref { ...@@ -909,9 +907,7 @@ struct ttm_bo_global_ref {
*/ */
static inline int ttm_bo_global_ref_init(struct drm_global_reference *ref) static inline int ttm_bo_global_ref_init(struct drm_global_reference *ref)
{ {
struct ttm_bo_global_ref *bo_ref = return ttm_bo_global_init(ref->object);
container_of(ref, struct ttm_bo_global_ref, ref);
return ttm_bo_global_init(ref->object, bo_ref->mem_glob);
} }
/** /**
......
...@@ -63,7 +63,7 @@ ...@@ -63,7 +63,7 @@
#define TTM_MEM_MAX_ZONES 2 #define TTM_MEM_MAX_ZONES 2
struct ttm_mem_zone; struct ttm_mem_zone;
struct ttm_mem_global { extern struct ttm_mem_global {
struct kobject kobj; struct kobject kobj;
struct ttm_bo_global *bo_glob; struct ttm_bo_global *bo_glob;
struct workqueue_struct *swap_queue; struct workqueue_struct *swap_queue;
...@@ -78,7 +78,7 @@ struct ttm_mem_global { ...@@ -78,7 +78,7 @@ struct ttm_mem_global {
#else #else
struct ttm_mem_zone *zone_dma32; struct ttm_mem_zone *zone_dma32;
#endif #endif
}; } ttm_mem_glob;
extern int ttm_mem_global_init(struct ttm_mem_global *glob); extern int ttm_mem_global_init(struct ttm_mem_global *glob);
extern void ttm_mem_global_release(struct ttm_mem_global *glob); extern void ttm_mem_global_release(struct ttm_mem_global *glob);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment