<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body text="#000000" bgcolor="#FFFFFF">
<p><br>
</p>
<br>
<div class="moz-cite-prefix">On 2018年08月22日 17:05, Christian König
wrote:<br>
</div>
<blockquote type="cite"
cite="mid:a586e4f3-0fbb-e530-6a20-fe6d32302771@gmail.com">Am
22.08.2018 um 11:02 schrieb zhoucm1:
<br>
<blockquote type="cite">
<br>
<br>
On 2018年08月22日 16:52, Christian König wrote:
<br>
<blockquote type="cite">Am 22.08.2018 um 10:38 schrieb Chunming
Zhou:
<br>
<blockquote type="cite">stub fence will be used by timeline
syncobj as well.
<br>
<br>
Change-Id: Ia4252f03c07a8105491d2791dc7c8c6976682285
<br>
Signed-off-by: Chunming Zhou <a class="moz-txt-link-rfc2396E" href="mailto:david1.zhou@amd.com"><david1.zhou@amd.com></a>
<br>
Cc: Jason Ekstrand <a class="moz-txt-link-rfc2396E" href="mailto:jason@jlekstrand.net"><jason@jlekstrand.net></a>
<br>
---
<br>
drivers/gpu/drm/drm_syncobj.c | 28
++--------------------------
<br>
include/drm/drm_syncobj.h | 24
++++++++++++++++++++++++
<br>
2 files changed, 26 insertions(+), 26 deletions(-)
<br>
<br>
diff --git a/drivers/gpu/drm/drm_syncobj.c
b/drivers/gpu/drm/drm_syncobj.c
<br>
index d4f4ce484529..70af32d0def1 100644
<br>
--- a/drivers/gpu/drm/drm_syncobj.c
<br>
+++ b/drivers/gpu/drm/drm_syncobj.c
<br>
@@ -187,39 +187,15 @@ void drm_syncobj_replace_fence(struct
drm_syncobj *syncobj,
<br>
}
<br>
EXPORT_SYMBOL(drm_syncobj_replace_fence);
<br>
-struct drm_syncobj_null_fence {
<br>
- struct dma_fence base;
<br>
- spinlock_t lock;
<br>
-};
<br>
-
<br>
-static const char *drm_syncobj_null_fence_get_name(struct
dma_fence *fence)
<br>
-{
<br>
- return "syncobjnull";
<br>
-}
<br>
-
<br>
-static bool drm_syncobj_null_fence_enable_signaling(struct
dma_fence *fence)
<br>
-{
<br>
- dma_fence_enable_sw_signaling(fence);
<br>
- return !dma_fence_is_signaled(fence);
<br>
-}
<br>
-
<br>
-static const struct dma_fence_ops
drm_syncobj_null_fence_ops = {
<br>
- .get_driver_name = drm_syncobj_null_fence_get_name,
<br>
- .get_timeline_name = drm_syncobj_null_fence_get_name,
<br>
- .enable_signaling =
drm_syncobj_null_fence_enable_signaling,
<br>
- .wait = dma_fence_default_wait,
<br>
- .release = NULL,
<br>
-};
<br>
-
<br>
static int drm_syncobj_assign_null_handle(struct
drm_syncobj *syncobj)
<br>
{
<br>
- struct drm_syncobj_null_fence *fence;
<br>
+ struct drm_syncobj_stub_fence *fence;
<br>
fence = kzalloc(sizeof(*fence), GFP_KERNEL);
<br>
if (fence == NULL)
<br>
return -ENOMEM;
<br>
spin_lock_init(&fence->lock);
<br>
- dma_fence_init(&fence->base,
&drm_syncobj_null_fence_ops,
<br>
+ dma_fence_init(&fence->base,
&drm_syncobj_stub_fence_ops,
<br>
&fence->lock, 0, 0);
<br>
dma_fence_signal(&fence->base);
<br>
diff --git a/include/drm/drm_syncobj.h
b/include/drm/drm_syncobj.h
<br>
index 3980602472c0..b04c492ddbb5 100644
<br>
--- a/include/drm/drm_syncobj.h
<br>
+++ b/include/drm/drm_syncobj.h
<br>
@@ -30,6 +30,30 @@
<br>
struct drm_syncobj_cb;
<br>
+struct drm_syncobj_stub_fence {
<br>
+ struct dma_fence base;
<br>
+ spinlock_t lock;
<br>
+};
<br>
+
<br>
+const char *drm_syncobj_stub_fence_get_name(struct
dma_fence *fence)
<br>
+{
<br>
+ return "syncobjstub";
<br>
+}
<br>
+
<br>
+bool drm_syncobj_stub_fence_enable_signaling(struct
dma_fence *fence)
<br>
+{
<br>
+ dma_fence_enable_sw_signaling(fence);
<br>
</blockquote>
<br>
Copy&pasted from the old implementation, but that is
certainly totally nonsense.
<br>
<br>
dma_fence_enable_sw_signaling() is the function who is calling
this callback.
<br>
</blockquote>
indeed, will fix.
<br>
<blockquote type="cite">
<br>
<blockquote type="cite">+ return
!dma_fence_is_signaled(fence);
<br>
+}
<br>
+
<br>
+const struct dma_fence_ops drm_syncobj_stub_fence_ops = {
<br>
+ .get_driver_name = drm_syncobj_stub_fence_get_name,
<br>
+ .get_timeline_name = drm_syncobj_stub_fence_get_name,
<br>
+ .enable_signaling =
drm_syncobj_stub_fence_enable_signaling,
<br>
+ .wait = dma_fence_default_wait,
<br>
</blockquote>
<br>
The .wait callback should be dropped.
<br>
</blockquote>
why?
<br>
<br>
fence->ops->wait(fence, intr, timeout) is called by
dma_fence_wait(). If dropped, how does dma_fence_wait() work?
<br>
</blockquote>
<br>
You are working on an older code base, fence->ops->wait is
optional by now.
<br>
</blockquote>
Sorry, I still don't get it. My code is synced today from
amd-staging-drm-next, and it's 4.18-rc1.<br>
I still see the dma_fence_wait_timeout is :<br>
signed long<br>
dma_fence_wait_timeout(struct dma_fence *fence, bool intr, signed
long timeout)<br>
{<br>
signed long ret;<br>
<br>
if (WARN_ON(timeout < 0))<br>
return -EINVAL;<br>
<br>
trace_dma_fence_wait_start(fence);<br>
<font color="#ff0000"> ret = fence->ops->wait(fence,
intr, timeout);</font><br>
trace_dma_fence_wait_end(fence);<br>
return ret;<br>
}<br>
<br>
.wait callback seems still a must have?<br>
<br>
Thanks,<br>
David Zhou<br>
<br>
<br>
<blockquote type="cite"
cite="mid:a586e4f3-0fbb-e530-6a20-fe6d32302771@gmail.com">
<br>
Christian.
<br>
<br>
<blockquote type="cite">
<br>
Thanks,
<br>
David
<br>
<blockquote type="cite">
<br>
Apart from that looks good to me.
<br>
<br>
Christian.
<br>
<br>
<blockquote type="cite">+ .release = NULL,
<br>
+};
<br>
+
<br>
/**
<br>
* struct drm_syncobj - sync object.
<br>
*
<br>
</blockquote>
<br>
</blockquote>
<br>
_______________________________________________
<br>
amd-gfx mailing list
<br>
<a class="moz-txt-link-abbreviated" href="mailto:amd-gfx@lists.freedesktop.org">amd-gfx@lists.freedesktop.org</a>
<br>
<a class="moz-txt-link-freetext" href="https://lists.freedesktop.org/mailman/listinfo/amd-gfx">https://lists.freedesktop.org/mailman/listinfo/amd-gfx</a>
<br>
</blockquote>
<br>
</blockquote>
<br>
</body>
</html>