All of lore.kernel.org
 help / color / mirror / Atom feed
From: Daniel Vetter <daniel@ffwll.ch>
To: Ian Romanick <idr@freedesktop.org>
Cc: Daniel Vetter <daniel.vetter@ffwll.ch>, intel-gfx@lists.freedesktop.org
Subject: Re: [PATCH 7/7] drm/i915: add i915_get_reset_stats_ioctl
Date: Sun, 27 Oct 2013 13:30:21 +0100	[thread overview]
Message-ID: <20131027123021.GA18189@phenom.ffwll.local> (raw)
In-Reply-To: <526B1E0B.5000707@freedesktop.org>

On Fri, Oct 25, 2013 at 06:42:35PM -0700, Ian Romanick wrote:
> Since the Mesa merge window is closing soon, I'm finally getting back on
> this.  I've pushed a rebase of my old Mesa branch to my fd.o repo
> 
> http://cgit.freedesktop.org/~idr/mesa/log/?h=robustness3
> 
> I have a couple questions...
> 
> 1. Has any of this landed an a kernel tree anywhere?

Afaik everything but the actual ioctl and i-g-t testcase has landed.

> 2. Has any support code landed in a libdrm tree anywhere?

Dunno whether Mika has libdrm patches. Since mesa is the only expected
user I'd just go with putting the ioctl wrapper (using the drmIoctl
helper) into mesa itself, that get rids of a dep for merging this support.

> 3. What method should I use to detect that the kernel has support?  In
> early discussions, reset notification was only going to be available on
> some GPUs, so there was a getparam to detect actual availability.  I
> guess now it's just based on kernel version?

