[Intel-gfx] [PATCH] drm/i915: Specify bsd rings through exec flag
Gong, Zhipeng
zhipeng.gong at intel.com
Wed Aug 6 05:19:38 CEST 2014
>
> On Tue, Aug 05, 2014 at 03:54:04PM +0800, Zhipeng Gong wrote:
> > On Broadwell GT3 we have 2 Video Command Streamers (VCS), but
> > userspace has no control when using VCS1 or VCS2. This patch
> > introduces a mechanism to avoid the default ping-pong mode and use one
> > specific ring through execution flag.
> >
> > Signed-off-by: Zhipeng Gong <zhipeng.gong at intel.com>
> > ---
> > drivers/gpu/drm/i915/i915_gem_execbuffer.c | 19 +++++++++++++++++--
> > include/uapi/drm/i915_drm.h | 8 +++++++-
> > 2 files changed, 24 insertions(+), 3 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/i915/i915_gem_execbuffer.c
> > b/drivers/gpu/drm/i915/i915_gem_execbuffer.c
> > index 60998fc..f9ed8e0 100644
> > --- a/drivers/gpu/drm/i915/i915_gem_execbuffer.c
> > +++ b/drivers/gpu/drm/i915/i915_gem_execbuffer.c
> > @@ -1279,8 +1279,23 @@ i915_gem_do_execbuffer(struct drm_device *dev, void *data,
> > else if ((args->flags & I915_EXEC_RING_MASK) == I915_EXEC_BSD) {
> > if (HAS_BSD2(dev)) {
> > int ring_id;
> > - ring_id = gen8_dispatch_bsd_ring(dev, file);
> > - ring = &dev_priv->ring[ring_id];
> > +
> > + switch (args->flags & I915_EXEC_BSD_MASK) {
> > + case I915_EXEC_BSD_DEFAULT:
> > + ring_id = gen8_dispatch_bsd_ring(dev, file);
> > + ring = &dev_priv->ring[ring_id];
> > + break;
> > + case I915_EXEC_BSD_RING1:
> > + ring = &dev_priv->ring[VCS];
> > + break;
> > + case I915_EXEC_BSD_RING2:
> > + ring = &dev_priv->ring[VCS2];
> > + break;
> > + default:
> > + DRM_DEBUG("execbuf with unknown bsd ring: %d\n",
> > + (int)(args->flags & I915_EXEC_BSD_MASK));
> > + return -EINVAL;
> > + }
> > } else
> > ring = &dev_priv->ring[VCS];
> > } else
> > diff --git a/include/uapi/drm/i915_drm.h b/include/uapi/drm/i915_drm.h
> > index ff57f07..421420a 100644
> > --- a/include/uapi/drm/i915_drm.h
> > +++ b/include/uapi/drm/i915_drm.h
> > @@ -736,7 +736,13 @@ struct drm_i915_gem_execbuffer2 {
> > */
> > #define I915_EXEC_HANDLE_LUT (1<<12)
> >
> > -#define __I915_EXEC_UNKNOWN_FLAGS -(I915_EXEC_HANDLE_LUT<<1)
> > +/** Used for switching BSD rings on the platforms with two BSD rings */
> > +#define I915_EXEC_BSD_MASK (3<<13)
> > +#define I915_EXEC_BSD_DEFAULT (0<<13) /* default ping-pong mode */
> > +#define I915_EXEC_BSD_RING1 (1<<13)
> > +#define I915_EXEC_BSD_RING2 (2<<13)
>
> There is room in the ring selection flags for expansion.
> -Chris
Hi Chris
There is only three rooms in the I915_EXEC_RING_MASK, this feature will
occupy two rooms. If use these rooms, it will left few rooms for more
possible rings in the future and it also introduces a little bit
complexity to get the ring in the i915_do_gem_execbuffer.
-Zhipeng
More information about the Intel-gfx
mailing list