1. 03 12月, 2020 6 次提交
    • C
      drm/i915/display: Defer initial modeset until after GGTT is initialised · ccc9e67a
      Chris Wilson 提交于
      Prior to sanitizing the GGTT, the only operations allowed in
      intel_display_init_nogem() are those to reserve the preallocated (and
      active) regions in the GGTT leftover from the BIOS. Trying to allocate a
      GGTT vma (such as intel_pin_and_fence_fb_obj during the initial modeset)
      may then conflict with other preallocated regions that have not yet been
      protected.
      
      Move the initial modesetting from the end of init_nogem to the beginning
      of init so that any vma pinning (either framebuffers or DSB, for example),
      is after the GGTT is ready to handle it.
      
      This will prevent the DSB object from being destroyed too early:
      
      [   53.449241] BUG: KASAN: use-after-free in i915_init_ggtt+0x324/0x9e0 [i915]
      [   53.449309] Read of size 8 at addr ffff88811b1e8070 by task systemd-udevd/345
      
      [   53.449399] CPU: 1 PID: 345 Comm: systemd-udevd Tainted: G        W         5.10.0-rc5+ #12
      [   53.449409] Call Trace:
      [   53.449418]  dump_stack+0x9a/0xcc
      [   53.449558]  ? i915_init_ggtt+0x324/0x9e0 [i915]
      [   53.449565]  print_address_description.constprop.0+0x3e/0x60
      [   53.449577]  ? _raw_spin_lock_irqsave+0x4e/0x50
      [   53.449718]  ? i915_init_ggtt+0x324/0x9e0 [i915]
      [   53.449849]  ? i915_init_ggtt+0x324/0x9e0 [i915]
      [   53.449857]  kasan_report.cold+0x1f/0x37
      [   53.449993]  ? i915_init_ggtt+0x324/0x9e0 [i915]
      [   53.450130]  i915_init_ggtt+0x324/0x9e0 [i915]
      [   53.450273]  ? i915_ggtt_suspend+0x1f0/0x1f0 [i915]
      [   53.450281]  ? static_obj+0x69/0x80
      [   53.450289]  ? lockdep_init_map_waits+0xa9/0x310
      [   53.450431]  ? intel_wopcm_init+0x96/0x3d0 [i915]
      [   53.450581]  ? i915_gem_init+0x75/0x2d0 [i915]
      [   53.450720]  i915_gem_init+0x75/0x2d0 [i915]
      [   53.450852]  i915_driver_probe+0x8c2/0x1210 [i915]
      [   53.450993]  ? i915_pm_prepare+0x630/0x630 [i915]
      [   53.451006]  ? check_chain_key+0x1e7/0x2e0
      [   53.451025]  ? __pm_runtime_resume+0x58/0xb0
      [   53.451157]  i915_pci_probe+0xa6/0x2b0 [i915]
      [   53.451285]  ? i915_pci_remove+0x40/0x40 [i915]
      [   53.451295]  ? lockdep_hardirqs_on_prepare+0x124/0x230
      [   53.451302]  ? _raw_spin_unlock_irqrestore+0x42/0x50
      [   53.451309]  ? lockdep_hardirqs_on+0xbf/0x130
      [   53.451315]  ? preempt_count_sub+0xf/0xb0
      [   53.451321]  ? _raw_spin_unlock_irqrestore+0x2f/0x50
      [   53.451335]  pci_device_probe+0xf9/0x190
      [   53.451350]  really_probe+0x17f/0x5b0
      [   53.451365]  driver_probe_device+0x13a/0x1c0
      [   53.451376]  device_driver_attach+0x82/0x90
      [   53.451386]  ? device_driver_attach+0x90/0x90
      [   53.451391]  __driver_attach+0xab/0x190
      [   53.451401]  ? device_driver_attach+0x90/0x90
      [   53.451407]  bus_for_each_dev+0xe4/0x140
      [   53.451414]  ? subsys_dev_iter_exit+0x10/0x10
      [   53.451423]  ? __list_add_valid+0x2b/0xa0
      [   53.451440]  bus_add_driver+0x227/0x2e0
      [   53.451454]  driver_register+0xd3/0x150
      [   53.451585]  i915_init+0x92/0xac [i915]
      [   53.451592]  ? 0xffffffffa0a20000
      [   53.451598]  do_one_initcall+0xb6/0x3b0
      [   53.451606]  ? trace_event_raw_event_initcall_finish+0x150/0x150
      [   53.451614]  ? __kasan_kmalloc.constprop.0+0xc2/0xd0
      [   53.451627]  ? kmem_cache_alloc_trace+0x4a4/0x8e0
      [   53.451634]  ? kasan_unpoison_shadow+0x33/0x40
      [   53.451649]  do_init_module+0xf8/0x350
      [   53.451662]  load_module+0x43de/0x47f0
      [   53.451716]  ? module_frob_arch_sections+0x20/0x20
      [   53.451731]  ? rw_verify_area+0x5f/0x130
      [   53.451780]  ? __do_sys_finit_module+0x10d/0x1a0
      [   53.451785]  __do_sys_finit_module+0x10d/0x1a0
      [   53.451792]  ? __ia32_sys_init_module+0x40/0x40
      [   53.451800]  ? seccomp_do_user_notification.isra.0+0x5c0/0x5c0
      [   53.451829]  ? rcu_read_lock_bh_held+0xb0/0xb0
      [   53.451835]  ? mark_held_locks+0x24/0x90
      [   53.451856]  do_syscall_64+0x33/0x80
      [   53.451863]  entry_SYSCALL_64_after_hwframe+0x44/0xa9
      [   53.451868] RIP: 0033:0x7fde09b4470d
      [   53.451875] Code: 00 c3 66 2e 0f 1f 84 00 00 00 00 00 90 f3 0f 1e fa 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 8b 0d 53 f7 0c 00 f7 d8 64 89 01 48
      [   53.451880] RSP: 002b:00007ffd6abc1718 EFLAGS: 00000246 ORIG_RAX: 0000000000000139
      [   53.451890] RAX: ffffffffffffffda RBX: 000056444e528150 RCX: 00007fde09b4470d
      [   53.451895] RDX: 0000000000000000 RSI: 00007fde09a21ded RDI: 000000000000000f
      [   53.451899] RBP: 0000000000020000 R08: 0000000000000000 R09: 0000000000000000
      [   53.451904] R10: 000000000000000f R11: 0000000000000246 R12: 00007fde09a21ded
      [   53.451909] R13: 0000000000000000 R14: 000056444e329200 R15: 000056444e528150
      
      [   53.451957] Allocated by task 345:
      [   53.451995]  kasan_save_stack+0x1b/0x40
      [   53.452001]  __kasan_kmalloc.constprop.0+0xc2/0xd0
      [   53.452006]  kmem_cache_alloc+0x1cd/0x8d0
      [   53.452146]  i915_vma_instance+0x126/0xb70 [i915]
      [   53.452304]  i915_gem_object_ggtt_pin_ww+0x222/0x3f0 [i915]
      [   53.452446]  intel_dsb_prepare+0x14f/0x230 [i915]
      [   53.452588]  intel_atomic_commit+0x183/0x690 [i915]
      [   53.452730]  intel_initial_commit+0x2bc/0x2f0 [i915]
      [   53.452871]  intel_modeset_init_nogem+0xa02/0x2af0 [i915]
      [   53.452995]  i915_driver_probe+0x8af/0x1210 [i915]
      [   53.453120]  i915_pci_probe+0xa6/0x2b0 [i915]
      [   53.453125]  pci_device_probe+0xf9/0x190
      [   53.453131]  really_probe+0x17f/0x5b0
      [   53.453136]  driver_probe_device+0x13a/0x1c0
      [   53.453142]  device_driver_attach+0x82/0x90
      [   53.453148]  __driver_attach+0xab/0x190
      [   53.453153]  bus_for_each_dev+0xe4/0x140
      [   53.453158]  bus_add_driver+0x227/0x2e0
      [   53.453164]  driver_register+0xd3/0x150
      [   53.453286]  i915_init+0x92/0xac [i915]
      [   53.453292]  do_one_initcall+0xb6/0x3b0
      [   53.453297]  do_init_module+0xf8/0x350
      [   53.453302]  load_module+0x43de/0x47f0
      [   53.453307]  __do_sys_finit_module+0x10d/0x1a0
      [   53.453312]  do_syscall_64+0x33/0x80
      [   53.453318]  entry_SYSCALL_64_after_hwframe+0x44/0xa9
      
      [   53.453345] Freed by task 82:
      [   53.453379]  kasan_save_stack+0x1b/0x40
      [   53.453384]  kasan_set_track+0x1c/0x30
      [   53.453389]  kasan_set_free_info+0x1b/0x30
      [   53.453394]  __kasan_slab_free+0x112/0x160
      [   53.453399]  kmem_cache_free+0xb2/0x3f0
      [   53.453536]  i915_gem_flush_free_objects+0x31a/0x3b0 [i915]
      [   53.453542]  process_one_work+0x519/0x9f0
      [   53.453547]  worker_thread+0x75/0x5c0
      [   53.453552]  kthread+0x1da/0x230
      [   53.453557]  ret_from_fork+0x22/0x30
      
      [   53.453584] The buggy address belongs to the object at ffff88811b1e8040
                      which belongs to the cache i915_vma of size 968
      [   53.453692] The buggy address is located 48 bytes inside of
                      968-byte region [ffff88811b1e8040, ffff88811b1e8408)
      [   53.453792] The buggy address belongs to the page:
      [   53.453842] page:00000000b35f7048 refcount:1 mapcount:0 mapping:0000000000000000 index:0xffff88811b1ef940 pfn:0x11b1e8
      [   53.453847] head:00000000b35f7048 order:3 compound_mapcount:0 compound_pincount:0
      [   53.453853] flags: 0x8000000000010200(slab|head)
      [   53.453860] raw: 8000000000010200 ffff888115596248 ffff888115596248 ffff8881155b6340
      [   53.453866] raw: ffff88811b1ef940 0000000000170001 00000001ffffffff 0000000000000000
      [   53.453870] page dumped because: kasan: bad access detected
      
      [   53.453895] Memory state around the buggy address:
      [   53.453944]  ffff88811b1e7f00: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
      [   53.454011]  ffff88811b1e7f80: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
      [   53.454079] >ffff88811b1e8000: fc fc fc fc fc fc fc fc fa fb fb fb fb fb fb fb
      [   53.454146]                                                              ^
      [   53.454211]  ffff88811b1e8080: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
      [   53.454279]  ffff88811b1e8100: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
      [   53.454347] ==================================================================
      [   53.454414] Disabling lock debugging due to kernel taint
      [   53.454434] general protection fault, probably for non-canonical address 0xdead0000000000d0: 0000 [#1] PREEMPT SMP KASAN PTI
      [   53.454446] CPU: 1 PID: 345 Comm: systemd-udevd Tainted: G    B   W         5.10.0-rc5+ #12
      [   53.454592] RIP: 0010:i915_init_ggtt+0x26f/0x9e0 [i915]
      [   53.454602] Code: 89 8d 48 ff ff ff 4c 8d 60 d0 49 39 c7 0f 84 37 02 00 00 4c 89 b5 40 ff ff ff 4d 8d bc 24 90 00 00 00 4c 89 ff e8 c1 97 f8 e0 <49> 83 bc 24 90 00 00 00 00 0f 84 0f 02 00 00 49 8d 7c 24 08 e8 a8
      [   53.454618] RSP: 0018:ffff88812247f430 EFLAGS: 00010286
      [   53.454625] RAX: 0000000000000000 RBX: ffff888136440000 RCX: ffffffffa03fb78f
      [   53.454633] RDX: 0000000000000000 RSI: 0000000000000008 RDI: dead000000000160
      [   53.454641] RBP: ffff88812247f500 R08: ffffffff8113589f R09: 0000000000000000
      [   53.454648] R10: ffffffff83063843 R11: fffffbfff060c708 R12: dead0000000000d0
      [   53.454656] R13: ffff888136449ba0 R14: 0000000000002000 R15: dead000000000160
      [   53.454664] FS:  00007fde095c4880(0000) GS:ffff88840c880000(0000) knlGS:0000000000000000
      [   53.454672] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      [   53.454679] CR2: 00007fef132b4f28 CR3: 000000012245c002 CR4: 00000000003706e0
      [   53.454686] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
      [   53.454693] DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
      [   53.454700] Call Trace:
      [   53.454833]  ? i915_ggtt_suspend+0x1f0/0x1f0 [i915]
      Reported-by: NMatthew Auld <matthew.auld@intel.com>
      Fixes: afeda4f3 ("drm/i915/dsb: Pre allocate and late cleanup of cmd buffer")
      Signed-off-by: NChris Wilson <chris@chris-wilson.co.uk>
      Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
      Cc: Matthew Auld <matthew.auld@intel.com>
      Cc: Lucas De Marchi <lucas.demarchi@intel.com>
      Tested-by: NMatthew Auld <matthew.auld@intel.com>
      Reviewed-by: NMatthew Auld <matthew.auld@intel.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20201125193032.29282-1-chris@chris-wilson.co.uk
      (cherry picked from commit b3bf99da)
      Signed-off-by: NRodrigo Vivi <rodrigo.vivi@intel.com>
      ccc9e67a
    • J
      drm/i915/display: return earlier from intel_modeset_init() without display · 37eade64
      Jani Nikula 提交于
      !HAS_DISPLAY() implies !HAS_OVERLAY(), skipping overlay setup anyway, so
      return earlier from intel_modeset_init() for clarity.
      
      Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
      Signed-off-by: NJani Nikula <jani.nikula@intel.com>
      Signed-off-by: NLucas De Marchi <lucas.demarchi@intel.com>
      Reviewed-by: NJosé Roberto de Souza <jose.souza@intel.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20201106225531.920641-4-lucas.demarchi@intel.com
      (cherry picked from commit 71c8415d)
      Signed-off-by: NRodrigo Vivi <rodrigo.vivi@intel.com>
      37eade64
    • C
      drm/i915/gt: Limit frequency drop to RPe on parking · aff76ab7
      Chris Wilson 提交于
      We treat idling the GT (intel_rps_park) as a downclock event, and reduce
      the frequency we intend to restart the GT with. Since the two workloads
      are likely related (e.g. a compositor rendering every 16ms), we want to
      carry the frequency and load information from across the idling.
      However, we do also need to update the frequencies so that workloads
      that run for less than 1ms are autotuned by RPS (otherwise we leave
      compositors running at max clocks, draining excess power). Conversely,
      if we try to run too slowly, the next workload has to run longer. Since
      there is a hysteresis in the power graph, below a certain frequency
      running a short workload for longer consumes more energy than running it
      slightly higher for less time. The exact balance point is unknown
      beforehand, but measurements with 30fps media playback indicate that RPe
      is a better choice.
      Reported-by: NEdward Baker <edward.baker@intel.com>
      Tested-by: NEdward Baker <edward.baker@intel.com>
      Fixes: 043cd2d1 ("drm/i915/gt: Leave rps->cur_freq on unpark")
      Signed-off-by: NChris Wilson <chris@chris-wilson.co.uk>
      Cc: Edward Baker <edward.baker@intel.com>
      Cc: Andi Shyti <andi.shyti@intel.com>
      Cc: Lyude Paul <lyude@redhat.com>
      Cc: <stable@vger.kernel.org> # v5.8+
      Reviewed-by: NRodrigo Vivi <rodrigo.vivi@intel.com>
      Reviewed-by: NAndi Shyti <andi.shyti@intel.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20201124183521.28623-1-chris@chris-wilson.co.uk
      (cherry picked from commit f7ed83cc)
      Signed-off-by: NRodrigo Vivi <rodrigo.vivi@intel.com>
      aff76ab7
    • V
      drm/i915/gt: Retain default context state across shrinking · 78b2eb8a
      Venkata Ramana Nayana 提交于
      As we use a shmemfs file to hold the context state, when not in use it
      may be swapped out, such as across suspend. Since we wrote into the
      shmemfs without marking the pages as dirty, the contents may be dropped
      instead of being written back to swap. On re-using the shmemfs file,
      such as creating a new context after resume, the contents of that file
      were likely garbage and so the new context could then hang the GPU.
      
      Simply mark the page as being written when copying into the shmemfs
      file, and it the new contents will be retained across swapout.
      
      Fixes: be1cb55a ("drm/i915/gt: Keep a no-frills swappable copy of the default context state")
      Cc: Sudeep Dutt <sudeep.dutt@intel.com>
      Cc: Matthew Auld <matthew.auld@intel.com>
      Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
      Cc: Ramalingam C <ramalingam.c@intel.com>
      Signed-off-by: NCQ Tang <cq.tang@intel.com>
      Signed-off-by: NVenkata Ramana Nayana <venkata.ramana.nayana@intel.com>
      Reviewed-by: NChris Wilson <chris@chris-wilson.co.uk>
      Signed-off-by: NChris Wilson <chris@chris-wilson.co.uk>
      Cc: <stable@vger.kernel.org> # v5.8+
      Link: https://patchwork.freedesktop.org/patch/msgid/20201127120718.454037-161-matthew.auld@intel.com
      (cherry picked from commit a9d71f76)
      Signed-off-by: NRodrigo Vivi <rodrigo.vivi@intel.com>
      78b2eb8a
    • C
      drm/i915/gt: Split the breadcrumb spinlock between global and contexts · 2bfdf302
      Chris Wilson 提交于
      As we funnel more and more contexts into the breadcrumbs on an engine,
      the hold time of b->irq_lock grows. As we may then contend with the
      b->irq_lock during request submission, this increases the burden upon
      the engine->active.lock and so directly impacts both our execution
      latency and client latency. If we split the b->irq_lock by introducing a
      per-context spinlock to manage the signalers within a context, we then
      only need the b->irq_lock for enabling/disabling the interrupt and can
      avoid taking the lock for walking the list of contexts within the signal
      worker. Even with the current setup, this greatly reduces the number of
      times we have to take and fight for b->irq_lock.
      
      Furthermore, this closes the race between enabling the signaling context
      while it is in the process of being signaled and removed:
      
      <4>[  416.208555] list_add corruption. prev->next should be next (ffff8881951d5910), but was dead000000000100. (prev=ffff8882781bb870).
      <4>[  416.208573] WARNING: CPU: 7 PID: 0 at lib/list_debug.c:28 __list_add_valid+0x4d/0x70
      <4>[  416.208575] Modules linked in: i915(+) vgem snd_hda_codec_hdmi snd_hda_codec_realtek snd_hda_codec_generic ledtrig_audio mei_hdcp x86_pkg_temp_thermal coretemp ax88179_178a usbnet mii crct10dif_pclmul snd_intel_dspcfg crc32_pclmul snd_hda_codec snd_hwdep ghash_clmulni_intel snd_hda_core e1000e snd_pcm ptp pps_core mei_me mei prime_numbers intel_lpss_pci [last unloaded: i915]
      <4>[  416.208611] CPU: 7 PID: 0 Comm: swapper/7 Tainted: G     U            5.8.0-CI-CI_DRM_8852+ #1
      <4>[  416.208614] Hardware name: Intel Corporation Ice Lake Client Platform/IceLake Y LPDDR4x T4 RVP TLC, BIOS ICLSFWR1.R00.3212.A00.1905212112 05/21/2019
      <4>[  416.208627] RIP: 0010:__list_add_valid+0x4d/0x70
      <4>[  416.208631] Code: c3 48 89 d1 48 c7 c7 60 18 33 82 48 89 c2 e8 ea e0 b6 ff 0f 0b 31 c0 c3 48 89 c1 4c 89 c6 48 c7 c7 b0 18 33 82 e8 d3 e0 b6 ff <0f> 0b 31 c0 c3 48 89 f2 4c 89 c1 48 89 fe 48 c7 c7 00 19 33 82 e8
      <4>[  416.208633] RSP: 0018:ffffc90000280e18 EFLAGS: 00010086
      <4>[  416.208636] RAX: 0000000000000000 RBX: ffff888250a44880 RCX: 0000000000000105
      <4>[  416.208639] RDX: 0000000000000105 RSI: ffffffff82320c5b RDI: 00000000ffffffff
      <4>[  416.208641] RBP: ffff8882781bb870 R08: 0000000000000000 R09: 0000000000000001
      <4>[  416.208643] R10: 00000000054d2957 R11: 000000006abbd991 R12: ffff8881951d58c8
      <4>[  416.208646] R13: ffff888286073880 R14: ffff888286073848 R15: ffff8881951d5910
      <4>[  416.208669] FS:  0000000000000000(0000) GS:ffff88829c180000(0000) knlGS:0000000000000000
      <4>[  416.208671] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      <4>[  416.208673] CR2: 0000556231326c48 CR3: 0000000005610001 CR4: 0000000000760ee0
      <4>[  416.208675] PKRU: 55555554
      <4>[  416.208677] Call Trace:
      <4>[  416.208679]  <IRQ>
      <4>[  416.208751]  i915_request_enable_breadcrumb+0x278/0x400 [i915]
      <4>[  416.208839]  __i915_request_submit+0xca/0x2a0 [i915]
      <4>[  416.208892]  __execlists_submission_tasklet+0x480/0x1830 [i915]
      <4>[  416.208942]  execlists_submission_tasklet+0xc4/0x130 [i915]
      <4>[  416.208947]  tasklet_action_common.isra.17+0x6c/0x1c0
      <4>[  416.208954]  __do_softirq+0xdf/0x498
      <4>[  416.208960]  ? handle_fasteoi_irq+0x150/0x150
      <4>[  416.208964]  asm_call_on_stack+0xf/0x20
      <4>[  416.208966]  </IRQ>
      <4>[  416.208969]  do_softirq_own_stack+0xa1/0xc0
      <4>[  416.208972]  irq_exit_rcu+0xb5/0xc0
      <4>[  416.208976]  common_interrupt+0xf7/0x260
      <4>[  416.208980]  asm_common_interrupt+0x1e/0x40
      <4>[  416.208985] RIP: 0010:cpuidle_enter_state+0xb6/0x410
      <4>[  416.208987] Code: 00 31 ff e8 9c 3e 89 ff 80 7c 24 0b 00 74 12 9c 58 f6 c4 02 0f 85 31 03 00 00 31 ff e8 e3 6c 90 ff e8 fe a4 94 ff fb 45 85 ed <0f> 88 c7 02 00 00 49 63 c5 4c 2b 24 24 48 8d 14 40 48 8d 14 90 48
      <4>[  416.208989] RSP: 0018:ffffc90000143e70 EFLAGS: 00000206
      <4>[  416.208991] RAX: 0000000000000007 RBX: ffffe8ffffda8070 RCX: 0000000000000000
      <4>[  416.208993] RDX: 0000000000000000 RSI: ffffffff8238b4ee RDI: ffffffff8233184f
      <4>[  416.208995] RBP: ffffffff826b4e00 R08: 0000000000000000 R09: 0000000000000000
      <4>[  416.208997] R10: 0000000000000001 R11: 0000000000000000 R12: 00000060e7f24a8f
      <4>[  416.208998] R13: 0000000000000003 R14: 0000000000000003 R15: 0000000000000003
      <4>[  416.209012]  cpuidle_enter+0x24/0x40
      <4>[  416.209016]  do_idle+0x22f/0x2d0
      <4>[  416.209022]  cpu_startup_entry+0x14/0x20
      <4>[  416.209025]  start_secondary+0x158/0x1a0
      <4>[  416.209030]  secondary_startup_64+0xa4/0xb0
      <4>[  416.209039] irq event stamp: 10186977
      <4>[  416.209042] hardirqs last  enabled at (10186976): [<ffffffff810b9363>] tasklet_action_common.isra.17+0xe3/0x1c0
      <4>[  416.209044] hardirqs last disabled at (10186977): [<ffffffff81a5e5ed>] _raw_spin_lock_irqsave+0xd/0x50
      <4>[  416.209047] softirqs last  enabled at (10186968): [<ffffffff810b9a1a>] irq_enter_rcu+0x6a/0x70
      <4>[  416.209049] softirqs last disabled at (10186969): [<ffffffff81c00f4f>] asm_call_on_stack+0xf/0x20
      
      <4>[  416.209317] list_del corruption, ffff8882781bb870->next is LIST_POISON1 (dead000000000100)
      <4>[  416.209317] WARNING: CPU: 7 PID: 46 at lib/list_debug.c:47 __list_del_entry_valid+0x4e/0x90
      <4>[  416.209317] Modules linked in: i915(+) vgem snd_hda_codec_hdmi snd_hda_codec_realtek snd_hda_codec_generic ledtrig_audio mei_hdcp x86_pkg_temp_thermal coretemp ax88179_178a usbnet mii crct10dif_pclmul snd_intel_dspcfg crc32_pclmul snd_hda_codec snd_hwdep ghash_clmulni_intel snd_hda_core e1000e snd_pcm ptp pps_core mei_me mei prime_numbers intel_lpss_pci [last unloaded: i915]
      <4>[  416.209317] CPU: 7 PID: 46 Comm: ksoftirqd/7 Tainted: G     U  W         5.8.0-CI-CI_DRM_8852+ #1
      <4>[  416.209317] Hardware name: Intel Corporation Ice Lake Client Platform/IceLake Y LPDDR4x T4 RVP TLC, BIOS ICLSFWR1.R00.3212.A00.1905212112 05/21/2019
      <4>[  416.209317] RIP: 0010:__list_del_entry_valid+0x4e/0x90
      <4>[  416.209317] Code: 2e 48 8b 32 48 39 fe 75 3a 48 8b 50 08 48 39 f2 75 48 b8 01 00 00 00 c3 48 89 fe 48 89 c2 48 c7 c7 38 19 33 82 e8 62 e0 b6 ff <0f> 0b 31 c0 c3 48 89 fe 48 c7 c7 70 19 33 82 e8 4e e0 b6 ff 0f 0b
      <4>[  416.209317] RSP: 0018:ffffc90000280de8 EFLAGS: 00010086
      <4>[  416.209317] RAX: 0000000000000000 RBX: ffff8882781bb848 RCX: 0000000000010104
      <4>[  416.209317] RDX: 0000000000010104 RSI: ffffffff8238b4ee RDI: 00000000ffffffff
      <4>[  416.209317] RBP: ffff8882781bb880 R08: 0000000000000000 R09: 0000000000000001
      <4>[  416.209317] R10: 000000009fb6666e R11: 00000000feca9427 R12: ffffc90000280e18
      <4>[  416.209317] R13: ffff8881951d5930 R14: dead0000000000d8 R15: ffff8882781bb880
      <4>[  416.209317] FS:  0000000000000000(0000) GS:ffff88829c180000(0000) knlGS:0000000000000000
      <4>[  416.209317] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      <4>[  416.209317] CR2: 0000556231326c48 CR3: 0000000005610001 CR4: 0000000000760ee0
      <4>[  416.209317] PKRU: 55555554
      <4>[  416.209317] Call Trace:
      <4>[  416.209317]  <IRQ>
      <4>[  416.209317]  remove_signaling_context.isra.13+0xd/0x70 [i915]
      <4>[  416.209513]  signal_irq_work+0x1f7/0x4b0 [i915]
      
      This is caused by virtual engines where although we take the breadcrumb
      lock on each of the active engines, they may be different engines on
      different requests, It turns out that the b->irq_lock was not a
      sufficient proxy for the engine->active.lock in the case of more than
      one request, so introduce an explicit lock around ce->signals.
      
      v2: ce->signal_lock is acquired with only RCU protection and so must be
      treated carefully and not cleared during reallocation. We also then need
      to confirm that the ce we lock is the same as we found in the breadcrumb
      list.
      
      Closes: https://gitlab.freedesktop.org/drm/intel/-/issues/2276
      Fixes: c18636f7 ("drm/i915: Remove requirement for holding i915_request.lock for breadcrumbs")
      Fixes: 2854d866 ("drm/i915/gt: Replace intel_engine_transfer_stale_breadcrumbs")
      Signed-off-by: NChris Wilson <chris@chris-wilson.co.uk>
      Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
      Reviewed-by: NTvrtko Ursulin <tvrtko.ursulin@intel.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20201126140407.31952-4-chris@chris-wilson.co.uk
      (cherry picked from commit c744d503)
      Signed-off-by: NRodrigo Vivi <rodrigo.vivi@intel.com>
      2bfdf302
    • C
      drm/i915/gt: Protect context lifetime with RCU · 9261a1db
      Chris Wilson 提交于
      Allow a brief period for continued access to a dead intel_context by
      deferring the release of the struct until after an RCU grace period.
      As we are using a dedicated slab cache for the contexts, we can defer
      the release of the slab pages via RCU, with the caveat that individual
      structs may be reused from the freelist within an RCU grace period. To
      handle that, we have to avoid clearing members of the zombie struct.
      
      This is required for a later patch to handle locking around virtual
      requests in the signaler, as those requests may want to move between
      engines and be destroyed while we are holding b->irq_lock on a physical
      engine.
      
      v2: Drop mutex_reinit(), if we never mark the mutex as destroyed we
      don't need to reset the debug code, at the loss of having the mutex
      debug code spot us attempting to destroy a locked mutex.
      v3: As the intended use will remain strongly referenced counted, with
      very little inflight access across reuse, drop the ctor.
      v4: Drop the unrequired change to remove the temporary reference around
      dropping the active context, and add back some more missing ctor
      operations.
      v5: The ctor is back. Tvrtko spotted that ce->signal_lock [introduced
      later] maybe accessed under RCU and so needs special care not to be
      reinitialised.
      v6: Don't mix SLAB_TYPESAFE_BY_RCU and RCU list iteration.
      Signed-off-by: NChris Wilson <chris@chris-wilson.co.uk>
      Reviewed-by: NTvrtko Ursulin <tvrtko.ursulin@intel.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20201126140407.31952-3-chris@chris-wilson.co.uk
      (cherry picked from commit 14d1eaf0)
      Signed-off-by: NRodrigo Vivi <rodrigo.vivi@intel.com>
      9261a1db
  2. 01 12月, 2020 1 次提交
  3. 27 11月, 2020 1 次提交
  4. 26 11月, 2020 1 次提交
  5. 25 11月, 2020 13 次提交
  6. 24 11月, 2020 2 次提交
  7. 23 11月, 2020 1 次提交
  8. 21 11月, 2020 1 次提交
  9. 20 11月, 2020 2 次提交
    • C
      drm/i915/gt: Fixup tgl mocs for PTE tracking · be33805c
      Chris Wilson 提交于
      Forcing mocs:1 [used for our winsys follows-pte mode] to be cached
      caused display glitches. Though it is documented as deprecated (and so
      likely behaves as uncached) use the follow-pte bit and force it out of
      L3 cache.
      
      Testcase: igt/kms_frontbuffer_tracking
      Testcase: igt/kms_big_fb
      Signed-off-by: NChris Wilson <chris@chris-wilson.co.uk>
      Cc: Ayaz A Siddiqui <ayaz.siddiqui@intel.com>
      Cc: Lucas De Marchi <lucas.demarchi@intel.com>
      Cc: Matt Roper <matthew.d.roper@intel.com>
      Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
      Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
      Reviewed-by: NVille Syrjälä <ville.syrjala@linux.intel.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20201015122138.30161-4-chris@chris-wilson.co.uk
      (cherry picked from commit a04ac827)
      Fixes: 849c0fe9 ("drm/i915/gt: Initialize reserved and unspecified MOCS indices")
      Signed-off-by: NRodrigo Vivi <rodrigo.vivi@intel.com>
      [Rodrigo: Updated Fixes tag]
      be33805c
    • T
      drm/vram-helper: Fix use of top-down placement · 01822dd1
      Thomas Zimmermann 提交于
      Commit 7053e0ea ("drm/vram-helper: stop using TTM placement flags")
      cleared the BO placement flags if top-down placement had been selected.
      Hence, BOs that were supposed to go into VRAM are now placed in a default
      location in system memory.
      
      Trying to scanout the incorrectly pinned BO results in displayed garbage
      and an error message.
      
      [  146.108127] ------------[ cut here ]------------
      [  146.1V08180] WARNING: CPU: 0 PID: 152 at drivers/gpu/drm/drm_gem_vram_helper.c:284 drm_gem_vram_offset+0x59/0x60 [drm_vram_helper]
      ...
      [  146.108591]  ast_cursor_page_flip+0x3e/0x150 [ast]
      [  146.108622]  ast_cursor_plane_helper_atomic_update+0x8a/0xc0 [ast]
      [  146.108654]  drm_atomic_helper_commit_planes+0x197/0x4c0
      [  146.108699]  drm_atomic_helper_commit_tail_rpm+0x59/0xa0
      [  146.108718]  commit_tail+0x103/0x1c0
      ...
      [  146.109302] ---[ end trace d901a1ba1d949036 ]---
      
      Fix the bug by keeping the placement flags. The top-down placement flag
      is stored in a separate variable.
      Signed-off-by: NThomas Zimmermann <tzimmermann@suse.de>
      Reviewed-by: NChristian König <christian.koenig@amd.com>
      Fixes: 7053e0ea ("drm/vram-helper: stop using TTM placement flags")
      Reported-by: Pu Wen <puwen@hygon.cn> [for 5.10-rc1]
      Tested-by: NPu Wen <puwen@hygon.cn>
      Cc: Christian König <christian.koenig@amd.com>
      Cc: Dave Airlie <airlied@redhat.com>
      Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
      Cc: Maxime Ripard <mripard@kernel.org>
      Cc: Thomas Zimmermann <tzimmermann@suse.de>
      Cc: David Airlie <airlied@linux.ie>
      Cc: Daniel Vetter <daniel@ffwll.ch>
      Cc: dri-devel@lists.freedesktop.org
      Link: https://patchwork.freedesktop.org/patch/msgid/20200921142536.4392-1-tzimmermann@suse.de
      (cherry picked from commit b8f8dbf6)
      [pulled into fixes from drm-next]
      Signed-off-by: NDave Airlie <airlied@redhat.com>
      01822dd1
  10. 19 11月, 2020 11 次提交
  11. 18 11月, 2020 1 次提交