1. 01 11月, 2016 5 次提交
    • V
      580503c7
    • C
      drm/i915: Export a function to flush the context upon pinning · 07c9a21a
      Chris Wilson 提交于
      For legacy contexts we employ an optimisation to only flush the context
      when binding into the global GTT. This avoids stalling on the GPU when
      reloading an active context. Wrap this detail up into a helper and
      export it for a potential third user. (Longer term, context pinning
      needs to be reworked as the current handling of switch context pins too
      late and so risks eviction and corrupting the request. Plans, plans,
      plans.)
      
      v2: Expand the comment explaining the optimisation for avoiding the
      stall on active contexts.
      Signed-off-by: NChris Wilson <chris@chris-wilson.co.uk>
      Link: http://patchwork.freedesktop.org/patch/msgid/20161030132820.32163-1-chris@chris-wilson.co.ukReviewed-by: NMatthew Auld <matthew.auld@intel.com>
      07c9a21a
    • C
      drm/i915: Improve lockdep tracking for obj->mm.lock · 548625ee
      Chris Wilson 提交于
      The shrinker may appear to recurse into obj->mm.lock as the shrinker may
      be called from a direct reclaim path whilst handling get_pages. We
      filter out recursing on the same obj->mm.lock by inspecting
      obj->mm.pages, but we do want to take the lock on a second object in
      order to reap their pages. lockdep spots the recursion on the same
      lockclass and needs annotation to avoid a false positive. To keep the
      two paths distinct, create an enum to indicate which subclass of
      obj->mm.lock we are using. This removes the false positive and avoids
      masking real bugs.
      Suggested-by: NJoonas Lahtinen <joonas.lahtinen@linux.intel.com>
      Signed-off-by: NChris Wilson <chris@chris-wilson.co.uk>
      Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
      Link: http://patchwork.freedesktop.org/patch/msgid/20161101121134.27504-1-chris@chris-wilson.co.ukReviewed-by: NJoonas Lahtinen <joonas.lahtinen@linux.intel.com>
      548625ee
    • C
      drm/i915: Store the vma in an rbtree under the object · db6c2b41
      Chris Wilson 提交于
      With full-ppgtt one of the main bottlenecks is the lookup of the VMA
      underneath the object. For execbuf there is merit in having a very fast
      direct lookup of ctx:handle to the vma using a hashtree, but that still
      leaves a large number of other lookups. One way to speed up the lookup
      would be to use a rhashtable, but that requires extra allocations and
      may exhibit poor worse case behaviour. An alternative is to use an
      embedded rbtree, i.e. no extra allocations and deterministic behaviour,
      but at the slight cost of O(lgN) lookups (instead of O(1) for
      rhashtable). The major of such tree will be very shallow and so not much
      slower, and still scales much, much better than the current unsorted
      list.
      
      v2: Bump vma_compare() to return a long, as we return the result of
      comparing two pointers.
      
      References: https://bugs.freedesktop.org/show_bug.cgi?id=87726Signed-off-by: NChris Wilson <chris@chris-wilson.co.uk>
      Reviewed-by: NTvrtko Ursulin <tvrtko.ursulin@intel.com>
      Link: http://patchwork.freedesktop.org/patch/msgid/20161101115400.15647-1-chris@chris-wilson.co.uk
      db6c2b41
    • C
      drm/i915: Track pages pinned due to swizzling quirk · bc0629a7
      Chris Wilson 提交于
      If we have a tiled object and an unknown CPU swizzle pattern, we pin the
      pages to prevent the object from being swapped out (and us corrupting
      the contents as we do not know the access pattern and so cannot convert
      it to linear and back to tiled on reuse). This requires us to remember
      to drop the extra pinning when freeing the object, or else we trigger
      warnings about the pin leak. In commit fbbd37b3 ("drm/i915: Move
      object release to a freelist + worker"), the object free path was
      deferred to a worker, but the unpinning of the quirk, along with marking
      the object as reclaimable, was left on the immediate path (so that if
      required we could reclaim the pages under memory pressure as early as
      possible). However, this split introduced a bug where the pages were no
      longer being unpinned if they were marked as unneeded.
      
      [  231.800401] WARNING: CPU: 1 PID: 90 at drivers/gpu/drm/i915/i915_gem.c:4275 __i915_gem_free_objects+0x326/0x3c0 [i915]
      [  231.800403] WARN_ON(i915_gem_object_has_pinned_pages(obj))
      [  231.800405] Modules linked in:
      [  231.800406]  snd_hda_intel i915 snd_hda_codec_generic mei_me snd_hda_codec coretemp snd_hwdep mei lpc_ich snd_hda_core snd_pcm e1000e ptp pps_core [last unloaded: i915]
      [  231.800426] CPU: 1 PID: 90 Comm: kworker/1:4 Tainted: G     U          4.9.0-rc2-CI-CI_DRM_1780+ #1
      [  231.800428] Hardware name: LENOVO 7465CTO/7465CTO, BIOS 6DET44WW (2.08 ) 04/22/2009
      [  231.800456] Workqueue: events __i915_gem_free_work [i915]
      [  231.800459]  ffffc9000034fc80 ffffffff8142dd65 ffffc9000034fcd0 0000000000000000
      [  231.800465]  ffffc9000034fcc0 ffffffff8107e4e6 000010b300000001 0000000000001000
      [  231.800469]  ffff88011d3db740 ffff880130ef0000 0000000000000000 ffff880130ef5ea0
      [  231.800474] Call Trace:
      [  231.800479]  [<ffffffff8142dd65>] dump_stack+0x67/0x92
      [  231.800484]  [<ffffffff8107e4e6>] __warn+0xc6/0xe0
      [  231.800487]  [<ffffffff8107e54a>] warn_slowpath_fmt+0x4a/0x50
      [  231.800491]  [<ffffffff811d12ac>] ? kmem_cache_free+0x2dc/0x340
      [  231.800520]  [<ffffffffa009ef36>] __i915_gem_free_objects+0x326/0x3c0 [i915]
      [  231.800548]  [<ffffffffa009effe>] __i915_gem_free_work+0x2e/0x50 [i915]
      [  231.800552]  [<ffffffff8109c27c>] process_one_work+0x1ec/0x6b0
      [  231.800555]  [<ffffffff8109c1f6>] ? process_one_work+0x166/0x6b0
      [  231.800558]  [<ffffffff8109c789>] worker_thread+0x49/0x490
      [  231.800561]  [<ffffffff8109c740>] ? process_one_work+0x6b0/0x6b0
      [  231.800563]  [<ffffffff8109c740>] ? process_one_work+0x6b0/0x6b0
      [  231.800566]  [<ffffffff810a2aab>] kthread+0xeb/0x110
      [  231.800569]  [<ffffffff810a29c0>] ? kthread_park+0x60/0x60
      [  231.800573]  [<ffffffff818164a7>] ret_from_fork+0x27/0x40
      
      Moving to a separate flag for tracking the quirked pin is overkill for
      the bug (since we only have to interchange the two tests in
      i915_gem_free_object) but it does reduce a complicated test on all
      objects and provide a sanitycheck for uncommon code paths.
      
      Fixes: fbbd37b3 ("drm/i915: Move object release to a freelist + worker")
      Signed-off-by: NChris Wilson <chris@chris-wilson.co.uk>
      Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
      Reviewed-by: NTvrtko Ursulin <tvrtko.ursulin@intel.com>
      Link: http://patchwork.freedesktop.org/patch/msgid/20161101100317.11129-2-chris@chris-wilson.co.uk
      bc0629a7
  2. 31 10月, 2016 1 次提交
  3. 29 10月, 2016 19 次提交
  4. 28 10月, 2016 5 次提交
  5. 26 10月, 2016 1 次提交
  6. 25 10月, 2016 4 次提交
  7. 24 10月, 2016 5 次提交