drivers/gpu/drm/via/init_ttm.c  |   10 -----
 drivers/gpu/drm/via/ttm_gem.c   |   65 +++++++++++++++++++++++----------
 drivers/gpu/drm/via/via_crtc.c  |   12 +++---
 drivers/gpu/drm/via/via_drv.c   |   23 +++++++----
 drivers/gpu/drm/via/via_drv.h   |   38 -------------------
 drivers/gpu/drm/via/via_fb.c    |   11 ++---
 drivers/gpu/drm/via/via_ioc32.c |   30 ++++++++-------
 drivers/gpu/drm/via/via_mem.h   |   77 ++++++++++++++++++++++++++++++++++++++++
 drivers/gpu/drm/via/via_ttm.c   |    4 +-
 9 files changed, 169 insertions(+), 101 deletions(-)

New commits:
commit fb00c5aeefdad1ba0274971ec2071e157f0a11d9
Merge: c72c0f1 f3ab97b
Author: James Simmons <jsimm...@infradead.org>
Date:   Mon Dec 29 22:32:08 2014 -0500

    Merge branch 'master' of git.freedesktop.org:/git/openchrome/drm-openchrome
    
    Conflicts:
        drivers/gpu/drm/via/ttm_gem.c
        drivers/gpu/drm/via/via_drv.h
        drivers/gpu/drm/via/via_fb.c

commit c72c0f1193676d48bffd12d10d0bf93c336b1acf
Author: James Simmons <jsimm...@infradead.org>
Date:   Sun Dec 28 17:19:06 2014 -0500

    drm/via: Remove dependency on gem object private field
    
    In newer kernels the private field in struct drm_gem_object
    disappears. Also gem_object_init() handling will migrate to
    gem_object_open() so we preform this update here. Added a
    header to expose struct ttm_heap to the GEM handling code.
    
    Signed-off-by: James Simmons <jsimm...@infradead.org>

diff --git a/drivers/gpu/drm/via/init_ttm.c b/drivers/gpu/drm/via/init_ttm.c
index 1688d4f..71d02bc 100644
--- a/drivers/gpu/drm/via/init_ttm.c
+++ b/drivers/gpu/drm/via/init_ttm.c
@@ -22,18 +22,10 @@
  * USE OR OTHER DEALINGS IN THE SOFTWARE.
  */
 
-#include "drmP.h"
-#include "ttm/ttm_bo_driver.h"
-#include "ttm/ttm_placement.h"
+#include "via_mem.h"
 
 #define DRM_FILE_PAGE_OFFSET (0x100000000ULL >> PAGE_SHIFT)
 
