summaryrefslogtreecommitdiff
path: root/linux-core
diff options
context:
space:
mode:
authorThomas Hellstrom <thomas-at-tungstengraphics-dot-com>2006-08-30 15:08:40 +0200
committerThomas Hellstrom <thomas-at-tungstengraphics-dot-com>2006-08-30 15:08:40 +0200
commit14a835be616183e733a2d6a7dcc697b8a6f46caf (patch)
treeadaa844d3d5955681442df5032c4ef8b76683f1d /linux-core
parente47a4fda2ef7aada45b7799ad20e8012102dc12e (diff)
Buffer object mapping and mapping synchronization for multiple clients.
Diffstat (limited to 'linux-core')
-rw-r--r--linux-core/drm_bo.c3
-rw-r--r--linux-core/drm_object.c4
-rw-r--r--linux-core/drm_vm.c1
3 files changed, 5 insertions, 3 deletions
diff --git a/linux-core/drm_bo.c b/linux-core/drm_bo.c
index 5f557d55..aa59238f 100644
--- a/linux-core/drm_bo.c
+++ b/linux-core/drm_bo.c
@@ -513,8 +513,11 @@ static int drm_buffer_object_unmap(drm_file_t * priv, uint32_t handle)
goto out;
}
+ DRM_ERROR("Removing ref object\n");
drm_remove_ref_object(priv, ro);
+ DRM_ERROR("Deregistering usage\n");
drm_bo_usage_deref_locked(dev, bo);
+ DRM_ERROR("Done\n");
out:
mutex_unlock(&dev->struct_mutex);
return ret;
diff --git a/linux-core/drm_object.c b/linux-core/drm_object.c
index b928c01e..e1b79101 100644
--- a/linux-core/drm_object.c
+++ b/linux-core/drm_object.c
@@ -108,9 +108,6 @@ static int drm_object_ref_action(drm_file_t * priv, drm_user_object_t * ro,
break;
default:
if (!ro->ref_struct_locked) {
- DRM_ERROR("Register object called without register"
- " capabilities\n");
- ret = -EINVAL;
break;
} else {
ro->ref_struct_locked(priv, ro, action);
@@ -164,6 +161,7 @@ int drm_add_ref_object(drm_file_t * priv, drm_user_object_t * referenced_object,
atomic_set(&item->refcount, 1);
item->hash.key = (unsigned long)referenced_object;
ret = drm_ht_insert_item(ht, &item->hash);
+ item->unref_action = ref_action;
if (ret)
goto out;
diff --git a/linux-core/drm_vm.c b/linux-core/drm_vm.c
index 7163341d..69391058 100644
--- a/linux-core/drm_vm.c
+++ b/linux-core/drm_vm.c
@@ -713,6 +713,7 @@ static void drm_vm_ttm_close(struct vm_area_struct *vma)
dev = ttm->dev;
mutex_lock(&dev->struct_mutex);
drm_ttm_delete_mm(ttm, vma->vm_mm);
+ list_del(&ttm_vma->head);
drm_free(ttm_vma, sizeof(*ttm_vma), DRM_MEM_VMAS);
if (atomic_dec_and_test(&ttm->vma_count)) {
if (ttm->destroy) {