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