<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body text="#000000" bgcolor="#FFFFFF">
<div class="moz-cite-prefix">Am 22.08.2018 um 11:10 schrieb zhoucm1:<br>
</div>
<blockquote type="cite"
cite="mid:4a4f9302-bf25-96c3-c870-32492ddc7134@amd.com">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<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" moz-do-not-send="true"><david1.zhou@amd.com></a>
<br>
Cc: Jason Ekstrand <a class="moz-txt-link-rfc2396E"
href="mailto:jason@jlekstrand.net"
moz-do-not-send="true"><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>
</blockquote>
<br>
That is outdated, when working on common drm stuff you need to work
on drm-next or drm-misc-next.<br>
<br>
<blockquote type="cite"
cite="mid:4a4f9302-bf25-96c3-c870-32492ddc7134@amd.com"> 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>
</blockquote>
<br>
See drm-misc-next:<br>
<br>
<blockquote type="cite"> trace_dma_fence_wait_start(fence);<br>
if (fence->ops->wait)<br>
ret = fence->ops->wait(fence, intr,
timeout);<br>
else<br>
ret = dma_fence_default_wait(fence, intr,
timeout);<br>
trace_dma_fence_wait_end(fence);<br>
</blockquote>
<br>
Regards,<br>
Christian.<br>
<br>
<blockquote type="cite"
cite="mid:4a4f9302-bf25-96c3-c870-32492ddc7134@amd.com"> <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"
moz-do-not-send="true">amd-gfx@lists.freedesktop.org</a> <br>
<a class="moz-txt-link-freetext"
href="https://lists.freedesktop.org/mailman/listinfo/amd-gfx"
moz-do-not-send="true">https://lists.freedesktop.org/mailman/listinfo/amd-gfx</a>
<br>
</blockquote>
<br>
</blockquote>
<br>
<br>
<fieldset class="mimeAttachmentHeader"></fieldset>
<br>
<pre wrap="">_______________________________________________
amd-gfx mailing list
<a class="moz-txt-link-abbreviated" href="mailto:amd-gfx@lists.freedesktop.org">amd-gfx@lists.freedesktop.org</a>
<a class="moz-txt-link-freetext" href="https://lists.freedesktop.org/mailman/listinfo/amd-gfx">https://lists.freedesktop.org/mailman/listinfo/amd-gfx</a>
</pre>
</blockquote>
<br>
</body>
</html>