Now that we have a compact tree representation for uabi engines, make
use of it for walking all user engines from catchall user interfaces
like debugfs and capabilities.

Signed-off-by: Chris Wilson <[email protected]>
---
 drivers/gpu/drm/i915/gt/intel_engine_cs.c     |  6 ++---
 .../gpu/drm/i915/gt/uc/intel_guc_submission.c |  2 +-
 drivers/gpu/drm/i915/i915_cmd_parser.c        |  3 +--
 drivers/gpu/drm/i915/i915_debugfs.c           | 26 +++++++------------
 drivers/gpu/drm/i915/i915_drv.h               |  8 ++++++
 drivers/gpu/drm/i915/i915_query.c             |  3 +--
 6 files changed, 22 insertions(+), 26 deletions(-)

diff --git a/drivers/gpu/drm/i915/gt/intel_engine_cs.c 
b/drivers/gpu/drm/i915/gt/intel_engine_cs.c
index 02b6565b2550..2cfe10c82bd9 100644
--- a/drivers/gpu/drm/i915/gt/intel_engine_cs.c
+++ b/drivers/gpu/drm/i915/gt/intel_engine_cs.c
@@ -695,12 +695,11 @@ void intel_engines_set_scheduler_caps(struct 
drm_i915_private *i915)
 #undef MAP
        };
        struct intel_engine_cs *engine;
-       enum intel_engine_id id;
        u32 enabled, disabled;
 
        enabled = 0;
        disabled = 0;
