diff options
| author | Thomas Hellstrom <thomas-at-tungstengraphics-dot-com> | 2006-09-05 18:00:25 +0200 | 
|---|---|---|
| committer | Thomas Hellstrom <thomas-at-tungstengraphics-dot-com> | 2006-09-05 18:00:25 +0200 | 
| commit | 604215396847a7964fd7d68aa89d4f778b3bf22b (patch) | |
| tree | 68679011047b400c8e86247e493244a40873bdd8 /linux-core/drm_bo.c | |
| parent | 034fc31292edaa25779a938ab3e92ef34697eaf9 (diff) | |
Fence all unfenced buffers function.
Diffstat (limited to 'linux-core/drm_bo.c')
| -rw-r--r-- | linux-core/drm_bo.c | 33 | 
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. | 
