Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c0bb617a authored by Mika Kuoppala's avatar Mika Kuoppala Committed by Daniel Vetter
Browse files

drm/i915: add i915_gem_context_get_hang_stats()



To get context hang statistics for specified context,
add i915_gem_context_get_hang_stats().

For arb-robustness, every context needs to have its own
hang statistics tracking. Added function will return
the user specified context statistics or in case of
default context, statistics from drm_i915_file_private.

v2: handle default context inside get_reset_state

v3: return struct pointer instead of passing it in as param
    (Chris Wilson)

Signed-off-by: default avatarMika Kuoppala <mika.kuoppala@intel.com>
Reviewed-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
Acked-by: default avatarBen Widawsky <ben@bwidawsk.net>
Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
parent e59ec13d
Loading
Loading
Loading
Loading
+4 −0
Original line number Original line Diff line number Diff line
@@ -1812,6 +1812,10 @@ static inline void i915_gem_context_unreference(struct i915_hw_context *ctx)
	kref_put(&ctx->ref, i915_gem_context_free);
	kref_put(&ctx->ref, i915_gem_context_free);
}
}


struct i915_ctx_hang_stats * __must_check
i915_gem_context_get_hang_stats(struct intel_ring_buffer *ring,
				struct drm_file *file,
				u32 id);
int i915_gem_context_create_ioctl(struct drm_device *dev, void *data,
int i915_gem_context_create_ioctl(struct drm_device *dev, void *data,
				  struct drm_file *file);
				  struct drm_file *file);
int i915_gem_context_destroy_ioctl(struct drm_device *dev, void *data,
int i915_gem_context_destroy_ioctl(struct drm_device *dev, void *data,
+28 −0
Original line number Original line Diff line number Diff line
@@ -303,6 +303,34 @@ static int context_idr_cleanup(int id, void *p, void *data)
	return 0;
	return 0;
}
}


struct i915_ctx_hang_stats *
i915_gem_context_get_hang_stats(struct intel_ring_buffer *ring,
				struct drm_file *file,
				u32 id)
{
	struct drm_i915_private *dev_priv = ring->dev->dev_private;
	struct drm_i915_file_private *file_priv = file->driver_priv;
	struct i915_hw_context *to;

	if (dev_priv->hw_contexts_disabled)
		return ERR_PTR(-ENOENT);

	if (ring->id != RCS)
		return ERR_PTR(-EINVAL);

	if (file == NULL)
		return ERR_PTR(-EINVAL);

	if (id == DEFAULT_CONTEXT_ID)
		return &file_priv->hang_stats;

	to = i915_gem_context_get(file->driver_priv, id);
	if (to == NULL)
		return ERR_PTR(-ENOENT);

	return &to->hang_stats;
}

void i915_gem_context_close(struct drm_device *dev, struct drm_file *file)
void i915_gem_context_close(struct drm_device *dev, struct drm_file *file)
{
{
	struct drm_i915_file_private *file_priv = file->driver_priv;
	struct drm_i915_file_private *file_priv = file->driver_priv;