[PATCH v2 3/7] drm/xe/kunit: Test active rtp entries

Gustavo Sousa gustavo.sousa at intel.com
Fri Jul 26 16:09:35 UTC 2024


Quoting Lucas De Marchi (2024-07-26 03:43:33-03:00)
>Enabling active tracking in the rtp context and check for all the tests
>the expected entries become active.
>
>Signed-off-by: Lucas De Marchi <lucas.demarchi at intel.com>
>---
> drivers/gpu/drm/xe/tests/xe_rtp_test.c | 22 +++++++++++++++++++++-
> drivers/gpu/drm/xe/xe_rtp.c            |  1 +
> 2 files changed, 22 insertions(+), 1 deletion(-)
>
>diff --git a/drivers/gpu/drm/xe/tests/xe_rtp_test.c b/drivers/gpu/drm/xe/tests/xe_rtp_test.c
>index 5ebaed1af3f2..dbf982b1ada8 100644
>--- a/drivers/gpu/drm/xe/tests/xe_rtp_test.c
>+++ b/drivers/gpu/drm/xe/tests/xe_rtp_test.c
>@@ -38,6 +38,7 @@ struct rtp_test_case {
>         u32 expected_clr_bits;
>         unsigned long expected_count_sr_entries;
>         unsigned int expected_sr_errors;
>+        unsigned long expected_active;
>         const struct xe_rtp_entry_sr *entries;
> };
> 
>@@ -57,6 +58,7 @@ static const struct rtp_test_case cases[] = {
>                 .expected_reg = REGULAR_REG1,
>                 .expected_set_bits = REG_BIT(0) | REG_BIT(1),
>                 .expected_clr_bits = REG_BIT(0) | REG_BIT(1),
>+                .expected_active = BIT(0) | BIT(1),
>                 .expected_count_sr_entries = 1,
>                 /* Different bits on the same register: create a single entry */
>                 .entries = (const struct xe_rtp_entry_sr[]) {
>@@ -76,6 +78,7 @@ static const struct rtp_test_case cases[] = {
>                 .expected_reg = REGULAR_REG1,
>                 .expected_set_bits = REG_BIT(0),
>                 .expected_clr_bits = REG_BIT(0),
>+                .expected_active = BIT(0),
>                 .expected_count_sr_entries = 1,
>                 /* Don't coalesce second entry since rules don't match */
>                 .entries = (const struct xe_rtp_entry_sr[]) {
>@@ -95,6 +98,7 @@ static const struct rtp_test_case cases[] = {
>                 .expected_reg = REGULAR_REG1,
>                 .expected_set_bits = REG_BIT(0) | REG_BIT(1) | REG_BIT(2),
>                 .expected_clr_bits = REG_BIT(0) | REG_BIT(1) | REG_BIT(2),
>+                .expected_active = BIT(0) | BIT(1) | BIT(2),
>                 .expected_count_sr_entries = 1,
>                 .entries = (const struct xe_rtp_entry_sr[]) {
>                         { XE_RTP_NAME("first"),
>@@ -148,6 +152,7 @@ static const struct rtp_test_case cases[] = {
>                 .expected_reg = REGULAR_REG1,
>                 .expected_set_bits = REG_BIT(0),
>                 .expected_clr_bits = REG_BIT(0),
>+                .expected_active = BIT(0),
>                 .expected_count_sr_entries = 1,
>                 /* Don't coalesce second entry due to one of the rules */
>                 .entries = (const struct xe_rtp_entry_sr[]) {
>@@ -167,6 +172,7 @@ static const struct rtp_test_case cases[] = {
>                 .expected_reg = REGULAR_REG1,
>                 .expected_set_bits = REG_BIT(0),
>                 .expected_clr_bits = REG_BIT(0),
>+                .expected_active = BIT(0) | BIT(1),
>                 .expected_count_sr_entries = 2,
>                 /* Same bits on different registers are not coalesced */
>                 .entries = (const struct xe_rtp_entry_sr[]) {
>@@ -186,6 +192,7 @@ static const struct rtp_test_case cases[] = {
>                 .expected_reg = REGULAR_REG1,
>                 .expected_set_bits = REG_BIT(0),
>                 .expected_clr_bits = REG_BIT(1) | REG_BIT(0),
>+                .expected_active = BIT(0) | BIT(1),
>                 .expected_count_sr_entries = 1,
>                 /* Check clr vs set actions on different bits */
>                 .entries = (const struct xe_rtp_entry_sr[]) {
>@@ -207,6 +214,7 @@ static const struct rtp_test_case cases[] = {
>                 .expected_reg = REGULAR_REG1,
>                 .expected_set_bits = TEMP_FIELD,
>                 .expected_clr_bits = TEMP_MASK,
>+                .expected_active = BIT(0),
>                 .expected_count_sr_entries = 1,
>                 /* Check FIELD_SET works */
>                 .entries = (const struct xe_rtp_entry_sr[]) {
>@@ -225,6 +233,7 @@ static const struct rtp_test_case cases[] = {
>                 .expected_reg = REGULAR_REG1,
>                 .expected_set_bits = REG_BIT(0),
>                 .expected_clr_bits = REG_BIT(0),
>+                .expected_active = BIT(0) | BIT(1),
>                 .expected_count_sr_entries = 1,
>                 .expected_sr_errors = 1,
>                 .entries = (const struct xe_rtp_entry_sr[]) {
>@@ -245,6 +254,7 @@ static const struct rtp_test_case cases[] = {
>                 .expected_reg = REGULAR_REG1,
>                 .expected_set_bits = REG_BIT(0),
>                 .expected_clr_bits = REG_BIT(0),
>+                .expected_active = BIT(0) | BIT(1),
>                 .expected_count_sr_entries = 1,
>                 .expected_sr_errors = 1,
>                 .entries = (const struct xe_rtp_entry_sr[]) {
>@@ -265,6 +275,7 @@ static const struct rtp_test_case cases[] = {
>                 .expected_reg = REGULAR_REG1,
>                 .expected_set_bits = REG_BIT(0),
>                 .expected_clr_bits = REG_BIT(0),
>+                .expected_active = BIT(0) | BIT(1) | BIT(2),
>                 .expected_count_sr_entries = 1,
>                 .expected_sr_errors = 2,
>                 .entries = (const struct xe_rtp_entry_sr[]) {
>@@ -295,9 +306,16 @@ static void xe_rtp_process_tests(struct kunit *test)
>         struct xe_reg_sr *reg_sr = &gt->reg_sr;
>         const struct xe_reg_sr_entry *sre, *sr_entry = NULL;
>         struct xe_rtp_process_ctx ctx = XE_RTP_PROCESS_CTX_INITIALIZER(gt);
>-        unsigned long idx, count_sr_entries = 0;
>+        unsigned long idx, count_sr_entries = 0, count_rtp_entries = 0, active = 0;
>+        const struct xe_rtp_entry_sr *rtp_entry;
> 
>         xe_reg_sr_init(reg_sr, "xe_rtp_tests", xe);
>+
>+        for (rtp_entry = param->entries; rtp_entry && rtp_entry->rules;
>+             rtp_entry++, count_rtp_entries++)
>+                ;

I think the "rtp_entry &&" part of the condition is unnecessary.

With that,

    Reviewed-by: Gustavo Sousa <gustavo.sousa at intel.com>

Also, an alternative loop where we have only one increment:

        for (count_rtp_entries = 0; param->entries[count_rtp_entries].rules;
             count_rtp_entries++);

Up to you.

--
Gustavo Sousa

>+
>+        xe_rtp_process_ctx_enable_active_tracking(&ctx, &active, count_rtp_entries);
>         xe_rtp_process_to_sr(&ctx, param->entries, reg_sr);
> 
>         xa_for_each(&reg_sr->xa, idx, sre) {
>@@ -307,6 +325,8 @@ static void xe_rtp_process_tests(struct kunit *test)
>                 count_sr_entries++;
>         }
> 
>+        KUNIT_EXPECT_EQ(test, active, param->expected_active);
>+
>         KUNIT_EXPECT_EQ(test, count_sr_entries, param->expected_count_sr_entries);
>         if (count_sr_entries) {
>                 KUNIT_EXPECT_EQ(test, sr_entry->clr_bits, param->expected_clr_bits);
>diff --git a/drivers/gpu/drm/xe/xe_rtp.c b/drivers/gpu/drm/xe/xe_rtp.c
>index 02e28274282f..acb35b95a3f6 100644
>--- a/drivers/gpu/drm/xe/xe_rtp.c
>+++ b/drivers/gpu/drm/xe/xe_rtp.c
>@@ -217,6 +217,7 @@ void xe_rtp_process_ctx_enable_active_tracking(struct xe_rtp_process_ctx *ctx,
>         ctx->active_entries = active_entries;
>         ctx->n_entries = n_entries;
> }
>+EXPORT_SYMBOL_IF_KUNIT(xe_rtp_process_ctx_enable_active_tracking);
> 
> static void rtp_mark_active(struct xe_device *xe,
>                             struct xe_rtp_process_ctx *ctx,
>-- 
>2.43.0
>


More information about the Intel-xe mailing list