1. 20 1月, 2012 1 次提交
  2. 04 1月, 2012 1 次提交
  3. 20 12月, 2011 2 次提交
  4. 04 11月, 2011 1 次提交
  5. 21 10月, 2011 2 次提交
    • D
      drm/i915: close PM interrupt masking races in the rps work func · a9e2641d
      Daniel Vetter 提交于
      This patch closes the following race:
      
      We get a PM interrupt A, mask it, set dev_priv->iir = PM_A and kick of the
      work item. Scheduler isn't grumpy, so the work queue takes rps_lock,
      grabs pm_iir = dev_priv->pm_iir and pm_imr = READ(PMIMR). Note that
      pm_imr == pm_iir because we've just masked the interrupt we've got.
      
      Now hw sends out PM interrupt B (not masked), we process it and mask
      it.  Later on the irq handler also clears PMIIR.
      
      Then the work item proceeds and at the end clears PMIMR. Because
      (local) pm_imr == pm_iir we have
              pm_imr & ~pm_iir == 0
      so all interrupts are enabled.
      
      Hardware is still interrupt-happy, and sends out a new PM interrupt B.
      PMIMR doesn't mask B (it does not mask anything), PMIIR is cleared, so
      we get it and hit the WARN in the interrupt handler (because
      dev_priv->pm_iir == PM_B).
      
      That's why I've moved the
              WRITE(PMIMR, 0)
      up under the protection of the rps_lock. And write an uncoditional 0
      to PMIMR, because that's what we'll do anyway.
      
      This races looks much more likely because we can arbitrarily extend
      the window by grabing dev->struct mutex right after the irq handler
      has processed the first PM_B interrupt.
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      Reviewed-by: NBen Widawsky <ben@bwidawsk.net>
      Signed-off-by: NKeith Packard <keithp@keithp.com>
      a9e2641d
    • D
      drm/i915: close PM interrupt masking races in the irq handler · 4fb066ab
      Daniel Vetter 提交于
      Quoting Chris Wilson's more concise description:
      
      "Ah I think I see the problem. As you point out we only mask the current
      interrupt received, so that if we have a task pending (and so IMR != 0) we
      actually unmask the pending interrupt and so could receive it again before the
      tasklet is finally kicked off by the grumpy scheduler."
      
      We need the hw to issue PM interrupts A, B, A while the scheduler is hating us
      and refuses to run the rps work item. On receiving PM interrupt A we hit the
      WARN because
      
      dev_priv->pm_iir == PM_A | PM_B
      
      Also add a posting read as suggested by Chris to ensure proper ordering of the
      writes to PMIMR and PMIIR. Just in case somebody weakens write ordering.
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      Reviewed-by: NBen Widawsky <ben@bwidawsk.net>
      Reviewed-by: NChris Wilson <chris@chris-wilson.co.uk>
      Signed-off-by: NKeith Packard <keithp@keithp.com>
      4fb066ab
  6. 01 10月, 2011 2 次提交
  7. 20 9月, 2011 1 次提交
  8. 16 8月, 2011 1 次提交
  9. 29 7月, 2011 1 次提交
  10. 26 7月, 2011 1 次提交
    • K
      drm/i915: Hold mode_config->mutex during hotplug processing · a65e34c7
      Keith Packard 提交于
      Hotplug detection is a mode setting operation and must hold the
      struct_mutex or risk colliding with other mode setting operations.
      
      In particular, the display port hotplug function attempts to re-train
      the link if the monitor is supposed to be running when plugged back
      in. If that happens while mode setting is underway, the link will get
      scrambled, leaving it in an inconsistent state.
      
      This is a special case -- usually the driver mode setting entry points
      are covered by the upper level DRM code, but in this case the function
      is invoked as a work function not under the control of DRM.
      Signed-off-by: NKeith Packard <keithp@keithp.com>
      Cc: stable@kernel.org
      Reviewed-by: NJesse Barnes <jbarnes@virtuousgeek.org>
      a65e34c7
  11. 02 7月, 2011 1 次提交
  12. 30 6月, 2011 2 次提交
  13. 22 6月, 2011 1 次提交
  14. 18 6月, 2011 1 次提交
    • D
      drm/i915: Fix gen6 (SNB) missed BLT ring interrupts. · 498e720b
      Daniel J Blueman 提交于
      The failure appeared in dmesg as:
      
      [drm:i915_hangcheck_ring_idle] *ERROR* Hangcheck timer elapsed... blt
      ring idle [waiting on 35064155, at 35064155], missed IRQ?
      
      This works around that problem on by making the blitter command
      streamer write interrupt state to the Hardware Status Page when a
      MI_USER_INTERRUPT command is decoded, which appears to force the seqno
      out to memory before the interrupt happens.
      
      v1->v2: Moved to prior interrupt handler installation and RMW flags as
      per feedback.
      v2->v3: Removed RMW of flags (by anholt)
      
      Cc: stable@kernel.org
      Signed-off-by: NDaniel J Blueman <daniel.blueman@gmail.com>
      Signed-off-by: NEric Anholt <eric@anholt.net>
      Tested-by: Chris Wilson <chris@chris-wilson.co.uk> [v1]
      Tested-by: Eric Anholt <eric@anholt.net> [v1,v3]
      	   (incidence of the bug with a testcase went from avg 2/1000 to
      	   0/12651 in the latest test run (plus more for v1))
      Tested-by: Kenneth Graunke <kenneth@whitecape.org> [v1]
      Tested-by: Robert Hooker <robert.hooker@canonical.com> [v1]
      Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=33394Signed-off-by: NDave Airlie <airlied@redhat.com>
      498e720b
  15. 05 6月, 2011 1 次提交
  16. 19 5月, 2011 1 次提交
  17. 14 5月, 2011 3 次提交
  18. 11 5月, 2011 4 次提交
  19. 02 3月, 2011 3 次提交
  20. 22 2月, 2011 1 次提交
  21. 16 2月, 2011 1 次提交
  22. 08 2月, 2011 1 次提交
  23. 07 2月, 2011 2 次提交
  24. 31 1月, 2011 1 次提交
    • C
      drm/i915: Suppress spurious vblank interrupts · 78c6e170
      Chris Wilson 提交于
      Hugh Dickins found that characters in xterm were going missing and oft
      delayed. Being the curious type, he managed to associate this with the
      new high-precision vblank patches; disabling these he found, restored
      the orderliness of his characters.
      
      The oddness begins when one realised that Hugh was not using vblanks at
      all on his system (fvwm and some xterms). Instead, all he had to go on
      were warning of a pipe underrun, curiously enough at around 60Hz. He
      poked and found that in addition to the underrun warning, the hardware
      was flagging the start of a new frame, a vblank, which in turn was
      kicking off the pending vblank processing code.
      
      There is little we can do for the underruns on Hugh's machine, a
      Crestline [965GM], which must have its FIFO watermarks set to 8.
      However, we do not need to process the vblank if we know that they are
      disabled...
      Reported-by: NHugh Dickins <hughd@google.com>
      Signed-off-by: NChris Wilson <chris@chris-wilson.co.uk>
      78c6e170
  25. 28 1月, 2011 1 次提交
  26. 25 1月, 2011 3 次提交