Skip to content
  1. Oct 04, 2019
    • Chris Wilson's avatar
      drm/i915: Merge wait_for_timelines with retire_request · f33a8a51
      Chris Wilson authored
      
      
      wait_for_timelines is essentially the same loop as retiring requests
      (with an extra timeout), so merge the two into one routine.
      
      v2: i915_retire_requests_timeout and keep VT'd w/a as !interruptible
      
      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/20191004134015.13204-10-chris@chris-wilson.co.uk
      f33a8a51
    • Chris Wilson's avatar
      drm/i915: Remove the GEM idle worker · 33d85644
      Chris Wilson authored
      
      
      Nothing inside the idle worker now requires struct_mutex, so we can
      remove the indirection of using our own worker.
      
      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/20191004134015.13204-9-chris@chris-wilson.co.uk
      33d85644
    • Chris Wilson's avatar
      drm/i915: Drop struct_mutex from around i915_retire_requests() · 7e805762
      Chris Wilson authored
      
      
      We don't need to hold struct_mutex now for retiring requests, so drop it
      from i915_retire_requests() and i915_gem_wait_for_idle(), finally
      removing I915_WAIT_LOCKED for good.
      
      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/20191004134015.13204-8-chris@chris-wilson.co.uk
      7e805762
    • Chris Wilson's avatar
      drm/i915: Move idle barrier cleanup into engine-pm · b7234840
      Chris Wilson authored
      
      
      Now that we now longer need to guarantee that the active callback is
      under the struct_mutex, we can lift it out of the i915_gem_park() and
      into the engine parking itself.
      
      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/20191004134015.13204-7-chris@chris-wilson.co.uk
      b7234840
    • Chris Wilson's avatar
      drm/i915: Coordinate i915_active with its own mutex · b1e3177b
      Chris Wilson authored
      
      
      Forgo the struct_mutex serialisation for i915_active, and interpose its
      own mutex handling for active/retire.
      
      This is a multi-layered sleight-of-hand. First, we had to ensure that no
      active/retire callbacks accidentally inverted the mutex ordering rules,
      nor assumed that they were themselves serialised by struct_mutex. More
      challenging though, is the rule over updating elements of the active
      rbtree. Instead of the whole i915_active now being serialised by
      struct_mutex, allocations/rotations of the tree are serialised by the
      i915_active.mutex and individual nodes are serialised by the caller
      using the i915_timeline.mutex (we need to use nested spinlocks to
      interact with the dma_fence callback lists).
      
      The pain point here is that instead of a single mutex around execbuf, we
      now have to take a mutex for active tracker (one for each vma, context,
      etc) and a couple of spinlocks for each fence update. The improvement in
      fine grained locking allowing for multiple concurrent clients
      (eventually!) should be worth it in typical loads.
      
      v2: Add some comments that barely elucidate anything :(
      
      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/20191004134015.13204-6-chris@chris-wilson.co.uk
      b1e3177b
    • Chris Wilson's avatar
      drm/i915: Push the i915_active.retire into a worker · 274cbf20
      Chris Wilson authored
      
      
      As we need to use a mutex to serialise i915_active activation
      (because we want to allow the callback to sleep), we need to push the
      i915_active.retire into a worker callback in case we get need to retire
      from an atomic context.
      
      Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
      Reviewed-by: default avatarMatthew Auld <matthew.auld@intel.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20191004134015.13204-5-chris@chris-wilson.co.uk
      274cbf20
    • Chris Wilson's avatar
      drm/i915: Pull i915_vma_pin under the vm->mutex · 2850748e
      Chris Wilson authored
      
      
      Replace the struct_mutex requirement for pinning the i915_vma with the
      local vm->mutex instead. Note that the vm->mutex is tainted by the
      shrinker (we require unbinding from inside fs-reclaim) and so we cannot
      allocate while holding that mutex. Instead we have to preallocate
      workers to do allocate and apply the PTE updates after we have we
      reserved their slot in the drm_mm (using fences to order the PTE writes
      with the GPU work and with later unbind).
      
      In adding the asynchronous vma binding, one subtle requirement is to
      avoid coupling the binding fence into the backing object->resv. That is
      the asynchronous binding only applies to the vma timeline itself and not
      to the pages as that is a more global timeline (the binding of one vma
      does not need to be ordered with another vma, nor does the implicit GEM
      fencing depend on a vma, only on writes to the backing store). Keeping
      the vma binding distinct from the backing store timelines is verified by
      a number of async gem_exec_fence and gem_exec_schedule tests. The way we
      do this is quite simple, we keep the fence for the vma binding separate
      and only wait on it as required, and never add it to the obj->resv
      itself.
      
      Another consequence in reducing the locking around the vma is the
      destruction of the vma is no longer globally serialised by struct_mutex.
      A natural solution would be to add a kref to i915_vma, but that requires
      decoupling the reference cycles, possibly by introducing a new
      i915_mm_pages object that is own by both obj->mm and vma->pages.
      However, we have not taken that route due to the overshadowing lmem/ttm
      discussions, and instead play a series of complicated games with
      trylocks to (hopefully) ensure that only one destruction path is called!
      
      v2: Add some commentary, and some helpers to reduce patch churn.
      
      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/20191004134015.13204-4-chris@chris-wilson.co.uk
      2850748e
    • Chris Wilson's avatar
      drm/i915: Mark up address spaces that may need to allocate · 11331125
      Chris Wilson authored
      
      
      Since we cannot allocate underneath the vm->mutex (it is used in the
      direct-reclaim paths), we need to shift the allocations off into a
      mutexless worker with fence recursion prevention. To know when we need
      this protection, we mark up the address spaces that do allocate before
      insertion. In the future, we may wish to extend the async bind scheme to
      more than just allocations.
      
      v2: s/vm->bind_alloc/vm->bind_async_flags/
      
      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/20191004134015.13204-3-chris@chris-wilson.co.uk
      11331125
    • Chris Wilson's avatar
      drm/i915: Only track bound elements of the GTT · 5e053450
      Chris Wilson authored
      
      
      The premise here is to simply avoiding having to acquire the vm->mutex
      inside vma create/destroy to update the vm->unbound_lists, to avoid some
      nasty lock recursions later.
      
      Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
      Reviewed-by: default avatarMatthew Auld <matthew.auld@intel.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20191004134015.13204-2-chris@chris-wilson.co.uk
      5e053450
    • Chris Wilson's avatar
      drm/i915: Use helpers for drm_mm_node booleans · b290a78b
      Chris Wilson authored
      A subset of 71724f70 ("drm/mm: Use helpers for drm_mm_node booleans")
      in order to prepare drm-intel-next-queued for subsequent patches before
      we can backmerge 71724f70
      
       itself.
      
      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/20191004142226.13711-1-chris@chris-wilson.co.uk
      b290a78b
    • Chris Wilson's avatar
      drm/i915: Restrict L3 remapping sysfs interface to dwords · 261ea7e2
      Chris Wilson authored
      
      
      The L3 cache remapping is stored as u32 elements, and we should ensure
      that the user only supplies complete slice information(u32).
      
      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/20191004105958.1741-1-chris@chris-wilson.co.uk
      261ea7e2
    • Kai Vehmanen's avatar
      drm/i915: extend audio CDCLK>=2*BCLK constraint to more platforms · f6ec9483
      Kai Vehmanen authored
      
      
      The CDCLK>=2*BCLK constraint applies to all generations since gen10.
      Extend the constraint logic in audio get/put_power().
      
      Signed-off-by: default avatarKai Vehmanen <kai.vehmanen@linux.intel.com>
      Signed-off-by: default avatarJani Nikula <jani.nikula@intel.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20191003085531.30990-2-kai.vehmanen@linux.intel.com
      f6ec9483
    • Kai Vehmanen's avatar
      drm/i915: Fix audio power up sequence for gen10+ display · 1580d3cd
      Kai Vehmanen authored
      
      
      On platfroms with gen10+ display, driver must set the enable bit of
      AUDIO_PIN_BUF_CTL register before transactions with the HDA controller
      can proceed. Add setting this bit to the audio power up sequence.
      
      Failing to do this resulted in errors during display audio codec probe,
      and failures during resume from suspend.
      
      Note: We may also need to disable the bit afterwards, but there are
      still unresolved issues with that.
      
      Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=111214
      Signed-off-by: default avatarKai Vehmanen <kai.vehmanen@linux.intel.com>
      Signed-off-by: default avatarJani Nikula <jani.nikula@intel.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20191003085531.30990-1-kai.vehmanen@linux.intel.com
      1580d3cd
    • Jani Nikula's avatar
      drm/i915/dp: remove static variable for aux last status · 81cdeca4
      Jani Nikula authored
      
      
      Add aux_busy_last_status to intel_dp. Don't bother with initializing to
      all ones; the only difference is potentially missing logging for one
      error case if the readout is all zeros.
      
      Reviewed-by: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
      Signed-off-by: default avatarJani Nikula <jani.nikula@intel.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20191002144138.7917-1-jani.nikula@intel.com
      81cdeca4
    • Chris Wilson's avatar
      drm/i915/execlists: Skip redundant resubmission · 44d0a9c0
      Chris Wilson authored
      
      
      If we unwind the active requests, and on resubmission discover that we
      intend to preempt the active contexts with themselves, simply skip the
      ELSP submission.
      
      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/20191003210100.22250-1-chris@chris-wilson.co.uk
      44d0a9c0
    • Imre Deak's avatar
      drm/i915/tgl: Add the Thunderbolt PLL divider values · 3032c0b4
      Imre Deak authored
      
      
      The Thunderbolt PLL divider values on TGL differ from the ICL ones,
      update the PLL parameter calculation function accordingly.
      
      Bspec: 49204
      
      v2:
      - Remove unused refclk config. (José)
      
      Cc: Jose Souza <jose.souza@intel.com>
      Cc: Clinton A Taylor <clinton.a.taylor@intel.com>
      Cc: Lucas De Marchi <lucas.demarchi@intel.com>
      Cc: Mika Westerberg <mika.westerberg@intel.com>
      Tested-by: default avatarMika Westerberg <mika.westerberg@intel.com>
      Signed-off-by: default avatarImre Deak <imre.deak@intel.com>
      Reviewed-by: default avatarJose Souza <jose.souza@intel.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20191002204108.32242-1-imre.deak@intel.com
      3032c0b4
  2. Oct 03, 2019
  3. Oct 02, 2019
    • Ville Syrjälä's avatar
      drm/i915: Clean up encoder->crtc_mask setup · 0fbae9d2
      Ville Syrjälä authored
      
      
      Use BIT(pipe) for better legibility when populating the crtc_mask
      for encoders.
      
      Also remove the redundant possible_crtcs setup for the TV encoder.
      
      Reviewed-by: default avatarJani Nikula <jani.nikula@intel.com>
      Signed-off-by: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20190708162048.4286-11-ville.syrjala@linux.intel.com
      0fbae9d2
    • Ville Syrjälä's avatar
      drm/i915: Populate possible_crtcs correctly · ed500bf6
      Ville Syrjälä authored
      
      
      Don't advertize non-exisiting crtcs in the encoder possible_crtcs
      bitmask.
      
      Reviewed-by: default avatarDhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>
      Signed-off-by: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20190708162048.4286-9-ville.syrjala@linux.intel.com
      ed500bf6
    • Chris Wilson's avatar
      drm/i915/gem: Refactor tests on obj->ops->flags · 3cbad5d7
      Chris Wilson authored
      
      
      We repeat obj->ops->flags in our object checks, so pull that into its
      own little helper for clarity.
      
      Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
      Cc: Matthew Auld <matthew.auld@intel.com>
      Reviewed-by: default avatarMatthew Auld <matthew.auld@intel.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20191002123014.1545-1-chris@chris-wilson.co.uk
      3cbad5d7
    • Chris Wilson's avatar
      drm/i915/selftests: Extract random_offset() for use with a prng · dfe324f3
      Chris Wilson authored
      
      
      For selftests, we desire repeatability and so prefer using a prng with
      known seed over true randomness. Extract random_offset() as a selftest
      utility that can take the prng state.
      
      Suggested-by: default avatarMatthew Auld <matthew.auld@intel.com>
      Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
      Cc: Matthew Auld <matthew.auld@intel.com>
      Reviewed-by: default avatarMatthew Auld <matthew.auld@intel.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20191002122430.23205-1-chris@chris-wilson.co.uk
      dfe324f3
    • Ville Syrjälä's avatar
      drm/i915: Fix g4x sprite scaling stride check with GTT remapping · 006e5701
      Ville Syrjälä authored
      I forgot to update the g4x sprite scaling stride check when GTT
      remapping was introduced. The stride of the original framebuffer
      is irrelevant when remapping is used and instead we want to check
      the stride of the remapped view.
      
      Also drop the duplicate width_bytes check. We already check that
      a few lines earlier.
      
      Fixes: df79cf44
      
       ("drm/i915: Store the final plane stride in plane_state")
      Signed-off-by: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20190930183045.662-1-ville.syrjala@linux.intel.com
      Reviewed-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
      006e5701
    • Ville Syrjälä's avatar
      drm/i915: Polish intel_tv_mode_valid() · 15de0889
      Ville Syrjälä authored
      
      
      Drop the tv_mode NULL check since intel_tv_mode_find() never
      actually returns NULL, and flip the condition around so that
      the MODE_OK case is at the end, which is customary to all
      the other .mode_valid() implementations.
      
      Signed-off-by: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20191001154629.11063-2-ville.syrjala@linux.intel.com
      Reviewed-by: default avatarJosé Roberto de Souza <jose.souza@intel.com>
      15de0889
    • Ville Syrjälä's avatar
      drm/i915: Limit MST modes based on plane size too · 74f1d789
      Ville Syrjälä authored
      When adding the max plane size checks to the .mode_valid() hooks
      I naturally forgot about MST. Take care of that one as well.
      
      Cc: Manasi Navare <manasi.d.navare@intel.com>
      Cc: Sean Paul <sean@poorly.run>
      Cc: José Roberto de Souza <jose.souza@intel.com>
      Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
      Fixes: 2d20411e
      
       ("drm/i915: Don't advertise modes that exceed the max plane size")
      Signed-off-by: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20191001154629.11063-1-ville.syrjala@linux.intel.com
      Reviewed-by: default avatarJosé Roberto de Souza <jose.souza@intel.com>
      74f1d789
    • Jani Nikula's avatar
      drm/i915/display: abstract all vgaarb access to intel_vga.[ch] · 4fb87831
      Jani Nikula authored
      
      
      Split out the code related to vga client and vgaarb all over the place
      into new intel_vga.[ch]. No functional changes.
      
      Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
      Cc: Chris Wilson <chris@chris-wilson.co.uk>
      Reviewed-by: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
      Signed-off-by: default avatarJani Nikula <jani.nikula@intel.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20191001152506.7854-1-jani.nikula@intel.com
      4fb87831
    • Chris Wilson's avatar
      drm/i915/userptr: Never allow userptr into the mappable GGTT · a4311745
      Chris Wilson authored
      
      
      Daniel Vetter uncovered a nasty cycle in using the mmu-notifiers to
      invalidate userptr objects which also happen to be pulled into GGTT
      mmaps. That is when we unbind the userptr object (on mmu invalidation),
      we revoke all CPU mmaps, which may then recurse into mmu invalidation.
      
      We looked for ways of breaking the cycle, but the revocation on
      invalidation is required and cannot be avoided. The only solution we
      could see was to not allow such GGTT bindings of userptr objects in the
      first place. In practice, no one really wants to use a GGTT mmapping of
      a CPU pointer...
      
      Just before Daniel's explosive lockdep patches land in v5.4-rc1, we got
      a genuine blip from CI:
      
      <4>[  246.793958] ======================================================
      <4>[  246.793972] WARNING: possible circular locking dependency detected
      <4>[  246.793989] 5.3.0-gbd6c56f50d15-drmtip_372+ #1 Tainted: G     U
      <4>[  246.794003] ------------------------------------------------------
      <4>[  246.794017] kswapd0/145 is trying to acquire lock:
      <4>[  246.794030] 000000003f565be6 (&dev->struct_mutex/1){+.+.}, at: userptr_mn_invalidate_range_start+0x18f/0x220 [i915]
      <4>[  246.794250]
                        but task is already holding lock:
      <4>[  246.794263] 000000001799cef9 (&anon_vma->rwsem){++++}, at: page_lock_anon_vma_read+0xe6/0x2a0
      <4>[  246.794291]
                        which lock already depends on the new lock.
      
      <4>[  246.794307]
                        the existing dependency chain (in reverse order) is:
      <4>[  246.794322]
                        -> #3 (&anon_vma->rwsem){++++}:
      <4>[  246.794344]        down_write+0x33/0x70
      <4>[  246.794357]        __vma_adjust+0x3d9/0x7b0
      <4>[  246.794370]        __split_vma+0x16a/0x180
      <4>[  246.794385]        mprotect_fixup+0x2a5/0x320
      <4>[  246.794399]        do_mprotect_pkey+0x208/0x2e0
      <4>[  246.794413]        __x64_sys_mprotect+0x16/0x20
      <4>[  246.794429]        do_syscall_64+0x55/0x1c0
      <4>[  246.794443]        entry_SYSCALL_64_after_hwframe+0x49/0xbe
      <4>[  246.794456]
                        -> #2 (&mapping->i_mmap_rwsem){++++}:
      <4>[  246.794478]        down_write+0x33/0x70
      <4>[  246.794493]        unmap_mapping_pages+0x48/0x130
      <4>[  246.794519]        i915_vma_revoke_mmap+0x81/0x1b0 [i915]
      <4>[  246.794519]        i915_vma_unbind+0x11d/0x4a0 [i915]
      <4>[  246.794519]        i915_vma_destroy+0x31/0x300 [i915]
      <4>[  246.794519]        __i915_gem_free_objects+0xb8/0x4b0 [i915]
      <4>[  246.794519]        drm_file_free.part.0+0x1e6/0x290
      <4>[  246.794519]        drm_release+0xa6/0xe0
      <4>[  246.794519]        __fput+0xc2/0x250
      <4>[  246.794519]        task_work_run+0x82/0xb0
      <4>[  246.794519]        do_exit+0x35b/0xdb0
      <4>[  246.794519]        do_group_exit+0x34/0xb0
      <4>[  246.794519]        __x64_sys_exit_group+0xf/0x10
      <4>[  246.794519]        do_syscall_64+0x55/0x1c0
      <4>[  246.794519]        entry_SYSCALL_64_after_hwframe+0x49/0xbe
      <4>[  246.794519]
                        -> #1 (&vm->mutex){+.+.}:
      <4>[  246.794519]        i915_gem_shrinker_taints_mutex+0x6d/0xe0 [i915]
      <4>[  246.794519]        i915_address_space_init+0x9f/0x160 [i915]
      <4>[  246.794519]        i915_ggtt_init_hw+0x55/0x170 [i915]
      <4>[  246.794519]        i915_driver_probe+0xc9f/0x1620 [i915]
      <4>[  246.794519]        i915_pci_probe+0x43/0x1b0 [i915]
      <4>[  246.794519]        pci_device_probe+0x9e/0x120
      <4>[  246.794519]        really_probe+0xea/0x3d0
      <4>[  246.794519]        driver_probe_device+0x10b/0x120
      <4>[  246.794519]        device_driver_attach+0x4a/0x50
      <4>[  246.794519]        __driver_attach+0x97/0x130
      <4>[  246.794519]        bus_for_each_dev+0x74/0xc0
      <4>[  246.794519]        bus_add_driver+0x13f/0x210
      <4>[  246.794519]        driver_register+0x56/0xe0
      <4>[  246.794519]        do_one_initcall+0x58/0x300
      <4>[  246.794519]        do_init_module+0x56/0x1f6
      <4>[  246.794519]        load_module+0x25bd/0x2a40
      <4>[  246.794519]        __se_sys_finit_module+0xd3/0xf0
      <4>[  246.794519]        do_syscall_64+0x55/0x1c0
      <4>[  246.794519]        entry_SYSCALL_64_after_hwframe+0x49/0xbe
      <4>[  246.794519]
                        -> #0 (&dev->struct_mutex/1){+.+.}:
      <4>[  246.794519]        __lock_acquire+0x15d8/0x1e90
      <4>[  246.794519]        lock_acquire+0xa6/0x1c0
      <4>[  246.794519]        __mutex_lock+0x9d/0x9b0
      <4>[  246.794519]        userptr_mn_invalidate_range_start+0x18f/0x220 [i915]
      <4>[  246.794519]        __mmu_notifier_invalidate_range_start+0x85/0x110
      <4>[  246.794519]        try_to_unmap_one+0x76b/0x860
      <4>[  246.794519]        rmap_walk_anon+0x104/0x280
      <4>[  246.794519]        try_to_unmap+0xc0/0xf0
      <4>[  246.794519]        shrink_page_list+0x561/0xc10
      <4>[  246.794519]        shrink_inactive_list+0x220/0x440
      <4>[  246.794519]        shrink_node_memcg+0x36e/0x740
      <4>[  246.794519]        shrink_node+0xcb/0x490
      <4>[  246.794519]        balance_pgdat+0x241/0x580
      <4>[  246.794519]        kswapd+0x16c/0x530
      <4>[  246.794519]        kthread+0x119/0x130
      <4>[  246.794519]        ret_from_fork+0x24/0x50
      <4>[  246.794519]
                        other info that might help us debug this:
      
      <4>[  246.794519] Chain exists of:
                          &dev->struct_mutex/1 --> &mapping->i_mmap_rwsem --> &anon_vma->rwsem
      
      <4>[  246.794519]  Possible unsafe locking scenario:
      
      <4>[  246.794519]        CPU0                    CPU1
      <4>[  246.794519]        ----                    ----
      <4>[  246.794519]   lock(&anon_vma->rwsem);
      <4>[  246.794519]                                lock(&mapping->i_mmap_rwsem);
      <4>[  246.794519]                                lock(&anon_vma->rwsem);
      <4>[  246.794519]   lock(&dev->struct_mutex/1);
      <4>[  246.794519]
                         *** DEADLOCK ***
      
      v2: Say no to mmap_ioctl
      
      Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=111744
      Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=111870
      Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
      Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
      Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
      Cc: stable@vger.kernel.org
      Reviewed-by: default avatarTvrtko Ursulin <tvrtko.ursulin@intel.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20190928082546.3473-1-chris@chris-wilson.co.uk
      a4311745
  4. Oct 01, 2019
    • Srinivasan S's avatar
      drm/i915/dp: Fix DP MST error after unplugging TypeC cable · 99785b86
      Srinivasan S authored
      
      
      This patch avoids DP MST payload error message in dmesg, as it is trying
      to update the payload to the disconnected DP MST device. After DP MST
      device is disconnected we should not be updating the payload and
      hence remove the error.
      
      v2: Removed the connector status check and converted from error to debug.
      
      Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=111632
      Signed-off-by: default avatarSrinivasan S <srinivasan.s@intel.com>
      Signed-off-by: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/1569371742-109402-1-git-send-email-srinivasan.s@intel.com
      99785b86
    • Chris Wilson's avatar
      drm/i915: Initialise breadcrumb lists on the virtual engine · f8db4d05
      Chris Wilson authored
      With deferring the breadcrumb signalling to the virtual engine (thanks
      preempt-to-busy) we need to make sure the lists and irq-worker are ready
      to send a signal.
      
      [41958.710544] BUG: kernel NULL pointer dereference, address: 0000000000000000
      [41958.710553] #PF: supervisor write access in kernel mode
      [41958.710556] #PF: error_code(0x0002) - not-present page
      [41958.710558] PGD 0 P4D 0
      [41958.710562] Oops: 0002 [#1] SMP
      [41958.710565] CPU: 0 PID: 0 Comm: swapper/0 Tainted: G     U            5.3.0+ #207
      [41958.710568] Hardware name: Intel Corporation NUC7i5BNK/NUC7i5BNB, BIOS BNKBL357.86A.0052.2017.0918.1346 09/18/2017
      [41958.710602] RIP: 0010:i915_request_enable_breadcrumb+0xe1/0x130 [i915]
      [41958.710605] Code: 8b 44 24 30 48 89 41 08 48 89 08 48 8b 85 98 01 00 00 48 8d 8d 90 01 00 00 48 89 95 98 01 00 00 49 89 4c 24 28 49 89 44 24 30 <48> 89 10 f0 80 4b 30 10 c6 85 88 01 00 00 00 e9 1a ff ff ff 48 83
      [41958.710609] RSP: 0018:ffffc90000003de0 EFLAGS: 00010046
      [41958.710612] RAX: 0000000000000000 RBX: ffff888735424480 RCX: ffff8887cddb2190
      [41958.710614] RDX: ffff8887cddb3570 RSI: ffff888850362190 RDI: ffff8887cddb2188
      [41958.710617] RBP: ffff8887cddb2000 R08: ffff8888503624a8 R09: 0000000000000100
      [41958.710619] R10: 0000000000000001 R11: 0000000000000000 R12: ffff8887cddb3548
      [41958.710622] R13: 0000000000000000 R14: 0000000000000046 R15: ffff888850362070
      [41958.710625] FS:  0000000000000000(0000) GS:ffff88885ea00000(0000) knlGS:0000000000000000
      [41958.710628] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      [41958.710630] CR2: 0000000000000000 CR3: 0000000002c09002 CR4: 00000000001606f0
      [41958.710633] Call Trace:
      [41958.710636]  <IRQ>
      [41958.710668]  __i915_request_submit+0x12b/0x160 [i915]
      [41958.710693]  virtual_submit_request+0x67/0x120 [i915]
      [41958.710720]  __unwind_incomplete_requests+0x131/0x170 [i915]
      [41958.710744]  execlists_dequeue+0xb40/0xe00 [i915]
      [41958.710771]  execlists_submission_tasklet+0x10f/0x150 [i915]
      [41958.710776]  tasklet_action_common.isra.17+0x41/0xa0
      [41958.710781]  __do_softirq+0xc8/0x221
      [41958.710785]  irq_exit+0xa6/0xb0
      [41958.710788]  smp_apic_timer_interrupt+0x4d/0x80
      [41958.710791]  apic_timer_interrupt+0xf/0x20
      [41958.710794]  </IRQ>
      
      Fixes: cb2377a9
      
       ("drm/i915: Fixup preempt-to-busy vs reset of a virtual request")
      Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
      Cc: Mika Kuoppala <mika.kuoppala@linux.intel.com>
      Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
      Reviewed-by: default avatarTvrtko Ursulin <tvrtko.ursulin@intel.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20191001103518.9113-1-chris@chris-wilson.co.uk
      f8db4d05
    • Chris Wilson's avatar
      drm/i915/gt: Only unwedge if we can reset first · 1d6f1d16
      Chris Wilson authored
      
      
      Unwedging the GPU requires a successful GPU reset before we restore the
      default submission, or else we may see residual context switch events
      that we were not expecting.
      
      v2: Pull in the special-case reset_clobbers_display, and explain why it
      should be safe in the context of unwedging.
      
      v3: Just forget all about resets before unwedging if it will clobber the
      display; risk it all.
      
      Reported-by: default avatarJanusz Krzysztofik <janusz.krzysztofik@linux.intel.com>
      Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
      Cc: Janusz Krzysztofik <janusz.krzysztofik@linux.intel.com>
      Cc: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
      Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
      Reviewed-by: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com> #v1
      Link: https://patchwork.freedesktop.org/patch/msgid/20190927160335.10622-1-chris@chris-wilson.co.uk
      1d6f1d16
    • Chris Wilson's avatar
      drm/i915/selftests: Exercise context switching in parallel · 50d16d44
      Chris Wilson authored
      
      
      We currently test context switching on each engine as a basic stress
      test (just verifying that nothing explodes if we execute 2 requests from
      different contexts sequentially). What we have not tested is what
      happens if we try and do so on all available engines simultaneously,
      putting our SW and the HW under the maximal stress.
      
      v2: Clone the set of engines from the first context into the secondary
      contexts.
      
      Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
      Cc: Mika Kuoppala <mika.kuoppala@linux.intel.com>
      Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
      Reviewed-by: default avatarTvrtko Ursulin <tvrtko.ursulin@intel.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20190930144919.27992-1-chris@chris-wilson.co.uk
      50d16d44
  5. Sep 28, 2019