Skip to content
Permalink
Jason-Ekstrand…
Switch branches/tags

Commits on Jun 16, 2021

  1. HACK: Always finalize contexts

    Only for verifying the previous patch with I-G-T.  DO NOT MERGE!
    jekstrand authored and intel-lab-lkp committed Jun 16, 2021
  2. drm/i915: Finalize contexts in GEM_CONTEXT_CREATE on version 13+

    All the proto-context stuff for context creation exists to allow older
    userspace drivers to set VMs and engine sets via SET_CONTEXT_PARAM.
    Drivers need to update to use CONTEXT_CREATE_EXT_* for this going
    forward.  Force the issue by blocking the old mechanism on any future
    hardware generations.
    
    Signed-off-by: Jason Ekstrand <jason@jlekstrand.net>
    Cc: Jon Bloomfield <jon.bloomfield@intel.com>
    Cc: Carl Zhang <carl.zhang@intel.com>
    Cc: Michal Mrozek <michal.mrozek@intel.com>
    jekstrand authored and intel-lab-lkp committed Jun 16, 2021
  3. drm/i915/gem: Roll all of context creation together

    Now that we have the whole engine set and VM at context creation time,
    we can just assign those fields instead of creating first and handling
    the VM and engines later.  This lets us avoid creating useless VMs and
    engine sets and lets us get rid of the complex VM setting code.
    
    Signed-off-by: Jason Ekstrand <jason@jlekstrand.net>
    Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
    jekstrand authored and intel-lab-lkp committed Jun 16, 2021
  4. i915/gem/selftests: Assign the VM at context creation in igt_shared_c…

    …tx_exec
    
    We want to delete __assign_ppgtt and, generally, stop setting the VM
    after context creation.  This is the one place I could find in the
    selftests where we set a VM after the fact.
    
    Signed-off-by: Jason Ekstrand <jason@jlekstrand.net>
    Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
    jekstrand authored and intel-lab-lkp committed Jun 16, 2021
  5. drm/i915/selftests: Take a VM in kernel_context()

    This better models where we want to go with contexts in general where
    things like the VM and engine set are create parameters instead of being
    set after the fact.
    
    Signed-off-by: Jason Ekstrand <jason@jlekstrand.net>
    Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
    jekstrand authored and intel-lab-lkp committed Jun 16, 2021
  6. drm/i915/gem: Don't allow changing the engine set on running contexts…

    … (v3)
    
    When the APIs were added to manage the engine set on a GEM context
    directly from userspace, the questionable choice was made to allow
    changing the engine set on a context at any time.  This is horribly racy
    and there's absolutely no reason why any userspace would want to do this
    outside of trying to exercise interesting race conditions.  By removing
    support for CONTEXT_PARAM_ENGINES from ctx_setparam, we make it
    impossible to change the engine set after the context has been fully
    created.
    
    This doesn't yet let us delete all the deferred engine clean-up code as
    that's still used for handling the case where the client dies or calls
    GEM_CONTEXT_DESTROY while work is in flight.  However, moving to an API
    where the engine set is effectively immutable gives us more options to
    potentially clean that code up a bit going forward.  It also removes a
    whole class of ways in which a client can hurt itself or try to get
    around kernel context banning.
    
    v2 (Jason Ekstrand):
     - Expand the commit mesage
    
    v3 (Jason Ekstrand):
     - Make it more obvious that I915_CONTEXT_PARAM_ENGINES returns -EINVAL
    
    Signed-off-by: Jason Ekstrand <jason@jlekstrand.net>
    Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
    jekstrand authored and intel-lab-lkp committed Jun 16, 2021
  7. drm/i915/gem: Don't allow changing the VM on running contexts (v4)

    When the APIs were added to manage VMs more directly from userspace, the
    questionable choice was made to allow changing out the VM on a context
    at any time.  This is horribly racy and there's absolutely no reason why
    any userspace would want to do this outside of testing that exact race.
    By removing support for CONTEXT_PARAM_VM from ctx_setparam, we make it
    impossible to change out the VM after the context has been fully
    created.  This lets us delete a bunch of deferred task code as well as a
    duplicated (and slightly different) copy of the code which programs the
    PPGTT registers.
    
    v2 (Jason Ekstrand):
     - Expand the commit message
    
    v3 (Daniel Vetter):
     - Don't drop the __rcu on the vm pointer
    
    v4 (Jason Ekstrand):
     - Make it more obvious that I915_CONTEXT_PARAM_VM returns -EINVAL
    
    Signed-off-by: Jason Ekstrand <jason@jlekstrand.net>
    Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
    jekstrand authored and intel-lab-lkp committed Jun 16, 2021
  8. drm/i915/gem: Delay context creation (v3)

    The current context uAPI allows for two methods of setting context
    parameters: SET_CONTEXT_PARAM and CONTEXT_CREATE_EXT_SETPARAM.  The
    former is allowed to be called at any time while the later happens as
    part of GEM_CONTEXT_CREATE.  Currently, everything settable via one is
    settable via the other.  While some params are fairly simple and setting
    them on a live context is harmless such as the context priority, others
    are far trickier such as the VM or the set of engines.  In order to swap
    out the VM, for instance, we have to delay until all current in-flight
    work is complete, swap in the new VM, and then continue.  This leads to
    a plethora of potential race conditions we'd really rather avoid.
    
    In previous patches, we added a i915_gem_proto_context struct which is
    capable of storing and tracking all such create parameters.  This commit
    delays the creation of the actual context until after the client is done
    configuring it with SET_CONTEXT_PARAM.  From the perspective of the
    client, it has the same u32 context ID the whole time.  From the
    perspective of i915, however, it's an i915_gem_proto_context right up
    until the point where we attempt to do something which the proto-context
    can't handle.  Then the real context gets created.
    
    This is accomplished via a little xarray dance.  When GEM_CONTEXT_CREATE
    is called, we create a proto-context, reserve a slot in context_xa but
    leave it NULL, the proto-context in the corresponding slot in
    proto_context_xa.  Then, whenever we go to look up a context, we first
    check context_xa.  If it's there, we return the i915_gem_context and
    we're done.  If it's not, we look in proto_context_xa and, if we find it
    there, we create the actual context and kill the proto-context.
    
    In order for this dance to work properly, everything which ever touches
    a proto-context is guarded by drm_i915_file_private::proto_context_lock,
    including context creation.  Yes, this means context creation now takes
    a giant global lock but it can't really be helped and that should never
    be on any driver's fast-path anyway.
    
    v2 (Daniel Vetter):
     - Commit message grammatical fixes.
     - Use WARN_ON instead of GEM_BUG_ON
     - Rename lazy_create_context_locked to finalize_create_context_locked
     - Rework the control-flow logic in the setparam ioctl
     - Better documentation all around
    
    v3 (kernel test robot):
     - Make finalize_create_context_locked static
    
    Signed-off-by: Jason Ekstrand <jason@jlekstrand.net>
    Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
    jekstrand authored and intel-lab-lkp committed Jun 16, 2021
  9. drm/i915/gt: Drop i915_address_space::file (v2)

    There's a big comment saying how useful it is but no one is using this
    for anything anymore.
    
    It was added in 2bfa996 ("drm/i915: Store owning file on the
    i915_address_space") and used for debugfs at the time as well as telling
    the difference between the global GTT and a PPGTT.  In f6e8aa3
    ("drm/i915: Report the number of closed vma held by each context in
    debugfs") we removed one use of it by switching to a context walk and
    comparing with the VM in the context.  Finally, VM stats for debugfs
    were entirely nuked in db80a12 ("drm/i915/gem: Remove per-client
    stats from debugfs/i915_gem_objects")
    
    v2 (Daniel Vetter):
     - Delete a struct drm_i915_file_private pre-declaration
     - Add a comment to the commit message about history
    
    Signed-off-by: Jason Ekstrand <jason@jlekstrand.net>
    Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
    jekstrand authored and intel-lab-lkp committed Jun 16, 2021
  10. drm/i915/gem: Return an error ptr from context_lookup

    We're about to start doing lazy context creation which means contexts
    get created in i915_gem_context_lookup and we may start having more
    errors than -ENOENT.
    
    Signed-off-by: Jason Ekstrand <jason@jlekstrand.net>
    Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
    jekstrand authored and intel-lab-lkp committed Jun 16, 2021
  11. drm/i915/gem: Use the proto-context to handle create parameters (v4)

    This means that the proto-context needs to grow support for engine
    configuration information as well as setparam logic.  Fortunately, we'll
    be deleting a lot of setparam logic on the primary context shortly so it
    will hopefully balance out.
    
    There's an extra bit of fun here when it comes to setting SSEU and the
    way it interacts with PARAM_ENGINES.  Unfortunately, thanks to
    SET_CONTEXT_PARAM and not being allowed to pick the order in which we
    handle certain parameters, we have think about those interactions.
    
    v2 (Daniel Vetter):
     - Add a proto_context_free_user_engines helper
     - Comment on SSEU in the commit message
     - Use proto_context_set_persistence in set_proto_ctx_param
    
    v3 (Daniel Vetter):
     - Fix a doc comment
     - Do an explicit HAS_FULL_PPGTT check in set_proto_ctx_vm instead of
       relying on pc->vm != NULL.
     - Handle errors for CONTEXT_PARAM_PERSISTENCE
     - Don't allow more resetting user engines
     - Rework initialization of UCONTEXT_PERSISTENCE
    
    v4 (Jason Ekstrand):
     - Move hand-rolled initialization of UCONTEXT_PERSISTENCE to an
       earlier patch
    
    Signed-off-by: Jason Ekstrand <jason@jlekstrand.net>
    Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
    jekstrand authored and intel-lab-lkp committed Jun 16, 2021
  12. drm/i915/gem: Make an alignment check more sensible

    What we really want to check is that size of the engines array, i.e.
    args->size - sizeof(*user) is divisible by the element size, i.e.
    sizeof(*user->engines) because that's what's required for computing the
    array length right below the check.  However, we're currently not doing
    this and instead doing a compile-time check that sizeof(*user) is
    divisible by sizeof(*user->engines) and avoiding the subtraction.  As
    far as I can tell, the only reason for the more confusing pair of checks
    is to avoid a single subtraction of a constant.
    
    The other thing the BUILD_BUG_ON might be trying to implicitly check is
    that offsetof(user->engines) == sizeof(*user) and we don't have any
    weird padding throwing us off.  However, that's not the check it's doing
    and it's not even a reliable way to do that check.
    
    Signed-off-by: Jason Ekstrand <jason@jlekstrand.net>
    Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
    jekstrand authored and intel-lab-lkp committed Jun 16, 2021
  13. drm/i915: Add an i915_gem_vm_lookup helper

    This is the VM equivalent of i915_gem_context_lookup.  It's only used
    once in this patch but future patches will need to duplicate this lookup
    code so it's better to have it in a helper.
    
    Signed-off-by: Jason Ekstrand <jason@jlekstrand.net>
    Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
    jekstrand authored and intel-lab-lkp committed Jun 16, 2021
  14. drm/i915/gem: Optionally set SSEU in intel_context_set_gem

    For now this is a no-op because everyone passes in a null SSEU but it
    lets us get some of the error handling and selftest refactoring plumbed
    through.
    
    Signed-off-by: Jason Ekstrand <jason@jlekstrand.net>
    Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
    jekstrand authored and intel-lab-lkp committed Jun 16, 2021
  15. drm/i915/gem: Rework error handling in default_engines

    Since free_engines works for partially constructed engine sets, we can
    use the usual goto pattern.
    
    Signed-off-by: Jason Ekstrand <jason@jlekstrand.net>
    Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
    jekstrand authored and intel-lab-lkp committed Jun 16, 2021
  16. drm/i915/gem: Add an intermediate proto_context struct (v5)

    The current context uAPI allows for two methods of setting context
    parameters: SET_CONTEXT_PARAM and CONTEXT_CREATE_EXT_SETPARAM.  The
    former is allowed to be called at any time while the later happens as
    part of GEM_CONTEXT_CREATE.  Currently, everything settable via one is
    settable via the other.  While some params are fairly simple and setting
    them on a live context is harmless such the context priority, others are
    far trickier such as the VM or the set of engines.  In order to swap out
    the VM, for instance, we have to delay until all current in-flight work
    is complete, swap in the new VM, and then continue.  This leads to a
    plethora of potential race conditions we'd really rather avoid.
    
    Unfortunately, both methods of setting the VM and the engine set are in
    active use today so we can't simply disallow setting the VM or engine
    set vial SET_CONTEXT_PARAM.  In order to work around this wart, this
    commit adds a proto-context struct which contains all the context create
    parameters.
    
    v2 (Daniel Vetter):
     - Better commit message
     - Use __set/clear_bit instead of set/clear_bit because there's no race
       and we don't need the atomics
    
    v3 (Daniel Vetter):
     - Use manual bitops and BIT() instead of __set_bit
    
    v4 (Daniel Vetter):
     - Add a changelog to the commit message
     - Better hyperlinking in docs
     - Create the default PPGTT in i915_gem_create_context
    
    v5 (Daniel Vetter):
     - Hand-roll the initialization of UCONTEXT_PERSISTENCE
    
    Signed-off-by: Jason Ekstrand <jason@jlekstrand.net>
    Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
    jekstrand authored and intel-lab-lkp committed Jun 16, 2021
  17. drm/i915: Add gem/i915_gem_context.h to the docs

    In order to prevent kernel doc warnings, also fill out docs for any
    missing fields and fix those that forgot the "@".
    
    Signed-off-by: Jason Ekstrand <jason@jlekstrand.net>
    Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
    jekstrand authored and intel-lab-lkp committed Jun 16, 2021
  18. drm/i915/gem: Add a separate validate_priority helper

    With the proto-context stuff added later in this series, we end up
    having to duplicate set_priority.  This lets us avoid duplicating the
    validation logic.
    
    Signed-off-by: Jason Ekstrand <jason@jlekstrand.net>
    Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
    jekstrand authored and intel-lab-lkp committed Jun 16, 2021
  19. drm/i915: Stop manually RCU banging in reset_stats_ioctl (v2)

    As far as I can tell, the only real reason for this is to avoid taking a
    reference to the i915_gem_context.  The cost of those two atomics
    probably pales in comparison to the cost of the ioctl itself so we're
    really not buying ourselves anything here.  We're about to make context
    lookup a tiny bit more complicated, so let's get rid of the one hand-
    rolled case.
    
    Some usermode drivers such as our Vulkan driver call GET_RESET_STATS on
    every execbuf so the perf here could theoretically be an issue.  If this
    ever does become a performance issue for any such userspace drivers,
    they can use set CONTEXT_PARAM_RECOVERABLE to false and look for -EIO
    coming from execbuf to check for hangs instead.
    
    v2 (Daniel Vetter):
     - Add a comment in the commit message about recoverable contexts
    
    Signed-off-by: Jason Ekstrand <jason@jlekstrand.net>
    Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
    jekstrand authored and intel-lab-lkp committed Jun 16, 2021
  20. drm/i915/gem: Disallow creating contexts with too many engines

    There's no sense in allowing userspace to create more engines than it
    can possibly access via execbuf.
    
    Signed-off-by: Jason Ekstrand <jason@jlekstrand.net>
    Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
    jekstrand authored and intel-lab-lkp committed Jun 16, 2021
  21. drm/i915/request: Remove the hook from await_execution

    This was only ever used for FENCE_SUBMIT automatic engine selection
    which was removed in the previous commit.
    
    Signed-off-by: Jason Ekstrand <jason@jlekstrand.net>
    Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
    jekstrand authored and intel-lab-lkp committed Jun 16, 2021
  22. drm/i915/gem: Remove engine auto-magic with FENCE_SUBMIT (v2)

    Even though FENCE_SUBMIT is only documented to wait until the request in
    the in-fence starts instead of waiting until it completes, it has a bit
    more magic than that.  If FENCE_SUBMIT is used to submit something to a
    balanced engine, we would wait to assign engines until the primary
    request was ready to start and then attempt to assign it to a different
    engine than the primary.  There is an IGT test (the bonded-slice subtest
    of gem_exec_balancer) which exercises this by submitting a primary batch
    to a specific VCS and then using FENCE_SUBMIT to submit a secondary
    which can run on any VCS and have i915 figure out which VCS to run it on
    such that they can run in parallel.
    
    However, this functionality has never been used in the real world.  The
    media driver (the only user of FENCE_SUBMIT) always picks exactly two
    physical engines to bond and never asks us to pick which to use.
    
    v2 (Daniel Vetter):
     - Mention the exact IGT test this breaks
    
    Signed-off-by: Jason Ekstrand <jason@jlekstrand.net>
    Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
    jekstrand authored and intel-lab-lkp committed Jun 16, 2021
  23. drm/i915/gem: Disallow bonding of virtual engines (v3)

    This adds a bunch of complexity which the media driver has never
    actually used.  The media driver does technically bond a balanced engine
    to another engine but the balanced engine only has one engine in the
    sibling set.  This doesn't actually result in a virtual engine.
    
    This functionality was originally added to handle cases where we may
    have more than two video engines and media might want to load-balance
    their bonded submits by, for instance, submitting to a balanced vcs0-1
    as the primary and then vcs2-3 as the secondary.  However, no such
    hardware has shipped thus far and, if we ever want to enable such
    use-cases in the future, we'll use the up-and-coming parallel submit API
    which targets GuC submission.
    
    This makes I915_CONTEXT_ENGINES_EXT_BOND a total no-op.  We leave the
    validation code in place in case we ever decide we want to do something
    interesting with the bonding information.
    
    v2 (Jason Ekstrand):
     - Don't delete quite as much code.
    
    v3 (Tvrtko Ursulin):
     - Add some history to the commit message
    
    Signed-off-by: Jason Ekstrand <jason@jlekstrand.net>
    Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
    jekstrand authored and intel-lab-lkp committed Jun 16, 2021
  24. drm/i915: Drop getparam support for I915_CONTEXT_PARAM_ENGINES

    This has never been used by any userspace except IGT and provides no
    real functionality beyond parroting back parameters userspace passed in
    as part of context creation or via setparam.  If the context is in
    legacy mode (where you use I915_EXEC_RENDER and friends), it returns
    success with zero data so it's not useful for discovering what engines
    are in the context.  It's also not a replacement for the recently
    removed I915_CONTEXT_CLONE_ENGINES because it doesn't return any of the
    balancing or bonding information.
    
    Signed-off-by: Jason Ekstrand <jason@jlekstrand.net>
    Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
    jekstrand authored and intel-lab-lkp committed Jun 16, 2021
  25. drm/i915: Implement SINGLE_TIMELINE with a syncobj (v4)

    This API is entirely unnecessary and I'd love to get rid of it.  If
    userspace wants a single timeline across multiple contexts, they can
    either use implicit synchronization or a syncobj, both of which existed
    at the time this feature landed.  The justification given at the time
    was that it would help GL drivers which are inherently single-timeline.
    However, neither of our GL drivers actually wanted the feature.  i965
    was already in maintenance mode at the time and iris uses syncobj for
    everything.
    
    Unfortunately, as much as I'd love to get rid of it, it is used by the
    media driver so we can't do that.  We can, however, do the next-best
    thing which is to embed a syncobj in the context and do exactly what
    we'd expect from userspace internally.  This isn't an entirely identical
    implementation because it's no longer atomic if userspace races with
    itself by calling execbuffer2 twice simultaneously from different
    threads.  It won't crash in that case; it just doesn't guarantee any
    ordering between those two submits.  It also means that sync files
    exported from different engines on a SINGLE_TIMELINE context will have
    different fence contexts.  This is visible to userspace if it looks at
    the obj_name field of sync_fence_info.
    
    Moving SINGLE_TIMELINE to a syncobj emulation has a couple of technical
    advantages beyond mere annoyance.  One is that intel_timeline is no
    longer an api-visible object and can remain entirely an implementation
    detail.  This may be advantageous as we make scheduler changes going
    forward.  Second is that, together with deleting the CLONE_CONTEXT API,
    we should now have a 1:1 mapping between intel_context and
    intel_timeline which may help us reduce locking.
    
    v2 (Tvrtko Ursulin):
     - Update the comment on i915_gem_context::syncobj to mention that it's
       an emulation and the possible race if userspace calls execbuffer2
       twice on the same context concurrently.
    v2 (Jason Ekstrand):
     - Wrap the checks for eb.gem_context->syncobj in unlikely()
     - Drop the dma_fence reference
     - Improved commit message
    
    v3 (Jason Ekstrand):
     - Move the dma_fence_put() to before the error exit
    
    v4 (Tvrtko Ursulin):
     - Add a comment about fence contexts to the commit message
    
    Signed-off-by: Jason Ekstrand <jason@jlekstrand.net>
    Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
    jekstrand authored and intel-lab-lkp committed Jun 16, 2021
  26. drm/i915: Drop the CONTEXT_CLONE API (v2)

    This API allows one context to grab bits out of another context upon
    creation.  It can be used as a short-cut for setparam(getparam()) for
    things like I915_CONTEXT_PARAM_VM.  However, it's never been used by any
    real userspace.  It's used by a few IGT tests and that's it.  Since it
    doesn't add any real value (most of the stuff you can CLONE you can copy
    in other ways), drop it.
    
    There is one thing that this API allows you to clone which you cannot
    clone via getparam/setparam: timelines.  However, timelines are an
    implementation detail of i915 and not really something that needs to be
    exposed to userspace.  Also, sharing timelines between contexts isn't
    obviously useful and supporting it has the potential to complicate i915
    internally.  It also doesn't add any functionality that the client can't
    get in other ways.  If a client really wants a shared timeline, they can
    use a syncobj and set it as an in and out fence on every submit.
    
    v2 (Jason Ekstrand):
     - More detailed commit message
    
    Signed-off-by: Jason Ekstrand <jason@jlekstrand.net>
    Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
    jekstrand authored and intel-lab-lkp committed Jun 16, 2021
  27. drm/i915/gem: Return void from context_apply_all

    None of the callbacks we use with it return an error code anymore; they
    all return 0 unconditionally.
    
    Signed-off-by: Jason Ekstrand <jason@jlekstrand.net>
    Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
    jekstrand authored and intel-lab-lkp committed Jun 16, 2021
  28. drm/i915/gem: Set the watchdog timeout directly in intel_context_set_…

    …gem (v2)
    
    Instead of handling it like a context param, unconditionally set it when
    intel_contexts are created.  For years we've had the idea of a watchdog
    uAPI floating about. The aim was for media, so that they could set very
    tight deadlines for their transcodes jobs, so that if you have a corrupt
    bitstream (especially for decoding) you don't hang your desktop too
    hard.  But it's been stuck in limbo since forever, and this simplifies
    things a bit in preparation for the proto-context work.  If we decide to
    actually make said uAPI a reality, we can do it through the proto-
    context easily enough.
    
    This does mean that we move from reading the request_timeout_ms param
    once per engine when engines are created instead of once at context
    creation.  If someone changes request_timeout_ms between creating a
    context and setting engines, it will mean that they get the new timeout.
    If someone races setting request_timeout_ms and context creation, they
    can theoretically end up with different timeouts.  However, since both
    of these are fairly harmless and require changing kernel params, we
    don't care.
    
    v2 (Tvrtko Ursulin):
     - Add a comment about races with request_timeout_ms
    
    Signed-off-by: Jason Ekstrand <jason@jlekstrand.net>
    Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
    jekstrand authored and intel-lab-lkp committed Jun 16, 2021
  29. drm/i915: Drop I915_CONTEXT_PARAM_NO_ZEROMAP

    The idea behind this param is to support OpenCL drivers with relocations
    because OpenCL reserves 0x0 for NULL and, if we placed memory there, it
    would confuse CL kernels.  It was originally sent out as part of a patch
    series including libdrm [1] and Beignet [2] support.  However, the
    libdrm and Beignet patches never landed in their respective upstream
    projects so this API has never been used.  It's never been used in Mesa
    or any other driver, either.
    
    Dropping this API allows us to delete a small bit of code.
    
    [1]: https://lists.freedesktop.org/archives/intel-gfx/2015-May/067030.html
    [2]: https://lists.freedesktop.org/archives/intel-gfx/2015-May/067031.html
    
    Signed-off-by: Jason Ekstrand <jason@jlekstrand.net>
    Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
    jekstrand authored and intel-lab-lkp committed Jun 16, 2021
  30. drm/i915: Stop storing the ring size in the ring pointer (v2)

    Previously, we were storing the ring size in the ring pointer before it
    was actually allocated.  We would then guard setting the ring size on
    checking for CONTEXT_ALLOC_BIT.  This is error-prone at best and really
    only saves us a few bytes on something that already burns at least 4K.
    Instead, this patch adds a new ring_size field and makes everything use
    that.
    
    v2 (Daniel Vetter):
     - Replace 512 * SZ_4K with SZ_2M
    
    Signed-off-by: Jason Ekstrand <jason@jlekstrand.net>
    Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
    jekstrand authored and intel-lab-lkp committed Jun 16, 2021
  31. drm/i915: Drop I915_CONTEXT_PARAM_RINGSIZE

    This reverts commit 88be76c ("drm/i915: Allow userspace to specify
    ringsize on construction").  This API was originally added for OpenCL
    but the compute-runtime PR has sat open for a year without action so we
    can still pull it out if we want.  I argue we should drop it for three
    reasons:
    
     1. If the compute-runtime PR has sat open for a year, this clearly
        isn't that important.
    
     2. It's a very leaky API.  Ring size is an implementation detail of the
        current execlist scheduler and really only makes sense there.  It
        can't apply to the older ring-buffer scheduler on pre-execlist
        hardware because that's shared across all contexts and it won't
        apply to the GuC scheduler that's in the pipeline.
    
     3. Having userspace set a ring size in bytes is a bad solution to the
        problem of having too small a ring.  There is no way that userspace
        has the information to know how to properly set the ring size so
        it's just going to detect the feature and always set it to the
        maximum of 512K.  This is what the compute-runtime PR does.  The
        scheduler in i915, on the other hand, does have the information to
        make an informed choice.  It could detect if the ring size is a
        problem and grow it itself.  Or, if that's too hard, we could just
        increase the default size from 16K to 32K or even 64K instead of
        relying on userspace to do it.
    
    Let's drop this API for now and, if someone decides they really care
    about solving this problem, they can do it properly.
    
    Signed-off-by: Jason Ekstrand <jason@jlekstrand.net>
    Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
    jekstrand authored and intel-lab-lkp committed Jun 16, 2021

Commits on Jun 11, 2021

  1. Merge tag 'exynos-drm-next-for-v5.14' of git://git.kernel.org/pub/scm…

    …/linux/kernel/git/daeinki/drm-exynos into drm-next
    
    Two cleanups
    - These patches make Exynos DRM driver to use pm_runtime_resume_and_get()
      function instead of m_runtime_get_sync() to deal with usage counter.
      pm_runtime_get_sync() increases the usage counter even when it failed,
      which could make callers to forget to decrease the usage counter.
      pm_runtime_resume_and_get() decreases the usage counter regardless of
      whether it failed or not.
    
    Signed-off-by: Dave Airlie <airlied@redhat.com>
    
    From: Inki Dae <inki.dae@samsung.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20210611025939.393282-1-inki.dae@samsung.com
    airlied committed Jun 11, 2021
  2. Merge tag 'drm-intel-gt-next-2021-06-10' of git://anongit.freedesktop…

    ….org/drm/drm-intel into drm-next
    
    UAPI Changes:
    
    - Disable mmap ioctl for gen12+ (excl. TGL-LP)
    - Start enabling HuC loading by default for upcoming Gen12+
      platforms (excludes TGL and RKL)
    
    Core Changes:
    
    - Backmerge of drm-next
    
    Driver Changes:
    
    - Revert "i915: use io_mapping_map_user" (Eero, Matt A)
    - Initialize the TTM device and memory managers (Thomas)
    - Major rework to the GuC submission backend to prepare
      for enabling on new platforms (Michal Wa., Daniele,
      Matt B, Rodrigo)
    - Fix i915_sg_page_sizes to record dma segments rather
      than physical pages (Thomas)
    
    - Locking rework to prep for TTM conversion (Thomas)
    - Replace IS_GEN and friends with GRAPHICS_VER (Lucas)
    - Use DEVICE_ATTR_RO macro (Yue)
    - Static code checker fixes (Zhihao)
    
    Signed-off-by: Dave Airlie <airlied@redhat.com>
    From: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/YMHeDxg9VLiFtyn3@jlahtine-mobl.ger.corp.intel.com
    airlied committed Jun 11, 2021
  3. Merge branch 'etnaviv/next' of https://git.pengutronix.de/git/lst/linux

    … into drm-next
    
    - remove redundant NULL checks by various people
    - fix sparse checker warnings from Marc
    - expose more GPU ID values to userspace from Christian
    - add HWDB entry for GPU found on i.MX8MP from Sascha
    - rework of the linear window calculation to better deal with
      systems with large regions of reserved RAM
    
    Signed-off-by: Dave Airlie <airlied@redhat.com>
    From: Lucas Stach <l.stach@pengutronix.de>
    Link: https://patchwork.freedesktop.org/patch/msgid/f27e1ec2c2fea310bfb6fe6c99174a54e9dfba83.camel@pengutronix.de
    airlied committed Jun 11, 2021
  4. drm/exynos: use pm_runtime_resume_and_get()

    Use pm_runtime_resume_and_get() instead of pm_runtime_get_sync()
    to deal with usage counter. pm_runtime_get_sync() increases the
    usage counter even when it failed, which makes callers to forget
    to decrease the usage counter and resulted in reference leak.
    
    pm_runtime_resume_and_get() function decreases the usage counter
    when it failed internally so it can avoid the reference leak.
    
    Changelog v1:
    - Fix an build error reported by kernel test robot of Intel.
    
    Signed-off-by: Inki Dae <inki.dae@samsung.com>
    Reported-by: kernel test robot <lkp@intel.com>
    daeinki committed Jun 11, 2021
Older