diff options
| author | Dave Airlie <airlied@redhat.com> | 2018-12-07 10:46:29 +1000 | 
|---|---|---|
| committer | Dave Airlie <airlied@redhat.com> | 2018-12-07 11:23:05 +1000 | 
| commit | e69aa5f9b97f7f871643336deb281db5cb14878b (patch) | |
| tree | 1cc3fff133fe46c8e9b1c7c8f7c3840b56904912 /drivers/gpu/drm/drm_syncobj.c | |
| parent | 1f9a5dce3548d54d810b23e4e0b1d8c6d73a52d4 (diff) | |
| parent | 0b258ed1a219a9776e8f6967eb34837ae0332e64 (diff) | |
Merge tag 'drm-misc-next-2018-12-06' of git://anongit.freedesktop.org/drm/drm-misc into drm-next
Final changes to drm-misc-next for v4.21:
UAPI Changes:
Core Changes:
- Add dma_fence_get_stub to dma-buf, and use it in drm/syncobj.
- Add and use DRM_MODESET_LOCK_BEGIN/END helpers.
- Small fixes to drm_atomic_helper_resume(), drm_mode_setcrtc() and
  drm_atomic_helper_commit_duplicated_state()
- Fix drm_atomic_state_helper.[c] extraction.
Driver Changes:
- Small fixes to tinydrm, vkms, meson, rcar-du, virtio, vkms,
  v3d, and pl111.
- vc4: Allow scaling and YUV formats on cursor planes.
- v3d: Enable use of the Texture Formatting Unit, and fix
  prime imports of buffers from other drivers.
