Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/riastradh-drm2]: src/sys/external/bsd/drm2/dist/drm Manage the relevant ...



details:   https://anonhg.NetBSD.org/src/rev/aaac2c7af8c6
branches:  riastradh-drm2
changeset: 788242:aaac2c7af8c6
user:      riastradh <riastradh%NetBSD.org@localhost>
date:      Wed Jul 24 02:52:52 2013 +0000

description:
Manage the relevant uvm objects in gem object creation/destruction.

diffstat:

 sys/external/bsd/drm2/dist/drm/drm_gem.c |  27 +++++++++++++++++++++++++++
 1 files changed, 27 insertions(+), 0 deletions(-)

diffs (71 lines):

diff -r 9114f267631d -r aaac2c7af8c6 sys/external/bsd/drm2/dist/drm/drm_gem.c
--- a/sys/external/bsd/drm2/dist/drm/drm_gem.c  Wed Jul 24 02:52:37 2013 +0000
+++ b/sys/external/bsd/drm2/dist/drm/drm_gem.c  Wed Jul 24 02:52:52 2013 +0000
@@ -147,9 +147,16 @@
        BUG_ON((size & (PAGE_SIZE - 1)) != 0);
 
        obj->dev = dev;
+#ifdef __NetBSD__
+       obj->gemo_shm_uao = uao_create(size, 0);
+       KASSERT(drm_core_check_feature(dev, DRIVER_GEM));
+       KASSERT(dev->driver->gem_uvm_ops != NULL);
+       uvm_obj_init(&obj->gemo_uvmobj, dev->driver->gem_uvm_ops, true, 1);
+#else
        obj->filp = shmem_file_setup("drm mm object", size, VM_NORESERVE);
        if (IS_ERR(obj->filp))
                return PTR_ERR(obj->filp);
+#endif
 
        kref_init(&obj->refcount);
        atomic_set(&obj->handle_count, 0);
@@ -170,7 +177,14 @@
        BUG_ON((size & (PAGE_SIZE - 1)) != 0);
 
        obj->dev = dev;
+#ifdef __NetBSD__
+       obj->gemo_shm_uao = NULL;
+       KASSERT(drm_core_check_feature(dev, DRIVER_GEM));
+       KASSERT(dev->driver->gem_uvm_ops != NULL);
+       uvm_obj_init(&obj->gemo_uvmobj, dev->driver->gem_uvm_ops, true, 1);
+#else
        obj->filp = NULL;
+#endif
 
        kref_init(&obj->refcount);
        atomic_set(&obj->handle_count, 0);
@@ -201,8 +215,12 @@
        }
        return obj;
 fput:
+#ifdef __NetBSD__
+       drm_gem_object_release(obj);
+#else
        /* Object_init mangles the global counters - readjust them. */
        fput(obj->filp);
+#endif
 free:
        kfree(obj);
        return NULL;
@@ -578,13 +596,22 @@
 
        idr_remove_all(&file_private->object_idr);
        idr_destroy(&file_private->object_idr);
+#ifdef __NetBSD__
+       spin_lock_destroy(&file_private->table_lock);
+#endif
 }
 
 void
 drm_gem_object_release(struct drm_gem_object *obj)
 {
+#ifdef __NetBSD__
+       if (obj->gemo_shm_uao)
+               uao_detach(obj->gemo_shm_uao);
+       uvm_obj_destroy(&obj->gemo_uvmobj, true);
+#else
        if (obj->filp)
            fput(obj->filp);
+#endif
 }
 EXPORT_SYMBOL(drm_gem_object_release);
 



Home | Main Index | Thread Index | Old Index