This reverts commit 27eb1fa9130a98edd2b321d4dbce5c8b244ee7af.

Signed-off-by: Karol Herbst <kher...@redhat.com>
---
 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 +++++++++++++-
 .../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, 380 insertions(+), 32 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
index 213d29d0ad80..d76895c7b0ef 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
@@ -65,6 +65,33 @@ 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.
  *
@@ -81,6 +108,20 @@ 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);
@@ -99,6 +140,8 @@ 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;
 }
 
@@ -107,6 +150,7 @@ 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 e114f209b701..fe8f276e9811 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h
@@ -40,6 +40,7 @@
 
 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 6ae11a477643..e6c4cd3dc50e 100644
--- a/drivers/gpu/drm/ast/ast_drv.h
+++ b/drivers/gpu/drm/ast/ast_drv.h
@@ -104,6 +104,7 @@ 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 8a59d6fc1160..d21fbd26785a 100644
--- a/drivers/gpu/drm/ast/ast_ttm.c
+++ b/drivers/gpu/drm/ast/ast_ttm.c
@@ -36,11 +36,37 @@ 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);
@@ -49,6 +75,7 @@ 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;
@@ -57,11 +84,12 @@ static int ast_ttm_global_init(struct ast_private *ast)
 static void
 ast_ttm_global_release(struct ast_private *ast)
 {
-       if (ast->ttm.bo_global_ref.ref.release == NULL)
+       if (ast->ttm.mem_global_ref.release == NULL)
                return;
 
        drm_global_item_unref(&ast->ttm.bo_global_ref.ref);
-       ast->ttm.bo_global_ref.ref.release = NULL;
+       drm_global_item_unref(&ast->ttm.mem_global_ref);
+       ast->ttm.mem_global_ref.release = NULL;
 }
 
 
diff --git a/drivers/gpu/drm/bochs/bochs.h b/drivers/gpu/drm/bochs/bochs.h
index c1d88ea6b419..577a8b917cb9 100644
--- a/drivers/gpu/drm/bochs/bochs.h
+++ b/drivers/gpu/drm/bochs/bochs.h
@@ -77,6 +77,7 @@ 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 cad65774a973..ff4f41dec228 100644
--- a/drivers/gpu/drm/bochs/bochs_mm.c
+++ b/drivers/gpu/drm/bochs/bochs_mm.c
@@ -16,11 +16,35 @@ 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);
@@ -29,6 +53,7 @@ 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;
        }
 
@@ -37,11 +62,12 @@ static int bochs_ttm_global_init(struct bochs_device *bochs)
 
 static void bochs_ttm_global_release(struct bochs_device *bochs)
 {
-       if (bochs->ttm.bo_global_ref.ref.release == NULL)
+       if (bochs->ttm.mem_global_ref.release == NULL)
                return;
 
        drm_global_item_unref(&bochs->ttm.bo_global_ref.ref);
-       bochs->ttm.bo_global_ref.ref.release = NULL;
+       drm_global_item_unref(&bochs->ttm.mem_global_ref);
+       bochs->ttm.mem_global_ref.release = NULL;
 }
 
 
