Re: 回复: [PATCH] drm/amdgpu: fix losting fence signal
Christian König
deathsimple at vodafone.de
Wed Jun 22 12:38:04 UTC 2016
Yeah, but this must have another reason.
If we loose fences the system would just hang and not continue at all.
Christian.
Am 22.06.2016 um 14:29 schrieb Zhou, David(ChunMing):
> David Mao reported amd_sched_process doesn't balance with cs_ioctl,
> you should see that thread.
>
> Regards,
> David Zhou
>
> Sent from my Huawei Mobile
>
> -------- 原始邮件 --------
> 主题:Re: [PATCH] drm/amdgpu: fix losting fence signal
> 发件人:Christian K鰊ig
> 收件人:"Zhou, David(ChunMing)" ,amd-gfx at lists.freedesktop.org
> 抄送:"Mao, David"
>
> Am 22.06.2016 um 08:58 schrieb Chunming Zhou:
> > Change-Id: Ibfb7e8af796cc178dfb40d8aaabda472de3c5eda
> > Signed-off-by: Chunming Zhou <David1.Zhou at amd.com>
>
> NAK, this could lead to a situation where we try to signal a fence twice.
>
> Why do you think that we would loose fences otherwise?
>
> Regards,
> Christian.
>
> > ---
> > drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c | 7 ++++---
> > 1 file changed, 4 insertions(+), 3 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c
> b/drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c
> > index 17bd5af..6a69336 100644
> > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c
> > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c
> > @@ -192,9 +192,10 @@ static void
> amdgpu_fence_schedule_fallback(struct amdgpu_ring *ring)
> > void amdgpu_fence_process(struct amdgpu_ring *ring)
> > {
> > struct amdgpu_fence_driver *drv = &ring->fence_drv;
> > - uint32_t seq, last_seq;
> > + uint32_t seq, last_seq, old_seq;
> > int r;
> >
> > + old_seq = atomic_read(&ring->fence_drv.last_seq);
> > do {
> > last_seq = atomic_read(&ring->fence_drv.last_seq);
> > seq = amdgpu_fence_read(ring);
> > @@ -204,10 +205,10 @@ void amdgpu_fence_process(struct amdgpu_ring
> *ring)
> > if (seq != ring->fence_drv.sync_seq)
> > amdgpu_fence_schedule_fallback(ring);
> >
> > - while (last_seq != seq) {
> > + while (old_seq != seq) {
> > struct fence *fence, **ptr;
> >
> > - ptr = &drv->fences[++last_seq & drv->num_fences_mask];
> > + ptr = &drv->fences[++old_seq & drv->num_fences_mask];
> >
> > /* There is always exactly one thread signaling this
> fence slot */
> > fence = rcu_dereference_protected(*ptr, 1);
>
>
>
> _______________________________________________
> amd-gfx mailing list
> amd-gfx at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/amd-gfx
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/amd-gfx/attachments/20160622/e524d176/attachment.html>
More information about the amd-gfx
mailing list