All of lore.kernel.org
 help / color / mirror / Atom feed
From: Daniel Vetter <daniel@ffwll.ch>
To: Mika Kuoppala <mika.kuoppala@linux.intel.com>
Cc: intel-gfx@lists.freedesktop.org, Rodrigo Vivi <rodrigo.vivi@intel.com>
Subject: Re: [PATCH 04/11] drm/i915: Add ioctl to set per-context parameters
Date: Wed, 7 Jan 2015 14:08:46 +0100	[thread overview]
Message-ID: <20150107130846.GD26519@phenom.ffwll.local> (raw)
In-Reply-To: <877fwy6bxr.fsf@gaia.fi.intel.com>

On Wed, Jan 07, 2015 at 01:57:04PM +0200, Mika Kuoppala wrote:
> Rodrigo Vivi <rodrigo.vivi@intel.com> writes:
> 
> > From: Chris Wilson <chris@chris-wilson.co.uk>
> >
> > Sometimes we wish to tweak how an individual context behaves. Since we
> > always create a context for every filp, this means that individual
> > processes can fine tune their behaviour even if they do not explicitly
> > create a context.
> >
> > The first example parameter here is to enable multi-process GPU testing,
> > but the interface should be able to cope with passing arbitrarily complex
> > parameters.
> >
> > Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
> > Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
> 
> Reviewed-by: Mika Kuoppala <mika.kuoppala@intel.com>

Do we have the igt for this already somewhere? I've merged the prep patch
meanwhile.

