1. 22 7月, 2015 3 次提交
  2. 14 7月, 2015 1 次提交
    • T
      drm/i915: Snapshot seqno of most recently submitted request. · 94f7bbe1
      Tomas Elf 提交于
      The hang checker needs to inspect whether or not the ring request list is empty
      as well as if the given engine has reached or passed the most recently
      submitted request. The problem with this is that the hang checker cannot grab
      the struct_mutex, which is required in order to safely inspect requests since
      requests might be deallocated during inspection. In the past we've had kernel
      panics due to this very unsynchronized access in the hang checker.
      
      One solution to this problem is to not inspect the requests directly since
      we're only interested in the seqno of the most recently submitted request - not
      the request itself. Instead the seqno of the most recently submitted request is
      stored separately, which the hang checker then inspects, circumventing the
      issue of synchronization from the hang checker entirely.
      
      This fixes a regression introduced in
      
      commit 44cdd6d2
      Author: John Harrison <John.C.Harrison@Intel.com>
      Date:   Mon Nov 24 18:49:40 2014 +0000
      
          drm/i915: Convert 'ring_idle()' to use requests not seqnos
      
      v2 (Chris Wilson):
      - Pass current engine seqno to ring_idle() from i915_hangcheck_elapsed() rather
      than compute it over again.
      - Remove extra whitespace.
      
      Issue: VIZ-5998
      Signed-off-by: NTomas Elf <tomas.elf@intel.com>
      Cc: stable@vger.kernel.org
      Reviewed-by: NChris Wilson <chris@chris-wilson.co.uk>
      [danvet: Add regressing commit citation provided by Chris.]
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      94f7bbe1
  3. 08 7月, 2015 1 次提交
  4. 22 6月, 2015 5 次提交
  5. 12 6月, 2015 2 次提交
  6. 30 5月, 2015 1 次提交
  7. 29 5月, 2015 11 次提交
  8. 27 5月, 2015 1 次提交
    • C
      drm/i915: Use spinlocks for checking when to waitboost · 8d3afd7d
      Chris Wilson 提交于
      In commit 1854d5ca
      Author: Chris Wilson <chris@chris-wilson.co.uk>
      Date:   Tue Apr 7 16:20:32 2015 +0100
      
          drm/i915: Deminish contribution of wait-boosting from clients
      
      we removed an atomic timer based check for allowing waitboosting and
      moved it below the mutex taken during RPS. However, that mutex can be
      held for long periods of time on Vallyview/Cherryview as communication
      with the PCU is slow. As clients may frequently wait for results (e.g.
      such as tranform feedback) we introduced contention between the client
      and the RPS worker. We can take advantage of the RPS worker, by
      switching the wait boost decision to use spin locks and defer the
      actual reclocking to the worker.
      
      Fixes a regression of up to 45% on Baytrail and Baswell!
      
      v2 (Daniel):
      - Use max_freq_softlimit instead of the not-yet-merged boost
        frequency.
      - Don't inject a fake irq into the boost work, instead treat
        client_boost as just another legit waker.
      
      v3: Drop the now unused mask (Chris).
      
      Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=90112
      Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> (v1)
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      8d3afd7d
  9. 21 5月, 2015 1 次提交
  10. 20 5月, 2015 2 次提交
  11. 14 4月, 2015 6 次提交
  12. 10 4月, 2015 4 次提交
  13. 24 3月, 2015 2 次提交
    • I
      drm/i915: move clearing of RPS interrupt bits from disable to reset time · 096fad9e
      Imre Deak 提交于
      The logical place for clearing the RPS latched interrupt bits is when
      resetting the RPS interrupts, so move the corresponding part from the RPS
      disable function to the reset function. During resetting we already
      cleared the IIR bits, so the only thing missing there was clearing pm_iir.
      
      Note that we call gen6_disable_rps_interrupts() also during driver load
      and resume time via intel_uncore_sanitize() when i915 interrupts are
      still not installed. If there are any pending RPS bits at this point
      (which after this patch wouldn't be cleared) they will be cleared by the
      reset code via the interrupt preinstall hooks.
      Signed-off-by: NImre Deak <imre.deak@intel.com>
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      096fad9e
    • I
      drm/i915: fix race when clearing RPS IIR bits · 58072ccb
      Imre Deak 提交于
      When disabling RPS interrupts there is a race where we disable RPS
      inerrupts while the interrupt handler is running and the handler has
      already latched the pending RPS interrupt from the master IIR register.
      Afterwards the disabling path clears the PM IIR bits, making the state
      of pending interrupts inconsistent from the interrupt handler's point of
      view. This triggers the following warning: "The master control interrupt
      lied (PM)!".
      
      To fix this make sure that any running interrupt handler (which may
      have already latched the master IIR) finishes before clearing the IIR
      bits.
      
      Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=87347Signed-off-by: NImre Deak <imre.deak@intel.com>
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      58072ccb