• I
    drm/i915: Make sure engines are idle during GPU idling in LR mode · 0cb5670b
    Imre Deak 提交于
    We assume that the GPU is idle once receiving the seqno via the last
    request's user interrupt. In execlist mode the corresponding context
    completed interrupt can be delayed though and until this latter
    interrupt arrives we consider the request to be pending on the ELSP
    submit port. This can cause a problem during system suspend where this
    last request will be seen by the resume code as still pending. Such
    pending requests are normally replayed after a GPU reset, but during
    resume we reset both SW and HW tracking of the ring head/tail pointers,
    so replaying the pending request with its stale tail pointer will leave
    the ring in an inconsistent state. A subsequent request submission can
    lead then to the GPU executing from uninitialized area in the ring
    behind the above stale tail pointer.
    
    Fix this by making sure any pending request on the ELSP port is
    completed before suspending. I used a polling wait since the completion
    time I measured was <1ms and since normally we only need to wait during
    system suspend. GPU idling during runtime suspend is scheduled with a
    delay (currently 50-100ms) after the retirement of the last request at
    which point the context completed interrupt must have arrived already.
    
    The chance of this bug was increased by
    
    commit 1c777c5d
    Author: Imre Deak <imre.deak@intel.com>
    Date:   Wed Oct 12 17:46:37 2016 +0300
    
        drm/i915/hsw: Fix GPU hang during resume from S3-devices state
    
    but it could happen even without the explicit GPU reset, since we
    disable interrupts afterwards during the suspend sequence.
    
    v2:
    - Do an unlocked poll-wait first. (Chris)
    v3-4:
    - s/intel_lr_engines_idle/intel_execlists_idle/ and move
      i915.enable_execlists check to the new helper. (Chris)
    
    Cc: Chris Wilson <chris@chris-wilson.co.uk>
    Cc: Mika Kuoppala <mika.kuoppala@intel.com>
    Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=98470Signed-off-by: NImre Deak <imre.deak@intel.com>
    Reviewed-by: NChris Wilson <chris@chris-wilson.co.uk>
    Link: http://patchwork.freedesktop.org/patch/msgid/1478510405-11799-3-git-send-email-imre.deak@intel.com
    0cb5670b
intel_lrc.c 65.5 KB