-       for_each_engine(engine, i915, id) { /* all engines must agree! */
+       for_each_user_engine(engine, i915) { /* all engines must agree! */
                int i;
 
                if (engine->schedule)
@@ -1227,11 +1226,10 @@ bool intel_engine_can_store_dword(struct 
intel_engine_cs *engine)
 unsigned int intel_engines_has_context_isolation(struct drm_i915_private *i915)
 {
        struct intel_engine_cs *engine;
-       enum intel_engine_id id;
        unsigned int which;
 
        which = 0;
-       for_each_engine(engine, i915, id)
+       for_each_user_engine(engine, i915)
                if (engine->default_state)
                        which |= BIT(engine->uabi_class);
 
diff --git a/drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c 
b/drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c
index a0f2a01365bc..c99cdbcce64e 100644
--- a/drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c
+++ b/drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c
@@ -488,7 +488,7 @@ static void guc_add_request(struct intel_guc *guc, struct 
i915_request *rq)
                           ring_tail, rq->fence.seqno);
        guc_ring_doorbell(client);
 
-       client->submissions[engine->id] += 1;
+       client->submissions[engine->guc_id] += 1;
 }
 
 /*
diff --git a/drivers/gpu/drm/i915/i915_cmd_parser.c 
b/drivers/gpu/drm/i915/i915_cmd_parser.c
index a28bcd2d7c09..730c1ed6d2a7 100644
--- a/drivers/gpu/drm/i915/i915_cmd_parser.c
+++ b/drivers/gpu/drm/i915/i915_cmd_parser.c
@@ -1352,11 +1352,10 @@ int intel_engine_cmd_parser(struct intel_engine_cs 
*engine,
 int i915_cmd_parser_get_version(struct drm_i915_private *dev_priv)
 {
        struct intel_engine_cs *engine;
-       enum intel_engine_id id;
        bool active = false;
 
        /* If the command parser is not enabled, report 0 - unsupported */
-       for_each_engine(engine, dev_priv, id) {
+       for_each_user_engine(engine, dev_priv) {
                if (intel_engine_needs_cmd_parser(engine)) {
                        active = true;
                        break;
diff --git a/drivers/gpu/drm/i915/i915_debugfs.c 
b/drivers/gpu/drm/i915/i915_debugfs.c
index c43f270085f5..675a7775d449 100644
--- a/drivers/gpu/drm/i915/i915_debugfs.c
+++ b/drivers/gpu/drm/i915/i915_debugfs.c
@@ -301,10 +301,9 @@ static void print_batch_pool_stats(struct seq_file *m,
        struct drm_i915_gem_object *obj;
        struct intel_engine_cs *engine;
        struct file_stats stats = {};
-       enum intel_engine_id id;
        int j;
 
-       for_each_engine(engine, dev_priv, id) {
+       for_each_user_engine(engine, dev_priv) {
                for (j = 0; j < ARRAY_SIZE(engine->batch_pool.cache_list); j++) 
{
                        list_for_each_entry(obj,
                                            &engine->batch_pool.cache_list[j],
@@ -387,7 +386,6 @@ static int i915_gem_batch_pool_info(struct seq_file *m, 
void *data)
        struct drm_device *dev = &dev_priv->drm;
        struct drm_i915_gem_object *obj;
        struct intel_engine_cs *engine;
-       enum intel_engine_id id;
        int total = 0;
        int ret, j;
 
@@ -395,7 +393,7 @@ static int i915_gem_batch_pool_info(struct seq_file *m, 
void *data)
        if (ret)
                return ret;
 
-       for_each_engine(engine, dev_priv, id) {
+       for_each_user_engine(engine, dev_priv) {
                for (j = 0; j < ARRAY_SIZE(engine->batch_pool.cache_list); j++) 
{
                        int count;
 
@@ -482,7 +480,6 @@ static int i915_interrupt_info(struct seq_file *m, void 
*data)
 {
        struct drm_i915_private *dev_priv = node_to_i915(m->private);
        struct intel_engine_cs *engine;
-       enum intel_engine_id id;
        intel_wakeref_t wakeref;
        int i, pipe;
 
@@ -685,7 +682,7 @@ static int i915_interrupt_info(struct seq_file *m, void 
*data)
                           I915_READ(GEN11_GUNIT_CSME_INTR_MASK));
 
        } else if (INTEL_GEN(dev_priv) >= 6) {
-               for_each_engine(engine, dev_priv, id) {
+               for_each_user_engine(engine, dev_priv) {
                        seq_printf(m,
                                   "Graphics Interrupt mask (%s):       %08x\n",
                                   engine->name, ENGINE_READ(engine, RING_IMR));
@@ -1079,7 +1076,6 @@ static int i915_hangcheck_info(struct seq_file *m, void 
*unused)
        struct intel_gt *gt = &i915->gt;
        struct intel_engine_cs *engine;
        intel_wakeref_t wakeref;
-       enum intel_engine_id id;
 
        seq_printf(m, "Reset flags: %lx\n", gt->reset.flags);
        if (test_bit(I915_WEDGED, &gt->reset.flags))
@@ -1104,7 +1100,7 @@ static int i915_hangcheck_info(struct seq_file *m, void 
*unused)
        seq_printf(m, "GT active? %s\n", yesno(gt->awake));
 
        with_intel_runtime_pm(&i915->runtime_pm, wakeref) {
-               for_each_engine(engine, i915, id) {
+               for_each_user_engine(engine, i915) {
                        struct intel_instdone instdone;
 
                        seq_printf(m, "%s: %d ms ago\n",
@@ -1957,7 +1953,6 @@ static void i915_guc_client_info(struct seq_file *m,
                                 struct intel_guc_client *client)
 {
        struct intel_engine_cs *engine;
-       enum intel_engine_id id;
        u64 tot = 0;
 
        seq_printf(m, "\tPriority %d, GuC stage index: %u, PD offset 0x%x\n",
@@ -1965,8 +1960,8 @@ static void i915_guc_client_info(struct seq_file *m,
        seq_printf(m, "\tDoorbell id %d, offset: 0x%lx\n",
                client->doorbell_id, client->doorbell_offset);
 
-       for_each_engine(engine, dev_priv, id) {
-               u64 submissions = client->submissions[id];
+       for_each_user_engine(engine, dev_priv) {
+               u64 submissions = client->submissions[engine->guc_id];
                tot += submissions;
                seq_printf(m, "\tSubmissions: %llu %s\n",
                                submissions, engine->name);
@@ -2006,7 +2001,6 @@ static int i915_guc_stage_pool(struct seq_file *m, void 
*data)
        struct drm_i915_private *dev_priv = node_to_i915(m->private);
        const struct intel_guc *guc = &dev_priv->gt.uc.guc;
        struct guc_stage_desc *desc = guc->stage_desc_pool_vaddr;
-       intel_engine_mask_t tmp;
        int index;
 
        if (!USES_GUC_SUBMISSION(dev_priv))
@@ -2035,7 +2029,7 @@ static int i915_guc_stage_pool(struct seq_file *m, void 
*data)
                           desc->wq_addr, desc->wq_size);
                seq_putc(m, '\n');
 
-               for_each_engine(engine, dev_priv, tmp) {
+               for_each_user_engine(engine, dev_priv) {
                        u32 guc_engine_id = engine->guc_id;
                        struct guc_execlist_context *lrc =
                                                &desc->lrc[guc_engine_id];
@@ -2841,7 +2835,6 @@ static int i915_engine_info(struct seq_file *m, void 
*unused)
        struct drm_i915_private *dev_priv = node_to_i915(m->private);
        struct intel_engine_cs *engine;
        intel_wakeref_t wakeref;
-       enum intel_engine_id id;
        struct drm_printer p;
 
        wakeref = intel_runtime_pm_get(&dev_priv->runtime_pm);
@@ -2853,7 +2846,7 @@ static int i915_engine_info(struct seq_file *m, void 
*unused)
                   RUNTIME_INFO(dev_priv)->cs_timestamp_frequency_khz);
 
        p = drm_seq_file_printer(m);
-       for_each_engine(engine, dev_priv, id)
+       for_each_user_engine(engine, dev_priv)
                intel_engine_dump(engine, &p, "%s\n", engine->name);
 
        intel_runtime_pm_put(&dev_priv->runtime_pm, wakeref);
@@ -2934,9 +2927,8 @@ static int i915_wa_registers(struct seq_file *m, void 
*unused)
 {
        struct drm_i915_private *i915 = node_to_i915(m->private);
        struct intel_engine_cs *engine;
-       enum intel_engine_id id;
 
-       for_each_engine(engine, i915, id) {
+       for_each_user_engine(engine, i915) {
                const struct i915_wa_list *wal = &engine->ctx_wa_list;
                const struct i915_wa *wa;
                unsigned int count;
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index b8a69f236510..8d1ad27b132d 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -1915,6 +1915,14 @@ static inline struct drm_i915_private 
*wopcm_to_i915(struct intel_wopcm *wopcm)
             ((engine__) = (dev_priv__)->engine[__mask_next_bit(tmp__)]), 1 : \
             0;)
 
+#define rb_to_uabi_engine(rb) \
+       rb_entry_safe(rb, struct intel_engine_cs, uabi_node)
+
+#define for_each_user_engine(engine__, i915__) \
+       for ((engine__) = rb_to_uabi_engine(rb_first(&(i915__)->uabi_engines));\
+            (engine__); \
+            (engine__) = rb_to_uabi_engine(rb_next(&(engine__)->uabi_node)))
+
 enum hdmi_force_audio {
        HDMI_AUDIO_OFF_DVI = -2,        /* no aux data for HDMI-DVI converter */
        HDMI_AUDIO_OFF,                 /* force turn off HDMI audio */
diff --git a/drivers/gpu/drm/i915/i915_query.c 
b/drivers/gpu/drm/i915/i915_query.c
index 70b1ad38e615..8abba3a31767 100644
--- a/drivers/gpu/drm/i915/i915_query.c
+++ b/drivers/gpu/drm/i915/i915_query.c
@@ -105,7 +105,6 @@ query_engine_info(struct drm_i915_private *i915,
        struct drm_i915_query_engine_info query;
        struct drm_i915_engine_info info = { };
        struct intel_engine_cs *engine;
-       enum intel_engine_id id;
        int len, ret;
 
        if (query_item->flags)
@@ -125,7 +124,7 @@ query_engine_info(struct drm_i915_private *i915,
 
        info_ptr = &query_ptr->engines[0];
 
-       for_each_engine(engine, i915, id) {
+       for_each_user_engine(engine, i915) {
                info.engine.engine_class = engine->uabi_class;
                info.engine.engine_instance = engine->uabi_instance;
                info.capabilities = engine->uabi_capabilities;
-- 
2.22.0

_______________________________________________
Intel-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to