On 2018å¹´08æ??22æ?¥ 16:52, Christian König wrote: > Am 22.08.2018 um 10:38 schrieb Chunming Zhou: >> stub fence will be used by timeline syncobj as well. >> >> Change-Id: Ia4252f03c07a8105491d2791dc7c8c6976682285 >> Signed-off-by: Chunming Zhou <david1.zhou at amd.com> >> Cc: Jason Ekstrand <jason at jlekstrand.net> >> --- >>  drivers/gpu/drm/drm_syncobj.c | 28 ++-------------------------- >>  include/drm/drm_syncobj.h    | 24 ++++++++++++++++++++++++ >>  2 files changed, 26 insertions(+), 26 deletions(-) >> >> diff --git a/drivers/gpu/drm/drm_syncobj.c >> b/drivers/gpu/drm/drm_syncobj.c >> index d4f4ce484529..70af32d0def1 100644 >> --- a/drivers/gpu/drm/drm_syncobj.c >> +++ b/drivers/gpu/drm/drm_syncobj.c >> @@ -187,39 +187,15 @@ void drm_syncobj_replace_fence(struct >> drm_syncobj *syncobj, >>  } >>  EXPORT_SYMBOL(drm_syncobj_replace_fence); >>  -struct drm_syncobj_null_fence { >> -   struct dma_fence base; >> -   spinlock_t lock; >> -}; >> - >> -static const char *drm_syncobj_null_fence_get_name(struct dma_fence >> *fence) >> -{ >> -       return "syncobjnull"; >> -} >> - >> -static bool drm_syncobj_null_fence_enable_signaling(struct dma_fence >> *fence) >> -{ >> -   dma_fence_enable_sw_signaling(fence); >> -   return !dma_fence_is_signaled(fence); >> -} >> - >> -static const struct dma_fence_ops drm_syncobj_null_fence_ops = { >> -   .get_driver_name = drm_syncobj_null_fence_get_name, >> -   .get_timeline_name = drm_syncobj_null_fence_get_name, >> -   .enable_signaling = drm_syncobj_null_fence_enable_signaling, >> -   .wait = dma_fence_default_wait, >> -   .release = NULL, >> -}; >> - >>  static int drm_syncobj_assign_null_handle(struct drm_syncobj *syncobj) >>  { >> -   struct drm_syncobj_null_fence *fence; >> +   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_null_fence_ops, >> +   dma_fence_init(&fence->base, &drm_syncobj_stub_fence_ops, >>                 &fence->lock, 0, 0); >>      dma_fence_signal(&fence->base); >>  diff --git a/include/drm/drm_syncobj.h b/include/drm/drm_syncobj.h >> index 3980602472c0..b04c492ddbb5 100644 >> --- a/include/drm/drm_syncobj.h >> +++ b/include/drm/drm_syncobj.h >> @@ -30,6 +30,30 @@ >>   struct drm_syncobj_cb; >>  +struct drm_syncobj_stub_fence { >> +   struct dma_fence base; >> +   spinlock_t lock; >> +}; >> + >> +const char *drm_syncobj_stub_fence_get_name(struct dma_fence *fence) >> +{ >> +       return "syncobjstub"; >> +} >> + >> +bool drm_syncobj_stub_fence_enable_signaling(struct dma_fence *fence) >> +{ >> +   dma_fence_enable_sw_signaling(fence); > > Copy&pasted from the old implementation, but that is certainly totally > nonsense. > > dma_fence_enable_sw_signaling() is the function who is calling this > callback. indeed, will fix. > >> +   return !dma_fence_is_signaled(fence); >> +} >> + >> +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, >> +   .enable_signaling = drm_syncobj_stub_fence_enable_signaling, >> +   .wait = dma_fence_default_wait, > > The .wait callback should be dropped. why? fence->ops->wait(fence, intr, timeout) is called by dma_fence_wait(). If dropped, how does dma_fence_wait() work? Thanks, David > > Apart from that looks good to me. > > Christian. > >> +   .release = NULL, >> +}; >> + >>  /** >>   * struct drm_syncobj - sync object. >>   * >