dri-devel.lists.freedesktop.org archive mirror
 help / color / mirror / Atom feed
From: Jason Ekstrand <jason@jlekstrand.net>
To: Daniel Vetter <daniel@ffwll.ch>
Cc: Intel GFX <intel-gfx@lists.freedesktop.org>,
	Maling list - DRI developers <dri-devel@lists.freedesktop.org>
Subject: Re: [PATCH 01/21] drm/i915: Drop I915_CONTEXT_PARAM_RINGSIZE
Date: Tue, 27 Apr 2021 22:33:57 -0500	[thread overview]
Message-ID: <CAOFGe96AkF2GbeC04Ozwbw_Q8cWPdnS5uqbtLUVV2Z5yDsX8ug@mail.gmail.com> (raw)
In-Reply-To: <YIfaQJeZdIHlJ30D@phenom.ffwll.local>

On Tue, Apr 27, 2021 at 4:32 AM Daniel Vetter <daniel@ffwll.ch> wrote:
>
> On Fri, Apr 23, 2021 at 05:31:11PM -0500, Jason Ekstrand wrote:
> > This reverts commit 88be76cdafc7 ("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>
>
> Two things:
> - I'm assuming you have an igt change to make sure we get EINVAL for both
>   set and getparam now? Just to make sure.

I've written up some quick tests.  I'll send them out in the next
version of the IGT series or as a separate series if that one gets
reviewed without comment (unlikely).

> - intel_context->ring is either a ring pointer when CONTEXT_ALLOC_BIT is
>   set in ce->flags, or the size of the ring stored in the pointer if not.
>   I'm seriously hoping you get rid of this complexity with your
>   proto-context series, and also delete __intel_context_ring_size() in the
>   end. That function has no business existing imo.

I hadn't done that yet, no.  But I typed up a patch today which I'll
send out with the next version of this series which does this.

--Jason

>   If not, please make sure that's the case.
>
> Aside from these patch looks good.
>
> Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
>
> > ---
> >  drivers/gpu/drm/i915/Makefile                 |  1 -
> >  drivers/gpu/drm/i915/gem/i915_gem_context.c   | 85 +------------------
> >  drivers/gpu/drm/i915/gt/intel_context_param.c | 63 --------------
> >  drivers/gpu/drm/i915/gt/intel_context_param.h |  3 -
> >  include/uapi/drm/i915_drm.h                   | 20 +----
> >  5 files changed, 4 insertions(+), 168 deletions(-)
> >  delete mode 100644 drivers/gpu/drm/i915/gt/intel_context_param.c
> >
> > diff --git a/drivers/gpu/drm/i915/Makefile b/drivers/gpu/drm/i915/Makefile
> > index d0d936d9137bc..afa22338fa343 100644
> > --- a/drivers/gpu/drm/i915/Makefile
> > +++ b/drivers/gpu/drm/i915/Makefile
> > @@ -88,7 +88,6 @@ gt-y += \
> >       gt/gen8_ppgtt.o \
> >       gt/intel_breadcrumbs.o \
> >       gt/intel_context.o \
> > -     gt/intel_context_param.o \
> >       gt/intel_context_sseu.o \
> >       gt/intel_engine_cs.o \
> >       gt/intel_engine_heartbeat.o \
> > diff --git a/drivers/gpu/drm/i915/gem/i915_gem_context.c b/drivers/gpu/drm/i915/gem/i915_gem_context.c
> > index fd8ee52e17a47..e52b85b8f923d 100644
> > --- a/drivers/gpu/drm/i915/gem/i915_gem_context.c
> > +++ b/drivers/gpu/drm/i915/gem/i915_gem_context.c
> > @@ -1335,63 +1335,6 @@ static int set_ppgtt(struct drm_i915_file_private *file_priv,
> >       return err;
> >  }
> >
> > -static int __apply_ringsize(struct intel_context *ce, void *sz)
> > -{
> > -     return intel_context_set_ring_size(ce, (unsigned long)sz);
> > -}
> > -
> > -static int set_ringsize(struct i915_gem_context *ctx,
> > -                     struct drm_i915_gem_context_param *args)
> > -{
> > -     if (!HAS_LOGICAL_RING_CONTEXTS(ctx->i915))
> > -             return -ENODEV;
> > -
> > -     if (args->size)
> > -             return -EINVAL;
> > -
> > -     if (!IS_ALIGNED(args->value, I915_GTT_PAGE_SIZE))
> > -             return -EINVAL;
> > -
> > -     if (args->value < I915_GTT_PAGE_SIZE)
> > -             return -EINVAL;
> > -
> > -     if (args->value > 128 * I915_GTT_PAGE_SIZE)
> > -             return -EINVAL;
> > -
> > -     return context_apply_all(ctx,
> > -                              __apply_ringsize,
> > -                              __intel_context_ring_size(args->value));
> > -}
> > -
> > -static int __get_ringsize(struct intel_context *ce, void *arg)
> > -{
> > -     long sz;
> > -
> > -     sz = intel_context_get_ring_size(ce);
> > -     GEM_BUG_ON(sz > INT_MAX);
> > -
> > -     return sz; /* stop on first engine */
> > -}
> > -
> > -static int get_ringsize(struct i915_gem_context *ctx,
> > -                     struct drm_i915_gem_context_param *args)
> > -{
> > -     int sz;
> > -
> > -     if (!HAS_LOGICAL_RING_CONTEXTS(ctx->i915))
> > -             return -ENODEV;
> > -
> > -     if (args->size)
> > -             return -EINVAL;
> > -
> > -     sz = context_apply_all(ctx, __get_ringsize, NULL);
> > -     if (sz < 0)
> > -             return sz;
> > -
> > -     args->value = sz;
> > -     return 0;
> > -}
> > -
> >  int
> >  i915_gem_user_to_context_sseu(struct intel_gt *gt,
> >                             const struct drm_i915_gem_context_param_sseu *user,
> > @@ -2037,11 +1980,8 @@ static int ctx_setparam(struct drm_i915_file_private *fpriv,
> >               ret = set_persistence(ctx, args);
> >               break;
> >
> > -     case I915_CONTEXT_PARAM_RINGSIZE:
> > -             ret = set_ringsize(ctx, args);
> > -             break;
> > -
> >       case I915_CONTEXT_PARAM_BAN_PERIOD:
> > +     case I915_CONTEXT_PARAM_RINGSIZE:
> >       default:
> >               ret = -EINVAL;
> >               break;
> > @@ -2069,18 +2009,6 @@ static int create_setparam(struct i915_user_extension __user *ext, void *data)
> >       return ctx_setparam(arg->fpriv, arg->ctx, &local.param);
> >  }
> >
> > -static int copy_ring_size(struct intel_context *dst,
> > -                       struct intel_context *src)
> > -{
> > -     long sz;
> > -
> > -     sz = intel_context_get_ring_size(src);
> > -     if (sz < 0)
> > -             return sz;
> > -
> > -     return intel_context_set_ring_size(dst, sz);
> > -}
> > -
> >  static int clone_engines(struct i915_gem_context *dst,
> >                        struct i915_gem_context *src)
> >  {
> > @@ -2125,12 +2053,6 @@ static int clone_engines(struct i915_gem_context *dst,
> >               }
> >
> >               intel_context_set_gem(clone->engines[n], dst);
> > -
> > -             /* Copy across the preferred ringsize */
> > -             if (copy_ring_size(clone->engines[n], e->engines[n])) {
> > -                     __free_engines(clone, n + 1);
> > -                     goto err_unlock;
> > -             }
> >       }
> >       clone->num_engines = n;
> >       i915_sw_fence_complete(&e->fence);
> > @@ -2490,11 +2412,8 @@ int i915_gem_context_getparam_ioctl(struct drm_device *dev, void *data,
> >               args->value = i915_gem_context_is_persistent(ctx);
> >               break;
> >
> > -     case I915_CONTEXT_PARAM_RINGSIZE:
> > -             ret = get_ringsize(ctx, args);
> > -             break;
> > -
> >       case I915_CONTEXT_PARAM_BAN_PERIOD:
> > +     case I915_CONTEXT_PARAM_RINGSIZE:
> >       default:
> >               ret = -EINVAL;
> >               break;
> > diff --git a/drivers/gpu/drm/i915/gt/intel_context_param.c b/drivers/gpu/drm/i915/gt/intel_context_param.c
> > deleted file mode 100644
> > index 65dcd090245d6..0000000000000
> > --- a/drivers/gpu/drm/i915/gt/intel_context_param.c
> > +++ /dev/null
> > @@ -1,63 +0,0 @@
> > -// SPDX-License-Identifier: MIT
> > -/*
> > - * Copyright © 2019 Intel Corporation
> > - */
> > -
> > -#include "i915_active.h"
> > -#include "intel_context.h"
> > -#include "intel_context_param.h"
> > -#include "intel_ring.h"
> > -
> > -int intel_context_set_ring_size(struct intel_context *ce, long sz)
> > -{
> > -     int err;
> > -
> > -     if (intel_context_lock_pinned(ce))
> > -             return -EINTR;
> > -
> > -     err = i915_active_wait(&ce->active);
> > -     if (err < 0)
> > -             goto unlock;
> > -
> > -     if (intel_context_is_pinned(ce)) {
> > -             err = -EBUSY; /* In active use, come back later! */
> > -             goto unlock;
> > -     }
> > -
> > -     if (test_bit(CONTEXT_ALLOC_BIT, &ce->flags)) {
> > -             struct intel_ring *ring;
> > -
> > -             /* Replace the existing ringbuffer */
> > -             ring = intel_engine_create_ring(ce->engine, sz);
> > -             if (IS_ERR(ring)) {
> > -                     err = PTR_ERR(ring);
> > -                     goto unlock;
> > -             }
> > -
> > -             intel_ring_put(ce->ring);
> > -             ce->ring = ring;
> > -
> > -             /* Context image will be updated on next pin */
> > -     } else {
> > -             ce->ring = __intel_context_ring_size(sz);
> > -     }
> > -
> > -unlock:
> > -     intel_context_unlock_pinned(ce);
> > -     return err;
> > -}
> > -
> > -long intel_context_get_ring_size(struct intel_context *ce)
> > -{
> > -     long sz = (unsigned long)READ_ONCE(ce->ring);
> > -
> > -     if (test_bit(CONTEXT_ALLOC_BIT, &ce->flags)) {
> > -             if (intel_context_lock_pinned(ce))
> > -                     return -EINTR;
> > -
> > -             sz = ce->ring->size;
> > -             intel_context_unlock_pinned(ce);
> > -     }
> > -
> > -     return sz;
> > -}
> > diff --git a/drivers/gpu/drm/i915/gt/intel_context_param.h b/drivers/gpu/drm/i915/gt/intel_context_param.h
> > index 3ecacc675f414..dffedd983693d 100644
> > --- a/drivers/gpu/drm/i915/gt/intel_context_param.h
> > +++ b/drivers/gpu/drm/i915/gt/intel_context_param.h
> > @@ -10,9 +10,6 @@
> >
> >  #include "intel_context.h"
> >
> > -int intel_context_set_ring_size(struct intel_context *ce, long sz);
> > -long intel_context_get_ring_size(struct intel_context *ce);
> > -
> >  static inline int
> >  intel_context_set_watchdog_us(struct intel_context *ce, u64 timeout_us)
> >  {
> > diff --git a/include/uapi/drm/i915_drm.h b/include/uapi/drm/i915_drm.h
> > index 6a34243a7646a..6eefbc6dec01f 100644
> > --- a/include/uapi/drm/i915_drm.h
> > +++ b/include/uapi/drm/i915_drm.h
> > @@ -1721,24 +1721,8 @@ struct drm_i915_gem_context_param {
> >   */
> >  #define I915_CONTEXT_PARAM_PERSISTENCE       0xb
> >
> > -/*
> > - * I915_CONTEXT_PARAM_RINGSIZE:
> > - *
> > - * Sets the size of the CS ringbuffer to use for logical ring contexts. This
> > - * applies a limit of how many batches can be queued to HW before the caller
> > - * is blocked due to lack of space for more commands.
> > - *
> > - * Only reliably possible to be set prior to first use, i.e. during
> > - * construction. At any later point, the current execution must be flushed as
> > - * the ring can only be changed while the context is idle. Note, the ringsize
> > - * can be specified as a constructor property, see
> > - * I915_CONTEXT_CREATE_EXT_SETPARAM, but can also be set later if required.
> > - *
> > - * Only applies to the current set of engine and lost when those engines
> > - * are replaced by a new mapping (see I915_CONTEXT_PARAM_ENGINES).
> > - *
> > - * Must be between 4 - 512 KiB, in intervals of page size [4 KiB].
> > - * Default is 16 KiB.
> > +/* This API has been removed.  On the off chance someone somewhere has
> > + * attempted to use it, never re-use this context param number.
> >   */
> >  #define I915_CONTEXT_PARAM_RINGSIZE  0xc
> >  /* Must be kept compact -- no holes and well documented */
> > --
> > 2.31.1
> >
> > _______________________________________________
> > dri-devel mailing list
> > dri-devel@lists.freedesktop.org
> > https://lists.freedesktop.org/mailman/listinfo/dri-devel
>
> --
> Daniel Vetter
> Software Engineer, Intel Corporation
> http://blog.ffwll.ch
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

  reply	other threads:[~2021-04-28  3:34 UTC|newest]

Thread overview: 110+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-04-23 22:31 [PATCH 00/21] drm/i915/gem: ioctl clean-ups Jason Ekstrand
2021-04-23 22:31 ` [PATCH 01/21] drm/i915: Drop I915_CONTEXT_PARAM_RINGSIZE Jason Ekstrand
2021-04-27  9:32   ` Daniel Vetter
2021-04-28  3:33     ` Jason Ekstrand [this message]
2021-04-23 22:31 ` [PATCH 02/21] drm/i915: Drop I915_CONTEXT_PARAM_NO_ZEROMAP Jason Ekstrand
2021-04-27  9:38   ` [Intel-gfx] " Daniel Vetter
2021-04-23 22:31 ` [PATCH 03/21] drm/i915/gem: Set the watchdog timeout directly in intel_context_set_gem Jason Ekstrand
2021-04-27  9:42   ` Daniel Vetter
2021-04-28 15:55   ` [Intel-gfx] " Tvrtko Ursulin
2021-04-28 17:24     ` Jason Ekstrand
2021-04-29  8:04       ` Tvrtko Ursulin
2021-04-29 14:54         ` Jason Ekstrand
2021-04-29 17:12           ` Daniel Vetter
2021-04-29 17:13             ` Daniel Vetter
2021-04-29 18:41               ` Jason Ekstrand
2021-04-30 11:18           ` Tvrtko Ursulin
2021-04-30 15:35             ` Jason Ekstrand
2021-04-23 22:31 ` [PATCH 04/21] drm/i915/gem: Return void from context_apply_all Jason Ekstrand
2021-04-27  9:42   ` Daniel Vetter
2021-04-23 22:31 ` [PATCH 05/21] drm/i915: Drop the CONTEXT_CLONE API Jason Ekstrand
2021-04-27  9:49   ` [Intel-gfx] " Daniel Vetter
2021-04-28 17:38     ` Jason Ekstrand
2021-04-28 15:59   ` Tvrtko Ursulin
2021-04-23 22:31 ` [PATCH 06/21] drm/i915: Implement SINGLE_TIMELINE with a syncobj (v3) Jason Ekstrand
2021-04-27  9:55   ` [Intel-gfx] " Daniel Vetter
2021-04-28 15:49   ` Tvrtko Ursulin
2021-04-28 17:26     ` Jason Ekstrand
2021-04-29  8:06       ` Tvrtko Ursulin
2021-04-29 12:08         ` Daniel Vetter
2021-04-29 14:47           ` Jason Ekstrand
2021-04-23 22:31 ` [PATCH 07/21] drm/i915: Drop getparam support for I915_CONTEXT_PARAM_ENGINES Jason Ekstrand
2021-04-27  9:58   ` Daniel Vetter
2021-04-23 22:31 ` [PATCH 08/21] drm/i915/gem: Disallow bonding of virtual engines Jason Ekstrand
2021-04-26 23:43   ` [PATCH 08/20] drm/i915/gem: Disallow bonding of virtual engines (v2) Jason Ekstrand
2021-04-27 13:58     ` [Intel-gfx] " Daniel Vetter
2021-04-27 13:51   ` [PATCH 08/21] drm/i915/gem: Disallow bonding of virtual engines Jason Ekstrand
2021-04-28 10:13     ` Daniel Vetter
2021-04-28 17:18       ` Jason Ekstrand
2021-04-28 17:18         ` [Intel-gfx] " Matthew Brost
2021-04-28 17:46           ` Jason Ekstrand
2021-04-28 17:55             ` Matthew Brost
2021-04-28 18:17               ` Jason Ekstrand
2021-04-29 12:14                 ` Daniel Vetter
2021-04-30  4:03                   ` Matthew Brost
2021-04-30 10:11                     ` Daniel Vetter
2021-05-01 17:17                       ` Matthew Brost
2021-05-04  7:36                         ` Daniel Vetter
2021-04-28 18:58         ` Jason Ekstrand
2021-04-29 12:16           ` Daniel Vetter
2021-04-29 16:02             ` Jason Ekstrand
2021-04-29 17:14               ` Daniel Vetter
2021-04-28 15:51   ` [Intel-gfx] " Tvrtko Ursulin
2021-04-29 12:24     ` Daniel Vetter
2021-04-29 12:54       ` Tvrtko Ursulin
2021-04-29 15:41         ` Jason Ekstrand
2021-04-23 22:31 ` [PATCH 09/21] drm/i915/gem: Disallow creating contexts with too many engines Jason Ekstrand
2021-04-28 10:16   ` [Intel-gfx] " Daniel Vetter
2021-04-28 10:42     ` Tvrtko Ursulin
2021-04-28 14:02       ` Daniel Vetter
2021-04-28 14:26         ` Tvrtko Ursulin
2021-04-28 17:09           ` Jason Ekstrand
2021-04-29  8:01             ` Tvrtko Ursulin
2021-04-29 19:16               ` Jason Ekstrand
2021-04-30 11:40                 ` Tvrtko Ursulin
2021-04-30 15:54                   ` Jason Ekstrand
2021-04-23 22:31 ` [PATCH 10/21] drm/i915/request: Remove the hook from await_execution Jason Ekstrand
2021-04-26 23:44   ` Jason Ekstrand
2021-04-23 22:31 ` [PATCH 11/21] drm/i915: Stop manually RCU banging in reset_stats_ioctl Jason Ekstrand
2021-04-28 10:27   ` Daniel Vetter
2021-04-28 18:22     ` Jason Ekstrand
2021-04-29 12:22       ` Daniel Vetter
2021-04-23 22:31 ` [PATCH 12/21] drm/i915/gem: Add a separate validate_priority helper Jason Ekstrand
2021-04-28 14:37   ` Daniel Vetter
2021-04-23 22:31 ` [PATCH 13/21] drm/i915/gem: Add an intermediate proto_context struct Jason Ekstrand
2021-04-29 13:02   ` [Intel-gfx] " Daniel Vetter
2021-04-29 16:44     ` Jason Ekstrand
2021-04-23 22:31 ` [PATCH 14/21] drm/i915/gem: Return an error ptr from context_lookup Jason Ekstrand
2021-04-29 13:27   ` [Intel-gfx] " Daniel Vetter
2021-04-29 15:29     ` Jason Ekstrand
2021-04-29 17:16       ` Daniel Vetter
2021-04-23 22:31 ` [PATCH 15/21] drm/i915/gt: Drop i915_address_space::file Jason Ekstrand
2021-04-29 12:37   ` Daniel Vetter
2021-04-29 15:26     ` Jason Ekstrand
2021-04-23 22:31 ` [PATCH 16/21] drm/i915/gem: Delay context creation Jason Ekstrand
2021-04-24  3:21   ` [Intel-gfx] " kernel test robot
2021-04-24  3:24   ` kernel test robot
2021-04-29 15:51   ` Daniel Vetter
2021-04-29 18:16     ` Jason Ekstrand
2021-04-29 18:56       ` Daniel Vetter
2021-04-29 19:01         ` Jason Ekstrand
2021-04-29 19:07           ` Daniel Vetter
2021-04-29 21:35             ` Jason Ekstrand
2021-04-30  6:53               ` Daniel Vetter
2021-04-30 11:58                 ` Tvrtko Ursulin
2021-04-30 12:30                   ` Daniel Vetter
2021-04-30 12:44                     ` Tvrtko Ursulin
2021-04-30 13:07                       ` Daniel Vetter
2021-04-30 13:15                         ` Tvrtko Ursulin
2021-04-30 16:27                 ` Jason Ekstrand
2021-04-30 16:33                   ` Daniel Vetter
2021-04-30 16:57                     ` Jason Ekstrand
2021-04-30 17:08                       ` Daniel Vetter
2021-04-23 22:31 ` [PATCH 17/21] drm/i915/gem: Don't allow changing the VM on running contexts Jason Ekstrand
2021-04-23 22:31 ` [PATCH 18/21] drm/i915/gem: Don't allow changing the engine set " Jason Ekstrand
2021-04-29 17:21   ` Daniel Vetter
2021-04-23 22:31 ` [PATCH 19/21] drm/i915/selftests: Take a VM in kernel_context() Jason Ekstrand
2021-04-23 22:31 ` [PATCH 20/21] i915/gem/selftests: Assign the VM at context creation in igt_shared_ctx_exec Jason Ekstrand
2021-04-29 17:19   ` [Intel-gfx] " Daniel Vetter
2021-04-23 22:31 ` [PATCH 21/21] drm/i915/gem: Roll all of context creation together Jason Ekstrand
2021-04-29 17:25   ` Daniel Vetter

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=CAOFGe96AkF2GbeC04Ozwbw_Q8cWPdnS5uqbtLUVV2Z5yDsX8ug@mail.gmail.com \
    --to=jason@jlekstrand.net \
    --cc=daniel@ffwll.ch \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=intel-gfx@lists.freedesktop.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).