> > 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@xxxxxxxxx> > > --- > > 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 _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/intel-gfx