1. 05 5月, 2014 3 次提交
  2. 09 4月, 2014 1 次提交
    • B
      drm/i915: Dump the whole context object. · 17d36749
      Ben Widawsky 提交于
      As we've learned over time, the HW context is just a series of GPU
      commands that we're able to decode without any changes in
      intel_error_decode. Since many bugs recently have been implicated in
      the HW context state, it makes sense to dump the whole context object
      in a form which can be parsed.
      
      Sample:
      render ring --- HW Context = 0x042db000
      ringbuffer (render ring) at 0x0160c000; HEAD points to: 0x0160c000
      0x0160c000:      0x00000000: MI_NOOP
      0x0160c004:      0x00000000: MI_NOOP
      0x0160c008:      0x00000000: MI_NOOP
      0x0160c00c:      0x00000000: MI_NOOP
      0x0160c010:      0x00000000: MI_NOOP
      0x0160c014:      0x00000000: MI_NOOP
      0x0160c018:      0x00000000: MI_NOOP
      0x0160c01c:      0x00000000: MI_NOOP
      
      Unfortunately, our decoder isn't quite smart enough to deal with the
      variable length LRIs - but that is a tools problem.
      Signed-off-by: NBen Widawsky <ben@bwidawsk.net>
      [danvet: Clarify commit message a bit, seems to have lost a few
      crucial words.]
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      17d36749
  3. 02 4月, 2014 1 次提交
  4. 31 3月, 2014 1 次提交
  5. 29 3月, 2014 2 次提交
    • C
      drm/i915: Split 64bit hexadecimal addresses to make them easier to read · e3243d16
      Chris Wilson 提交于
      Broadwell introduces large address spaces, greater than 32bits in width.
      These require that we then store and print 64bit values. If we were to
      zero pad them out to 16 hexadecimal places, we have to carefully count
      the leading zeroes - which is easy to make a mistake. Conversely, if we
      do not zero pad out to 16, but keep it padding to 8 hexadecimal places,
      it is very easy to miss an address that is actually larger than 4GiB. A
      suggested compromise is to insert a space between the upper and lower
      dwords of the address so that we can continue with our accustom 32bit
      parser. (Alternatively, we could do the equivalent in our userspace
      decoder.)
      Signed-off-by: NChris Wilson <chris@chris-wilson.co.uk>
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      e3243d16
    • C
      drm/i915: Broadwell expands ACTHD to 64bit · 50877445
      Chris Wilson 提交于
      As Broadwell has an increased virtual address size, it requires more
      than 32 bits to store offsets into its address space. This includes the
      debug registers to track the current HEAD of the individual rings, which
      may be anywhere within the per-process address spaces. In order to find
      the full location, we need to read the high bits from a second register.
      We then also need to expand our storage to keep track of the larger
      address.
      
      v2: Carefully read the two registers to catch wraparound between
          the reads.
      v3: Use a WARN_ON rather than loop indefinitely on an unstable
          register read.
      Signed-off-by: NChris Wilson <chris@chris-wilson.co.uk>
      Cc: Ben Widawsky <benjamin.widawsky@intel.com>
      Cc: Timo Aaltonen <tjaalton@ubuntu.com>
      Cc: Tvrtko Ursulin <tvrtko.ursulin@linux.intel.com>
      Reviewed-by: NBen Widawsky <ben@bwidawsk.net>
      [danvet: Drop spurious hunk which conflicted.]
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      50877445
  6. 18 3月, 2014 1 次提交
  7. 06 3月, 2014 6 次提交
  8. 11 2月, 2014 1 次提交
  9. 06 2月, 2014 1 次提交
    • B
      drm/i915: Generate a hang error code · 011cf577
      Ben Widawsky 提交于
      We get a large number of bugs which have a, "hey I have that too"
      because they see a GPU hang in dmesg. While two machines of the same
      model having a GPU hang is indeed a coincidence, it is far from enough
      evidence to suggest they are the same.
      
      In order to reduce this effect, and hopefully get people to file new bug
      reports, clearly the error message itself has been insufficient (see ref
      at the bottom for a new bug report with this characteristic).
      
      The algorithm is purposely pretty naive. I don't think we need much in
      order to avoid the problem I am trying to solve, and keeping it naive
      gives us some ability to make a decent test case.
      
      Cc: Jesse Barnes <jbarnes@virtuousgeek.org>
      References: https://bugs.freedesktop.org/show_bug.cgi?id=73276Signed-off-by: NBen Widawsky <ben@bwidawsk.net>
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      011cf577
  10. 31 1月, 2014 2 次提交
  11. 30 1月, 2014 5 次提交
  12. 28 1月, 2014 2 次提交
  13. 18 12月, 2013 5 次提交
    • B
      drm/i915: Use multiple VMs -- the point of no return · 7e0d96bc
      Ben Widawsky 提交于
      As with processes which run on the CPU, the goal of multiple VMs is to
      provide process isolation. Specific to GEN, there is also the ability to
      map more objects per process (2GB each instead of 2Gb-2k total).
      
      For the most part, all the pipes have been laid, and all we need to do
      is remove asserts and actually start changing address spaces with the
      context switch. Since prior to this we've converted the setting of the
      page tables to a streamed version, this is quite easy.
      
      One important thing to point out (since it'd been hotly contested) is
      that with this patch, every context created will have it's own address
      space (provided the HW can do it).
      
      v2: Disable BDW on rebase
      
      NOTE: I tried to make this commit as small as possible. I needed one
      place where I could "turn everything on" and that is here. It could be
      split into finer commits, but I didn't really see much point.
      
      Cc: Eric Anholt <eric@anholt.net>
      Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
      Signed-off-by: NBen Widawsky <ben@bwidawsk.net>
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      7e0d96bc
    • B
      drm/i915: Make pin count per VMA · d7f46fc4
      Ben Widawsky 提交于
      Signed-off-by: NBen Widawsky <ben@bwidawsk.net>
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      d7f46fc4
    • B
      drm/i915: Identify active VM for batchbuffer capture · 685987c6
      Ben Widawsky 提交于
      Using the current state of the page directory registers, we can
      determine which of our address spaces was active when the hang occurred.
      This allows us to scan through all the address spaces to identify the
      "active" one during error capture.
      
      v2: Rebased for BDW error detection. BDW error detection is similar
      except instead of PP_DIR_BASE, we can use the PDP registers.
      Signed-off-by: NBen Widawsky <ben@bwidawsk.net>
      [danvet: Add FIXME about global gtt misuse.]
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      685987c6
    • B
      drm/i915: Don't use gtt mapping for !gtt error objects · 496bfcb9
      Ben Widawsky 提交于
      The existing check was insufficient to determine whether we can use the
      GTT mapping to read out the object during error capture.
      
      The previous condition was, if the object has a GGTT mapping, and the
      reloc is in the GTT range... the can happen with opjects mapped into
      multiple vms (one of which being the GTT).
      
      There are two solutions to this problem:
      1. This patch, which avoid reading the io mapping
      2. Use the GGTT offset with the io mapping.
      
      Since error capture is about recording the most accurate possible error
      state, and the error was caused by the object not in the GGTT - I opted
      for the former.
      Signed-off-by: NBen Widawsky <ben@bwidawsk.net>
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      496bfcb9
    • B
      drm/i915: Add vm to error BO capture · a7b91078
      Ben Widawsky 提交于
      formerly: drm/i915: Create VMAs (part 6) - finish error plumbing
      Signed-off-by: NBen Widawsky <ben@bwidawsk.net>
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      a7b91078
  14. 12 12月, 2013 2 次提交
  15. 09 11月, 2013 2 次提交
  16. 30 10月, 2013 1 次提交
  17. 10 10月, 2013 1 次提交
  18. 09 10月, 2013 1 次提交
  19. 04 10月, 2013 1 次提交
    • C
      drm/i915: Fix __wait_seqno to use true infinite timeouts · 094f9a54
      Chris Wilson 提交于
      When we switched to always using a timeout in conjunction with
      wait_seqno, we lost the ability to detect missed interrupts. Since, we
      have had issues with interrupts on a number of generations, and they are
      required to be delivered in a timely fashion for a smooth UX, it is
      important that we do log errors found in the wild and prevent the
      display stalling for upwards of 1s every time the seqno interrupt is
      missed.
      
      Rather than continue to fix up the timeouts to work around the interface
      impedence in wait_event_*(), open code the combination of
      wait_event[_interruptible][_timeout], and use the exposed timer to
      poll for seqno should we detect a lost interrupt.
      
      v2: In order to satisfy the debug requirement of logging missed
      interrupts with the real world requirments of making machines work even
      if interrupts are hosed, we revert to polling after detecting a missed
      interrupt.
      
      v3: Throw in a debugfs interface to simulate broken hw not reporting
      interrupts.
      
      v4: s/EGAIN/EAGAIN/ (Imre)
      Signed-off-by: NChris Wilson <chris@chris-wilson.co.uk>
      Reviewed-by: NImre Deak <imre.deak@intel.com>
      [danvet: Don't use the struct typedef in new code.]
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      094f9a54
  20. 01 10月, 2013 1 次提交