summaryrefslogtreecommitdiff
path: root/linux-core/drm_bo.c
diff options
context:
space:
mode:
authorThomas Hellstrom <thomas-at-tungstengraphics-dot-com>2006-09-05 18:00:25 +0200
committerThomas Hellstrom <thomas-at-tungstengraphics-dot-com>2006-09-05 18:00:25 +0200
commit604215396847a7964fd7d68aa89d4f778b3bf22b (patch)
tree68679011047b400c8e86247e493244a40873bdd8 /linux-core/drm_bo.c
parent034fc31292edaa25779a938ab3e92ef34697eaf9 (diff)
Fence all unfenced buffers function.
Diffstat (limited to 'linux-core/drm_bo.c')
-rw-r--r--linux-core/drm_bo.c33
1 files changed, 15 insertions, 18 deletions
diff --git a/linux-core/drm_bo.c b/linux-core/drm_bo.c
index 1f0bbba5..68af5c31 100644
--- a/linux-core/drm_bo.c
+++ b/linux-core/drm_bo.c
@@ -199,8 +199,15 @@ void drm_bo_usage_deref_unlocked(drm_device_t * dev, drm_buffer_object_t * bo)
}
}
+/*
+ * Note. The caller has to register (if applicable)
+ * and deregister fence object usage.
+ */
+
int drm_fence_buffer_objects(drm_file_t * priv,
- struct list_head *list, drm_fence_object_t * fence)
+ struct list_head *list,
+ drm_fence_object_t *fence,
+ drm_fence_object_t **used_fence)
{
drm_device_t *dev = priv->head->dev;
drm_buffer_manager_t *bm = &dev->bm;
@@ -230,19 +237,9 @@ int drm_fence_buffer_objects(drm_file_t * priv,
goto out;
}
} else {
- fence = kmem_cache_alloc(drm_cache.fence_object, GFP_KERNEL);
-
- if (!fence) {
- ret = -ENOMEM;
- goto out;
- }
-
- ret = drm_fence_object_init(dev, fence_flags, 1, fence);
-
- if (ret) {
- kmem_cache_free(drm_cache.fence_object, fence);
- goto out;
- }
+ ret = drm_fence_object_create(dev, fence_flags, 1, &fence);
+ if (ret)
+ goto out;
}
/*
@@ -285,14 +282,14 @@ int drm_fence_buffer_objects(drm_file_t * priv,
drm_bo_usage_deref_locked(dev, entry);
l = f_list.next;
}
- if (!count)
- drm_fence_usage_deref_locked(dev, fence);
- else if (count > 1)
- atomic_add(count - 1, &fence->usage);
+ atomic_add(count, &fence->usage);
out:
mutex_unlock(&dev->struct_mutex);
+ *used_fence = fence;
return ret;
}
+EXPORT_SYMBOL(drm_fence_buffer_objects);
+
/*
* Call bo->mutex locked.