1. 11 5月, 2018 4 次提交
  2. 09 5月, 2018 7 次提交
    • D
      drm/i915/psr: Check if VBT says PSR can be enabled. · 2bdd045e
      Dhinakaran Pandiyan 提交于
      Driver features data block has a boolean flag for PSR, use this to decide
      whether PSR should be enabled on a platform. The module parameter can
      still be used to override this.
      
      Note: The feature currently remains disabled by default for all platforms
      irrespective of what VBT says.
      
      Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
      Signed-off-by: NDhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>
      Signed-off-by: NRodrigo Vivi <rodrigo.vivi@intel.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20180509003524.3199-1-dhinakaran.pandiyan@intel.com
      2bdd045e
    • C
      drm/i915/guc: Make submission tasklet hardirq safe · 6486d84b
      Chris Wilson 提交于
      Prepare to allow the GuC submission to be run from underneath a
      hardirq timer context (and not just the current softirq context) as is
      required for fast preemption resets and context switches.
      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/20180508210318.10274-2-chris@chris-wilson.co.uk
      6486d84b
    • C
      drm/i915/execlists: Make submission tasklet hardirq safe · 4413c474
      Chris Wilson 提交于
      Prepare to allow the execlists submission to be run from underneath a
      hardirq timer context (and not just the current softirq context) as is
      required for fast preemption resets and context switches.
      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/20180508210318.10274-1-chris@chris-wilson.co.uk
      4413c474
    • C
      drm/i915/selftests: Only switch to kernel context when locked · b9777c6f
      Chris Wilson 提交于
      In igt_flush_test() we try to switch back to the kernel context, but we
      are only able to do so when we are called with struct_mutex held.
      
      More of my CI fallout from lockdep being temporarily suppressed :(
      
      Fixes: 4cdf65ce ("drm/i915/selftests: Return to kernel context after each test")
      Signed-off-by: NChris Wilson <chris@chris-wilson.co.uk>
      Cc: Mika Kuoppala <mika.kuoppala@linux.intel.com>
      Reviewed-by: NMika Kuoppala <mika.kuoppala@linux.intel.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20180509065926.19207-1-chris@chris-wilson.co.uk
      b9777c6f
    • C
      drm/i915/selftests: Create mock_engine() under struct_mutex · 1d7a99f5
      Chris Wilson 提交于
      Calling mock_engine() calls i915_timeline_init() and that requires
      struct_mutex to be held as it adds itself to the global list of
      timelines. This error was introduced by commit a89d1f92 ("drm/i915:
      Split i915_gem_timeline into individual timelines") but the issue was
      masked in CI by the earlier lockdep spam.
      
      Fixes: a89d1f92 ("drm/i915: Split i915_gem_timeline into individual timelines")
      Signed-off-by: NChris Wilson <chris@chris-wilson.co.uk>
      Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
      Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
      Cc: Michel Thierry <michel.thierry@intel.com>
      Reviewed-by: NMichel Thierry <michel.thierry@intel.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20180508211056.17151-1-chris@chris-wilson.co.uk
      1d7a99f5
    • C
      drm/i915: Annotate timeline lock nesting · 0adb90d3
      Chris Wilson 提交于
      CI noticed
      
      <4>[   23.430701] ============================================
      <4>[   23.430706] WARNING: possible recursive locking detected
      <4>[   23.430713] 4.17.0-rc4-CI-CI_DRM_4156+ #1 Not tainted
      <4>[   23.430720] --------------------------------------------
      <4>[   23.430725] systemd-udevd/169 is trying to acquire lock:
      <4>[   23.430732]         (ptrval) (&(&timeline->lock)->rlock){....}, at: move_to_timeline+0x48/0x12c [i915]
      <4>[   23.430888]
                        but task is already holding lock:
      <4>[   23.430894]         (ptrval) (&(&timeline->lock)->rlock){....}, at: i915_request_submit+0x1a/0x40 [i915]
      <4>[   23.430995]
                        other info that might help us debug this:
      <4>[   23.431002]  Possible unsafe locking scenario:
      
      <4>[   23.431007]        CPU0
      <4>[   23.431010]        ----
      <4>[   23.431013]   lock(&(&timeline->lock)->rlock);
      <4>[   23.431021]   lock(&(&timeline->lock)->rlock);
      <4>[   23.431028]
                         *** DEADLOCK ***
      
      <4>[   23.431036]  May be due to missing lock nesting notation
      
      <4>[   23.431044] 5 locks held by systemd-udevd/169:
      <4>[   23.431049]  #0:         (ptrval) (&dev->mutex){....}, at: __driver_attach+0x42/0xe0
      <4>[   23.431065]  #1:         (ptrval) (&dev->mutex){....}, at: __driver_attach+0x50/0xe0
      <4>[   23.431078]  #2:         (ptrval) (&dev->struct_mutex){+.+.}, at: i915_gem_init+0xca/0x630 [i915]
      <4>[   23.431174]  #3:         (ptrval) (rcu_read_lock){....}, at: submit_notify+0x35/0x124 [i915]
      <4>[   23.431271]  #4:         (ptrval) (&(&timeline->lock)->rlock){....}, at: i915_request_submit+0x1a/0x40 [i915]
      <4>[   23.431369]
                        stack backtrace:
      <4>[   23.431377] CPU: 0 PID: 169 Comm: systemd-udevd Not tainted 4.17.0-rc4-CI-CI_DRM_4156+ #1
      <4>[   23.431385] Hardware name: Dell Inc.                 OptiPlex GX280               /0G8310, BIOS A04 02/09/2005
      <4>[   23.431394] Call Trace:
      <4>[   23.431403]  dump_stack+0x67/0x9b
      <4>[   23.431411]  __lock_acquire+0xc67/0x1b50
      <4>[   23.431421]  ? ring_buffer_lock_reserve+0x154/0x3f0
      <4>[   23.431429]  ? lock_acquire+0xa6/0x210
      <4>[   23.431435]  lock_acquire+0xa6/0x210
      <4>[   23.431530]  ? move_to_timeline+0x48/0x12c [i915]
      <4>[   23.431540]  _raw_spin_lock+0x2a/0x40
      <4>[   23.431634]  ? move_to_timeline+0x48/0x12c [i915]
      <4>[   23.431730]  move_to_timeline+0x48/0x12c [i915]
      <4>[   23.431826]  __i915_request_submit+0xfa/0x280 [i915]
      <4>[   23.431923]  i915_request_submit+0x25/0x40 [i915]
      <4>[   23.432024]  i9xx_submit_request+0x11/0x140 [i915]
      <4>[   23.432120]  submit_notify+0x8d/0x124 [i915]
      <4>[   23.432202]  __i915_sw_fence_complete+0x81/0x250 [i915]
      <4>[   23.432300]  __i915_request_add+0x31c/0x7c0 [i915]
      <4>[   23.432395]  i915_gem_init+0x621/0x630 [i915]
      <4>[   23.432476]  i915_driver_load+0xbee/0x10b0 [i915]
      <4>[   23.432485]  ? trace_hardirqs_on_caller+0xe0/0x1b0
      <4>[   23.432566]  i915_pci_probe+0x29/0x90 [i915]
      <4>[   23.432574]  pci_device_probe+0xa1/0x130
      <4>[   23.432582]  driver_probe_device+0x306/0x480
      <4>[   23.432589]  __driver_attach+0xb7/0xe0
      <4>[   23.432596]  ? driver_probe_device+0x480/0x480
      <4>[   23.432602]  ? driver_probe_device+0x480/0x480
      <4>[   23.432609]  bus_for_each_dev+0x74/0xc0
      <4>[   23.432616]  bus_add_driver+0x15f/0x250
      <4>[   23.432623]  ? 0xffffffffa02d7000
      <4>[   23.432629]  driver_register+0x52/0xc0
      <4>[   23.432635]  ? 0xffffffffa02d7000
      <4>[   23.432642]  do_one_initcall+0x58/0x370
      <4>[   23.432653]  ? do_init_module+0x1d/0x1ea
      <4>[   23.432660]  ? rcu_read_lock_sched_held+0x6f/0x80
      <4>[   23.432667]  ? kmem_cache_alloc_trace+0x282/0x2e0
      <4>[   23.432675]  do_init_module+0x56/0x1ea
      <4>[   23.432682]  load_module+0x2435/0x2b20
      <4>[   23.432694]  ? __se_sys_finit_module+0xd3/0xf0
      <4>[   23.432701]  __se_sys_finit_module+0xd3/0xf0
      <4>[   23.432710]  do_syscall_64+0x55/0x190
      <4>[   23.432717]  entry_SYSCALL_64_after_hwframe+0x49/0xbe
      <4>[   23.432724] RIP: 0033:0x7fa780782839
      <4>[   23.432729] RSP: 002b:00007ffcea73e668 EFLAGS: 00000246 ORIG_RAX: 0000000000000139
      <4>[   23.432738] RAX: ffffffffffffffda RBX: 0000561a472a4b30 RCX: 00007fa780782839
      <4>[   23.432745] RDX: 0000000000000000 RSI: 00007fa7804610e5 RDI: 000000000000000e
      <4>[   23.432752] RBP: 00007fa7804610e5 R08: 0000000000000000 R09: 00007ffcea73e780
      <4>[   23.432758] R10: 000000000000000e R11: 0000000000000246 R12: 0000000000000000
      <4>[   23.432765] R13: 0000561a47296450 R14: 0000000000020000 R15: 0000561a472a4b30
      
      but did not report it as an issue as it only occurred during the first
      module on boot. This is due to the removal of the distinct global
      timeline, and its separate lock class. So instead mark up the expected
      nesting. An alternative would be to define a separate lock class for the
      engine, but since we only expect to have a single point of nesting, we
      can avoid having multiple lock classes for the struct.
      
      Fixes: a89d1f92 ("drm/i915: Split i915_gem_timeline into individual timelines")
      Signed-off-by: NChris Wilson <chris@chris-wilson.co.uk>
      Cc: Chris Wilson <chris@chris-wilson.co.uk>
      Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
      Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
      Tested-by: NMichel Thierry <michel.thierry@intel.com>
      Reviewed-by: NTvrtko Ursulin <tvrtko.ursulin@intel.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20180508153514.20251-1-chris@chris-wilson.co.uk
      0adb90d3
    • C
      drm/i915: Remove unused i915_flip tracepoints · a33f084c
      Chris Wilson 提交于
      The i915_flip* tracepoints are no longer in use since the removal of CS
      flip in commit 8b5d27b9 ("drm/i915: Remove intel_flip_work
      infrastructure")
      
      References: 8b5d27b9 ("drm/i915: Remove intel_flip_work infrastructure")
      Signed-off-by: NChris Wilson <chris@chris-wilson.co.uk>
      Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
      Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
      Cc: Daniel Vetter <daniel.vetter@intel.com>
      Reviewed-by: NVille Syrjälä <ville.syrjala@linux.intel.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20180508151552.31024-1-chris@chris-wilson.co.uk
      a33f084c
  3. 08 5月, 2018 14 次提交
  4. 07 5月, 2018 1 次提交
  5. 05 5月, 2018 2 次提交
  6. 04 5月, 2018 9 次提交
    • T
      drm/i915: Include priority and completed status in request in/out tracepoints · f2742e47
      Tvrtko Ursulin 提交于
      It is useful to see the priority as requests are coming in and completed
      status as requests are coming out of the GPU.
      
      To achieve this in a more readable way we need to abandon the common
      request_hw tracepoint class.
      Signed-off-by: NTvrtko Ursulin <tvrtko.ursulin@intel.com>
      Reviewed-by: NChris Wilson <chris@chris-wilson.co.uk>
      Link: https://patchwork.freedesktop.org/patch/msgid/20180504115643.22437-1-tvrtko.ursulin@linux.intel.com
      f2742e47
    • C
      drm/i915: Remove assertion of active_rings must be non-empty if active_requests · 43c8c441
      Chris Wilson 提交于
      "An outstanding request must still be on an active ring somewhere" is
      only true if we haven't just been interrupted by the shrinker in the
      middle of allocating the request itself. (At the start of
      i915_request_alloc() we pin the context and prepare the GT for activity,
      marking it as active, and then try to allocate the request. If this
      allocation invokes the shrinker, we try to reclaim some space by calling
      i915_retire_requests() which may then be confused by the pre-reservation
      of active_requests.)
      
      <3>[  125.472695] i915_retire_requests:1429 GEM_BUG_ON(list_empty(&i915->gt.active_rings))
      <2>[  125.472792] kernel BUG at drivers/gpu/drm/i915/i915_request.c:1429!
      <4>[  125.472822] invalid opcode: 0000 [#1] PREEMPT SMP KASAN PTI
      <4>[  125.498764] Modules linked in: snd_hda_codec_hdmi x86_pkg_temp_thermal intel_powerclamp coretemp crct10dif_pclmul crc32_pclmul ghash_clmulni_intel btusb btrtl btbcm btintel cdc_ether snd_hda_codec_realtek bluetooth i915 snd_hda_codec_generic usbnet r8152 mii ecdh_generic lpc_ich mei_me snd_hda_intel snd_hda_codec mei snd_hwdep snd_hda_core snd_pcm prime_numbers
      <4>[  125.498923] CPU: 0 PID: 1115 Comm: gem_exec_create Tainted: G     U            4.17.0-rc3-gc49cbe0d1eb8-kasan_32+ #1
      <4>[  125.498955] Hardware name: GOOGLE Peppy/Peppy, BIOS MrChromebox 02/04/2018
      <4>[  125.499074] RIP: 0010:i915_retire_requests+0x3f2/0x590 [i915]
      <4>[  125.499095] RSP: 0018:ffff88004e5dec40 EFLAGS: 00010282
      <4>[  125.499117] RAX: 0000000000000010 RBX: ffff8800458f0000 RCX: 0000000000000000
      <4>[  125.499140] RDX: dffffc0000000000 RSI: 0000000000000008 RDI: ffff880060c2f6f0
      <4>[  125.499164] RBP: ffff88004e5dee30 R08: ffffed000c185ee6 R09: ffffed000c185ee6
      <4>[  125.499187] R10: 0000000000000001 R11: ffffed000c185ee5 R12: ffff8800553da160
      <4>[  125.499210] R13: dffffc0000000000 R14: 0000000000000000 R15: ffff8800458faed0
      <4>[  125.499235] FS:  00007fe18f052980(0000) GS:ffff880065400000(0000) knlGS:0000000000000000
      <4>[  125.499262] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      <4>[  125.499282] CR2: 00007f01df11efb8 CR3: 00000000518d4001 CR4: 00000000000606f0
      <4>[  125.499304] Call Trace:
      <4>[  125.499417]  i915_gem_shrink+0x576/0xb50 [i915]
      <4>[  125.499532]  ? i915_gem_shrinker_count+0x2f0/0x2f0 [i915]
      <4>[  125.499561]  ? trace_hardirqs_on_thunk+0x1a/0x1c
      <4>[  125.499671]  ? i915_gem_shrinker_count+0x1d6/0x2f0 [i915]
      <4>[  125.499782]  ? i915_gem_shrinker_scan+0xc4/0x320 [i915]
      <4>[  125.499889]  i915_gem_shrinker_scan+0xc4/0x320 [i915]
      <4>[  125.499997]  ? i915_gem_shrinker_vmap+0x3a0/0x3a0 [i915]
      <4>[  125.500021]  ? do_raw_spin_unlock+0x4f/0x240
      <4>[  125.500042]  ? _raw_spin_unlock+0x29/0x40
      <4>[  125.500149]  ? i915_gem_shrinker_count+0x1d6/0x2f0 [i915]
      <4>[  125.500177]  shrink_slab.part.18+0x23e/0x8f0
      <4>[  125.500202]  ? unregister_shrinker+0x1f0/0x1f0
      <4>[  125.500226]  ? mem_cgroup_iter+0x379/0xcc0
      <4>[  125.500249]  shrink_node+0xa7e/0x1180
      <4>[  125.500276]  ? shrink_node_memcg+0x11f0/0x11f0
      <4>[  125.500297]  ? __delayacct_freepages_start+0x38/0x80
      <4>[  125.500319]  ? __is_insn_slot_addr+0xe3/0x1a0
      <4>[  125.500342]  ? recalibrate_cpu_khz+0x10/0x10
      <4>[  125.500361]  ? ktime_get+0xb2/0x140
      <4>[  125.500382]  do_try_to_free_pages+0x2d3/0xe40
      <4>[  125.500407]  ? allow_direct_reclaim.part.23+0x1e0/0x1e0
      <4>[  125.500429]  ? shrink_node+0x1180/0x1180
      <4>[  125.500450]  ? __read_once_size_nocheck.constprop.4+0x10/0x10
      <4>[  125.500476]  try_to_free_pages+0x1af/0x560
      <4>[  125.500497]  ? do_try_to_free_pages+0xe40/0xe40
      <4>[  125.500525]  __alloc_pages_nodemask+0xadc/0x2130
      <4>[  125.500553]  ? gfp_pfmemalloc_allowed+0x150/0x150
      <4>[  125.500654]  ? i915_gem_do_execbuffer+0x219d/0x32e0 [i915]
      <4>[  125.500678]  ? debug_check_no_locks_freed+0x2a0/0x2a0
      <4>[  125.500701]  ? __debug_object_init+0x322/0xd90
      <4>[  125.500722]  ? debug_check_no_locks_freed+0x2a0/0x2a0
      <4>[  125.500827]  ? i915_gem_do_execbuffer+0xdc2/0x32e0 [i915]
      <4>[  125.500942]  ? i915_request_alloc+0x5b5/0x13f0 [i915]
      <4>[  125.500964]  ? page_frag_free+0x170/0x170
      <4>[  125.500984]  ? debug_check_no_locks_freed+0x2a0/0x2a0
      <4>[  125.501008]  new_slab+0x21d/0x5c0
      <4>[  125.501029]  ___slab_alloc.constprop.35+0x322/0x3e0
      <4>[  125.501052]  ? reservation_object_reserve_shared+0x10b/0x250
      <4>[  125.501074]  ? __ww_mutex_lock.constprop.3+0x1104/0x2cf0
      <4>[  125.501097]  ? _raw_spin_unlock_irqrestore+0x39/0x60
      <4>[  125.501120]  ? fs_reclaim_acquire+0x10/0x10
      <4>[  125.501138]  ? lock_acquire+0x138/0x3c0
      <4>[  125.501156]  ? lock_acquire+0x3c0/0x3c0
      <4>[  125.501176]  ? reservation_object_reserve_shared+0x10b/0x250
      <4>[  125.501198]  ? __slab_alloc.isra.27.constprop.34+0x3d/0x70
      <4>[  125.501219]  __slab_alloc.isra.27.constprop.34+0x3d/0x70
      <4>[  125.501243]  ? reservation_object_reserve_shared+0x10b/0x250
      <4>[  125.501265]  __kmalloc_track_caller+0x313/0x350
      <4>[  125.501287]  krealloc+0x62/0xb0
      <4>[  125.501305]  reservation_object_reserve_shared+0x10b/0x250
      <4>[  125.501411]  i915_gem_do_execbuffer+0x2040/0x32e0 [i915]
      <4>[  125.501522]  ? eb_relocate_slow+0xad0/0xad0 [i915]
      <4>[  125.501544]  ? debug_check_no_locks_freed+0x2a0/0x2a0
      <4>[  125.501646]  ? i915_gem_execbuffer2_ioctl+0x108/0x770 [i915]
      <4>[  125.501755]  ? i915_gem_execbuffer2_ioctl+0x108/0x770 [i915]
      <4>[  125.501779]  ? drm_dev_get+0x20/0x20
      <4>[  125.501803]  ? __might_fault+0xea/0x1a0
      <4>[  125.501902]  ? i915_gem_execbuffer2_ioctl+0x108/0x770 [i915]
      <4>[  125.502012]  ? i915_gem_execbuffer_ioctl+0xb90/0xb90 [i915]
      <4>[  125.502116]  ? i915_gem_execbuffer_ioctl+0xb90/0xb90 [i915]
      <4>[  125.502218]  i915_gem_execbuffer2_ioctl+0x3c5/0x770 [i915]
      <4>[  125.502243]  ? drm_dev_enter+0xe0/0xe0
      <4>[  125.502260]  ? lock_acquire+0x138/0x3c0
      <4>[  125.502362]  ? i915_gem_execbuffer_ioctl+0xb90/0xb90 [i915]
      <4>[  125.502470]  ? i915_gem_object_create.part.28+0x570/0x570 [i915]
      <4>[  125.502575]  ? i915_gem_execbuffer_ioctl+0xb90/0xb90 [i915]
      <4>[  125.502680]  ? i915_gem_execbuffer_ioctl+0xb90/0xb90 [i915]
      <4>[  125.502702]  drm_ioctl_kernel+0x151/0x200
      <4>[  125.502721]  ? drm_ioctl_permit+0x2a0/0x2a0
      <4>[  125.502746]  drm_ioctl+0x63a/0x920
      <4>[  125.502844]  ? i915_gem_execbuffer_ioctl+0xb90/0xb90 [i915]
      <4>[  125.502868]  ? drm_getstats+0x20/0x20
      <4>[  125.502886]  ? trace_hardirqs_on_thunk+0x1a/0x1c
      <4>[  125.502919]  do_vfs_ioctl+0x173/0xe90
      <4>[  125.502936]  ? trace_hardirqs_on_thunk+0x1a/0x1c
      <4>[  125.502957]  ? ioctl_preallocate+0x170/0x170
      <4>[  125.502978]  ? trace_hardirqs_on_thunk+0x1a/0x1c
      <4>[  125.503002]  ? retint_kernel+0x2d/0x2d
      <4>[  125.503024]  ksys_ioctl+0x35/0x60
      <4>[  125.503043]  __x64_sys_ioctl+0x6a/0xb0
      <4>[  125.503061]  do_syscall_64+0x97/0x400
      <4>[  125.503081]  entry_SYSCALL_64_after_hwframe+0x49/0xbe
      <4>[  125.503101] RIP: 0033:0x7fe18e4f65d7
      <4>[  125.503116] RSP: 002b:00007ffe2ffc06a8 EFLAGS: 00000246 ORIG_RAX: 0000000000000010
      <4>[  125.503145] RAX: ffffffffffffffda RBX: 0000000000000000 RCX: 00007fe18e4f65d7
      <4>[  125.503168] RDX: 00007ffe2ffc07f0 RSI: 0000000040406469 RDI: 0000000000000003
      <4>[  125.503191] RBP: 00007ffe2ffc07f0 R08: 0000000000000004 R09: 00007ffe2ffcf080
      <4>[  125.503215] R10: 000000000002c7de R11: 0000000000000246 R12: 0000000040406469
      <4>[  125.503238] R13: 0000000000000003 R14: 0000000000000000 R15: 0000000000000000
      <4>[  125.503268] Code: e8 18 a0 c9 da 48 8b 35 25 3a 47 00 49 c7 c0 a0 3b 88 c0 b9 95 05 00 00 48 c7 c2 e0 49 88 c0 48 c7 c7 8d 3b 5d c0 e8 ee 7e db da <0f> 0b 48 89 ef e8 a4 26 f5 da e9 51 fe ff ff e8 8a 26 f5 da e9
      <1>[  125.503548] RIP: i915_retire_requests+0x3f2/0x590 [i915] RSP: ffff88004e5dec40
      
      Fixes: 643b450a ("drm/i915: Only track live rings for retiring")
      Signed-off-by: NChris Wilson <chris@chris-wilson.co.uk>
      Cc: Tvrtko Ursulin <tvrtko.ursulin@linux.intel.com>
      Reviewed-by: NTvrtko Ursulin <tvrtko.ursulin@intel.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20180504101147.26286-1-chris@chris-wilson.co.uk
      43c8c441
    • C
      drm/i915/gtt: Tidy up duplicate branches in gen8_gmch_probe() · c258f91d
      Chris Wilson 提交于
      Following commit f773568b ("drm/i915: nuke the duplicated stolen
      discovery"), the if-else-chain for determining the GTT size is redundant
      with the !chv branches all being the same.
      Reported-by: NVille Syrjälä <ville.syrjala@linux.intel.com>
      References: f773568b ("drm/i915: nuke the duplicated stolen discovery")
      Signed-off-by: NChris Wilson <chris@chris-wilson.co.uk>
      Cc: Matthew Auld <matthew.auld@intel.com>
      Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
      Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
      Reviewed-by: NJoonas Lahtinen <joonas.lahtinen@linux.intel.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20180503212956.3948-1-chris@chris-wilson.co.uk
      c258f91d
    • A
      i915: Convert to use match_string() helper · 47d4cb8a
      Andy Shevchenko 提交于
      The new helper returns index of the matching string in an array.
      We are going to use it here.
      Signed-off-by: NAndy Shevchenko <andriy.shevchenko@linux.intel.com>
      Signed-off-by: NJani Nikula <jani.nikula@intel.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20180503181706.22120-1-andriy.shevchenko@linux.intel.com
      47d4cb8a
    • C
      drm/i915/execlists: Drop preemption arbitrations points along the ring · 74f94741
      Chris Wilson 提交于
      Limit the arbitration (where preemption may occur) to inside the batch,
      and prevent it from happening on the pipecontrols/flushes we use to
      write the breadcrumb seqno. Once the user batch is complete, we have
      nothing left to do but serialise and emit the breadcrumb; switching
      contexts at this point is futile so don't.
      Signed-off-by: NChris Wilson <chris@chris-wilson.co.uk>
      Cc: Michał Winiarski <michal.winiarski@intel.com>
      Cc: Michel Thierry <michel.thierry@intel.com>
      Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
      Reviewed-by: NTvrtko Ursulin <tvrtko.ursulin@intel.com>
      Reviewed-by: NMichel Thierry <michel.thierry@intel.com>
      Reviewed-by: NLionel Landwerlin <lionel.g.landwerlin@intel.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20180503195416.22498-1-chris@chris-wilson.co.uk
      74f94741
    • C
      drm/i915: Keep one request in our ring_list · 7c572e1b
      Chris Wilson 提交于
      Don't pre-emptively retire the oldest request in our ring's list if it
      is the only request. We keep various bits of state alive using the
      active reference from the request and would rather transfer that state
      over to a new request rather than the more involved process of retiring
      and reacquiring it.
      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/20180503195115.22309-2-chris@chris-wilson.co.uk
      7c572e1b
    • C
      drm/i915: Lazily unbind vma on close · 3365e226
      Chris Wilson 提交于
      When userspace is passing around swapbuffers using DRI, we frequently
      have to open and close the same object in the foreign address space.
      This shows itself as the same object being rebound at roughly 30fps
      (with a second object also being rebound at 30fps), which involves us
      having to rewrite the page tables and maintain the drm_mm range manager
      every time.
      
      However, since the object still exists and it is only the local handle
      that disappears, if we are lazy and do not unbind the VMA immediately
      when the local user closes the object but defer it until the GPU is
      idle, then we can reuse the same VMA binding. We still have to be
      careful to mark the handle and lookup tables as closed to maintain the
      uABI, just allowing the underlying VMA to be resurrected if the user is
      able to access the same object from the same context again.
      
      If the object itself is destroyed (neither userspace keeping a handle to
      it), the VMA will be reaped immediately as usual.
      
      In the future, this will be even more useful as instantiating a new VMA
      for use on the GPU will become heavier. A nuisance indeed, so nip it in
      the bud.
      
      v2: s/__i915_vma_final_close/i915_vma_destroy/ etc.
      v3: Leave a hint as to why we deferred the unbind on close.
      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/20180503195115.22309-1-chris@chris-wilson.co.uk
      3365e226
    • C
    • T
      drm/i915/icl: Add configuring MOCS in new Icelake engines · 74ba22ea
      Tomasz Lis 提交于
      In Icelake, there are more engines on which Memory Object Control
      States need to be configured. Besides adding Icelake under Skylake
      config, the patch makes sure MOCS register addresses for the new
      engines are properly defined.
      
      Additional patch might be need later, in case the specification will
      propose different MOCS config values for Icelake than in previous
      gens.
      
      v2: Restricted comments to gen11, updated description, renamed
      defines.
      
      v3: Used proper engine indexes for gen11.
      
      v4: Ensure patch is Icelake only.
      
      v5: Style fixes (proposed by mwajdeczko)
      
      v6 (from Paulo): fix checkpatch's COMMIT_LOG_LONG_LINE (Checkpatch).
      
      BSpec: 19405
      BSpec: 21140
      Cc: Oscar Mateo Lozano <oscar.mateo@intel.com>
      Cc: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
      Reviewed-by: NMichel Thierry <michel.thierry@intel.com>
      Signed-off-by: NTomasz Lis <tomasz.lis@intel.com>
      Signed-off-by: NPaulo Zanoni <paulo.r.zanoni@intel.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20180502223142.3891-1-paulo.r.zanoni@intel.com
      74ba22ea
  7. 03 5月, 2018 3 次提交
    • V
      drm/i915: Correctly populate user mode h/vdisplay with pipe src size during readout · bd4cd03c
      Ville Syrjälä 提交于
      During state readout we first read out the pipe src size, store
      that information in the user mode h/vdisplay, but later on we overwrite
      that with the actual crtc timings. That makes our read out crtc state
      inconsistent with itself when the BIOS has enabled the panel fitter to
      scale the pipe contents. Let's preserve the pipe src size based
      information in the user mode to make things consistent again.
      
      This fixes a problem introduced by commit a2936e3d ("drm/i915:
      Use drm_mode_get_hv_timing() to populate plane clip rectangle")
      where the inconsistent state is now leading the plane clipping code
      to report a failure on account the plane dst coordinates not matching
      the user mode size. Previously we did the plane clipping based on
      the pipe src size instead and thus never noticed the inconsistency.
      
      The failure manifests as a WARN:
      [    0.762117] [drm:intel_dump_pipe_config [i915]] requested mode:
      [    0.762142] [drm:drm_mode_debug_printmodeline [drm]] Modeline 0:"1366x768" 60 72143 1366 1414 1446 1526 768 771 777 784 0x40 0xa
      ...
      [    0.762327] [drm:intel_dump_pipe_config [i915]] port clock: 72143, pipe src size: 1024x768, pixel rate 72143
      ...
      [    0.764666] [drm:drm_atomic_helper_check_plane_state [drm_kms_helper]] Plane must cover entire CRTC
      [    0.764690] [drm:drm_rect_debug_print [drm]] dst: 1024x768+0+0
      [    0.764711] [drm:drm_rect_debug_print [drm]] clip: 1366x768+0+0
      [    0.764713] ------------[ cut here ]------------
      [    0.764714] Could not determine valid watermarks for inherited state
      [    0.764792] WARNING: CPU: 4 PID: 159 at drivers/gpu/drm/i915/intel_display.c:14584 intel_modeset_init+0x3ce/0x19d0 [i915]
      ...
      
      Cc: FadeMind <fademind@gmail.com>
      Cc: Dave Jones <davej@codemonkey.org.uk>
      Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
      Reported-by: NFadeMind <fademind@gmail.com>
      Reported-by: NDave Jones <davej@codemonkey.org.uk>
      Tested-by: NDave Jones <davej@codemonkey.org.uk>
      References: https://lists.freedesktop.org/archives/intel-gfx/2018-April/163186.html
      Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=105992
      Fixes: a2936e3d ("drm/i915: Use drm_mode_get_hv_timing() to populate plane clip rectangle")
      Signed-off-by: NVille Syrjälä <ville.syrjala@linux.intel.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20180426163015.14232-1-ville.syrjala@linux.intel.comReviewed-by: NChris Wilson <chris@chris-wilson.co.uk>
      Tested-by: NLarry Finger <Larry.Finger@lwfinger.net>
      Tested-by: NFadeMind <fademind@gmail.com>
      bd4cd03c
    • T
      drm/i915: Remove redundant check for negative timeout while doing an atomic pipe update · 9ba59b79
      Tarun 提交于
      No functional changes, just a minor knit. Stumbled across the kernel doc for
      schedule_timeout() which quotes "In all cases the return value is guaranteed
      to be non-negative". Also, the return code of schedule_timeout() already checks
      for negative values "return timeout < 0 ? 0 : timeout;" and returns 0
      in such cases. Furthermore, the msec_to_jiffies returns an ungined long
      value. So, let's do away with the redundant check for an atomic
      pipe update.
      
      v2: Commit message changes (Manasi).
      Reviewed-by: NManasi Navare <manasi.d.navare@intel.com>
      Signed-off-by: NTarun Vyas <tarun.vyas@intel.com>
      Signed-off-by: NVille Syrjälä <ville.syrjala@linux.intel.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20180502233300.81220-1-tarun.vyas@intel.com
      9ba59b79
    • R
      drm/i915: Adjust eDP's logical vco in a reliable place. · 3297234a
      Rodrigo Vivi 提交于
      On intel_dp_compute_config() we were calculating the needed vco
      for eDP on gen9 and we stashing it in
      intel_atomic_state.cdclk.logical.vco
      
      However few moments later on intel_modeset_checks() we fully
      replace entire intel_atomic_state.cdclk.logical with
      dev_priv->cdclk.logical fully overwriting the logical desired
      vco for eDP on gen9.
      
      So, with wrong VCO value we end up with wrong desired cdclk, but
      also it will raise a lot of WARNs: On gen9, when we read
      CDCLK_CTL to verify if we configured properly the desired
      frequency the CD Frequency Select bits [27:26] == 10b can mean
      337.5 or 308.57 MHz depending on the VCO. So if we have wrong
      VCO value stashed we will believe the frequency selection didn't
      stick and start to raise WARNs of cdclk mismatch.
      
      [   42.857519] [drm:intel_dump_cdclk_state [i915]] Changing CDCLK to 308571 kHz, VCO 8640000 kHz, ref 24000 kHz, bypass 24000 kHz, voltage level 0
      [   42.897269] cdclk state doesn't match!
      [   42.901052] WARNING: CPU: 5 PID: 1116 at drivers/gpu/drm/i915/intel_cdclk.c:2084 intel_set_cdclk+0x5d/0x110 [i915]
      [   42.938004] RIP: 0010:intel_set_cdclk+0x5d/0x110 [i915]
      [   43.155253] WARNING: CPU: 5 PID: 1116 at drivers/gpu/drm/i915/intel_cdclk.c:2084 intel_set_cdclk+0x5d/0x110 [i915]
      [   43.170277] [drm:intel_dump_cdclk_state [i915]] [hw state] 337500 kHz, VCO 8100000 kHz, ref 24000 kHz, bypass 24000 kHz, voltage level 0
      [   43.182566] [drm:intel_dump_cdclk_state [i915]] [sw state] 308571 kHz, VCO 8640000 kHz, ref 24000 kHz, bypass 24000 kHz, voltage level 0
      
      v2: Move the entire eDP's vco logical adjustment to inside
          the skl_modeset_calc_cdclk as suggested by Ville.
      
      Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
      Signed-off-by: NRodrigo Vivi <rodrigo.vivi@intel.com>
      Reviewed-by: NVille Syrjälä <ville.syrjala@linux.intel.com>
      Fixes: bb0f4aab ("drm/i915: Track full cdclk state for the logical and actual cdclk frequencies")
      Cc: <stable@vger.kernel.org> # v4.12+
      Link: https://patchwork.freedesktop.org/patch/msgid/20180502175255.5344-1-rodrigo.vivi@intel.com
      3297234a