Re: [Intel-gfx] [RFC 04/14] drm/i915/pmu: Decouple uAPI engine ids

2017-07-26 Thread Tvrtko Ursulin


On 25/07/2017 02:18, Ben Widawsky wrote:

On 17-07-18 15:36:08, Tvrtko Ursulin wrote:

From: Tvrtko Ursulin 

As elsewhere in the code we have to decouple the binary
engine identifiers for easier maintenance.

Also the sampler mask was incorrect in the timer callback.



I don't quite understand the point of this patch... can you perhaps 
embellish

the commit message?


It is to decouple the ABI namespace from the driver internal enumeration 
of engines and so allow the latter to be refactored in the future, and 
at the same time fix the fist patch to index engines other than RCS 
correctly.


I did not bother with smart commit message for the first few patches 
since they really should be squashed with the first one from Chris.


Regards,

Tvrtko



Signed-off-by: Tvrtko Ursulin 
---
drivers/gpu/drm/i915/i915_pmu.c | 44 
-

1 file changed, 39 insertions(+), 5 deletions(-)

diff --git a/drivers/gpu/drm/i915/i915_pmu.c 
b/drivers/gpu/drm/i915/i915_pmu.c

index f03ddad44da6..9a8208dba7a9 100644
--- a/drivers/gpu/drm/i915/i915_pmu.c
+++ b/drivers/gpu/drm/i915/i915_pmu.c
@@ -10,6 +10,25 @@
#define RING_MASK 0x
#define RING_MAX 32

