Skip to content
  1. Oct 16, 2021
  2. Oct 15, 2021
    • Andi Shyti's avatar
      drm/i915/gt: move remaining debugfs interfaces into gt · 82a149a6
      Andi Shyti authored
      
      
      The following interfaces:
      
        i915_wedged
        i915_forcewake_user
      
      are dependent on gt values. Put them inside gt/ and drop the
      "i915_" prefix name. This would be the new structure:
      
        dri/0/gt
        |
        +-- forcewake_user
        |
        \-- reset
      
      For backwards compatibility with existing igt (and the slight
      semantic difference between operating on the i915 abi entry
      points and the deep gt info):
      
        dri/0
        |
        +-- i915_wedged
        |
        \-- i915_forcewake_user
      
      remain at the top level.
      
      Signed-off-by: default avatarAndi Shyti <andi.shyti@linux.intel.com>
      Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
      Cc: Chris Wilson <chris@chris-wilson.co.uk>
      Reviewed-by: default avatarLucas De Marchi <lucas.demarchi@intel.com>
      Signed-off-by: default avatarLucas De Marchi <lucas.demarchi@intel.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20211012221738.16029-1-andi@etezian.org
      82a149a6
    • Hugh Dickins's avatar
      drm/i915: fix blank screen booting crashes · b0179f0d
      Hugh Dickins authored
      5.15-rc1 crashes with blank screen when booting up on two ThinkPads
      using i915.  Bisections converge convincingly, but arrive at different
      and surprising "culprits", none of them the actual culprit.
      
      netconsole (with init_netconsole() hacked to call i915_init() when
      logging has started, instead of by module_init()) tells the story:
      
      kernel BUG at drivers/gpu/drm/i915/i915_sw_fence.c:245!
      with RSI: ffffffff814d408b pointing to sw_fence_dummy_notify().
      I've been building with CONFIG_CC_OPTIMIZE_FOR_SIZE=y, and that
      function needs to be 4-byte aligned.
      
      v2:
       (Jani Nikula)
        - Change BUG_ON to WARN_ON
      v3:
       (Jani / Tvrtko)
        - Short circuit __i915_sw_fence_init on WARN_ON
      v4:
       (Lucas)
        - Break WARN_ON changes out in a different patch
      
      Fixes: 62eaf0ae
      
       ("drm/i915/guc: Support request cancellation")
      Signed-off-by: default avatarHugh Dickins <hughd@google.com>
      Signed-off-by: default avatarMatthew Brost <matthew.brost@intel.com>
      Reviewed-by: default avatarMatthew Brost <matthew.brost@intel.com>
      Signed-off-by: default avatarJohn Harrison <John.C.Harrison@Intel.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20210922015039.26411-1-matthew.brost@intel.com
      b0179f0d
  3. Oct 13, 2021
    • Matt Roper's avatar
      drm/i915: Stop using I915_TILING_* in client blit selftest · c46f4405
      Matt Roper authored
      
      
      The I915_TILING_* definitions in the uapi header are intended solely for
      tiling modes that are visible to the old de-tiling fence ioctls.  Since
      modern hardware does not support de-tiling fences, we should not add new
      definitions for new tiling types going forward.  However we do want the
      client blit selftest to eventually cover other new tiling modes (such as
      Tile4), so switch it to using its own enum of tiling modes.
      
      Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
      Cc: Stanislav Lisovskiy <stanislav.lisovskiy@intel.com>
      Signed-off-by: default avatarMatt Roper <matthew.d.roper@intel.com>
      Reviewed-by: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20211001005816.73330-1-matthew.d.roper@intel.com
      c46f4405
  4. Oct 12, 2021
  5. Oct 08, 2021
    • Lucas De Marchi's avatar
      drm/i915: remove IS_ACTIVE · 1a839e01
      Lucas De Marchi authored
      When trying to bring IS_ACTIVE to linux/kconfig.h I thought it wouldn't
      provide much value just encapsulating it in a boolean context. So I also
      added the support for handling undefined macros as the IS_ENABLED()
      counterpart. However the feedback received from Masahiro Yamada was that
      it is too ugly, not providing much value. And just wrapping in a boolean
      context is too dumb - we could simply open code it.
      
      As detailed in commit babaab2f
      
       ("drm/i915: Encapsulate kconfig
      constant values inside boolean predicates"), the IS_ACTIVE macro was
      added to workaround a compilation warning. However after checking again
      our current uses of IS_ACTIVE it turned out there is only
      1 case in which it triggers a warning in clang (due
      -Wconstant-logical-operand) and 2 in smatch. All the others
      can simply use the shorter version, without wrapping it in any macro.
      
      So here I'm dialing all the way back to simply removing the macro. That
      single case hit by clang can be changed to make the constant come first,
      so it doesn't think it's mask:
      
      	-       if (context && CONFIG_DRM_I915_FENCE_TIMEOUT)
      	+       if (CONFIG_DRM_I915_FENCE_TIMEOUT && context)
      
      As talked with Dan Carpenter, that logic will be added in smatch as
      well, so it will also stop warning about it.
      
      Signed-off-by: default avatarLucas De Marchi <lucas.demarchi@intel.com>
      Reviewed-by: default avatarJani Nikula <jani.nikula@intel.com>
      Reviewed-by: default avatarMasahiro Yamada <masahiroy@kernel.org>
      Link: https://patchwork.freedesktop.org/patch/msgid/20211005171728.3147094-1-lucas.demarchi@intel.com
      1a839e01
  6. Oct 06, 2021
    • Tvrtko Ursulin's avatar
      drm/i915: Handle Intel igfx + Intel dgfx hybrid graphics setup · 07f82a47
      Tvrtko Ursulin authored
      
      
      In short this makes i915 work for hybrid setups (DRI_PRIME=1 with Mesa)
      when rendering is done on Intel dgfx and scanout/composition on Intel
      igfx.
      
      Before this patch the driver was not quite ready for that setup, mainly
      because it was able to emit a semaphore wait between the two GPUs, which
      results in deadlocks because semaphore target location in HWSP is neither
      shared between the two, nor mapped in both GGTT spaces.
      
      To fix it the patch adds an additional check to a couple of relevant code
      paths in order to prevent using semaphores for inter-engine
      synchronisation when relevant objects are not in the same GGTT space.
      
      v2:
       * Avoid adding rq->i915. (Chris)
      
      v3:
       * Use GGTT which describes the limit more precisely.
      
      Signed-off-by: default avatarTvrtko Ursulin <tvrtko.ursulin@intel.com>
      Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
      Cc: Matthew Auld <matthew.auld@intel.com>
      Cc: Thomas Hellström <thomas.hellstrom@linux.intel.com>
      Reviewed-by: default avatarThomas Hellström <thomas.hellstrom@linux.intel.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20211005113135.768295-1-tvrtko.ursulin@linux.intel.com
      07f82a47
  7. Oct 05, 2021
  8. Oct 02, 2021
  9. Oct 01, 2021
    • Thomas Hellström's avatar
      drm/i915/ttm: Rework object initialization slightly · 068396bb
      Thomas Hellström authored
      We may end up in i915_ttm_bo_destroy() in an error path before the
      object is fully initialized. In that case it's not correct to call
      __i915_gem_free_object(), because that function
      a) Assumes the gem object refcount is 0, which it isn't.
      b) frees the placements which are owned by the caller until the
      init_object() region ops returns successfully. Fix this by providing
      a lightweight cleanup function __i915_gem_object_fini() which is also
      called by __i915_gem_free_object().
      
      While doing this, also make sure we call dma_resv_fini() as part of
      ordinary object destruction and not from the RCU callback that frees
      the object. This will help track down bugs where the object is incorrectly
      locked from an RCU lookup.
      
      Finally, make sure the object isn't put on the region list until it's
      either locked or fully initialized in order to block list processing of
      partially initialized objects.
      
      v2:
      - The TTM object backend memory was freed before the gem pages were
        put. Separate this functionality into __i915_gem_object_pages_fini()
        and call it from the TTM delete_mem_notify() callback.
      v3:
      - Include i915_gem_object_free_mmaps() in __i915_gem_object_pages_fini()
        to make sure we don't inadvertedly introduce a race.
      
      Fixes: 48b09612
      
       ("drm/i915: Move __i915_gem_free_object to ttm_bo_destroy")
      Signed-off-by: default avatarThomas Hellström <thomas.hellstrom@linux.intel.com>
      Reviewed-by: Matthew Auld <matthew.auld@intel.com> #v1
      Link: https://patchwork.freedesktop.org/patch/msgid/20210930113236.583531-1-thomas.hellstrom@linux.intel.com
      068396bb
  10. Sep 30, 2021
  11. Sep 29, 2021
  12. Sep 27, 2021
  13. Sep 25, 2021
    • Janusz Krzysztofik's avatar
      drm/i915: Flush buffer pools on driver remove · 74af1e2c
      Janusz Krzysztofik authored
      
      
      We currently do an explicit flush of the buffer pools within the call path
      of drm_driver.release(); this removes all buffers, regardless of their age,
      freeing the buffers' associated resources (objects, address space areas).
      However there is other code that runs within the drm_driver.release() call
      chain that expects objects and their associated address space areas have
      already been flushed.
      
      Since buffer pools auto-flush old buffers once per second in a worker
      thread, there's a small window where if we remove the driver while there
      are still objects in buffers with an age of less than one second, the
      assumptions of the other release code may be violated.
      
      By moving the flush to driver remove (which executes earlier via the
      pci_driver.remove() flow) we're ensuring that all buffers are flushed and
      their associated objects freed before some other code in
      pci_driver.remove() flushes those objects so they are released before
      _any_ code in drm_driver.release() that check completness of those
      flushes executes.
      
      v2: Reword commit description as suggested by Matt.
      
      Signed-off-by: default avatarJanusz Krzysztofik <janusz.krzysztofik@linux.intel.com>
      Cc: Chris Wilson <chris@chris-wilson.co.uk>
      Cc: Matt Roper <matthew.d.roper@intel.com>
      Signed-off-by: default avatarMatt Roper <matthew.d.roper@intel.com>
      Reviewed-by: default avatarMatt Roper <matthew.d.roper@intel.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20210924163825.634606-1-janusz.krzysztofik@linux.intel.com
      74af1e2c