From: Mika Kuoppala <mika.kuoppala@linux.intel.com>
To: intel-gfx@lists.freedesktop.org
Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Subject: Re: [PATCH 04/11] drm/i915: Add ioctl to set per-context parameters
Date: Wed, 07 Jan 2015 13:57:04 +0200 [thread overview]
Message-ID: <877fwy6bxr.fsf@gaia.fi.intel.com> (raw)
In-Reply-To: <1419437627-8670-5-git-send-email-rodrigo.vivi@intel.com>
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>
> ---
> 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
next prev parent reply other threads:[~2015-01-07 11:57 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 [this message]
2015-01-07 13:08 ` Daniel Vetter
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=877fwy6bxr.fsf@gaia.fi.intel.com \
--to=mika.kuoppala@linux.intel.com \
--cc=intel-gfx@lists.freedesktop.org \
--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.