+#define ENGINE_SAMPLE_MASK (0xf)
+#define ENGINE_SAMPLE_BITS (4)
+
+static const unsigned int engine_map[I915_NUM_ENGINES] = {
+[RCS] = I915_SAMPLE_RCS,
+[BCS] = I915_SAMPLE_BCS,
+[VCS] = I915_SAMPLE_VCS,
+[VCS2] = I915_SAMPLE_VCS2,
+[VECS] = I915_SAMPLE_VECS,
+};
+
+static const unsigned int user_engine_map[I915_NUM_ENGINES] = {
+[I915_SAMPLE_RCS] = RCS,
+[I915_SAMPLE_BCS] = BCS,
+[I915_SAMPLE_VCS] = VCS,
+[I915_SAMPLE_VCS2] = VCS2,
+[I915_SAMPLE_VECS] = VECS,
+};
+
static void engines_sample(struct drm_i915_private *dev_priv)
{
struct intel_engine_cs *engine;
@@ -26,9 +45,16 @@ static void engines_sample(struct drm_i915_private 
*dev_priv)

return;

for_each_engine(engine, dev_priv, id) {
+unsigned int user_engine = engine_map[id];
u32 val;

-if ((dev_priv->pmu.enable & (0x7 << (4*id))) == 0)
+if (WARN_ON_ONCE(id >= ARRAY_SIZE(engine_map)))
+continue;
+else
+user_engine = engine_map[id];
+
+if (!(dev_priv->pmu.enable &
+(ENGINE_SAMPLE_MASK << (ENGINE_SAMPLE_BITS * user_engine
continue;

if (i915_seqno_passed(intel_engine_get_seqno(engine),
@@ -112,6 +138,11 @@ static int engine_event_init(struct perf_event 
*event)

int engine = event->attr.config >> 2;
int sample = event->attr.config & 3;

+if (WARN_ON_ONCE(engine >= ARRAY_SIZE(user_engine_map)))
+return -ENOENT;
+else
+engine = user_engine_map[engine];
+
switch (sample) {
case I915_SAMPLE_QUEUED:
case I915_SAMPLE_BUSY:
@@ -125,9 +156,6 @@ static int engine_event_init(struct perf_event 
*event)

return -ENOENT;
}

-if (engine >= I915_NUM_ENGINES)
-return -ENOENT;
-
if (!i915->engine[engine])
return -ENODEV;

@@ -369,7 +397,13 @@ static void i915_pmu_event_read(struct perf_event 
*event)

if (event->attr.config < 32) {
int engine = event->attr.config >> 2;
int sample = event->attr.config & 3;
-val = i915->engine[engine]->pmu_sample[sample];
+
+if (WARN_ON_ONCE(engine >= ARRAY_SIZE(user_engine_map))) {
+/* Do nothing */
+} else {
+engine = user_engine_map[engine];
+val = i915->engine[engine]->pmu_sample[sample];
+}
} else switch (event->attr.config) {
case I915_PMU_ACTUAL_FREQUENCY:
val = i915->pmu.sample[__I915_SAMPLE_FREQ_ACT];
--
2.9.4




___
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx


Re: [Intel-gfx] [RFC 04/14] drm/i915/pmu: Decouple uAPI engine ids

2017-07-24 Thread Ben Widawsky

On 17-07-18 15:36:08, Tvrtko Ursulin wrote:

From: Tvrtko Ursulin 

As elsewhere in the code we have to decouple the binary
engine identifiers for easier maintenance.

Also the sampler mask was incorrect in the timer callback.



I don't quite understand the point of this patch... can you perhaps embellish
the commit message?


Signed-off-by: Tvrtko Ursulin 
---
drivers/gpu/drm/i915/i915_pmu.c | 44 -
1 file changed, 39 insertions(+), 5 deletions(-)

diff --git a/drivers/gpu/drm/i915/i915_pmu.c b/drivers/gpu/drm/i915/i915_pmu.c
index f03ddad44da6..9a8208dba7a9 100644
--- a/drivers/gpu/drm/i915/i915_pmu.c
+++ b/drivers/gpu/drm/i915/i915_pmu.c
@@ -10,6 +10,25 @@
#define RING_MASK 0x
#define RING_MAX 32

+#define ENGINE_SAMPLE_MASK (0xf)
+#define ENGINE_SAMPLE_BITS (4)
+
+static const unsigned int engine_map[I915_NUM_ENGINES] = {
+   [RCS] = I915_SAMPLE_RCS,
+   [BCS] = I915_SAMPLE_BCS,
+   [VCS] = I915_SAMPLE_VCS,
+   [VCS2] = I915_SAMPLE_VCS2,
+   [VECS] = I915_SAMPLE_VECS,
+};
+
+static const unsigned int user_engine_map[I915_NUM_ENGINES] = {
+   [I915_SAMPLE_RCS] = RCS,
+   [I915_SAMPLE_BCS] = BCS,
+   [I915_SAMPLE_VCS] = VCS,
+   [I915_SAMPLE_VCS2] = VCS2,
+   [I915_SAMPLE_VECS] = VECS,
+};
+
static void engines_sample(struct drm_i915_private *dev_priv)
{
struct intel_engine_cs *engine;
@@ -26,9 +45,16 @@ static void engines_sample(struct drm_i915_private *dev_priv)
return;

for_each_engine(engine, dev_priv, id) {
+   unsigned int user_engine = engine_map[id];
u32 val;

-   if ((dev_priv->pmu.enable & (0x7 << (4*id))) == 0)
+   if (WARN_ON_ONCE(id >= ARRAY_SIZE(engine_map)))
+   continue;
+   else
+   user_engine = engine_map[id];
+
+   if (!(dev_priv->pmu.enable &
+   (ENGINE_SAMPLE_MASK << (ENGINE_SAMPLE_BITS * user_engine
continue;

if (i915_seqno_passed(intel_engine_get_seqno(engine),
@@ -112,6 +138,11 @@ static int engine_event_init(struct perf_event *event)
int engine = event->attr.config >> 2;
int sample = event->attr.config & 3;

+   if (WARN_ON_ONCE(engine >= ARRAY_SIZE(user_engine_map)))
+   return -ENOENT;
+   else
+   engine = user_engine_map[engine];
+
switch (sample) {
case I915_SAMPLE_QUEUED:
case I915_SAMPLE_BUSY:
@@ -125,9 +156,6 @@ static int engine_event_init(struct perf_event *event)
return -ENOENT;
}

-   if (engine >= I915_NUM_ENGINES)
-   return -ENOENT;
-
if (!i915->engine[engine])
return -ENODEV;

@@ -369,7 +397,13 @@ static void i915_pmu_event_read(struct perf_event *event)
if (event->attr.config < 32) {
int engine = event->attr.config >> 2;
int sample = event->attr.config & 3;
-   val = i915->engine[engine]->pmu_sample[sample];
+
+   if (WARN_ON_ONCE(engine >= ARRAY_SIZE(user_engine_map))) {
+   /* Do nothing */
+   } else {
+   engine = user_engine_map[engine];
+   val = i915->engine[engine]->pmu_sample[sample];
+   }
} else switch (event->attr.config) {
case I915_PMU_ACTUAL_FREQUENCY:
val = i915->pmu.sample[__I915_SAMPLE_FREQ_ACT];
--
2.9.4



--
Ben Widawsky, Intel Open Source Technology Center
___
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx


[Intel-gfx] [RFC 04/14] drm/i915/pmu: Decouple uAPI engine ids

2017-07-18 Thread Tvrtko Ursulin
From: Tvrtko Ursulin 

As elsewhere in the code we have to decouple the binary
engine identifiers for easier maintenance.

Also the sampler mask was incorrect in the timer callback.

Signed-off-by: Tvrtko Ursulin 
---
 drivers/gpu/drm/i915/i915_pmu.c | 44 -
 1 file changed, 39 insertions(+), 5 deletions(-)

diff --git a/drivers/gpu/drm/i915/i915_pmu.c b/drivers/gpu/drm/i915/i915_pmu.c
index f03ddad44da6..9a8208dba7a9 100644
--- a/drivers/gpu/drm/i915/i915_pmu.c
+++ b/drivers/gpu/drm/i915/i915_pmu.c
@@ -10,6 +10,25 @@
 #define RING_MASK 0x
 #define RING_MAX 32
 
+#define ENGINE_SAMPLE_MASK (0xf)
+#define ENGINE_SAMPLE_BITS (4)
+
+static const unsigned int engine_map[I915_NUM_ENGINES] = {
+   [RCS] = I915_SAMPLE_RCS,
+   [BCS] = I915_SAMPLE_BCS,
+   [VCS] = I915_SAMPLE_VCS,
+   [VCS2] = I915_SAMPLE_VCS2,
+   [VECS] = I915_SAMPLE_VECS,
+};
+
+static const unsigned int user_engine_map[I915_NUM_ENGINES] = {
+   [I915_SAMPLE_RCS] = RCS,
+   [I915_SAMPLE_BCS] = BCS,
+   [I915_SAMPLE_VCS] = VCS,
+   [I915_SAMPLE_VCS2] = VCS2,
+   [I915_SAMPLE_VECS] = VECS,
+};
+
 static void engines_sample(struct drm_i915_private *dev_priv)
 {
struct intel_engine_cs *engine;
@@ -26,9 +45,16 @@ static void engines_sample(struct drm_i915_private *dev_priv)
return;
 
for_each_engine(engine, dev_priv, id) {
+   unsigned int user_engine = engine_map[id];
u32 val;
 
-   if ((dev_priv->pmu.enable & (0x7 << (4*id))) == 0)
+   if (WARN_ON_ONCE(id >= ARRAY_SIZE(engine_map)))
+   continue;
+   else
+   user_engine = engine_map[id];
+
+   if (!(dev_priv->pmu.enable &
+   (ENGINE_SAMPLE_MASK << (ENGINE_SAMPLE_BITS * user_engine
continue;
 
if (i915_seqno_passed(intel_engine_get_seqno(engine),
@@ -112,6 +138,11 @@ static int engine_event_init(struct perf_event *event)
int engine = event->attr.config >> 2;
int sample = event->attr.config & 3;
 
+   if (WARN_ON_ONCE(engine >= ARRAY_SIZE(user_engine_map)))
+   return -ENOENT;
+   else
+   engine = user_engine_map[engine];
+
switch (sample) {
case I915_SAMPLE_QUEUED:
case I915_SAMPLE_BUSY:
@@ -125,9 +156,6 @@ static int engine_event_init(struct perf_event *event)
return -ENOENT;
}
 
-   if (engine >= I915_NUM_ENGINES)
-   return -ENOENT;
-
if (!i915->engine[engine])
return -ENODEV;
 
@@ -369,7 +397,13 @@ static void i915_pmu_event_read(struct perf_event *event)
if (event->attr.config < 32) {
int engine = event->attr.config >> 2;
int sample = event->attr.config & 3;
-   val = i915->engine[engine]->pmu_sample[sample];
+
+   if (WARN_ON_ONCE(engine >= ARRAY_SIZE(user_engine_map))) {
+   /* Do nothing */
+   } else {
+   engine = user_engine_map[engine];
+   val = i915->engine[engine]->pmu_sample[sample];
+   }
} else switch (event->attr.config) {
case I915_PMU_ACTUAL_FREQUENCY:
val = i915->pmu.sample[__I915_SAMPLE_FREQ_ACT];
-- 
2.9.4

___
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx