Nice to have a list of contexts handy for debug and perhaps other things
in the future.

Signed-off-by: Ben Widawsky <b...@bwidawsk.net>
---
 drivers/gpu/drm/i915/i915_context.c |    8 ++++++--
 drivers/gpu/drm/i915/i915_drv.h     |    3 +++
 2 files changed, 9 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/i915/i915_context.c 
b/drivers/gpu/drm/i915/i915_context.c
index 0547411..93a3822 100644
--- a/drivers/gpu/drm/i915/i915_context.c
+++ b/drivers/gpu/drm/i915/i915_context.c
@@ -193,11 +193,13 @@ static int logical_context_alloc(struct drm_device *dev, 
struct drm_file *file,
        if (!ret)
                ctx->ring_enable |= (1 << RCS);
 
-       if (ctx->ring_enable)
+       if (ctx->ring_enable) {
                DRM_DEBUG_DRIVER("Context %d allocated, rings %x\n", ctx->id,
                                 ctx->ring_enable);
-       else
+               list_add(&ctx->context_link, &dev_priv->context_list);
+       } else {
                ctx = NULL;
+       }
 
        *ctx_out = ctx;
        return 0;
@@ -298,6 +300,7 @@ static int logical_context_free(struct drm_file *file, 
uint32_t id)
 
        BUG_ON(ctx->obj->pin_count > 1);
        drm_gem_object_unreference(&ctx->obj->base);
+       list_del(&ctx->context_link);
 
        context_destroy_id(ctx);
 
@@ -404,6 +407,7 @@ void i915_context_load(struct drm_device *dev)
        size = roundup(size, 4096);
        dev_priv->context_size = size;
        DRM_DEBUG_DRIVER("Logical context size = %d\n", size);
+       INIT_LIST_HEAD(&dev_priv->context_list);
        ret = logical_context_alloc(dev, NULL, &dev_priv->default_context);
        if (ret)
                dev_priv->contexts_disabled = true;
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index 13e088f..165a5a5 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -765,6 +765,7 @@ typedef struct drm_i915_private {
        uint32_t context_size;
        struct drm_i915_gem_context *default_context;
        bool contexts_disabled;
+       struct list_head context_list;
 } drm_i915_private_t;
 
 enum i915_cache_level {
@@ -968,6 +969,8 @@ struct drm_i915_gem_context {
        struct drm_i915_gem_object *obj;
        bool is_default;
        bool is_initialized;
+
+       struct list_head context_link;
 };
 
 #define I915_CONTEXT_NORMAL_SWITCH     (1 << 0)
-- 
1.7.9

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to