-struct ttm_heap {
-       uint32_t busy_placements[TTM_NUM_MEM_TYPES];
-       uint32_t placements[TTM_NUM_MEM_TYPES];
-       struct ttm_buffer_object pbo;
-};
-
 static int
 ttm_global_mem_init(struct drm_global_reference *ref)
 {
diff --git a/drivers/gpu/drm/via/ttm_gem.c b/drivers/gpu/drm/via/ttm_gem.c
index a78c2a01..ed20925 100644
--- a/drivers/gpu/drm/via/ttm_gem.c
+++ b/drivers/gpu/drm/via/ttm_gem.c
@@ -23,10 +23,15 @@
 #include "drmP.h"
 #include "via_drv.h"
 
+struct ttm_gem_object {
+       struct drm_gem_object gem;
+       struct ttm_heap *heap;
+};
+
 /*
  * initialize the gem buffer object
  */
-int ttm_gem_init_object(struct drm_gem_object *obj)
+int ttm_gem_open_object(struct drm_gem_object *obj, struct drm_file *file_priv)
 {
        return 0;
 }
@@ -36,14 +41,27 @@ int ttm_gem_init_object(struct drm_gem_object *obj)
  */
 void ttm_gem_free_object(struct drm_gem_object *obj)
 {
-       struct ttm_buffer_object *bo = obj->driver_private;
+       struct ttm_gem_object *gem = container_of(obj, struct ttm_gem_object, 
gem);
+
+       if (gem->heap != NULL) {
+               struct ttm_buffer_object *bo = &gem->heap->pbo;
 
-       if (bo) {
-               obj->driver_private = NULL;
                ttm_bo_unref(&bo);
+               gem->heap = NULL;
        }
        drm_gem_object_release(obj);
-       kfree(obj);
+       kfree(gem);
+}
+
+struct ttm_buffer_object *
+ttm_gem_mapping(struct drm_gem_object *obj)
+{
+       struct ttm_gem_object *gem;
+
+       gem = container_of(obj, struct ttm_gem_object, gem);
+       if (gem->heap == NULL)
+               return NULL;
+       return &gem->heap->pbo;
 }
 
 /*
@@ -66,30 +84,37 @@ int ttm_mmap(struct file *filp, struct vm_area_struct *vma)
 }
 
 struct drm_gem_object *
-ttm_gem_create(struct drm_device *dev, struct ttm_bo_device *bdev, int types,
-               bool interruptible, int byte_align, int page_align,
-               unsigned long size)
+ttm_gem_create(struct drm_device *dev, struct ttm_bo_device *bdev,
+               enum ttm_bo_type origin, int types, bool interruptible,
+               int byte_align, int page_align, unsigned long size)
 {
        struct ttm_buffer_object *bo = NULL;
-       struct drm_gem_object *obj;
+       struct ttm_gem_object *obj;
        int ret;
 
        size = round_up(size, byte_align);
        size = ALIGN(size, page_align);
 
-       obj = drm_gem_object_alloc(dev, size);
-       if (!obj)
-               return ERR_PTR(-ENOMEM);
-
-       ret = ttm_bo_allocate(bdev, size, ttm_bo_type_device, types,
-                               byte_align, page_align, interruptible,
-                               NULL, &bo);
+       ret = ttm_bo_allocate(bdev, size, origin, types, byte_align,
+                             page_align, interruptible, NULL, &bo);
        if (ret) {
                DRM_ERROR("Failed to create buffer object\n");
-               drm_gem_object_unreference_unlocked(obj);
                return ERR_PTR(ret);
        }
-       bo->persistent_swap_storage = obj->filp;
-       obj->driver_private = bo;
-       return obj;
+
+       obj = kzalloc(sizeof(*obj), GFP_KERNEL);
+       if (!obj) {
+               ttm_bo_unref(&bo);
+               return ERR_PTR(-ENOMEM);
+       }
+
+       ret = drm_gem_object_init(dev, &obj->gem, size);
+       if (unlikely(ret)) {
+               ttm_bo_unref(&bo);
+               return ERR_PTR(ret);
+       }
+
+       obj->heap = container_of(bo, struct ttm_heap, pbo);
+       bo->persistent_swap_storage = obj->gem.filp;
+       return &obj->gem;
 }
diff --git a/drivers/gpu/drm/via/via_crtc.c b/drivers/gpu/drm/via/via_crtc.c
index 546066e..fa7311e 100644
--- a/drivers/gpu/drm/via/via_crtc.c
+++ b/drivers/gpu/drm/via/via_crtc.c
@@ -111,12 +111,12 @@ via_crtc_cursor_set(struct drm_crtc *crtc, struct 
drm_file *file_priv,
        }
 
        obj = drm_gem_object_lookup(dev, file_priv, handle);
-       if (!obj || !obj->driver_private) {
+       if (!obj) {
                DRM_ERROR("Cannot find cursor object %x for crtc %d\n", handle, 
crtc->base.id);
                return -ENOENT;
        }
 
-       user_kmap.bo = obj->driver_private;
+       user_kmap.bo = ttm_gem_mapping(obj);
        ret = ttm_bo_kmap(user_kmap.bo, 0, user_kmap.bo->num_pages, &user_kmap);
        if (!ret) {
                /* Copy data from userland to cursor memory region */
@@ -1160,7 +1160,7 @@ via_crtc_mode_set_base(struct drm_crtc *crtc, int x, int 
y,
                return ret;
 
        obj = new_fb->helper_private;
-       bo = obj->driver_private;
+       bo = ttm_gem_mapping(obj);
 
        ret = ttm_bo_pin(bo, NULL);
        if (unlikely(ret)) {
@@ -1179,7 +1179,7 @@ via_crtc_mode_set_base(struct drm_crtc *crtc, int x, int 
y,
        /* Free the old framebuffer if it exist */
        if (fb) {
                obj = fb->helper_private;
-               bo = obj->driver_private;
+               bo = ttm_gem_mapping(obj);
 
                ret = ttm_bo_unpin(bo, NULL);
                if (unlikely(ret))
@@ -1196,7 +1196,7 @@ via_iga1_mode_set_base_atomic(struct drm_crtc *crtc, 
struct drm_framebuffer *fb,
        struct via_crtc *iga = container_of(crtc, struct via_crtc, base);
        struct drm_via_private *dev_priv = crtc->dev->dev_private;
        struct drm_gem_object *obj = fb->helper_private;
-       struct ttm_buffer_object *bo = obj->driver_private;
+       struct ttm_buffer_object *bo = ttm_gem_mapping(obj);
        u8 value;
 
        /* Set the framebuffer offset */
@@ -1254,7 +1254,7 @@ via_iga2_mode_set_base_atomic(struct drm_crtc *crtc, 
struct drm_framebuffer *fb,
        struct via_crtc *iga = container_of(crtc, struct via_crtc, base);
        struct drm_via_private *dev_priv = crtc->dev->dev_private;
        struct drm_gem_object *obj = fb->helper_private;
-       struct ttm_buffer_object *bo = obj->driver_private;
+       struct ttm_buffer_object *bo = ttm_gem_mapping(obj);
        u8 value;
 
        /* Set the framebuffer offset */
diff --git a/drivers/gpu/drm/via/via_drv.c b/drivers/gpu/drm/via/via_drv.c
index d425db0..2541608 100644
--- a/drivers/gpu/drm/via/via_drv.c
+++ b/drivers/gpu/drm/via/via_drv.c
@@ -217,8 +217,9 @@ static int via_dumb_create(struct drm_file *filp, struct 
drm_device *dev,
 
        args->pitch = round_up(args->width * (args->bpp >> 3), 16);
        args->size = args->pitch * args->height;
-       obj = ttm_gem_create(dev, &dev_priv->bdev, TTM_PL_FLAG_VRAM,
-                               false, 16, PAGE_SIZE, args->size);
+       obj = ttm_gem_create(dev, &dev_priv->bdev, ttm_bo_type_device,
+                            TTM_PL_FLAG_VRAM, false, 16, PAGE_SIZE,
+                            args->size);
        if (IS_ERR(obj))
                return PTR_ERR(obj);
 
@@ -233,15 +234,19 @@ static int via_dumb_mmap(struct drm_file *filp, struct 
drm_device *dev,
 {
        struct ttm_buffer_object *bo;
        struct drm_gem_object *obj;
+       int rc = -ENOENT;
 
        obj = drm_gem_object_lookup(dev, filp, handle);
-       if (!obj || !obj->driver_private)
-               return -ENOENT;
+       if (obj == NULL)
+               return rc;
 
-       bo = obj->driver_private;
-       *offset_p = drm_vma_node_offset_addr(&bo->vma_node);
+       bo = ttm_gem_mapping(obj);
+       if (bo != NULL) {
+               *offset_p = drm_vma_node_offset_addr(&bo->vma_node);
+               rc = 0;
+       }
        drm_gem_object_unreference_unlocked(obj);
-       return 0;
+       return rc;
 }
 
 static int gem_dumb_destroy(struct drm_file *filp, struct drm_device *dev,
@@ -327,7 +332,7 @@ via_driver_load(struct drm_device *dev, unsigned long 
chipset)
 
        via_init_command_verifier();
 
-       ret = via_ttm_init(dev_priv);
+       ret = via_ttm_init(dev);
        if (ret)
                goto out_err;
 
@@ -458,7 +463,7 @@ static struct drm_driver via_driver = {
        .irq_handler = via_driver_irq_handler,
        .dma_quiescent = via_driver_dma_quiescent,
        .lastclose = via_driver_lastclose,
-       .gem_init_object = ttm_gem_init_object,
+       .gem_open_object = ttm_gem_open_object,
        .gem_free_object = ttm_gem_free_object,
        .dumb_create = via_dumb_create,
        .dumb_map_offset = via_dumb_mmap,
diff --git a/drivers/gpu/drm/via/via_drv.h b/drivers/gpu/drm/via/via_drv.h
index 9e6bc02..82a2fcc 100644
--- a/drivers/gpu/drm/via/via_drv.h
+++ b/drivers/gpu/drm/via/via_drv.h
@@ -46,6 +46,7 @@
 #include <drm/via_drm.h>
 
 #include "via_regs.h"
+#include "via_mem.h"
 #include "via_fence.h"
 #include "via_dma.h"
 #include "via_verifier.h"
@@ -209,43 +210,6 @@ extern int via_wait_idle(struct drm_via_private *dev_priv);
 
 extern int via_detect_vram(struct drm_device *dev);
 
-extern int via_ttm_init(struct drm_via_private *dev_priv);
-extern struct ttm_tt *via_sgdma_backend_init(struct ttm_bo_device *bdev, 
unsigned long size,
-                                       uint32_t page_flags, struct page 
*dummy_read_page);
-
-extern int ttm_global_init(struct drm_global_reference *global_ref,
-                               struct ttm_bo_global_ref *global_bo,
-                               struct ttm_bo_driver *driver,
-                               struct ttm_bo_device *bdev,
-                               bool dma32);
-extern void ttm_global_fini(struct drm_global_reference *global_ref,
-                               struct ttm_bo_global_ref *global_bo,
-                               struct ttm_bo_device *bdev);
-
-extern int ttm_bo_allocate(struct ttm_bo_device *bdev, unsigned long size,
-                               enum ttm_bo_type origin, int types,
-                               uint32_t byte_align, uint32_t page_align,
-                               bool interruptible, struct sg_table *sg,
-                               struct ttm_buffer_object **p_bo);
-extern void ttm_placement_from_domain(struct ttm_buffer_object *bo,
-                               struct ttm_placement *placement, u32 domains,
-                               struct ttm_bo_device *bdev);
-extern int ttm_bo_unpin(struct ttm_buffer_object *bo, struct ttm_bo_kmap_obj 
*kmap);
-extern int ttm_bo_pin(struct ttm_buffer_object *bo, struct ttm_bo_kmap_obj 
*kmap);
-extern int ttm_allocate_kernel_buffer(struct ttm_bo_device *bdev, unsigned 
long size,
-                               uint32_t alignment, uint32_t domain,
-                               struct ttm_bo_kmap_obj *kmap);
-
-extern int ttm_mmap(struct file *filp, struct vm_area_struct *vma);
-
-extern int ttm_gem_init_object(struct drm_gem_object *obj);
-extern void ttm_gem_free_object(struct drm_gem_object *obj);
-extern struct drm_gem_object *ttm_gem_create(struct drm_device *dev,
-                                       struct ttm_bo_device *bdev, int type,
-                                       bool interruptible,
-                                       int byte_align, int page_align,
-                                       unsigned long size);
-
 extern int via_enable_vblank(struct drm_device *dev, int crtc);
 extern void via_disable_vblank(struct drm_device *dev, int crtc);
 
diff --git a/drivers/gpu/drm/via/via_fb.c b/drivers/gpu/drm/via/via_fb.c
index b42e251..c160cb2 100644
--- a/drivers/gpu/drm/via/via_fb.c
+++ b/drivers/gpu/drm/via/via_fb.c
@@ -1020,17 +1020,16 @@ via_fb_probe(struct drm_fb_helper *helper,
        size = mode_cmd.pitches[0] * mode_cmd.height;
        size = ALIGN(size, PAGE_SIZE);
 
-       obj = drm_gem_object_alloc(helper->dev, size);
+       obj = ttm_gem_create(helper->dev, &dev_priv->bdev, ttm_bo_type_kernel,
+                            TTM_PL_FLAG_VRAM, false, 1, PAGE_SIZE, size);
        if (unlikely(IS_ERR(obj))) {
                ret = PTR_ERR(obj);
                goto out_err;
        }
-       ret = ttm_bo_allocate(&dev_priv->bdev, size, ttm_bo_type_kernel,
-                               TTM_PL_FLAG_VRAM, 1, PAGE_SIZE, false,
-                               NULL, &kmap->bo);
-       if (unlikely(ret))
+
+       kmap->bo = ttm_gem_mapping(obj);
+       if (kmap->bo == NULL)
                goto out_err;
-       kmap->bo->persistent_swap_storage = obj->filp;
 
        ret = ttm_bo_pin(kmap->bo, kmap);
        if (unlikely(ret))
diff --git a/drivers/gpu/drm/via/via_ioc32.c b/drivers/gpu/drm/via/via_ioc32.c
index a0738c1..a1aaed1 100644
--- a/drivers/gpu/drm/via/via_ioc32.c
+++ b/drivers/gpu/drm/via/via_ioc32.c
@@ -24,7 +24,6 @@
 /*
  * Authors: Thomas Hellström <thomas-at-tungstengraphics-dot-com>
  */
-
 #include "drmP.h"
 #include "via_drv.h"
 
@@ -67,14 +66,15 @@ via_gem_alloc(struct drm_device *dev, void *data,
        struct drm_gem_object *obj;
        int ret = -ENOMEM;
 
-       obj = ttm_gem_create(dev, &dev_priv->bdev, args->domains, false,
-                               args->alignment, PAGE_SIZE, args->size);
-       if (obj && obj->driver_private) {
+       obj = ttm_gem_create(dev, &dev_priv->bdev, ttm_bo_type_device,
+                            args->domains, false, args->alignment,
+                            PAGE_SIZE, args->size);
+       if (obj != NULL) {
                ret = drm_gem_handle_create(filp, obj, &args->handle);
                /* drop reference from allocate - handle holds it now */
                drm_gem_object_unreference_unlocked(obj);
                if (!ret) {
-                       struct ttm_buffer_object *bo = obj->driver_private;
+                       struct ttm_buffer_object *bo = ttm_gem_mapping(obj);
 
                        args->map_handle = 
drm_vma_node_offset_addr(&bo->vma_node);
                        args->domains = bo->mem.placement & TTM_PL_MASK_MEM;
@@ -90,17 +90,19 @@ via_gem_alloc(struct drm_device *dev, void *data,
 static int
 via_gem_state(struct drm_device *dev, void *data, struct drm_file *file_priv)
 {
-       struct ttm_buffer_object *bo = NULL;
        struct drm_via_gem_object *args = data;
+       struct ttm_buffer_object *bo = NULL;
        struct drm_gem_object *obj = NULL;
        struct ttm_placement placement;
        int ret = -EINVAL;
 
        obj = drm_gem_object_lookup(dev, file_priv, args->handle);
-       if (!obj || !obj->driver_private)
+       if (obj == NULL)
                return ret;
 
-       bo = obj->driver_private;
+       bo = ttm_gem_mapping(obj);
+       if (bo == NULL)
+               return ret;
 
        /* Don't bother to migrate to same domain */
        args->domains &= ~(bo->mem.placement & TTM_PL_MASK_MEM);
@@ -134,16 +136,18 @@ via_gem_wait(struct drm_device *dev, void *data, struct 
drm_file *file_priv)
        struct drm_via_gem_wait *args = data;
        struct ttm_buffer_object *bo;
        struct drm_gem_object *obj;
+       int ret = -EINVAL;
        bool no_wait;
-       int ret;
 
        obj = drm_gem_object_lookup(dev, file_priv, args->handle);
-       if (!obj)
-               return -EINVAL;
+       if (obj == NULL)
+               return ret;
 
-       no_wait = (args->no_wait != 0);
-       bo = obj->driver_private;
+       bo = ttm_gem_mapping(obj);
+       if (bo == NULL)
+               return ret;
 
+       no_wait = (args->no_wait != 0);
        ret = ttm_bo_reserve(bo, true, no_wait, false, 0);
        if (unlikely(ret != 0))
                return ret;
diff --git a/drivers/gpu/drm/via/via_mem.h b/drivers/gpu/drm/via/via_mem.h
new file mode 100644
index 0000000..95c1580
--- /dev/null
+++ b/drivers/gpu/drm/via/via_mem.h
@@ -0,0 +1,77 @@
+/*
+ * Copyright 2014 James Simmons <jsimm...@infradead.org>
+ *
+ * Influenced by sample code from VIA Technologies and the radeon driver.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sub license,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial portions
+ * of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHOR(S) OR COPYRIGHT HOLDER(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+#ifndef _VIA_MEM_H_
+#define _VIA_MEM_H_
+
+#include "drmP.h"
+#include "ttm/ttm_bo_driver.h"
+#include "ttm/ttm_placement.h"
+
+struct ttm_heap {
+       uint32_t busy_placements[TTM_NUM_MEM_TYPES];
+       uint32_t placements[TTM_NUM_MEM_TYPES];
+       struct ttm_buffer_object pbo;
+};
+
+extern int via_ttm_init(struct drm_device *dev);
+extern struct ttm_tt *via_sgdma_backend_init(struct ttm_bo_device *bdev, 
unsigned long size,
+                                        uint32_t page_flags, struct page 
*dummy_read_page);
+
+extern int ttm_global_init(struct drm_global_reference *global_ref,
+                                struct ttm_bo_global_ref *global_bo,
+                                struct ttm_bo_driver *driver,
+                                struct ttm_bo_device *bdev,
+                                bool dma32);
+extern void ttm_global_fini(struct drm_global_reference *global_ref,
+                                struct ttm_bo_global_ref *global_bo,
+                                struct ttm_bo_device *bdev);
+
+extern int ttm_bo_allocate(struct ttm_bo_device *bdev, unsigned long size,
+                                enum ttm_bo_type origin, uint32_t domains,
+                                uint32_t byte_align, uint32_t page_align,
+                                bool interruptible, struct sg_table *sg,
+                                struct ttm_buffer_object **p_bo);
+extern void ttm_placement_from_domain(struct ttm_buffer_object *bo,
+                                struct ttm_placement *placement, u32 domains,
+                                struct ttm_bo_device *bdev);
+extern int ttm_bo_unpin(struct ttm_buffer_object *bo, struct ttm_bo_kmap_obj 
*kmap);
+extern int ttm_bo_pin(struct ttm_buffer_object *bo, struct ttm_bo_kmap_obj 
*kmap);
+extern int ttm_allocate_kernel_buffer(struct ttm_bo_device *bdev, unsigned 
long size,
+                                uint32_t alignment, uint32_t domain,
+                                struct ttm_bo_kmap_obj *kmap);
+
+extern int ttm_mmap(struct file *filp, struct vm_area_struct *vma);
+
+extern int ttm_gem_open_object(struct drm_gem_object *obj, struct drm_file 
*file_priv);
+extern void ttm_gem_free_object(struct drm_gem_object *obj);
+extern struct drm_gem_object *ttm_gem_create(struct drm_device *dev,
+                                            struct ttm_bo_device *bdev,
+                                            enum ttm_bo_type origin,
+                                            int type, bool interruptible,
+                                            int byte_align, int page_align,
+                                            unsigned long size);
+extern struct ttm_buffer_object *ttm_gem_mapping(struct drm_gem_object *obj);
+
+#endif /* _VIA_MEM_H_ */
diff --git a/drivers/gpu/drm/via/via_ttm.c b/drivers/gpu/drm/via/via_ttm.c
index 08e9c1e..f96ce2d 100644
--- a/drivers/gpu/drm/via/via_ttm.c
+++ b/drivers/gpu/drm/via/via_ttm.c
@@ -483,8 +483,10 @@ static struct ttm_bo_driver via_bo_driver = {
        .io_mem_free            = via_ttm_io_mem_free,
 };
 
-int via_ttm_init(struct drm_via_private *dev_priv)
+int via_ttm_init(struct drm_device *dev)
 {
+       struct drm_via_private *dev_priv = dev->dev_private;
+
        int ret = ttm_global_init(&dev_priv->mem_global_ref,
                                &dev_priv->bo_global_ref,
                                &via_bo_driver,
commit ac1f388a593d08356d37d9d2b6d630ff17ba0152
Author: James Simmons <jsimm...@infradead.org>
Date:   Sat Dec 27 14:40:12 2014 -0500

    drm/via: Remove GEM handling out of ttm_bo_allocate
    
    The function ttm_bo_allocate assumes that the GEM object
    will be created before the ttm_buffer_object which might
    not be the case. So we move the shem handling in
    ttm_bo_allocate to the gem handling code.
    
    Signed-off-by: James Simmons <jsimm...@infradead.org>

diff --git a/drivers/gpu/drm/via/init_ttm.c b/drivers/gpu/drm/via/init_ttm.c
index aab0221..1688d4f 100644
--- a/drivers/gpu/drm/via/init_ttm.c
+++ b/drivers/gpu/drm/via/init_ttm.c
@@ -153,7 +153,6 @@ ttm_bo_allocate(struct ttm_bo_device *bdev,
                uint32_t page_align,
                bool interruptible,
                struct sg_table *sg,
-               struct file *persistant_swap_storage,
                struct ttm_buffer_object **p_bo)
 {
        unsigned long acc_size = sizeof(struct ttm_heap);
@@ -174,10 +173,10 @@ ttm_bo_allocate(struct ttm_bo_device *bdev,
        ttm_placement_from_domain(bo, &placement, domains, bdev);
 
        ret = ttm_bo_init(bdev, bo, size, origin, &placement,
-                               page_align >> PAGE_SHIFT,
-                               interruptible, persistant_swap_storage,
-                               ttm_bo_dma_acc_size(bdev, size, acc_size),
-                               sg, ttm_buffer_object_destroy);
+                         page_align >> PAGE_SHIFT,
+                         interruptible, NULL,
+                         ttm_bo_dma_acc_size(bdev, size, acc_size),
+                         sg, ttm_buffer_object_destroy);
        if (unlikely(ret))
                kfree(heap);
        else
@@ -237,7 +236,7 @@ ttm_allocate_kernel_buffer(struct ttm_bo_device *bdev, 
unsigned long size,
 {
        int ret = ttm_bo_allocate(bdev, size, ttm_bo_type_kernel, domain,
                                        alignment, PAGE_SIZE, false, NULL,
-                                       NULL, &kmap->bo);
+                                       &kmap->bo);
        if (likely(!ret)) {
                ret = ttm_bo_pin(kmap->bo, kmap);
                if (unlikely(ret)) {
diff --git a/drivers/gpu/drm/via/ttm_gem.c b/drivers/gpu/drm/via/ttm_gem.c
index 4c30b8b..a78c2a01 100644
--- a/drivers/gpu/drm/via/ttm_gem.c
+++ b/drivers/gpu/drm/via/ttm_gem.c
@@ -83,12 +83,13 @@ ttm_gem_create(struct drm_device *dev, struct ttm_bo_device 
*bdev, int types,
 
        ret = ttm_bo_allocate(bdev, size, ttm_bo_type_device, types,
                                byte_align, page_align, interruptible,
-                               NULL, obj->filp, &bo);
+                               NULL, &bo);
        if (ret) {
                DRM_ERROR("Failed to create buffer object\n");
                drm_gem_object_unreference_unlocked(obj);
                return ERR_PTR(ret);
        }
+       bo->persistent_swap_storage = obj->filp;
        obj->driver_private = bo;
        return obj;
 }
diff --git a/drivers/gpu/drm/via/via_drv.c b/drivers/gpu/drm/via/via_drv.c
index ac17d3d..d425db0 100644
--- a/drivers/gpu/drm/via/via_drv.c
+++ b/drivers/gpu/drm/via/via_drv.c
@@ -152,8 +152,7 @@ via_mmio_setup(struct drm_device *dev)
                return ret;
 
        ret = ttm_bo_allocate(&dev_priv->bdev, VIA_MMIO_REGSIZE, 
ttm_bo_type_kernel,
-                               TTM_PL_FLAG_PRIV0, 1, PAGE_SIZE, false, NULL,
-                               NULL, &bo);
+                               TTM_PL_FLAG_PRIV0, 1, PAGE_SIZE, false, NULL, 
&bo);
        if (ret)
                goto err;
 
diff --git a/drivers/gpu/drm/via/via_drv.h b/drivers/gpu/drm/via/via_drv.h
index 5198a43..9e6bc02 100644
--- a/drivers/gpu/drm/via/via_drv.h
+++ b/drivers/gpu/drm/via/via_drv.h
@@ -226,7 +226,6 @@ extern int ttm_bo_allocate(struct ttm_bo_device *bdev, 
unsigned long size,
                                enum ttm_bo_type origin, int types,
                                uint32_t byte_align, uint32_t page_align,
                                bool interruptible, struct sg_table *sg,
-                               struct file *persistant_swap_storage,
                                struct ttm_buffer_object **p_bo);
 extern void ttm_placement_from_domain(struct ttm_buffer_object *bo,
                                struct ttm_placement *placement, u32 domains,
diff --git a/drivers/gpu/drm/via/via_fb.c b/drivers/gpu/drm/via/via_fb.c
index 06ac2df..b42e251 100644
--- a/drivers/gpu/drm/via/via_fb.c
+++ b/drivers/gpu/drm/via/via_fb.c
@@ -1027,9 +1027,10 @@ via_fb_probe(struct drm_fb_helper *helper,
        }
        ret = ttm_bo_allocate(&dev_priv->bdev, size, ttm_bo_type_kernel,
                                TTM_PL_FLAG_VRAM, 1, PAGE_SIZE, false,
-                               NULL, obj->filp, &kmap->bo);
+                               NULL, &kmap->bo);
        if (unlikely(ret))
                goto out_err;
+       kmap->bo->persistent_swap_storage = obj->filp;
 
        ret = ttm_bo_pin(kmap->bo, kmap);
        if (unlikely(ret))
diff --git a/drivers/gpu/drm/via/via_h1_cmdbuf.c 
b/drivers/gpu/drm/via/via_h1_cmdbuf.c
index e5087f9..e4e0698 100644
--- a/drivers/gpu/drm/via/via_h1_cmdbuf.c
+++ b/drivers/gpu/drm/via/via_h1_cmdbuf.c
@@ -161,7 +161,7 @@ static int via_initialize(struct drm_device *dev,
 
        ret = ttm_bo_allocate(&dev_priv->bdev, init->size, ttm_bo_type_kernel,
                                TTM_PL_FLAG_TT, VIA_MM_ALIGN_SIZE, PAGE_SIZE,
-                               false, NULL, NULL, &bo);
+                               false, NULL, &bo);
        if (!ret) {
                ret = ttm_bo_pin(bo, &dev_priv->dmabuf);
                if (ret)
_______________________________________________
Openchrome-devel mailing list
Openchrome-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/openchrome-devel

Reply via email to