• Chris Wilson's avatar
    drm/i915: Prevent machine death on Ivybridge context switching · e9135c4f
    Chris Wilson authored
    Two concurrent writes into the same register cacheline has the chance of
    killing the machine on Ivybridge and other gen7. This includes LRI
    emitted from the command parser.  The MI_SET_CONTEXT itself serves as
    serialising barrier and prevents the pair of register writes in the first
    packet from triggering the fault.  However, if a second switch-context
    immediately occurs then we may have two adjacent blocks of LRI to the
    same registers which may then trigger the hang. To counteract this we
    need to insert a delay after the second register write using SRM.
    
    This is easiest to reproduce with something like
    igt/gem_ctx_switch/interruptible that triggers back-to-back context
    switches (with no operations in between them in the command stream,
    which requires the execbuf operation to be interrupted after the
    MI_SET_CONTEXT) but can be observed sporadically elsewhere when running
    interruptible igt. No reports from the wild though, so it must be of low
    enough frequency that no one has correlated the random machine freezes
    with i915.ko
    
    The issue was introduced with
    commit 2c550183 [v3.19]
    Author: Chris Wilson <chris@chris-wilson.co.uk>
    Date:   Tue Dec 16 10:02:27 2014 +0000
    
        drm/i915: Disable PSMI sleep messages on all rings around context switches
    
    Testcase: igt/gem_ctx_switch/render-interruptible #ivb
    Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
    Cc: Daniel Vetter <daniel@ffwll.ch>
    Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
    Cc: stable@vger.kernel.org
    Reviewed-by: default avatarDaniel Vetter <daniel@ffwll.ch>
    Link: http://patchwork.freedesktop.org/patch/msgid/1460565315-7748-11-git-send-email-chris@chris-wilson.co.uk
    e9135c4f
i915_gem_context.c 28.8 KB