diff --git a/drivers/gpu/drm/cirrus/cirrus_drv.h 
b/drivers/gpu/drm/cirrus/cirrus_drv.h
index 01852fbda9da..a29f87e98d9d 100644
--- a/drivers/gpu/drm/cirrus/cirrus_drv.h
+++ b/drivers/gpu/drm/cirrus/cirrus_drv.h
@@ -136,6 +136,7 @@ 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 7801c56c3c9b..2e2141f26c5b 100644
--- a/drivers/gpu/drm/cirrus/cirrus_ttm.c
+++ b/drivers/gpu/drm/cirrus/cirrus_ttm.c
@@ -36,11 +36,37 @@ 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);
@@ -49,6 +75,7 @@ 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;
@@ -57,11 +84,12 @@ static int cirrus_ttm_global_init(struct cirrus_device 
*cirrus)
 static void
 cirrus_ttm_global_release(struct cirrus_device *cirrus)
 {
-       if (cirrus->ttm.bo_global_ref.ref.release == NULL)
+       if (cirrus->ttm.mem_global_ref.release == NULL)
                return;
 
        drm_global_item_unref(&cirrus->ttm.bo_global_ref.ref);
-       cirrus->ttm.bo_global_ref.ref.release = NULL;
+       drm_global_item_unref(&cirrus->ttm.mem_global_ref);
+       cirrus->ttm.mem_global_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 60479502e277..45c25a488f42 100644
--- a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.h
+++ b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.h
@@ -49,6 +49,7 @@ 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;
diff --git a/drivers/gpu/drm/hisilicon/hibmc/hibmc_ttm.c 
b/drivers/gpu/drm/hisilicon/hibmc/hibmc_ttm.c
index 14071c849121..0454aa43ffc6 100644
--- a/drivers/gpu/drm/hisilicon/hibmc/hibmc_ttm.c
+++ b/drivers/gpu/drm/hisilicon/hibmc/hibmc_ttm.c
@@ -29,10 +29,34 @@ 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;
@@ -40,6 +64,7 @@ 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;
@@ -48,11 +73,9 @@ 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);
-       hibmc->bo_global_ref.ref.release = NULL;
+       drm_global_item_unref(&hibmc->mem_global_ref);
+       hibmc->mem_global_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 e5348955a3cc..04f1dfba12e5 100644
--- a/drivers/gpu/drm/mgag200/mgag200_drv.h
+++ b/drivers/gpu/drm/mgag200/mgag200_drv.h
@@ -212,6 +212,7 @@ 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 11bdc8121a7d..3444b539e7f4 100644
--- a/drivers/gpu/drm/mgag200/mgag200_ttm.c
+++ b/drivers/gpu/drm/mgag200/mgag200_ttm.c
@@ -36,11 +36,37 @@ 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);
@@ -49,6 +75,7 @@ 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;
@@ -57,11 +84,12 @@ static int mgag200_ttm_global_init(struct mga_device *ast)
 static void
 mgag200_ttm_global_release(struct mga_device *ast)
 {
-       if (ast->ttm.bo_global_ref.ref.release == NULL)
+       if (ast->ttm.mem_global_ref.release == NULL)
                return;
 
        drm_global_item_unref(&ast->ttm.bo_global_ref.ref);
-       ast->ttm.bo_global_ref.ref.release = NULL;
+       drm_global_item_unref(&ast->ttm.mem_global_ref);
+       ast->ttm.mem_global_ref.release = NULL;
 }
 
 
diff --git a/drivers/gpu/drm/nouveau/nouveau_drv.h 
b/drivers/gpu/drm/nouveau/nouveau_drv.h
index 0f3bb1a11fc9..0b2191fa96f7 100644
--- a/drivers/gpu/drm/nouveau/nouveau_drv.h
+++ b/drivers/gpu/drm/nouveau/nouveau_drv.h
@@ -146,6 +146,7 @@ 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 69448b02649e..a293383c8654 100644
--- a/drivers/gpu/drm/nouveau/nouveau_ttm.c
+++ b/drivers/gpu/drm/nouveau/nouveau_ttm.c
@@ -174,12 +174,38 @@ 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);
@@ -189,7 +215,8 @@ 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->ttm.bo_global_ref.ref.release = NULL;
+               drm_global_item_unref(&drm->ttm.mem_global_ref);
+               drm->ttm.mem_global_ref.release = NULL;
                return ret;
        }
 
@@ -199,11 +226,12 @@ nouveau_ttm_global_init(struct nouveau_drm *drm)
 void
 nouveau_ttm_global_release(struct nouveau_drm *drm)
 {
-       if (drm->ttm.bo_global_ref.ref.release == NULL)
+       if (drm->ttm.mem_global_ref.release == NULL)
                return;
 
        drm_global_item_unref(&drm->ttm.bo_global_ref.ref);
-       drm->ttm.bo_global_ref.ref.release = NULL;
+       drm_global_item_unref(&drm->ttm.mem_global_ref);
+       drm->ttm.mem_global_ref.release = NULL;
 }
 
 static int
diff --git a/drivers/gpu/drm/qxl/qxl_drv.h b/drivers/gpu/drm/qxl/qxl_drv.h
index ac9374028b7d..65be4e94a998 100644
--- a/drivers/gpu/drm/qxl/qxl_drv.h
+++ b/drivers/gpu/drm/qxl/qxl_drv.h
@@ -127,6 +127,7 @@ 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;
 };
diff --git a/drivers/gpu/drm/qxl/qxl_ttm.c b/drivers/gpu/drm/qxl/qxl_ttm.c
index b7c4eb3bd179..a86c7461cfa2 100644
--- a/drivers/gpu/drm/qxl/qxl_ttm.c
+++ b/drivers/gpu/drm/qxl/qxl_ttm.c
@@ -46,11 +46,37 @@ 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);
@@ -59,6 +85,7 @@ 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;
        }
 
@@ -70,6 +97,7 @@ 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 06fb952b6290..1a6f6edb3515 100644
--- a/drivers/gpu/drm/radeon/radeon.h
+++ b/drivers/gpu/drm/radeon/radeon.h
@@ -449,6 +449,7 @@ 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 2104429ddbac..dac4ec5a120b 100644
--- a/drivers/gpu/drm/radeon/radeon_ttm.c
+++ b/drivers/gpu/drm/radeon/radeon_ttm.c
@@ -64,12 +64,36 @@ 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);
@@ -78,6 +102,7 @@ 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;
        }
 