Thanks, Daniel
> 
> > ---
> >  drivers/gpu/drm/i915/i915_dma.c         |  2 +
> >  drivers/gpu/drm/i915/i915_drv.h         |  4 ++
> >  drivers/gpu/drm/i915/i915_gem_context.c | 69 +++++++++++++++++++++++++++++++++
> >  include/uapi/drm/i915_drm.h             | 12 ++++++
> >  4 files changed, 87 insertions(+)
> >
> > diff --git a/drivers/gpu/drm/i915/i915_dma.c b/drivers/gpu/drm/i915/i915_dma.c
> > index 126a36f..3c3f33f 100644
> > --- a/drivers/gpu/drm/i915/i915_dma.c
> > +++ b/drivers/gpu/drm/i915/i915_dma.c
> > @@ -1066,6 +1066,8 @@ const struct drm_ioctl_desc i915_ioctls[] = {
> >  	DRM_IOCTL_DEF_DRV(I915_REG_READ, i915_reg_read_ioctl, DRM_UNLOCKED|DRM_RENDER_ALLOW),
> >  	DRM_IOCTL_DEF_DRV(I915_GET_RESET_STATS, i915_get_reset_stats_ioctl, DRM_UNLOCKED|DRM_RENDER_ALLOW),
> >  	DRM_IOCTL_DEF_DRV(I915_GEM_USERPTR, i915_gem_userptr_ioctl, DRM_UNLOCKED|DRM_RENDER_ALLOW),
> > +	DRM_IOCTL_DEF_DRV(I915_GEM_CONTEXT_GETPARAM, i915_gem_context_getparam_ioctl, DRM_UNLOCKED|DRM_RENDER_ALLOW),
> > +	DRM_IOCTL_DEF_DRV(I915_GEM_CONTEXT_SETPARAM, i915_gem_context_setparam_ioctl, DRM_UNLOCKED|DRM_RENDER_ALLOW),
> >  };
> >  
> >  int i915_max_ioctl = ARRAY_SIZE(i915_ioctls);
> > diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
> > index 3749415..9ae515e 100644
> > --- a/drivers/gpu/drm/i915/i915_drv.h
> > +++ b/drivers/gpu/drm/i915/i915_drv.h
> > @@ -2898,6 +2898,10 @@ int i915_gem_context_create_ioctl(struct drm_device *dev, void *data,
> >  				  struct drm_file *file);
> >  int i915_gem_context_destroy_ioctl(struct drm_device *dev, void *data,
> >  				   struct drm_file *file);
> > +int i915_gem_context_getparam_ioctl(struct drm_device *dev, void *data,
> > +				    struct drm_file *file_priv);
> > +int i915_gem_context_setparam_ioctl(struct drm_device *dev, void *data,
> > +				    struct drm_file *file_priv);
> >  
> >  /* i915_gem_evict.c */
> >  int __must_check i915_gem_evict_something(struct drm_device *dev,
> > diff --git a/drivers/gpu/drm/i915/i915_gem_context.c b/drivers/gpu/drm/i915/i915_gem_context.c
> > index bf9778e..8603bf4 100644
> > --- a/drivers/gpu/drm/i915/i915_gem_context.c
> > +++ b/drivers/gpu/drm/i915/i915_gem_context.c
> > @@ -794,3 +794,72 @@ int i915_gem_context_destroy_ioctl(struct drm_device *dev, void *data,
> >  	DRM_DEBUG_DRIVER("HW context %d destroyed\n", args->ctx_id);
> >  	return 0;
> >  }
> > +
> > +int i915_gem_context_getparam_ioctl(struct drm_device *dev, void *data,
> > +				    struct drm_file *file)
> > +{
> > +	struct drm_i915_file_private *file_priv = file->driver_priv;
> > +	struct drm_i915_gem_context_param *args = data;
> > +	struct intel_context *ctx;
> > +	int ret;
> > +
> > +	ret = i915_mutex_lock_interruptible(dev);
> > +	if (ret)
> > +		return ret;
> > +
> > +	ctx = i915_gem_context_get(file_priv, args->ctx_id);
> > +	if (IS_ERR(ctx)) {
> > +		mutex_unlock(&dev->struct_mutex);
> > +		return PTR_ERR(ctx);
> > +	}
> > +
> > +	args->size = 0;
> > +	switch (args->param) {
> > +	case I915_CONTEXT_PARAM_BAN_PERIOD:
> > +		args->value = ctx->hang_stats.ban_period_seconds;
> > +		break;
> > +	default:
> > +		ret = -EINVAL;
> > +		break;
> > +	}
> > +	mutex_unlock(&dev->struct_mutex);
> > +
> > +	return ret;
> > +}
> > +
> > +int i915_gem_context_setparam_ioctl(struct drm_device *dev, void *data,
> > +				    struct drm_file *file)
> > +{
> > +	struct drm_i915_file_private *file_priv = file->driver_priv;
> > +	struct drm_i915_gem_context_param *args = data;
> > +	struct intel_context *ctx;
> > +	int ret;
> > +
> > +	ret = i915_mutex_lock_interruptible(dev);
> > +	if (ret)
> > +		return ret;
> > +
> > +	ctx = i915_gem_context_get(file_priv, args->ctx_id);
> > +	if (IS_ERR(ctx)) {
> > +		mutex_unlock(&dev->struct_mutex);
> > +		return PTR_ERR(ctx);
> > +	}
> > +
> > +	switch (args->param) {
> > +	case I915_CONTEXT_PARAM_BAN_PERIOD:
> > +		if (args->size)
> > +			ret = -EINVAL;
> > +		else if (args->value < ctx->hang_stats.ban_period_seconds &&
> > +			 !capable(CAP_SYS_ADMIN))
> > +			ret = -EPERM;
> > +		else
> > +			ctx->hang_stats.ban_period_seconds = args->value;
> > +		break;
> > +	default:
> > +		ret = -EINVAL;
> > +		break;
> > +	}
> > +	mutex_unlock(&dev->struct_mutex);
> > +
> > +	return ret;
> > +}
> > diff --git a/include/uapi/drm/i915_drm.h b/include/uapi/drm/i915_drm.h
> > index fa99129..d253c85 100644
> > --- a/include/uapi/drm/i915_drm.h
> > +++ b/include/uapi/drm/i915_drm.h
> > @@ -224,6 +224,8 @@ typedef struct _drm_i915_sarea {
> >  #define DRM_I915_REG_READ		0x31
> >  #define DRM_I915_GET_RESET_STATS	0x32
> >  #define DRM_I915_GEM_USERPTR		0x33
> > +#define DRM_I915_GEM_CONTEXT_GETPARAM	0x34
> > +#define DRM_I915_GEM_CONTEXT_SETPARAM	0x35
> >  
> >  #define DRM_IOCTL_I915_INIT		DRM_IOW( DRM_COMMAND_BASE + DRM_I915_INIT, drm_i915_init_t)
> >  #define DRM_IOCTL_I915_FLUSH		DRM_IO ( DRM_COMMAND_BASE + DRM_I915_FLUSH)
> > @@ -275,6 +277,8 @@ typedef struct _drm_i915_sarea {
> >  #define DRM_IOCTL_I915_REG_READ			DRM_IOWR (DRM_COMMAND_BASE + DRM_I915_REG_READ, struct drm_i915_reg_read)
> >  #define DRM_IOCTL_I915_GET_RESET_STATS		DRM_IOWR (DRM_COMMAND_BASE + DRM_I915_GET_RESET_STATS, struct drm_i915_reset_stats)
> >  #define DRM_IOCTL_I915_GEM_USERPTR			DRM_IOWR (DRM_COMMAND_BASE + DRM_I915_GEM_USERPTR, struct drm_i915_gem_userptr)
> > +#define DRM_IOCTL_I915_GEM_CONTEXT_GETPARAM	DRM_IOWR (DRM_COMMAND_BASE + DRM_I915_GEM_CONTEXT_GETPARAM, struct drm_i915_gem_context_param)
> > +#define DRM_IOCTL_I915_GEM_CONTEXT_SETPARAM	DRM_IOWR (DRM_COMMAND_BASE + DRM_I915_GEM_CONTEXT_SETPARAM, struct drm_i915_gem_context_param)
> >  
> >  /* Allow drivers to submit batchbuffers directly to hardware, relying
> >   * on the security mechanisms provided by hardware.
> > @@ -1080,4 +1084,12 @@ struct drm_i915_gem_userptr {
> >  	__u32 handle;
> >  };
> >  
> > +struct drm_i915_gem_context_param {
> > +	__u32 ctx_id;
> > +	__u32 size;
> > +	__u64 param;
> > +#define I915_CONTEXT_PARAM_BAN_PERIOD 0x1
> > +	__u64 value;
> > +};
> > +
> >  #endif /* _UAPI_I915_DRM_H_ */
> > -- 
> > 1.9.3
> >
> > _______________________________________________
> > Intel-gfx mailing list
> > Intel-gfx@lists.freedesktop.org
> > http://lists.freedesktop.org/mailman/listinfo/intel-gfx
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/intel-gfx

-- 
Daniel Vetter
Software Engineer, Intel Corporation
+41 (0) 79 365 57 48 - http://blog.ffwll.ch
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx

  reply	other threads:[~2015-01-07 13:08 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-12-24 16:13 [PATCH 00/11] drm-intel-collector - update Rodrigo Vivi
2014-12-24 16:13 ` [PATCH 01/11] drm/i915: Specify bsd rings through exec flag Rodrigo Vivi
2014-12-24 16:13 ` [PATCH 02/11] drm/i915: add I915_PARAM_HAS_BSD2 to i915_getparam Rodrigo Vivi
2014-12-24 16:13 ` [PATCH 03/11] drm/i915: Move the ban period onto the context Rodrigo Vivi
2015-01-07 11:07   ` Mika Kuoppala
2014-12-24 16:13 ` [PATCH 04/11] drm/i915: Add ioctl to set per-context parameters Rodrigo Vivi
2015-01-07 11:57   ` Mika Kuoppala
2015-01-07 13:08     ` Daniel Vetter [this message]
2015-01-07 13:18       ` Chris Wilson
2015-01-07 14:13         ` Mika Kuoppala
2015-01-07 14:21           ` [PATCH] tests/gem_reset_stats: add tests for ban period ioctl Mika Kuoppala
2015-01-07 14:21             ` Chris Wilson
2015-01-07 16:49               ` Daniel Vetter
2014-12-24 16:13 ` [PATCH 05/11] drm/i915: Put logical pipe_control emission into a helper Rodrigo Vivi
2014-12-24 16:13 ` [PATCH 06/11] drm/i915: Add WaCsStallBeforeStateCacheInvalidate:bdw, chv to logical ring Rodrigo Vivi
2014-12-24 16:13 ` [PATCH 07/11] drm/i915: Remove pinned check from madvise_ioctl Rodrigo Vivi
2014-12-24 16:13 ` [PATCH 08/11] drm/i915: Extend GET_APERTURE ioctl to report available map space Rodrigo Vivi
2014-12-24 16:13 ` [PATCH 09/11] drm/i915: Display current hangcheck status in debugfs Rodrigo Vivi
2014-12-24 16:13 ` [PATCH 10/11] drm/i915/vlv: check port in infoframe_enabled v2 Rodrigo Vivi
2014-12-24 16:13 ` [PATCH 11/11] drm/i915: vlv: fix save/restore of GFX_MAX_REQ_COUNT reg Rodrigo Vivi

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=20150107130846.GD26519@phenom.ffwll.local \
    --to=daniel@ffwll.ch \
    --cc=intel-gfx@lists.freedesktop.org \
    --cc=mika.kuoppala@linux.intel.com \
    --cc=rodrigo.vivi@intel.com \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.