On Mon, Aug 20, 2012 at 11:41 PM, Marcin Slusarz
<marcin.slus...@gmail.com> wrote:
> On Tue, Aug 21, 2012 at 07:13:23AM +1000, Ben Skeggs wrote:
>>    Am Dienstag, 21. August 2012 schrieb Marcin Slusarz :
>>
>>      On Mon, Aug 20, 2012 at 04:33:24PM +1000, Ben Skeggs wrote:
>>      > On Sun, Aug 19, 2012 at 11:02:00PM +0200, Marcin Slusarz wrote:
>>      > > Commit "drm/nouveau: port all engines to new engine module
>>      format" changed
>>      > > IB size calculation to be less wasteful, but didn't take into
>>      account already
>>      > > existing off-by-one bugs :).
>>      > >
>>      > > So:
>>      > > - ib_max is the last entry, so we need to +1 when calculating
>>      number of
>>      > >   free entries
>>      > > - nv50_dma_wait already does +1 (for FIRE_RING), so we don't
>>      need another +1
>>      > >   on nouveau_gem_ioctl_pushbuf side
>>      > > - there are 512 allocated IB entries (and it needs to be round
>>      number), so we
>>      > >   can accept at most 511 entries from userspace (we need one for
>>      FIRE_RING) -
>>      > >   fortunately userspace already flushes at 511, so nr_push check
>>      change won't
>>      > >   have any impact
>>      > Also skipped this patch for now as I have work in progress that
>>      will improve this and
>>      > related code.  I should have it in the tree soon.
>>      Maybe I should have written this in the changelog, but this patch
>>      fixes total
>>      mayhem seen in warsow and nexuiz (at least). It's better to
>>      integrate it sooner
>>      than later.
>>
>>    I presume bumping the IB size to 8KiB also helps?
>
> Yes, my first patch did exactly this and it worked.
>
> However, Maarten can still reproduce this bug, so my patch is not completely
> correct. I discovered that RING_SPACE calls nouveau_dma_wait with slots=1 and
> nv50_dma_wait increases it again, so we need to move +1 from nv50_dma_wait
> to nouveau_gem_ioctl_pushbuf. But once I do this everything explodes, because
> we do 2 FIRE_RING's (one from fence_emit, and one from nv50_dma_wait), so...
>
>>    I prefer this in the
>>    meantime, and it's probably best to do anyway, I didn't take into
>>    account what we allow userspace to do in one shot.  If this works too,
>>    i'll push that change this morning.
>
> ... it's probably a good idea to do this and forget about the problem.
>
>>    I did try and reproduce on a couple of cards with warsow and wasn't
>>    able to.
>
> Nexuiz is even better. It draws artifacts immediately after demo start.
>
>>    Also, what happened to instmem being the culprit here?
>
> It was bad bisection. Once I knew what is the problem, I verified
> "drm/nouveau: port all engines to new engine module format" is the first
> bad commit.
>
> Marcin
> _______________________________________________
> Nouveau mailing list
> Nouveau@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/nouveau

One thing, i think FIRE_RING should check for available ib slots,
currently it doesn't and that seems a bit dangerous. Just a thought
for Ben :-)

-- 
Far away from the primal instinct, the song seems to fade away, the
river get wider between your thoughts and the things we do and say.
_______________________________________________
Nouveau mailing list
Nouveau@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/nouveau

Reply via email to