1. 29 Nov, 2016 6 commits
    • Chris Wilson's avatar
      drm/i915: Convert vm->dev backpointer to vm->i915 · 49d73912
      Chris Wilson authored
      99% of the time we access i915_address_space->dev we want the i915
      device and not the drm device, so let's store the drm_i915_private
      backpointer instead. The only real complication here are the inlines
      in i915_vma.h where drm_i915_private is not yet defined and so we have
      to choose an alternate path for our asserts.
      Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
      Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
      Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
      Link: http://patchwork.freedesktop.org/patch/msgid/20161129095008.32622-1-chris@chris-wilson.co.ukReviewed-by: default avatarJoonas Lahtinen <joonas.lahtinen@linux.intel.com>
      49d73912
    • Jérémy Lefaure's avatar
      drm/i915: fix compilation warnings on maybe uninitialized pointers · 3aaa8aba
      Jérémy Lefaure authored
      Two warnings are produced by gcc (tested with gcc 6.2.1):
      
      drivers/gpu/drm/i915/intel_csr.c: In function ‘csr_load_work_fn’:
      drivers/gpu/drm/i915/intel_csr.c:400:5: error: ‘fw’ is used
      uninitialized in this function [-Werror=uninitialized]
        if (fw)
             ^
      and
      
      In file included from drivers/gpu/drm/i915/i915_drv.h:47:0,
                       from drivers/gpu/drm/i915/intel_guc_loader.c:30:
      drivers/gpu/drm/i915/intel_guc_loader.c: In function ‘intel_guc_init’:
      ./include/drm/drmP.h:228:2: error: ‘fw’ may be used uninitialized in this
      function  -Werror=maybe-uninitialized]
        drm_printk(KERN_DEBUG, DRM_UT_DRIVER, fmt, ##__VA_ARGS__)
        ^~~~~~~~~~
      drivers/gpu/drm/i915/intel_guc_loader.c:595:25: note: ‘fw’ was declared here
        const struct firmware *fw;
                               ^~
      
      When CONFIG_DRM_I915_WERROR is set, those warnings break the build.
      
      Initializing fw pointer to NULL in both cases removes the warnings.
      Signed-off-by: default avatarJérémy Lefaure <jeremy.lefaure@lse.epita.fr>
      Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
      Link: http://patchwork.freedesktop.org/patch/msgid/20161128234319.20800-1-jeremy.lefaure@lse.epita.fr
      3aaa8aba
    • Zhi Wang's avatar
      drm/i915: Move the release of PT page to the upper caller · a18dbba8
      Zhi Wang authored
      a PT page will be released if it doesn't contain any meaningful mappings
      during PPGTT page table shrinking. The PT entry in the upper level will
      be set to a scratch entry.
      
      Normally this works nicely, but in virtualization world, the PPGTT page
      table is tracked by hypervisor. Releasing the PT page before modifying
      the upper level PT entry would cause extra efforts.
      
      As the tracked page has been returned to OS before losing track from
      hypervisor, it could be written in any pattern. Hypervisor has to recognize
      if a page is still being used as a PT page by validating these writing
      patterns. It's complicated. Better let the guest modify the PT entry in
      upper level PT first, then release the PT page.
      Reviewed-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
      Reviewed-by: default avatarMichał Winiarski <michal.winiarski@intel.com>
      Cc: Michał Winiarski <michal.winiarski@intel.com>
      Cc: Michel Thierry <michel.thierry@intel.com>
      Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
      Cc: Chris Wilson <chris@chris-wilson.co.uk>
      Cc: Zhenyu Wang <zhenyuw@linux.intel.com>
      Cc: Zhiyuan Lv <zhiyuan.lv@intel.com>
      Signed-off-by: default avatarZhi Wang <zhi.a.wang@intel.com>
      Link: https://patchwork.freedesktop.org/patch/122697/msgid/1479728666-25333-1-git-send-email-zhi.a.wang@intel.comSigned-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
      Link: http://patchwork.freedesktop.org/patch/msgid/1480402516-22275-1-git-send-email-zhi.a.wang@intel.com
      a18dbba8
    • Matthew Auld's avatar
      drm/i915: drop the struct_mutex when wedged or trying to reset · ddbb271a
      Matthew Auld authored
      We grab the struct_mutex in intel_crtc_page_flip, but if we are wedged
      or a reset is in progress we bail early but never seem to actually
      release the lock.
      
      Fixes: 7f1847eb ("drm/i915: Simplify checking of GPU reset_counter in display pageflips")
      Cc: Chris Wilson <chris@chris-wilson.co.uk>
      Signed-off-by: default avatarMatthew Auld <matthew.auld@intel.com>
      Link: http://patchwork.freedesktop.org/patch/msgid/20161128103648.9235-1-matthew.auld@intel.comReviewed-by: default avatarJoonas Lahtinen <joonas.lahtinen@linux.intel.com>
      Reviewed-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
      Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
      Cc: <stable@vger.kernel.org> # v4.7+
      ddbb271a
    • Chris Wilson's avatar
      Revert "drm/i915/execlists: Use a local lock for dfs_link access" · 70cd1476
      Chris Wilson authored
      This reverts commit 27745e82 ("drm/i915/execlists: Use a local lock
      for dfs_link access") as the struct_mutex was required to prevent
      concurrent retiring and freeing, now restored in the previous patch.
      Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
      Cc: David Weinehall <david.weinehall@linux.intel.com>
      Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
      Link: http://patchwork.freedesktop.org/patch/msgid/20161128143649.4289-2-chris@chris-wilson.co.ukReviewed-by: default avatarTvrtko Ursulin <tvrtko.ursulin@intel.com>
      70cd1476
    • Chris Wilson's avatar
      drm/i915: Move priority bumping for flips earlier · 92117f0b
      Chris Wilson authored
      David found another issue with priority bumping from mmioflips, where we
      are accessing the requests concurrently to them being retired and freed.
      Whilst we are skipping the dependency if has been submitted, that is not
      sufficient to stop the dependency from disappearing if another thread
      retires that request. To prevent we can either employ the struct_mutex (or a
      request mutex in the future) to serialise retiring before it is freed.
      Alternatively, we need to keep the dependencies alive using RCU whilst
      they are being accessed via the DFS.
      
      [ 1746.698111] general protection fault: 0000 [#1] PREEMPT SMP
      [ 1746.698305] Modules linked in: snd_hda_intel snd_hda_codec snd_hwdep x86_pkg_temp_thermal snd_hda_core coretemp crct10dif_pclmul crc32_pclmul snd_pcm ghash_clmulni_intel mei_me mei i915 e1000e ptp pps_core i2c_hid
      [ 1746.698750] CPU: 1 PID: 6716 Comm: kworker/u8:2 Not tainted 4.9.0-rc6-CI-Nightly_816+ #1
      [ 1746.698871] Hardware name: GIGABYTE GB-BKi7A-7500/MFLP7AP-00, BIOS F1 07/27/2016
      [ 1746.699125] Workqueue: events_unbound intel_mmio_flip_work_func [i915]
      [ 1746.699266] task: ffff880260a5e800 task.stack: ffffc90000f6c000
      [ 1746.699361] RIP: 0010:[<ffffffffa006595d>]  [<ffffffffa006595d>] execlists_schedule+0x8d/0x300 [i915]
      [ 1746.699632] RSP: 0018:ffffc90000f6fcd8  EFLAGS: 00010206
      [ 1746.699724] RAX: dead0000000000f8 RBX: ffff8801f64b2bf0 RCX: ffff8801f64b2c10
      [ 1746.699842] RDX: dead000000000100 RSI: 0000000000000000 RDI: ffff8801f64b0458
      [ 1746.699972] RBP: ffffc90000f6fd68 R08: ffff88026488dc00 R09: 0000000000000002
      [ 1746.700090] R10: 0000000000000000 R11: 0000000000000000 R12: 0000000000000400
      [ 1746.700195] R13: ffffc90000f6fcf0 R14: ffff88020955aa40 R15: ffff88020955aa68
      [ 1746.700307] FS:  0000000000000000(0000) GS:ffff88026dc80000(0000) knlGS:0000000000000000
      [ 1746.700435] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      [ 1746.700532] CR2: 0000000002a69e90 CR3: 0000000002c07000 CR4: 00000000003406e0
      [ 1746.700635] Stack:
      [ 1746.700682]  ffff880260a5e880 ffffc90000f6fd50 ffffffff810af69a ffffc90000f6fd28
      [ 1746.700827]  ffff88020955a628 ffff8801e1eaebf0 0000000000000020 0000000000000000
      [ 1746.700947]  00000196af1edc96 ffff88025dfa4000 ffff8801f0b030a8 ffffc90000f6fcf0
      [ 1746.701071] Call Trace:
      [ 1746.701117]  [<ffffffff810af69a>] ? dequeue_entity+0x25a/0xb50
      [ 1746.701260]  [<ffffffffa00516be>] fence_set_priority+0x7e/0x80 [i915]
      [ 1746.701406]  [<ffffffffa0051a15>] i915_gem_object_wait_priority+0x85/0x160 [i915]
      [ 1746.701599]  [<ffffffffa008ccd7>] intel_mmio_flip_work_func+0x47/0x2b0 [i915]
      [ 1746.701717]  [<ffffffff81094c4d>] process_one_work+0x14d/0x470
      [ 1746.701809]  [<ffffffff81094fb3>] worker_thread+0x43/0x4e0
      [ 1746.701888]  [<ffffffff81094f70>] ? process_one_work+0x470/0x470
      [ 1746.701969]  [<ffffffff81094f70>] ? process_one_work+0x470/0x470
      [ 1746.702072]  [<ffffffff8109a4d5>] kthread+0xc5/0xe0
      [ 1746.702152]  [<ffffffff81771c59>] ? _raw_spin_unlock_irq+0x9/0x10
      [ 1746.702234]  [<ffffffff8109a410>] ? kthread_park+0x60/0x60
      [ 1746.702318]  [<ffffffff81772272>] ret_from_fork+0x22/0x30
      [ 1746.702387] Code: 89 42 08 48 8b 45 88 48 89 55 c0 4c 89 6d c8 4c 8d 70 d8 4d 8d 7e 28 4d 39 ef 74 72 49 8b 1e 48 8b 13 48 39 d3 48 8d 42 f8 74 3e <48> 8b 10 8b 52 38 41 39 d4 7e 26 48 8b 50 30 48 8b 78 28 48 8d
      [ 1746.702921] RIP  [<ffffffffa006595d>] execlists_schedule+0x8d/0x300 [i915]
      Nov 25 21:42:54 kbl-gbbki7 kernel: [ 1746.703027]  RSP <ffffc90000f6fcd8>
      
      Fixes: 27745e82 ("drm/i915/execlists: Use a local lock for dfs_link access")
      Fixes: 9a151987 ("drm/i915: Add execution priority boosting for mmioflips")
      Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
      Cc: David Weinehall <david.weinehall@linux.intel.com>
      Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
      Link: http://patchwork.freedesktop.org/patch/msgid/20161128143649.4289-1-chris@chris-wilson.co.ukReviewed-by: default avatarTvrtko Ursulin <tvrtko.ursulin@intel.com>
      92117f0b
  2. 25 Nov, 2016 13 commits
  3. 24 Nov, 2016 6 commits
  4. 23 Nov, 2016 15 commits