1. 16 Oct, 2020 3 commits
    • Chris Wilson's avatar
      drm/i915/gt: Cleanup kasan warning for on-stack (unsigned long) casting · 6971e07b
      Chris Wilson authored
      Kasan is gving a warning for passing a u32 parameter into find_first_bit
      (casting to a unsigned long *, with appropriate length restrictions):
      
      [   44.678262] BUG: KASAN: stack-out-of-bounds in find_first_bit+0x2e/0x50
      [   44.678295] Read of size 8 at addr ffff888233f4fc30 by task core_hotunplug/474
      [   44.678326]
      [   44.678358] CPU: 0 PID: 474 Comm: core_hotunplug Not tainted 5.9.0+ #608
      [   44.678465] Hardware name: BESSTAR (HK) LIMITED GN41/Default string, BIOS BLT-BI-MINIPC-F4G-EX3R110-GA65A-101-D 10/12/2018
      [   44.678500] Call Trace:
      [   44.678534]  dump_stack+0x84/0xba
      [   44.678569]  print_address_description.constprop.0+0x21/0x220
      [   44.678605]  ? kmsg_dump_rewind_nolock+0x5f/0x5f
      [   44.678638]  ? _raw_spin_lock_irqsave+0x6d/0xb0
      [   44.678669]  ? _raw_write_lock_irqsave+0xb0/0xb0
      [   44.678702]  ? set_task_cpu+0x1e0/0x1e0
      [   44.678733]  ? find_first_bit+0x2e/0x50
      [   44.678763]  kasan_report.cold+0x20/0x42
      [   44.678794]  ? find_first_bit+0x2e/0x50
      [   44.678825]  __asan_load8+0x69/0x90
      [   44.678856]  find_first_bit+0x2e/0x50
      [   44.679027]  __caps_show.isra.0+0x9e/0x1f0 [i915]
      
      Since we are only using the shorter type for our own convenience,
      accommodate kasan and use unsigned long.
      Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
      Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
      Reviewed-by: default avatarTvrtko Ursulin <tvrtko.ursulin@intel.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20201013110845.16127-1-chris@chris-wilson.co.uk
      6971e07b
    • Chris Wilson's avatar
      drm/i915/gt: Undo forced context restores after trivial preemptions · bb65548e
      Chris Wilson authored
      We may try to preempt the currently executing request, only to find that
      after unravelling all the dependencies that the original executing
      context is still the earliest in the topological sort and re-submitted
      back to HW (if we do detect some change in the ELSP that requires
      re-submission). However, due to the way we check for wrap-around during
      the unravelling, we mark any context that has been submitted just once
      (i.e. with the rq->wa_tail set, but the ring->tail earlier) as
      potentially wrapping and requiring a forced restore on resubmission.
      This was expected to be not a problem, as it was anticipated that most
      unwinding for preemption would result in a context switch and the few
      that did not would be lost in the noise. It did not take long for
      someone to find one particular workload where the cost of those extra
      context restores was measurable.
      
      However, since we know the wa_tail is of fixed size, and we know that a
      request must be larger than the wa_tail itself, we can safely maintain
      the check for request wrapping and check against a slightly future point
      in the ring that includes an expected wa_tail. (That is if the
      ring->tail is already set to rq->wa_tail, including another 8 bytes in
      the check does not invalidate the incremental wrap detection.)
      
      Fixes: 8ab3a381 ("drm/i915/gt: Incrementally check for rewinding")
      Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
      Cc: Mika Kuoppala <mika.kuoppala@linux.intel.com>
      Cc: Bruce Chang <yu.bruce.chang@intel.com>
      Cc: Ramalingam C <ramalingam.c@intel.com>
      Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
      Cc: <stable@vger.kernel.org> # v5.4+
      Reviewed-by: default avatarMika Kuoppala <mika.kuoppala@linux.intel.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20201002083425.4605-1-chris@chris-wilson.co.uk
      bb65548e
    • Chris Wilson's avatar
      drm/i915/gt: Delay execlist processing for tgl · 6ca7217d
      Chris Wilson authored
      When running gem_exec_nop, it floods the system with many requests (with
      the goal of userspace submitting faster than the HW can process a single
      empty batch). This causes the driver to continually resubmit new
      requests onto the end of an active context, a flood of lite-restore
      preemptions. If we time this just right, Tigerlake hangs.
      
      Inserting a small delay between the processing of CS events and
      submitting the next context, prevents the hang. Naturally it does not
      occur with debugging enabled. The suspicion then is that this is related
      to the issues with the CS event buffer, and inserting an mmio read of
      the CS pointer status appears to be very successful in preventing the
      hang. Other registers, or uncached reads, or plain mb, do not prevent
      the hang, suggesting that register is key -- but that the hang can be
      prevented by a simple udelay, suggests it is just a timing issue like
      that encountered by commit 233c1ae3 ("drm/i915/gt: Wait for CSB
      entries on Tigerlake"). Also note that the hang is not prevented by
      applying CTX_DESC_FORCE_RESTORE, or by inserting a delay on the GPU
      between requests.
      Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
      Cc: Mika Kuoppala <mika.kuoppala@linux.intel.com>
      Cc: Bruce Chang <yu.bruce.chang@intel.com>
      Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
      Cc: stable@vger.kernel.org
      Acked-by: default avatarMika Kuoppala <mika.kuoppala@linux.intel.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20201015195023.32346-1-chris@chris-wilson.co.uk
      6ca7217d
  2. 15 Oct, 2020 5 commits
  3. 13 Oct, 2020 1 commit
  4. 07 Oct, 2020 1 commit
  5. 06 Oct, 2020 4 commits
  6. 30 Sep, 2020 3 commits
  7. 29 Sep, 2020 4 commits
  8. 26 Sep, 2020 2 commits
    • Chris Wilson's avatar
      drm/i915/gem: Hold request reference for canceling an active context · badef44d
      Chris Wilson authored
      We have to be very careful while walking the timeline->requests list
      under the RCU guard, as the requests (and so rq->link) use
      SLAB_TYPESAFE_BY_RCU and so the requests may be reallocated within an
      rcu grace period. As the requests are reallocated, they are removed from
      one list and placed on another, and if we are iterating over that
      request at that moment, the list iteration jumps from one list to the
      next and promptly gets confused. Verify we hold the request reference
      to ensure that the request is not added to a new list behind our backs.
      
      <4> [582.745252] general protection fault, probably for non-canonical address 0xcccccccccccccd5c: 0000 [#1] PREEMPT SMP PTI
      <4> [582.745297] CPU: 0 PID: 1475 Comm: gem_ctx_persist Not tainted 5.9.0-rc1-CI-CI_DRM_8908+ #1
      <4> [582.745304] Hardware name: Intel Corporation NUC7CJYH/NUC7JYB, BIOS JYGLKCPX.86A.0027.2018.0125.1347 01/25/2018
      <4> [582.745317] RIP: 0010:__lock_acquire+0x2c3/0x1f40
      <4> [582.745323] Code: 00 65 8b 05 c7 8a ef 7e 85 c0 0f 85 b4 07 00 00 44 8b 9d c4 08 00 00 45 85 db 0f 84 0f 01 00 00 ba 05 00 00 00 e9 c8 06 00 00 <48> 81 3f c0 89 c7 82 b8 00 00 00 00 41 0f 45 c0 83 fe 01 41 89 c3
      <4> [582.745334] RSP: 0018:ffffc9000461bc40 EFLAGS: 00010002
      <4> [582.745340] RAX: 0000000000000000 RBX: 0000000000000001 RCX: 0000000000000000
      <4> [582.745345] RDX: 0000000000000000 RSI: 0000000000000000 RDI: cccccccccccccd5c
      <4> [582.745350] RBP: ffff8881ec4a2880 R08: 0000000000000001 R09: 0000000000000001
      <4> [582.745356] R10: 0000000000000001 R11: 0000000000000001 R12: 0000000000000000
      <4> [582.745361] R13: 0000000000000000 R14: 0000000000000000 R15: cccccccccccccd5c
      <4> [582.745367] FS:  00007fb44da78e40(0000) GS:ffff888278000000(0000) knlGS:0000000000000000
      <4> [582.745373] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      <4> [582.745378] CR2: 00007fb44daad040 CR3: 0000000268428000 CR4: 0000000000350ef0
      <4> [582.745383] Call Trace:
      <4> [582.745390]  ? __lock_acquire+0x913/0x1f40
      <4> [582.745397]  lock_acquire+0xb5/0x3c0
      <4> [582.745526]  ? kill_engines+0x19a/0x4b0 [i915]
      <4> [582.745533]  ? find_held_lock+0x2d/0x90
      <4> [582.745541]  _raw_spin_lock_irq+0x30/0x40
      <4> [582.745635]  ? kill_engines+0x19a/0x4b0 [i915]
      <4> [582.745727]  kill_engines+0x19a/0x4b0 [i915]
      <4> [582.745820]  context_close+0x195/0x410 [i915]
      <4> [582.745912]  i915_gem_context_close+0x5b/0x160 [i915]
      <4> [582.745994]  i915_driver_postclose+0x14/0x40 [i915]
      <4> [582.746003]  drm_file_free.part.13+0x240/0x290
      <4> [582.746009]  drm_release_noglobal+0x16/0x50
      <4> [582.746016]  __fput+0xa5/0x250
      <4> [582.746021]  task_work_run+0x6e/0xb0
      <4> [582.746028]  exit_to_user_mode_prepare+0x178/0x180
      <4> [582.746034]  syscall_exit_to_user_mode+0x36/0x220
      <4> [582.746040]  entry_SYSCALL_64_after_hwframe+0x44/0xa9
      <4> [582.746045] RIP: 0033:0x7fb44d1dc421
      <4> [582.746050] Code: f7 d8 64 89 02 48 c7 c0 ff ff ff ff c3 66 2e 0f 1f 84 00 00 00 00 00 66 90 8b 05 ea cf 20 00 85 c0 75 16 b8 03 00 00 00 0f 05 <48> 3d 00 f0 ff ff 77 3f f3 c3 0f 1f 44 00 00 53 89 fb 48 83 ec 10
      <4> [582.746062] RSP: 002b:00007ffed2e83818 EFLAGS: 00000246 ORIG_RAX: 0000000000000003
      <4> [582.746069] RAX: 0000000000000000 RBX: 0000556410bfe840 RCX: 00007fb44d1dc421
      <4> [582.746075] RDX: 000000000000000a RSI: 00000000c0406469 RDI: 0000000000000008
      <4> [582.746080] RBP: 0000000000000008 R08: 00007fb44d1c51cc R09: 00007fb44d1c5240
      <4> [582.746086] R10: 0000000000000001 R11: 0000000000000246 R12: 00000000fffffffb
      <4> [582.746091] R13: 0000000000000006 R14: 0000000000000000 R15: 000000000000000a
      <4> [582.746099] Modules linked in: vgem mei_hdcp snd_hda_codec_hdmi snd_hda_codec_realtek snd_hda_codec_generic ledtrig_audio btusb btrtl btbcm btintel x86_pkg_temp_thermal coretemp crct10dif_pclmul crc32_pclmul bluetooth ghash_clmulni_intel ecdh_generic ecc i915 r8169 realtek mei_me mei snd_hda_intel i2c_hid snd_intel_dspcfg snd_hda_codec snd_hwdep snd_hda_core snd_pcm pinctrl_geminilake pinctrl_intel prime_numbers [last unloaded: test_drm_mm]
      
      Fixes: 736e785f ("drm/i915/gem: Reduce context termination list iteration guard to RCU")
      Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
      Reviewed-by: default avatarTvrtko Ursulin <tvrtko.ursulin@intel.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20200925101107.27869-2-chris@chris-wilson.co.uk
      badef44d
    • Chris Wilson's avatar
      drm/i915: Redo "Remove i915_request.lock requirement for execution callbacks" · 35faeb7d
      Chris Wilson authored
      The reordering and rebasing of commit 2e4c6c1a ("drm/i915: Remove
      i915_request.lock requirement for execution callbacks") caused it to
      revert an earlier correction. Let us restore commit 99f0a640d464
      ("drm/i915: Remove requirement for holding i915_request.lock for
      breadcrumbs")
      
      Fixes: 2e4c6c1a ("drm/i915: Remove i915_request.lock requirement for execution callbacks")
      Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
      Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
      Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
      Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
      Reviewed-by: default avatarTvrtko Ursulin <tvrtko.ursulin@intel.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20200925101107.27869-1-chris@chris-wilson.co.uk
      35faeb7d
  9. 24 Sep, 2020 1 commit
  10. 23 Sep, 2020 1 commit
  11. 22 Sep, 2020 1 commit
    • Matthew Auld's avatar
      drm/i915: check i915_vm_alloc_pt_stash for errors · 1604cb2a
      Matthew Auld authored
      If we are really unlucky and encounter an error during
      i915_vm_alloc_pt_stash, we end up passing an empty pt/pd stash all the
      way down into the low-level ppgtt alloc code, leading to explosions,
      since it expects at least the required number of pt/pd for the va range.
      
      [  211.981418] BUG: kernel NULL pointer dereference, address: 0000000000000000
      [  211.981421] #PF: supervisor read access in kernel mode
      [  211.981422] #PF: error_code(0x0000) - not-present page
      [  211.981424] PGD 80000008439cb067 P4D 80000008439cb067 PUD 84a37f067 PMD 0
      [  211.981427] Oops: 0000 [#1] SMP PTI
      [  211.981428] CPU: 1 PID: 1301 Comm: i915_selftest Tainted: G     U    I       5.9.0-rc5+ #3
      [  211.981430] Hardware name:  /NUC6i7KYB, BIOS KYSKLi70.86A.0050.2017.0831.1924 08/31/2017
      [  211.981521] RIP: 0010:__gen8_ppgtt_alloc+0x1ed/0x3c0 [i915]
      [  211.981523] Code: c1 48 c7 c7 5d 5d fe c0 65 ff 0d ee 1d 03 3f e8 d9 91 1f e2 8b 55 c4 31 c0 48 8b 75 b8 85 d2 0f 95 c0 48 8b 1c c6 48 89 45 98 <48> 8b 03 48 8b 90 58 02 00 00 48 85 d2 0f 84 07 ea 15 00 48 81 fa
      [  211.981526] RSP: 0018:ffffba2cc0eb3970 EFLAGS: 00010202
      [  211.981527] RAX: 0000000000000001 RBX: 0000000000000000 RCX: 0000000000000004
      [  211.981529] RDX: 0000000000000002 RSI: ffff9be998bdb8c0 RDI: ffff9be99c844300
      [  211.981530] RBP: ffffba2cc0eb39d8 R08: 0000000000000640 R09: ffff9be97cdfd000
      [  211.981531] R10: ffff9be97cdfd614 R11: 0000000000000000 R12: 0000000000000000
      [  211.981532] R13: ffff9be98607ba20 R14: ffff9be995a0b400 R15: ffffba2cc0eb39e8
      [  211.981534] FS:  00007f0f10b31000(0000) GS:ffff9be99fc40000(0000) knlGS:0000000000000000
      [  211.981536] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      [  211.981538] CR2: 0000000000000000 CR3: 000000084d74e006 CR4: 00000000003706e0
      [  211.981539] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
      [  211.981541] DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
      [  211.981542] Call Trace:
      [  211.981609]  gen8_ppgtt_alloc+0x79/0x90 [i915]
      [  211.981678]  ppgtt_bind_vma+0x36/0x80 [i915]
      [  211.981756]  __vma_bind+0x39/0x40 [i915]
      [  211.981818]  fence_work+0x21/0x98 [i915]
      [  211.981879]  fence_notify+0x8d/0x128 [i915]
      [  211.981939]  __i915_sw_fence_complete+0x62/0x240 [i915]
      [  211.982018]  i915_vma_pin_ww+0x1ee/0x9c0 [i915]
      
      Fixes: cd0452aa ("drm/i915: Preallocate stashes for vma page-directories")
      Signed-off-by: default avatarMatthew Auld <matthew.auld@intel.com>
      Cc: Chris Wilson <chris@chris-wilson.co.uk>
      Reviewed-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
      Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
      Link: https://patchwork.freedesktop.org/patch/msgid/20200921160844.73186-1-matthew.auld@intel.com
      1604cb2a
  12. 21 Sep, 2020 1 commit
  13. 18 Sep, 2020 4 commits
  14. 17 Sep, 2020 1 commit
  15. 15 Sep, 2020 8 commits