1. 21 Nov, 2019 1 commit
    • Chris Wilson's avatar
      Revert "drm/i915/gt: Wait for new requests in intel_gt_retire_requests()" · 689122dc
      Chris Wilson authored
      From inside an active timeline in the execbuf ioctl, we may try to
      reclaim some space in the GGTT. We need GGTT space for all objects on
      !full-ppgtt platforms, and for context images everywhere. However, to
      free up space in the GGTT we may need to remove some pinned objects
      (e.g. context images) that require flushing the idle barriers to remove.
      For this we use the big hammer of intel_gt_wait_for_idle()
      
      However, commit 7936a22d ("drm/i915/gt: Wait for new requests in
      intel_gt_retire_requests()") will continue spinning on the wait if a
      timeline is active but lacks requests, as is the case during execbuf
      reservation. Spinning forever is quite time consuming, so revert that
      commit and start again.
      
      In practice, the effect commit 7936a22d was trying to achieve is
      accomplished by commit 1683d24c ("drm/i915/gt: Move new timelines
      to the end of active_list"), so there is no immediate rush to replace
      the looping.
      
      Testcase: igt/gem_exec_reloc/basic-range
      Fixes: 7936a22d ("drm/i915/gt: Wait for new requests in intel_gt_retire_requests()")
      References: 1683d24c ("drm/i915/gt: Move new timelines to the end of active_list")
      Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
      Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
      Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
      Reviewed-by: default avatarJoonas Lahtinen <joonas.lahtinen@linux.intel.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20191121071044.97798-1-chris@chris-wilson.co.uk
      689122dc
  2. 20 Nov, 2019 21 commits
  3. 19 Nov, 2019 15 commits
  4. 18 Nov, 2019 3 commits
    • Lucas De Marchi's avatar
      drm/i915/dsb: fix extra warning on error path handling · 03cea610
      Lucas De Marchi authored
      When we call intel_dsb_get(), the dsb initialization may fail for
      various reasons. We already log the error message in that path, making
      it unnecessary to trigger a warning that refcount == 0 when calling
      intel_dsb_put().
      
      So here we simplify the logic and do lazy shutdown: leaving the extra
      refcount alive so when we call intel_dsb_put() we end up calling
      i915_vma_unpin_and_release().
      Signed-off-by: default avatarLucas De Marchi <lucas.demarchi@intel.com>
      Reviewed-by: default avatarMatt Roper <matthew.d.roper@intel.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20191111205024.22853-3-lucas.demarchi@intel.com
      03cea610
    • Lucas De Marchi's avatar
      drm/i915/dsb: remove atomic operations · ac4eead3
      Lucas De Marchi authored
      The current dsb API is not really prepared to handle multithread access.
      I was debugging an issue that ended up fixed by commit a096883d
      ("drm/i915/dsb: Remove PIN_MAPPABLE from the DSB object VMA") and was
      puzzled how these atomic operations were guaranteeing atomicity.
      
      	if (atomic_add_return(1, &dsb->refcount) != 1)
      		return dsb;
      
      Thread A could still be initializing dsb struct (and even fail in the
      middle) while thread B would take a reference and use it (even
      derefencing a NULL cmd_buf).
      
      I don't think the atomic operations here will help much if this were
      to support multithreaded scenario in future, so just remove them to
      avoid confusion.
      
      v2: Use refcount++ != 0 instead of ++refcount != 1 (from Ville)
      Signed-off-by: default avatarLucas De Marchi <lucas.demarchi@intel.com>
      Reviewed-by: default avatarMatt Roper <matthew.d.roper@intel.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20191111205024.22853-2-lucas.demarchi@intel.com
      Link: https://patchwork.freedesktop.org/patch/msgid/20191116011539.18230-1-lucas.demarchi@intel.com
      ac4eead3
    • José Roberto de Souza's avatar
      drm/i915/mst: Check uapi enable not intel one during mst atomic check · c50bb4dd
      José Roberto de Souza authored
      When the connector has VCPI allocated and is being moved to another
      pipe it causes drm_dp_atomic_release_vcpi_slots() and
      drm_dp_atomic_find_vcpi_slots() to be called in the same atomic check
      causing the error bellow.
      This happens because at this point Intel's hw.enable(and all other
      flags in the same struct) is not set but checking to on the uapi one
      it have the expected value.
      
      [  580.804430] ------------[ cut here ]------------
      [  580.804436] WARNING: CPU: 0 PID: 1221 at drivers/gpu/drm/drm_dp_mst_topology.c:4094 drm_dp_atomic_find_vcpi_slots+0x157/0x180
      [  580.804439] Modules linked in: cdc_ether r8152 i915 prime_numbers snd_hda_codec_hdmi snd_hda_intel snd_intel_dspcfg snd_hda_codec snd_hwdep asix snd_hda_core x86_pkg_temp_thermal usbnet mei_hdcp coretemp mii mei_me crct10dif_pclmul snd_pcm crc32_pclmul mei ghash_clmulni_intel i2c_i801 [last unloaded: prime_numbers]
      [  580.804462] CPU: 0 PID: 1221 Comm: kworker/0:0 Tainted: G        W         5.4.0-rc7-zeh+ #1226
      [  580.804465] Hardware name: Intel Corporation Tiger Lake Client Platform/TigerLake U DDR4 SODIMM RVP, BIOS TGLSFWI1.D00.2321.A09.1909250226 09/25/2019
      [  580.804470] Workqueue: events output_poll_execute
      [  580.804476] RIP: 0010:drm_dp_atomic_find_vcpi_slots+0x157/0x180
      [  580.804481] Code: 6a ff ff ff 49 89 6d 08 4c 89 6b 10 4c 89 63 18 49 89 6e 08 e9 55 ff ff ff 41 89 c7 5b 5d 44 89 f8 41 5c 41 5d 41 5e 41 5f c3 <0f> 0b 48 c7 c7 08 73 11 82 48 89 ee 41 bf ea ff ff ff e8 b2 e3 02
      [  580.804484] RSP: 0018:ffffc900009b7ab8 EFLAGS: 00010246
      [  580.804488] RAX: ffff88848c04ef50 RBX: ffff88848c04ef40 RCX: 0000000000000214
      [  580.804492] RDX: ffff88848c04f5e0 RSI: ffff888486eb2c68 RDI: ffff88848e518800
      [  580.804495] RBP: ffff88849d339000 R08: 00000000bc4e1092 R09: 0000000000000000
      [  580.804498] R10: 0000000000000000 R11: 0000000000000000 R12: ffff88848c04e728
      [  580.804501] R13: 0000000000000214 R14: ffff88848c04e720 R15: ffff888486eb2c68
      [  580.804504] FS:  0000000000000000(0000) GS:ffff8884a0000000(0000) knlGS:0000000000000000
      [  580.804507] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      [  580.804510] CR2: 00007ff6bf1ba680 CR3: 0000000005210003 CR4: 0000000000760ef0
      [  580.804512] PKRU: 55555554
      [  580.804515] Call Trace:
      [  580.804574]  intel_dp_mst_compute_config+0x193/0x2b0 [i915]
      [  580.804636]  intel_atomic_check+0x10cc/0x20b0 [i915]
      [  580.804644]  ? drm_atomic_print_old_state+0xf1/0x130
      [  580.804655]  drm_atomic_check_only+0x56a/0x810
      [  580.804663]  drm_atomic_commit+0xe/0x50
      [  580.804668]  drm_client_modeset_commit_atomic+0x18b/0x220
      [  580.804680]  drm_client_modeset_commit_force+0x4d/0x180
      [  580.804685]  drm_fb_helper_restore_fbdev_mode_unlocked+0x46/0xa0
      [  580.804689]  drm_fb_helper_set_par+0x27/0x50
      [  580.804692]  drm_fb_helper_hotplug_event.part.0+0xa7/0xc0
      [  580.804696]  drm_kms_helper_hotplug_event+0x21/0x30
      [  580.804699]  output_poll_execute+0x1a4/0x1c0
      [  580.804706]  process_one_work+0x25b/0x5b0
      [  580.804713]  worker_thread+0x4b/0x3b0
      [  580.804720]  kthread+0x100/0x140
      [  580.804723]  ? process_one_work+0x5b0/0x5b0
      [  580.804725]  ? kthread_park+0x80/0x80
      [  580.804730]  ret_from_fork+0x24/0x50
      [  580.804740] irq event stamp: 40988
      [  580.804743] hardirqs last  enabled at (40987): [<ffffffff81128567>] console_unlock+0x437/0x590
      [  580.804746] hardirqs last disabled at (40988): [<ffffffff81001cfa>] trace_hardirqs_off_thunk+0x1a/0x20
      [  580.804749] softirqs last  enabled at (40972): [<ffffffff81c00389>] __do_softirq+0x389/0x47f
      [  580.804752] softirqs last disabled at (40959): [<ffffffff810b6f19>] irq_exit+0xa9/0xc0
      [  580.804754] ---[ end trace 80052e0c60463c67 ]---
      [  580.804758] [drm:drm_dp_atomic_find_vcpi_slots] *ERROR* cannot allocate and release VCPI on [MST PORT:000000007880692e] in the same state
      [  580.811370] [drm:intel_dp_hpd_pulse [i915]] got esi2 02 00 00
      [  580.817239] [drm:intel_dp_hpd_pulse [i915]] got esi 02 00 00
      [  580.817313] ------------[ cut here ]------------
      [  580.817318] WARNING: CPU: 0 PID: 1221 at drivers/gpu/drm/drm_dp_mst_topology.c:4094 drm_dp_atomic_find_vcpi_slots+0x157/0x180
      [  580.817321] Modules linked in: cdc_ether r8152 i915 prime_numbers snd_hda_codec_hdmi snd_hda_intel snd_intel_dspcfg snd_hda_codec snd_hwdep asix snd_hda_core x86_pkg_temp_thermal
      [  580.817412] [drm:intel_dp_hpd_pulse [i915]] got hpd irq on [ENCODER:306:DDI E] - short
      [  580.817413]  usbnet mei_hdcp coretemp mii mei_me crct10dif_pclmul snd_pcm crc32_pclmul
      [  580.817490] [drm:intel_dp_hpd_pulse [i915]]  is_mst
      [  580.817491]  mei ghash_clmulni_intel i2c_i801 [last unloaded: prime_numbers]
      [  580.817498] CPU: 0 PID: 1221 Comm: kworker/0:0 Tainted: G        W         5.4.0-rc7-zeh+ #1226
      [  580.817503] Hardware name: Intel Corporation Tiger Lake Client Platform/TigerLake U DDR4 SODIMM RVP, BIOS TGLSFWI1.D00.2321.A09.1909250226 09/25/2019
      [  580.817506] Workqueue: events output_poll_execute
      [  580.817511] RIP: 0010:drm_dp_atomic_find_vcpi_slots+0x157/0x180
      [  580.817514] Code: 6a ff ff ff 49 89 6d 08 4c 89 6b 10 4c 89 63 18 49 89 6e 08 e9 55 ff ff ff 41 89 c7 5b 5d 44 89 f8 41 5c 41 5d 41 5e 41 5f c3 <0f> 0b 48 c7 c7 08 73 11 82 48 89 ee 41 bf ea ff ff ff e8 b2 e3 02
      [  580.817516] RSP: 0018:ffffc900009b7ab8 EFLAGS: 00010246
      [  580.817519] RAX: ffff88848c04ef50 RBX: ffff88848c04ef40 RCX: 000000000000018f
      [  580.817521] RDX: ffff88848c04f5e0 RSI: ffff888486eb2c68 RDI: ffff88848e518800
      [  580.817523] RBP: ffff88849d339000 R08: 00000000bc4e1092 R09: 0000000000000000
      [  580.817525] R10: 0000000000000000 R11: 0000000000000000 R12: ffff88848c04e728
      [  580.817528] R13: 000000000000018f R14: ffff88848c04e720 R15: ffff888486eb2c68
      [  580.817532] FS:  0000000000000000(0000) GS:ffff8884a0000000(0000) knlGS:0000000000000000
      [  580.817534] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      [  580.817535] CR2: 00007ff6bf1ba680 CR3: 0000000005210003 CR4: 0000000000760ef0
      [  580.817537] PKRU: 55555554
      [  580.817538] Call Trace:
      [  580.817620]  intel_dp_mst_compute_config+0x193/0x2b0 [i915]
      [  580.817690]  intel_atomic_check+0x10cc/0x20b0 [i915]
      [  580.817697]  ? drm_atomic_print_old_state+0xf1/0x130
      [  580.817711]  drm_atomic_check_only+0x56a/0x810
      [  580.817721]  drm_atomic_commit+0xe/0x50
      [  580.817726]  drm_client_modeset_commit_atomic+0x18b/0x220
      [  580.817744]  drm_client_modeset_commit_force+0x4d/0x180
      [  580.817751]  drm_fb_helper_restore_fbdev_mode_unlocked+0x46/0xa0
      [  580.817756]  drm_fb_helper_set_par+0x27/0x50
      [  580.817762]  drm_fb_helper_hotplug_event.part.0+0xa7/0xc0
      [  580.817767]  drm_kms_helper_hotplug_event+0x21/0x30
      [  580.817771]  output_poll_execute+0x1a4/0x1c0
      [  580.817780]  process_one_work+0x25b/0x5b0
      [  580.817791]  worker_thread+0x4b/0x3b0
      [  580.817800]  kthread+0x100/0x140
      [  580.817804]  ? process_one_work+0x5b0/0x5b0
      [  580.817807]  ? kthread_park+0x80/0x80
      [  580.817813]  ret_from_fork+0x24/0x50
      [  580.817832] irq event stamp: 41028
      [  580.817838] hardirqs last  enabled at (41027): [<ffffffff81128567>] console_unlock+0x437/0x590
      [  580.817841] hardirqs last disabled at (41028): [<ffffffff81001cfa>] trace_hardirqs_off_thunk+0x1a/0x20
      [  580.817846] softirqs last  enabled at (41022): [<ffffffff81c00389>] __do_softirq+0x389/0x47f
      [  580.817851] softirqs last disabled at (41013): [<ffffffff810b6f19>] irq_exit+0xa9/0xc0
      [  580.817854] ---[ end trace 80052e0c60463c68 ]---
      [  580.817858] [drm:drm_dp_atomic_find_vcpi_slots] *ERROR* cannot allocate and release VCPI on [MST PORT:000000007880692e] in the same state
      [  580.830767] [drm:intel_dp_mst_compute_config [i915]] failed finding vcpi slots:-22
      [  580.830821] [drm:intel_atomic_check [i915]] Encoder config failure: -22
      
      Cc: Lyude Paul <lyude@redhat.com>
      Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
      Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
      Cc: Lucas De Marchi <lucas.demarchi@intel.com>
      Signed-off-by: default avatarJosé Roberto de Souza <jose.souza@intel.com>
      Reviewed-by: default avatarLyude Paul <lyude@redhat.com>
      Reviewed-by: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20191115200430.53146-1-jose.souza@intel.com
      c50bb4dd