@@ -89,6 +114,7 @@ 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 99322c3d6573..48bd611027b6 100644
--- a/drivers/gpu/drm/ttm/ttm_bo.c
+++ b/drivers/gpu/drm/ttm/ttm_bo.c
@@ -1527,22 +1527,18 @@ 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)
+int ttm_bo_global_init(struct ttm_bo_global *glob,
+                      struct ttm_mem_global *mem_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 = &ttm_mem_glob;
+       glob->mem_glob = 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 7704e17c402f..450387c92b63 100644
--- a/drivers/gpu/drm/ttm/ttm_memory.c
+++ b/drivers/gpu/drm/ttm/ttm_memory.c
@@ -41,9 +41,6 @@
 
 #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;
@@ -467,6 +464,7 @@ 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)
 {
@@ -488,6 +486,7 @@ 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 74628b5cf4e2..5465d87f6629 100644
--- a/drivers/gpu/drm/virtio/virtgpu_drv.h
+++ b/drivers/gpu/drm/virtio/virtgpu_drv.h
@@ -146,6 +146,7 @@ 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;
 };
diff --git a/drivers/gpu/drm/virtio/virtgpu_ttm.c 
b/drivers/gpu/drm/virtio/virtgpu_ttm.c
index 5fecf55ff1ce..a3e02335da18 100644
--- a/drivers/gpu/drm/virtio/virtgpu_ttm.c
+++ b/drivers/gpu/drm/virtio/virtgpu_ttm.c
@@ -50,12 +50,37 @@ 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);
@@ -64,6 +89,7 @@ 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;
        }
 
@@ -75,6 +101,7 @@ 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 e24d9771e056..e2d33761c99f 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c
@@ -812,8 +812,8 @@ static int vmw_driver_load(struct drm_device *dev, unsigned 
long chipset)
                goto out_err4;
        }
 
-       dev_priv->tdev = ttm_object_device_init(&ttm_mem_glob, 12,
-                                               &vmw_prime_dmabuf_ops);
+       dev_priv->tdev = ttm_object_device_init
+               (dev_priv->mem_global_ref.object, 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 7a3c64bd82b3..8d9cd8ff8deb 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h
@@ -418,6 +418,7 @@ 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;
 
@@ -1356,7 +1357,7 @@ vmw_bo_reference(struct vmw_buffer_object *buf)
 
 static inline struct ttm_mem_global *vmw_mem_glob(struct vmw_private *dev_priv)
 {
-       return &ttm_mem_glob;
+       return (struct ttm_mem_global *) dev_priv->mem_global_ref.object;
 }
 
 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 8e3203766882..cb0a12cc4090 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_ttm_glue.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_ttm_glue.c
@@ -79,11 +79,36 @@ void vmw_validation_mem_init_ttm(struct vmw_private 
*dev_priv, size_t gran)
        vvm->gran = gran;
 }
 
+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);
@@ -98,10 +123,12 @@ 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 24e54d5dda6b..e2a6b2b5bfc3 100644
--- a/drivers/staging/vboxvideo/vbox_drv.h
+++ b/drivers/staging/vboxvideo/vbox_drv.h
@@ -79,6 +79,7 @@ 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 ceacbc1d3ff7..958c928c0d4b 100644
--- a/drivers/staging/vboxvideo/vbox_ttm.c
+++ b/drivers/staging/vboxvideo/vbox_ttm.c
@@ -16,6 +16,16 @@ 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.
  */
@@ -24,6 +34,18 @@ 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);
@@ -33,6 +55,7 @@ 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;
        }
 
@@ -45,6 +68,7 @@ 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 4ae6fc33f761..c6ee07d10281 100644
--- a/include/drm/ttm/ttm_bo_driver.h
+++ b/include/drm/ttm/ttm_bo_driver.h
@@ -570,7 +570,8 @@ 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);
+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);
 
@@ -894,6 +895,7 @@ 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;
 };
 
 /**
@@ -907,7 +909,9 @@ struct ttm_bo_global_ref {
  */
 static inline int ttm_bo_global_ref_init(struct drm_global_reference *ref)
 {
-       return ttm_bo_global_init(ref->object);
+       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);
 }
 
 /**
diff --git a/include/drm/ttm/ttm_memory.h b/include/drm/ttm/ttm_memory.h
index 3ff48a0a2d7b..737b5fed8003 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;
-extern struct ttm_mem_global {
+struct ttm_mem_global {
        struct kobject kobj;
        struct ttm_bo_global *bo_glob;
        struct workqueue_struct *swap_queue;
@@ -78,7 +78,7 @@ extern 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);
-- 
2.20.1

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

Reply via email to