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,
                                  struct drm_file *file);
 int i915_gem_context_destroy_ioctl(struct drm_device *dev, void *data,
 
        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)
 {
        struct drm_i915_file_private *file_priv = file->driver_priv;