• Ben Widawsky's avatar
    drm/i915: Initialize seqno for VECS too · 5020150b
    Ben Widawsky authored
    We require n-1 mailboxes for proper semaphore synchronization. All
    semaphore synchronization code relies on proper values in these
    mailboxes. The fact that we failed to touch the vebox ring by itself
    was unlikely to be an issue since the HW should be initializing the
    values to 0. However the error framework for testing seqno wrap
    introduced by Mika, in addition to the hangcheck via seqno, and
    i915_error_first_batchbuffer() combined caused a nice explosion.
    
    The problem is caused by seqno wrap because the wrap condition is not
    properly setup. The wrap code attempts to set the sync mailboxes all
    to 0, and then set the current seqno to one less than 0. In all cases,
    the vebox mailbox wasn't properly being initialized. This caused a
    wrap to not occur. When hangcheck kicks in with the bogus seqno
    values, the rest just doesn't work. It makes me wonder if we shouldn't
    consider a dumber version of hangcheck...
    
    How we messed this up: VECS support was written before the
    aforementioned other features. Upon VECS being rebased, these facts
    were missed.
    
    Cc: Mika Kuoppala <mika.kuoppala@intel.com>
    Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=65387
    Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=67198Signed-off-by: default avatarBen Widawsky <ben@bwidawsk.net>
    Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
    5020150b
intel_ringbuffer.c 53.7 KB