1. 31 3月, 2014 1 次提交
  2. 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
  3. 18 3月, 2014 1 次提交
  4. 06 3月, 2014 6 次提交
  5. 11 2月, 2014 1 次提交
  6. 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
  7. 31 1月, 2014 2 次提交
  8. 30 1月, 2014 5 次提交
  9. 28 1月, 2014 2 次提交
  10. 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
  11. 12 12月, 2013 2 次提交
  12. 09 11月, 2013 2 次提交
  13. 30 10月, 2013 1 次提交
  14. 10 10月, 2013 1 次提交
  15. 09 10月, 2013 1 次提交
  16. 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
  17. 01 10月, 2013 2 次提交
  18. 24 9月, 2013 1 次提交
    • C
      drm/i915: Use a temporary va_list for two-pass string handling · e29bb4eb
      Chris Wilson 提交于
      In
      
      commit edc3d884
      Author: Mika Kuoppala <mika.kuoppala@linux.intel.com>
      Date:   Thu May 23 13:55:35 2013 +0300
      
          drm/i915: avoid big kmallocs on reading error state
      
      we introduce a two-pass mechanism for splitting long strings being
      formatted into the error-state. The first pass finds the length, and the
      second pass emits the right portion of the string into the accumulation
      buffer. Unfortunately we use the same va_list for both passes, resulting
      in the second pass reading garbage off the end of the argument list. As
      the two passes are only used for boundaries between read() calls, the
      corruption is only rarely seen.
      
      This fixes the root cause behind
      
      commit baf27f9b
      Author: Chris Wilson <chris@chris-wilson.co.uk>
      Date:   Sat Jun 29 23:26:50 2013 +0100
      
          drm/i915: Break up the large vsnprintf() in print_error_buffers()
      Signed-off-by: NChris Wilson <chris@chris-wilson.co.uk>
      Cc: Mika Kuoppala <mika.kuoppala@intel.com>
      Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
      Cc: stable@vger.kernel.org
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      e29bb4eb
  19. 06 9月, 2013 1 次提交
  20. 04 9月, 2013 1 次提交
  21. 22 8月, 2013 1 次提交