- Add support for the AUO G101EVN010 panel.
- sun4i: Enable support for the H6 display engine.
Signed-off-by: Dave Airlie <airlied@redhat.com>
[airlied: added drm/v3d: fix broken build to the merge commit]
From: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/321be9d3-ab75-5f92-8193-e5113662edef@linux.intel.com
Diffstat (limited to 'drivers/gpu/drm/drm_syncobj.c')
| -rw-r--r-- | drivers/gpu/drm/drm_syncobj.c | 70 | 
1 files changed, 19 insertions, 51 deletions
diff --git a/drivers/gpu/drm/drm_syncobj.c b/drivers/gpu/drm/drm_syncobj.c index e2c5b3ca4824..db30a0e89db8 100644 --- a/drivers/gpu/drm/drm_syncobj.c +++ b/drivers/gpu/drm/drm_syncobj.c @@ -56,22 +56,6 @@  #include "drm_internal.h"  #include <drm/drm_syncobj.h> -struct drm_syncobj_stub_fence { -	struct dma_fence base; -	spinlock_t lock; -}; - -static const char *drm_syncobj_stub_fence_get_name(struct dma_fence *fence) -{ -        return "syncobjstub"; -} - -static const struct dma_fence_ops drm_syncobj_stub_fence_ops = { -	.get_driver_name = drm_syncobj_stub_fence_get_name, -	.get_timeline_name = drm_syncobj_stub_fence_get_name, -}; - -  /**   * drm_syncobj_find - lookup and reference a sync object.   * @file_private: drm file private pointer @@ -156,13 +140,11 @@ void drm_syncobj_remove_callback(struct drm_syncobj *syncobj,  /**   * drm_syncobj_replace_fence - replace fence in a sync object.   * @syncobj: Sync object to replace fence in - * @point: timeline point   * @fence: fence to install in sync file.   * - * This replaces the fence on a sync object, or a timeline point fence. + * This replaces the fence on a sync object.   */  void drm_syncobj_replace_fence(struct drm_syncobj *syncobj, -			       u64 point,  			       struct dma_fence *fence)  {  	struct dma_fence *old_fence; @@ -190,23 +172,18 @@ void drm_syncobj_replace_fence(struct drm_syncobj *syncobj,  }  EXPORT_SYMBOL(drm_syncobj_replace_fence); -static int drm_syncobj_assign_null_handle(struct drm_syncobj *syncobj) +/** + * drm_syncobj_assign_null_handle - assign a stub fence to the sync object + * @syncobj: sync object to assign the fence on + * + * Assign a already signaled stub fence to the sync object. + */ +static void drm_syncobj_assign_null_handle(struct drm_syncobj *syncobj)  { -	struct drm_syncobj_stub_fence *fence; -	fence = kzalloc(sizeof(*fence), GFP_KERNEL); -	if (fence == NULL) -		return -ENOMEM; - -	spin_lock_init(&fence->lock); -	dma_fence_init(&fence->base, &drm_syncobj_stub_fence_ops, -		       &fence->lock, 0, 0); -	dma_fence_signal(&fence->base); - -	drm_syncobj_replace_fence(syncobj, 0, &fence->base); +	struct dma_fence *fence = dma_fence_get_stub(); -	dma_fence_put(&fence->base); - -	return 0; +	drm_syncobj_replace_fence(syncobj, fence); +	dma_fence_put(fence);  }  /** @@ -254,7 +231,7 @@ void drm_syncobj_free(struct kref *kref)  	struct drm_syncobj *syncobj = container_of(kref,  						   struct drm_syncobj,  						   refcount); -	drm_syncobj_replace_fence(syncobj, 0, NULL); +	drm_syncobj_replace_fence(syncobj, NULL);  	kfree(syncobj);  }  EXPORT_SYMBOL(drm_syncobj_free); @@ -274,7 +251,6 @@ EXPORT_SYMBOL(drm_syncobj_free);  int drm_syncobj_create(struct drm_syncobj **out_syncobj, uint32_t flags,  		       struct dma_fence *fence)  { -	int ret;  	struct drm_syncobj *syncobj;  	syncobj = kzalloc(sizeof(struct drm_syncobj), GFP_KERNEL); @@ -285,16 +261,11 @@ int drm_syncobj_create(struct drm_syncobj **out_syncobj, uint32_t flags,  	INIT_LIST_HEAD(&syncobj->cb_list);  	spin_lock_init(&syncobj->lock); -	if (flags & DRM_SYNCOBJ_CREATE_SIGNALED) { -		ret = drm_syncobj_assign_null_handle(syncobj); -		if (ret < 0) { -			drm_syncobj_put(syncobj); -			return ret; -		} -	} +	if (flags & DRM_SYNCOBJ_CREATE_SIGNALED) +		drm_syncobj_assign_null_handle(syncobj);  	if (fence) -		drm_syncobj_replace_fence(syncobj, 0, fence); +		drm_syncobj_replace_fence(syncobj, fence);  	*out_syncobj = syncobj;  	return 0; @@ -479,7 +450,7 @@ static int drm_syncobj_import_sync_file_fence(struct drm_file *file_private,  		return -ENOENT;  	} -	drm_syncobj_replace_fence(syncobj, 0, fence); +	drm_syncobj_replace_fence(syncobj, fence);  	dma_fence_put(fence);  	drm_syncobj_put(syncobj);  	return 0; @@ -950,7 +921,7 @@ drm_syncobj_reset_ioctl(struct drm_device *dev, void *data,  		return ret;  	for (i = 0; i < args->count_handles; i++) -		drm_syncobj_replace_fence(syncobjs[i], 0, NULL); +		drm_syncobj_replace_fence(syncobjs[i], NULL);  	drm_syncobj_array_free(syncobjs, args->count_handles); @@ -982,11 +953,8 @@ drm_syncobj_signal_ioctl(struct drm_device *dev, void *data,  	if (ret < 0)  		return ret; -	for (i = 0; i < args->count_handles; i++) { -		ret = drm_syncobj_assign_null_handle(syncobjs[i]); -		if (ret < 0) -			break; -	} +	for (i = 0; i < args->count_handles; i++) +		drm_syncobj_assign_null_handle(syncobjs[i]);  	drm_syncobj_array_free(syncobjs, args->count_handles);  | 
