From: "Thomas Hellström" <thomas.hellstrom@linux.intel.com>
To: intel-xe@lists.freedesktop.org
Cc: matthew.auld@intel.com
Subject: [Intel-xe] [PATCH v2 6/7] drm/xe/tests: Test both CPU- and GPU page-table updates with the migrate test
Date: Wed, 15 Mar 2023 16:55:06 +0100 [thread overview]
Message-ID: <20230315155507.43933-7-thomas.hellstrom@linux.intel.com> (raw)
In-Reply-To: <20230315155507.43933-1-thomas.hellstrom@linux.intel.com>
Add a test parameter to force GPU page-table updates with the migrate
test and test both CPU- and GPU updates. Also provide some timing
results.
Signed-off-by: Thomas Hellström <thomas.hellstrom@linux.intel.com>
Reviewed-by: Matthew Auld <matthew.auld@intel.com>
---
drivers/gpu/drm/xe/tests/xe_migrate.c | 24 ++++++++++++++++++++++--
drivers/gpu/drm/xe/tests/xe_test.h | 1 +
drivers/gpu/drm/xe/xe_migrate.c | 17 +++++++++++++++++
3 files changed, 40 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/xe/tests/xe_migrate.c b/drivers/gpu/drm/xe/tests/xe_migrate.c
index a3bace16282e..73a32f911515 100644
--- a/drivers/gpu/drm/xe/tests/xe_migrate.c
+++ b/drivers/gpu/drm/xe/tests/xe_migrate.c
@@ -64,6 +64,8 @@ sanity_populate_cb(struct xe_migrate_pt_update *pt_update,
u32 qword_ofs, u32 num_qwords,
const struct xe_vm_pgtable_update *update)
{
+ struct migrate_test_params *p =
+ to_migrate_test_params(xe_cur_kunit_priv(XE_TEST_LIVE_MIGRATE));
int i;
u64 *ptr = dst;
u64 value;
@@ -76,6 +78,10 @@ sanity_populate_cb(struct xe_migrate_pt_update *pt_update,
else
ptr[i] = value;
}
+
+ kunit_info(xe_cur_kunit(), "Used %s.\n", map ? "CPU" : "GPU");
+ if (p->force_gpu && map)
+ KUNIT_FAIL(xe_cur_kunit(), "GPU pagetable update used CPU.\n");
}
static const struct xe_migrate_pt_update_ops sanity_ops = {
@@ -177,11 +183,12 @@ static void test_copy(struct xe_migrate *m, struct xe_bo *bo,
}
static void test_pt_update(struct xe_migrate *m, struct xe_bo *pt,
- struct kunit *test)
+ struct kunit *test, bool force_gpu)
{
struct xe_device *xe = gt_to_xe(m->gt);
struct dma_fence *fence;
u64 retval, expected;
+ ktime_t then, now;
int i;
struct xe_vm_pgtable_update update = {
@@ -192,16 +199,26 @@ static void test_pt_update(struct xe_migrate *m, struct xe_bo *pt,
struct xe_migrate_pt_update pt_update = {
.ops = &sanity_ops,
};
+ struct migrate_test_params p = {
+ .base.id = XE_TEST_LIVE_MIGRATE,
+ .force_gpu = force_gpu,
+ };
+ test->priv = &p;
/* Test xe_migrate_update_pgtables() updates the pagetable as expected */
expected = 0xf0f0f0f0f0f0f0f0ULL;
xe_map_memset(xe, &pt->vmap, 0, (u8)expected, pt->size);
+ then = ktime_get();
fence = xe_migrate_update_pgtables(m, NULL, NULL, m->eng, &update, 1,
NULL, 0, &pt_update);
+ now = ktime_get();
if (sanity_fence_failed(xe, fence, "Migration pagetable update", test))
return;
+ kunit_info(test, "Updating without syncing took %llu us,\n",
+ (unsigned long long) ktime_to_us(ktime_sub(now, then)));
+
dma_fence_put(fence);
retval = xe_map_rd(xe, &pt->vmap, 0, u64);
check(retval, expected, "PTE[0] must stay untouched", test);
@@ -344,7 +361,10 @@ static void xe_migrate_sanity_test(struct xe_migrate *m, struct kunit *test)
test_copy(m, big, test);
}
- test_pt_update(m, pt, test);
+ kunit_info(test, "Testing page table update using CPU if GPU idle.\n");
+ test_pt_update(m, pt, test, false);
+ kunit_info(test, "Testing page table update using GPU\n");
+ test_pt_update(m, pt, test, true);
out:
xe_bb_free(bb, NULL);
diff --git a/drivers/gpu/drm/xe/tests/xe_test.h b/drivers/gpu/drm/xe/tests/xe_test.h
index 00c8a3f9af81..7a1ae213e750 100644
--- a/drivers/gpu/drm/xe/tests/xe_test.h
+++ b/drivers/gpu/drm/xe/tests/xe_test.h
@@ -18,6 +18,7 @@
*/
enum xe_test_priv_id {
XE_TEST_LIVE_DMA_BUF,
+ XE_TEST_LIVE_MIGRATE,
};
/**
diff --git a/drivers/gpu/drm/xe/xe_migrate.c b/drivers/gpu/drm/xe/xe_migrate.c
index dfdc88aa8910..bbfdc28dc513 100644
--- a/drivers/gpu/drm/xe/xe_migrate.c
+++ b/drivers/gpu/drm/xe/xe_migrate.c
@@ -13,6 +13,7 @@
#include <drm/xe_drm.h>
#include "regs/xe_gpu_commands.h"
+#include "tests/xe_test.h"
#include "xe_bb.h"
#include "xe_bo.h"
#include "xe_engine.h"
@@ -967,6 +968,16 @@ struct xe_vm *xe_migrate_get_vm(struct xe_migrate *m)
return xe_vm_get(m->eng->vm);
}
+#if IS_ENABLED(CONFIG_DRM_XE_KUNIT_TEST)
+struct migrate_test_params {
+ struct xe_test_priv base;
+ bool force_gpu;
+};
+
+#define to_migrate_test_params(_priv) \
+ container_of(_priv, struct migrate_test_params, base)
+#endif
+
static struct dma_fence *
xe_migrate_update_pgtables_cpu(struct xe_migrate *m,
struct xe_vm *vm, struct xe_bo *bo,
@@ -974,11 +985,17 @@ xe_migrate_update_pgtables_cpu(struct xe_migrate *m,
u32 num_updates, bool wait_vm,
struct xe_migrate_pt_update *pt_update)
{
+ XE_TEST_DECLARE(struct migrate_test_params *test =
+ to_migrate_test_params
+ (xe_cur_kunit_priv(XE_TEST_LIVE_MIGRATE));)
const struct xe_migrate_pt_update_ops *ops = pt_update->ops;
struct dma_fence *fence;
int err;
u32 i;
+ if (XE_TEST_ONLY(test && test->force_gpu))
+ return ERR_PTR(-ETIME);
+
if (bo && !dma_resv_test_signaled(bo->ttm.base.resv,
DMA_RESV_USAGE_KERNEL))
return ERR_PTR(-ETIME);
--
2.39.2
next prev parent reply other threads:[~2023-03-15 15:55 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-03-15 15:55 [Intel-xe] [PATCH v2 0/7] Cpu page-table updates and fixes Thomas Hellström
2023-03-15 15:55 ` [Intel-xe] [PATCH v2 1/7] drm/xe: Use a define to set initial seqno for fences Thomas Hellström
2023-03-16 16:09 ` Matthew Brost
2023-03-16 16:45 ` Thomas Hellström
2023-03-15 15:55 ` [Intel-xe] [PATCH v2 2/7] drm/xe/migrate: Update cpu page-table updates Thomas Hellström
2023-03-15 15:55 ` [Intel-xe] [PATCH v2 3/7] drm/xe/tests: Support CPU page-table updates in the migrate test Thomas Hellström
2023-03-15 15:55 ` [Intel-xe] [PATCH v2 4/7] drm/xe: Introduce xe_engine_is_idle() Thomas Hellström
2023-03-15 15:55 ` [Intel-xe] [PATCH v2 5/7] drm/xe: Use a small negative initial seqno Thomas Hellström
2023-03-15 15:55 ` Thomas Hellström [this message]
2023-03-15 15:55 ` [Intel-xe] [PATCH v2 7/7] drm/xe/vm: Defer vm rebind until next exec if nothing to execute Thomas Hellström
2023-03-15 23:23 ` Matthew Brost
2023-03-15 15:58 ` [Intel-xe] ✓ CI.Patch_applied: success for Cpu page-table updates and fixes (rev2) Patchwork
2023-03-15 15:59 ` [Intel-xe] ✓ CI.KUnit: " Patchwork
2023-03-15 16:03 ` [Intel-xe] ✓ CI.Build: " Patchwork
2023-03-15 16:14 ` [Intel-xe] ○ CI.BAT: info " Patchwork
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20230315155507.43933-7-thomas.hellstrom@linux.intel.com \
--to=thomas.hellstrom@linux.intel.com \
--cc=intel-xe@lists.freedesktop.org \
--cc=matthew.auld@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.