Usually we add a new feature flag to get get_param ioctl if there's no
natural way otherwise for userspace to figure this out (usually by calling
the new ioctl and disabling the feature if that doesn't work).
-Daniel

> 
> It looks like I should just need to update df87cdd and 61dad8e in my
> Mesa tree.
> 
> On 07/03/2013 07:22 AM, Mika Kuoppala wrote:
> > This ioctl returns reset stats for specified context.
> > 
> > The struct returned contains context loss counters.
> > 
> > reset_count:    all resets across all contexts
> > batch_active:   active batches lost on resets
> > batch_pending:  pending batches lost on resets
> > 
> > v2: get rid of state tracking completely and deliver only counts. Idea
> >     from Chris Wilson.
> > 
> > v3: fix commit message
> > 
> > v4: default context handled inside i915_gem_contest_get_hang_stats
> > 
> > v5: reset_count only for priviledged process
> > 
> > v6: ctx=0 needs CAP_SYS_ADMIN for batch_* counters (Chris Wilson)
> > 
> > v7: context hang stats never returns NULL
> > 
> > Signed-off-by: Mika Kuoppala <mika.kuoppala@intel.com>
> > Cc: Ian Romanick <idr@freedesktop.org>
> > Cc: Chris Wilson <chris@chris-wilson.co.uk>
> > Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
> > ---
> >  drivers/gpu/drm/i915/i915_dma.c |    1 +
> >  drivers/gpu/drm/i915/i915_drv.c |   34 ++++++++++++++++++++++++++++++++++
> >  drivers/gpu/drm/i915/i915_drv.h |    2 ++
> >  include/uapi/drm/i915_drm.h     |   17 +++++++++++++++++
> >  4 files changed, 54 insertions(+)
> > 
> > diff --git a/drivers/gpu/drm/i915/i915_dma.c b/drivers/gpu/drm/i915/i915_dma.c
> > index 0e22142..d1a006f 100644
> > --- a/drivers/gpu/drm/i915/i915_dma.c
> > +++ b/drivers/gpu/drm/i915/i915_dma.c
> > @@ -1889,6 +1889,7 @@ struct drm_ioctl_desc i915_ioctls[] = {
> >  	DRM_IOCTL_DEF_DRV(I915_GEM_CONTEXT_CREATE, i915_gem_context_create_ioctl, DRM_UNLOCKED),
> >  	DRM_IOCTL_DEF_DRV(I915_GEM_CONTEXT_DESTROY, i915_gem_context_destroy_ioctl, DRM_UNLOCKED),
> >  	DRM_IOCTL_DEF_DRV(I915_REG_READ, i915_reg_read_ioctl, DRM_UNLOCKED),
> > +	DRM_IOCTL_DEF_DRV(I915_GET_RESET_STATS, i915_get_reset_stats_ioctl, DRM_UNLOCKED),
> >  };
> >  
> >  int i915_max_ioctl = DRM_ARRAY_SIZE(i915_ioctls);
> > diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c
> > index 33cb973..0d4e3a8 100644
> > --- a/drivers/gpu/drm/i915/i915_drv.c
> > +++ b/drivers/gpu/drm/i915/i915_drv.c
> > @@ -1350,3 +1350,37 @@ int i915_reg_read_ioctl(struct drm_device *dev,
> >  
> >  	return 0;
> >  }
> > +
> > +int i915_get_reset_stats_ioctl(struct drm_device *dev,
> > +			       void *data, struct drm_file *file)
> > +{
> > +	struct drm_i915_private *dev_priv = dev->dev_private;
> > +	struct drm_i915_reset_stats *args = data;
> > +	struct i915_ctx_hang_stats *hs;
> > +	int ret;
> > +
> > +	if (args->ctx_id == 0 && !capable(CAP_SYS_ADMIN))
> > +		return -EPERM;
> > +
> > +	ret = mutex_lock_interruptible(&dev->struct_mutex);
> > +	if (ret)
> > +		return ret;
> > +
> > +	hs = i915_gem_context_get_hang_stats(dev, file, args->ctx_id);
> > +	if (IS_ERR(hs)) {
> > +		mutex_unlock(&dev->struct_mutex);
> > +		return PTR_ERR(hs);
> > +	}
> > +
> > +	if (capable(CAP_SYS_ADMIN))
> > +		args->reset_count = i915_reset_count(&dev_priv->gpu_error);
> > +	else
> > +		args->reset_count = 0;
> > +
> > +	args->batch_active = hs->batch_active;
> > +	args->batch_pending = hs->batch_pending;
> > +
> > +	mutex_unlock(&dev->struct_mutex);
> > +
> > +	return 0;
> > +}
> > diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
> > index 1def049..0ca98fa 100644
> > --- a/drivers/gpu/drm/i915/i915_drv.h
> > +++ b/drivers/gpu/drm/i915/i915_drv.h
> > @@ -2021,6 +2021,8 @@ extern int intel_enable_rc6(const struct drm_device *dev);
> >  extern bool i915_semaphore_is_enabled(struct drm_device *dev);
> >  int i915_reg_read_ioctl(struct drm_device *dev, void *data,
> >  			struct drm_file *file);
> > +int i915_get_reset_stats_ioctl(struct drm_device *dev, void *data,
> > +			       struct drm_file *file);
> >  
> >  /* overlay */
> >  #ifdef CONFIG_DEBUG_FS
> > diff --git a/include/uapi/drm/i915_drm.h b/include/uapi/drm/i915_drm.h
> > index 923ed7f..29b07fd 100644
> > --- a/include/uapi/drm/i915_drm.h
> > +++ b/include/uapi/drm/i915_drm.h
> > @@ -198,6 +198,7 @@ typedef struct _drm_i915_sarea {
> >  #define DRM_I915_GEM_SET_CACHING	0x2f
> >  #define DRM_I915_GEM_GET_CACHING	0x30
> >  #define DRM_I915_REG_READ		0x31
> > +#define DRM_I915_GET_RESET_STATS	0x32
> >  
> >  #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)
> > @@ -247,6 +248,7 @@ typedef struct _drm_i915_sarea {
> >  #define DRM_IOCTL_I915_GEM_CONTEXT_CREATE	DRM_IOWR (DRM_COMMAND_BASE + DRM_I915_GEM_CONTEXT_CREATE, struct drm_i915_gem_context_create)
> >  #define DRM_IOCTL_I915_GEM_CONTEXT_DESTROY	DRM_IOW (DRM_COMMAND_BASE + DRM_I915_GEM_CONTEXT_DESTROY, struct drm_i915_gem_context_destroy)
> >  #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)
> >  
> >  /* Allow drivers to submit batchbuffers directly to hardware, relying
> >   * on the security mechanisms provided by hardware.
> > @@ -981,4 +983,19 @@ struct drm_i915_reg_read {
> >  	__u64 offset;
> >  	__u64 val; /* Return value */
> >  };
> > +
> > +struct drm_i915_reset_stats {
> > +	__u32 ctx_id;
> > +	__u32 flags;
> > +
> > +	/* For all contexts */
> > +	__u32 reset_count;
> > +
> > +	/* For this context */
> > +	__u32 batch_active;
> > +	__u32 batch_pending;
> > +
> > +	__u32 pad;
> > +};
> > +
> >  #endif /* _UAPI_I915_DRM_H_ */
> > 
> 

-- 
Daniel Vetter
Software Engineer, Intel Corporation
+41 (0) 79 365 57 48 - http://blog.ffwll.ch

  reply	other threads:[~2013-10-27 12:30 UTC|newest]

Thread overview: 29+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-07-03 14:22 [PATCH 0/7] Hangcheck and arb robustness Mika Kuoppala
2013-07-03 14:22 ` [PATCH 1/7] drm/i915: Fix retrieval of hangcheck stats Mika Kuoppala
2013-07-03 14:22 ` [PATCH 2/7] drm/i915: Replace open-coding of DEFAULT_CONTEXT_ID Mika Kuoppala
2013-07-03 14:22 ` [PATCH 3/7] drm/i915: introduce i915_queue_hangcheck Mika Kuoppala
2013-07-03 14:22 ` [PATCH 4/7] drm/i915: no hangcheck when reset is in progress Mika Kuoppala
2013-07-16  8:45   ` Daniel Vetter
2013-07-03 14:22 ` [PATCH 5/7] drm/i915: queue hangcheck on reset Mika Kuoppala
2013-07-16  8:49   ` Daniel Vetter
2013-07-16  9:16     ` Chris Wilson
2013-07-03 14:22 ` [PATCH 6/7] drm/i915: add i915_reset_count Mika Kuoppala
2013-07-03 14:22 ` [PATCH 7/7] drm/i915: add i915_get_reset_stats_ioctl Mika Kuoppala
2013-07-03 15:14   ` Chris Wilson
2013-07-03 21:23     ` Ben Widawsky
2013-07-03 21:41       ` Chris Wilson
2013-07-03 21:44         ` Ben Widawsky
2013-07-03 21:58           ` Daniel Vetter
2013-07-03 22:00             ` Ben Widawsky
2013-07-04  7:54               ` Ville Syrjälä
2013-07-04 16:39                 ` Ben Widawsky
2013-10-26  1:42   ` Ian Romanick
2013-10-27 12:30     ` Daniel Vetter [this message]
2013-10-29 22:29       ` Ian Romanick
2013-10-30  8:21         ` Daniel Vetter
2013-11-08  5:48           ` Dave Airlie
2013-11-08  6:32             ` Daniel Vetter
2013-11-08 17:21               ` Ian Romanick
2013-11-08 19:00                 ` Dave Airlie
2013-11-08 21:20                   ` Ian Romanick
2013-11-08 19:22               ` Jesse Barnes

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=20131027123021.GA18189@phenom.ffwll.local \
    --to=daniel@ffwll.ch \
    --cc=daniel.vetter@ffwll.ch \
    --cc=idr@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 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.