diff options
author | Sai Gowtham Ch <sai.gowtham.ch@intel.com> | 2023-06-15 16:29:53 +0530 |
---|---|---|
committer | Zbigniew Kempczyński <zbigniew.kempczynski@intel.com> | 2023-06-16 08:23:24 +0200 |
commit | 2621bcac89246e6ca0b1df8065def8f6ac41b23c (patch) | |
tree | 5d6ec3f9f4fb52f081a1d02067ccd4d0ccf7c14a /lib/igt_dummyload.c | |
parent | 2a25a6109e8af4b0a69a717cc8710dcafed4bb4c (diff) |
lib/xe/xe_spin: Integrate igt_spin_new with Xe
Extending the spin_create implementation and allocator handle support in xe,
where it submits dummy work loads to engine. This Implementation is wrapped
around vm_bind and unbind as we are supposed to do it manually for xe.
Cc: Zbigniew Kempczyński <zbigniew.kempczynski@intel.com>
Signed-off-by: Sai Gowtham Ch <sai.gowtham.ch@intel.com>
Reviewed-by: Zbigniew Kempczyński <zbigniew.kempczynski@intel.com>
Diffstat (limited to 'lib/igt_dummyload.c')
-rw-r--r-- | lib/igt_dummyload.c | 40 |
1 files changed, 35 insertions, 5 deletions
diff --git a/lib/igt_dummyload.c b/lib/igt_dummyload.c index 740a58f3d..9f941cef7 100644 --- a/lib/igt_dummyload.c +++ b/lib/igt_dummyload.c @@ -46,6 +46,7 @@ #include "intel_reg.h" #include "ioctl_wrappers.h" #include "sw_sync.h" +#include "xe/xe_spin.h" /** * SECTION:igt_dummyload @@ -434,6 +435,7 @@ spin_create(int fd, const struct igt_spin_factory *opts) spin = calloc(1, sizeof(struct igt_spin)); igt_assert(spin); + spin->driver = INTEL_DRIVER_I915; spin->timerfd = -1; spin->out_fence = emit_recursive_batch(spin, fd, opts); @@ -447,7 +449,19 @@ spin_create(int fd, const struct igt_spin_factory *opts) igt_spin_t * __igt_spin_factory(int fd, const struct igt_spin_factory *opts) { - return spin_create(fd, opts); + if (is_xe_device(fd)) { + igt_spin_t *spin; + + spin = xe_spin_create(fd, opts); + + pthread_mutex_lock(&list_lock); + igt_list_add(&spin->link, &spin_list); + pthread_mutex_unlock(&list_lock); + + return spin; + } else { + return spin_create(fd, opts); + } } /** @@ -467,6 +481,16 @@ igt_spin_factory(int fd, const struct igt_spin_factory *opts) { igt_spin_t *spin; + if (is_xe_device(fd)) { + spin = xe_spin_create(fd, opts); + + pthread_mutex_lock(&list_lock); + igt_list_add(&spin->link, &spin_list); + pthread_mutex_unlock(&list_lock); + + return spin; + } + if ((opts->flags & IGT_SPIN_POLL_RUN) && opts->engine != ALL_ENGINES) { unsigned int class; @@ -597,8 +621,12 @@ void igt_spin_end(igt_spin_t *spin) if (!spin) return; - igt_gettime(&spin->last_signal); - sync_write(spin, MI_BATCH_BUFFER_END); + if (spin->driver == INTEL_DRIVER_XE) { + xe_spin_end(spin->xe_spin); + } else { + igt_gettime(&spin->last_signal); + sync_write(spin, MI_BATCH_BUFFER_END); + } } static void __igt_spin_free(int fd, igt_spin_t *spin) @@ -646,12 +674,14 @@ void igt_spin_free(int fd, igt_spin_t *spin) { if (!spin) return; - pthread_mutex_lock(&list_lock); igt_list_del(&spin->link); pthread_mutex_unlock(&list_lock); - __igt_spin_free(fd, spin); + if (spin->driver == INTEL_DRIVER_XE) + xe_spin_free(fd, spin); + else + __igt_spin_free(fd, spin); } void igt_terminate_spins(void) |