My mean is like the attached, I revert part of yours.
Regards,
David zhou
On 2017年09月29日 22:15, Marek Olšák wrote:
On Fri, Sep 29, 2017 at 4:13 PM, Marek Olšák <maraeo@xxxxxxxxx> wrote:
On Fri, Sep 29, 2017 at 4:44 AM, Chunming Zhou <zhoucm1@xxxxxxx> wrote:
On 2017年09月13日 04:42, Marek Olšák wrote:
From: Marek Olšák <marek.olsak@xxxxxxx>
For amdgpu.
drm_syncobj_create is renamed to drm_syncobj_create_as_handle, and new
helpers drm_syncobj_create and drm_syncobj_get_handle are added.
Signed-off-by: Marek Olšák <marek.olsak@xxxxxxx>
---
drivers/gpu/drm/drm_syncobj.c | 49
+++++++++++++++++++++++++++++++++++++++----
include/drm/drm_syncobj.h | 4 ++++
2 files changed, 49 insertions(+), 4 deletions(-)
diff --git a/drivers/gpu/drm/drm_syncobj.c b/drivers/gpu/drm/drm_syncobj.c
index 0422b8c..0bb1741 100644
--- a/drivers/gpu/drm/drm_syncobj.c
+++ b/drivers/gpu/drm/drm_syncobj.c
@@ -262,8 +262,14 @@ void drm_syncobj_free(struct kref *kref)
}
EXPORT_SYMBOL(drm_syncobj_free);
-static int drm_syncobj_create(struct drm_file *file_private,
- u32 *handle, uint32_t flags)
You can add a new parameter for passing dma fence, then in patch3, you can
directly use it for AMDGPU_FENCE_TO HANDLE_GET_SYNCOBJ.
otherwise the set looks good to me.
Sorry I just pushed this.
Actually, you commented on a deleted line. The function already has
dma_fence among the parameters.
Marek
>From a34c466f4a8617c18bf191d83bff3a3382166b00 Mon Sep 17 00:00:00 2001
From: Chunming Zhou <david1.zhou@xxxxxxx>
Date: Sat, 30 Sep 2017 09:53:53 +0800
Subject: [PATCH] drm: Don't split drm_syncobj_create
Change-Id: Icc6e4d8e94236675d6267d211e53698834d29869
Signed-off-by: Chunming Zhou <david1.zhou@xxxxxxx>
---
drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c | 6 +----
drivers/gpu/drm/drm_syncobj.c | 42 +++++-----------------------------
include/drm/drm_syncobj.h | 7 +++---
3 files changed, 10 insertions(+), 45 deletions(-)
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
index ab83dfc..882becc 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
@@ -1351,14 +1351,10 @@ int amdgpu_cs_fence_to_handle_ioctl(struct drm_device *dev, void *data,
switch (info->in.what) {
case AMDGPU_FENCE_TO_HANDLE_GET_SYNCOBJ:
- r = drm_syncobj_create(&syncobj, 0, fence);
+ r = drm_syncobj_create(filp, fence, &info->out.handle, 0);
dma_fence_put(fence);
if (r)
return r;
- r = drm_syncobj_get_handle(filp, syncobj, &info->out.handle);
- drm_syncobj_put(syncobj);
- return r;
-
case AMDGPU_FENCE_TO_HANDLE_GET_SYNCOBJ_FD:
r = drm_syncobj_create(&syncobj, 0, fence);
dma_fence_put(fence);
diff --git a/drivers/gpu/drm/drm_syncobj.c b/drivers/gpu/drm/drm_syncobj.c
index 62adc7a..28e1463 100644
--- a/drivers/gpu/drm/drm_syncobj.c
+++ b/drivers/gpu/drm/drm_syncobj.c
@@ -268,8 +268,9 @@ EXPORT_SYMBOL(drm_syncobj_free);
* @flags: DRM_SYNCOBJ_* flags
* @fence: if non-NULL, the syncobj will represent this fence
*/
-int drm_syncobj_create(struct drm_syncobj **out_syncobj, uint32_t flags,
- struct dma_fence *fence)
+int drm_syncobj_create(struct drm_file *file_private,
+ struct dma_fence *fence,
+ u32 *handle, uint32_t flags)
{
int ret;
struct drm_syncobj *syncobj;
@@ -293,22 +294,6 @@ int drm_syncobj_create(struct drm_syncobj **out_syncobj, uint32_t flags,
if (fence)
drm_syncobj_replace_fence(syncobj, fence);
- *out_syncobj = syncobj;
- return 0;
-}
-EXPORT_SYMBOL(drm_syncobj_create);
-
-/**
- * drm_syncobj_get_handle - get a handle from a syncobj
- */
-int drm_syncobj_get_handle(struct drm_file *file_private,
- struct drm_syncobj *syncobj, u32 *handle)
-{
- int ret;
-
- /* take a reference to put in the idr */
- drm_syncobj_get(syncobj);
-
idr_preload(GFP_KERNEL);
spin_lock(&file_private->syncobj_table_lock);
ret = idr_alloc(&file_private->syncobj_idr, syncobj, 1, 0, GFP_NOWAIT);
@@ -324,22 +309,7 @@ int drm_syncobj_get_handle(struct drm_file *file_private,
*handle = ret;
return 0;
}
-EXPORT_SYMBOL(drm_syncobj_get_handle);
-
-static int drm_syncobj_create_as_handle(struct drm_file *file_private,
- u32 *handle, uint32_t flags)
-{
- int ret;
- struct drm_syncobj *syncobj;
-
- ret = drm_syncobj_create(&syncobj, flags, NULL);
- if (ret)
- return ret;
-
- ret = drm_syncobj_get_handle(file_private, syncobj, handle);
- drm_syncobj_put(syncobj);
- return ret;
-}
+EXPORT_SYMBOL(drm_syncobj_create);
static int drm_syncobj_destroy(struct drm_file *file_private,
u32 handle)
@@ -568,8 +538,8 @@ drm_syncobj_create_ioctl(struct drm_device *dev, void *data,
if (args->flags & ~DRM_SYNCOBJ_CREATE_SIGNALED)
return -EINVAL;
- return drm_syncobj_create_as_handle(file_private,
- &args->handle, args->flags);
+ return drm_syncobj_create(file_private, NULL,
+ &args->handle, args->flags);
}
int
diff --git a/include/drm/drm_syncobj.h b/include/drm/drm_syncobj.h
index 43e2f38..4e3025e 100644
--- a/include/drm/drm_syncobj.h
+++ b/include/drm/drm_syncobj.h
@@ -136,10 +136,9 @@ int drm_syncobj_find_fence(struct drm_file *file_private,
u32 handle,
struct dma_fence **fence);
void drm_syncobj_free(struct kref *kref);
-int drm_syncobj_create(struct drm_syncobj **out_syncobj, uint32_t flags,
- struct dma_fence *fence);
-int drm_syncobj_get_handle(struct drm_file *file_private,
- struct drm_syncobj *syncobj, u32 *handle);
+int drm_syncobj_create(struct drm_file *file_private,
+ struct dma_fence *fence,
+ u32 *handle, uint32_t flags);
int drm_syncobj_get_fd(struct drm_syncobj *syncobj, int *p_fd);
#endif
--
2.7.4
_______________________________________________
dri-devel mailing list
dri-devel@xxxxxxxxxxxxxxxxxxxxx
https://lists.freedesktop.org/mailman/listinfo/dri-devel