From: Rodrigo Vivi <rodrigo.vivi@intel.com>
To: Matthew Brost <matthew.brost@intel.com>
Cc: igt-dev@lists.freedesktop.org
Subject: Re: [igt-dev] [PATCH 5/5] xe_vm: add bind engine conflict section
Date: Thu, 13 Jul 2023 11:34:50 -0400 [thread overview]
Message-ID: <ZLAZmoE2jTTuOl+d@intel.com> (raw)
In-Reply-To: <20230710145856.1864141-5-matthew.brost@intel.com>
On Mon, Jul 10, 2023 at 07:58:56AM -0700, Matthew Brost wrote:
> Verify bind engines can't race and corrupt page tables.
>
> Signed-of-by: Matthew Brost <matthew.brost@intel.com>
Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
> ---
> tests/xe/xe_vm.c | 43 ++++++++++++++++++++++++++++++++++++-------
> 1 file changed, 36 insertions(+), 7 deletions(-)
>
> diff --git a/tests/xe/xe_vm.c b/tests/xe/xe_vm.c
> index 36cd80357..315cb7009 100644
> --- a/tests/xe/xe_vm.c
> +++ b/tests/xe/xe_vm.c
> @@ -689,10 +689,18 @@ shared_pte_page(int fd, struct drm_xe_engine_class_instance *eci, int n_bo,
> * Description: Test independent bind engines
> * Functionality: bind engines
> * Run type: BAT
> + *
> + * SUBTEST: bind-engines-conflict
> + * Description: Test conflict bind engines
> + * Functionality: bind engines
> + * Run type: BAT
> */
>
> +#define CONFLICT (0x1 << 0)
> +
> static void
> -test_bind_engines_independent(int fd, struct drm_xe_engine_class_instance *eci)
> +test_bind_engines_independent(int fd, struct drm_xe_engine_class_instance *eci,
> + unsigned int flags)
> {
> uint32_t vm;
> uint64_t addr = 0x1a0000;
> @@ -759,7 +767,7 @@ test_bind_engines_independent(int fd, struct drm_xe_engine_class_instance *eci)
> xe_spin_wait_started(&data[i].spin);
>
> /* Do bind to 1st engine blocked on cork */
> - addr += bo_size;
> + addr += (flags & CONFLICT) ? (0x1 << 21) : bo_size;
> sync[1].flags &= ~DRM_XE_SYNC_SIGNAL;
> sync[1].handle = syncobjs[e];
> xe_vm_bind_async(fd, vm, bind_engines[e], bo, 0, addr,
> @@ -795,10 +803,20 @@ test_bind_engines_independent(int fd, struct drm_xe_engine_class_instance *eci)
> xe_exec(fd, &exec);
> }
>
> - /* Verify initial bind, bind + write to 2nd engine done */
> - igt_assert(syncobj_wait(fd, &syncobjs[1], 1, INT64_MAX, 0, NULL));
> - igt_assert(syncobj_wait(fd, &sync[0].handle, 1, INT64_MAX, 0, NULL));
> - igt_assert_eq(data[1].data, 0xc0ffee);
> + if (!(flags & CONFLICT)) {
> + /* Verify initial bind, bind + write to 2nd engine done */
> + igt_assert(syncobj_wait(fd, &syncobjs[1], 1, INT64_MAX, 0,
> + NULL));
> + igt_assert(syncobj_wait(fd, &sync[0].handle, 1, INT64_MAX, 0,
> + NULL));
> + igt_assert_eq(data[1].data, 0xc0ffee);
> + } else {
> + /* Let jobs runs for a bit */
> + usleep(100000);
> + /* bind + write to 2nd engine waiting */
> + igt_assert(!syncobj_wait(fd, &syncobjs[1], 1, 1, 0, NULL));
> + igt_assert(!syncobj_wait(fd, &sync[0].handle, 1, 0, 0, NULL));
> + }
>
> /* Verify bind + write to 1st engine still inflight */
> igt_assert(!syncobj_wait(fd, &syncobjs[0], 1, 1, 0, NULL));
> @@ -811,6 +829,13 @@ test_bind_engines_independent(int fd, struct drm_xe_engine_class_instance *eci)
> NULL));
> igt_assert_eq(data[0].data, 0xc0ffee);
>
> + if (flags & CONFLICT) {
> + /* Verify bind + write to 2nd engine done */
> + igt_assert(syncobj_wait(fd, &syncobjs[1], 1, INT64_MAX, 0,
> + NULL));
> + igt_assert_eq(data[1].data, 0xc0ffee);
> + }
> +
> syncobj_destroy(fd, sync[0].handle);
> sync[0].handle = syncobj_create(fd, 0);
> sync[0].flags |= DRM_XE_SYNC_SIGNAL;
> @@ -2001,7 +2026,11 @@ igt_main
>
> igt_subtest("bind-engines-independent")
> xe_for_each_hw_engine(fd, hwe)
> - test_bind_engines_independent(fd, hwe);
> + test_bind_engines_independent(fd, hwe, 0);
> +
> + igt_subtest("bind-engines-conflict")
> + xe_for_each_hw_engine(fd, hwe)
> + test_bind_engines_independent(fd, hwe, CONFLICT);
>
> igt_subtest("bind-array-twice")
> xe_for_each_hw_engine(fd, hwe)
> --
> 2.34.1
>
next prev parent reply other threads:[~2023-07-13 15:35 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-07-10 14:58 [igt-dev] [PATCH 1/5] xe/xe_exec_basic: A sections to test NULL (sparse) bindings Matthew Brost
2023-07-10 14:58 ` [igt-dev] [PATCH 2/5] xe_vm: MMAP style VM binds section Matthew Brost
2023-07-13 15:24 ` Rodrigo Vivi
2023-07-14 4:13 ` Matthew Brost
2023-07-10 14:58 ` [igt-dev] [PATCH 3/5] xe_vm: Add mmap / munmap sections that split large pages Matthew Brost
2023-07-13 15:30 ` Rodrigo Vivi
2023-07-14 4:11 ` Matthew Brost
2023-07-10 14:58 ` [igt-dev] [PATCH 4/5] xe_vm: Unmap BOs in bind queue independent test Matthew Brost
2023-07-13 15:32 ` Rodrigo Vivi
2023-07-14 4:08 ` Matthew Brost
2023-07-10 14:58 ` [igt-dev] [PATCH 5/5] xe_vm: add bind engine conflict section Matthew Brost
2023-07-13 15:34 ` Rodrigo Vivi [this message]
2023-07-10 16:09 ` [igt-dev] ✗ Fi.CI.BAT: failure for series starting with [1/5] xe/xe_exec_basic: A sections to test NULL (sparse) bindings Patchwork
2023-07-10 16:46 ` [igt-dev] ○ CI.xeBAT: info " Patchwork
2023-07-13 15:19 ` [igt-dev] [PATCH 1/5] " Rodrigo Vivi
2023-07-14 18:00 ` Matthew Brost
2023-07-14 18:03 ` Rodrigo Vivi
-- strict thread matches above, loose matches on Subject: below --
2023-07-21 4:37 Matthew Brost
2023-07-21 4:37 ` [igt-dev] [PATCH 5/5] xe_vm: add bind engine conflict section Matthew Brost
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=ZLAZmoE2jTTuOl+d@intel.com \
--to=rodrigo.vivi@intel.com \
--cc=igt-dev@lists.freedesktop.org \
--cc=matthew.brost@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.