From: "Sharma, Nishit" <nishit.sharma@intel.com>
To: Varun Gupta <varun.gupta@intel.com>, <igt-dev@lists.freedesktop.org>
Cc: <arvind.yadav@intel.com>, <himal.prasad.ghimiray@intel.com>
Subject: Re: [PATCH i-g-t v2 3/4] tests/intel/xe_madvise: Add atomic-global subtest
Date: Mon, 11 May 2026 14:36:52 +0530 [thread overview]
Message-ID: <4aa29c9d-2c96-48dc-b53a-3b34bd7edcaa@intel.com> (raw)
In-Reply-To: <20260511035310.32323-4-varun.gupta@intel.com>
On 5/11/2026 9:22 AM, Varun Gupta wrote:
> Validate that madvise ATOMIC_GLOBAL permits both CPU and GPU atomic
> access on SVM memory. The test sets ATOMIC_GLOBAL on heap-allocated
> memory, performs 100 CPU atomic increments while data resides in SMEM,
> then executes GPU MI_ATOMIC_INC which triggers the page-fault handler
> to migrate data to VRAM. The final counter value must equal 101
> (CPU + GPU increments).
>
> Signed-off-by: Varun Gupta <varun.gupta@intel.com>
>
> v2: Add UNMAP of CPU_ADDR_MIRROR binding before xe_vm_destroy.
> Add pagefault count print before/after exec (Nishit).
> ---
> tests/intel/xe_madvise.c | 86 ++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 86 insertions(+)
>
> diff --git a/tests/intel/xe_madvise.c b/tests/intel/xe_madvise.c
> index f343f3c8c..baf50774d 100644
> --- a/tests/intel/xe_madvise.c
> +++ b/tests/intel/xe_madvise.c
> @@ -877,6 +877,88 @@ static void test_atomic_device(int fd, struct drm_xe_engine_class_instance *eci)
> xe_vm_destroy(fd, vm);
> }
>
> +/**
> + * SUBTEST: atomic-global
> + * Description: madvise atomic global supports both CPU and GPU atomic operations,
> + * test does CPU atomic increments on SMEM then GPU MI_ATOMIC_INC
> + * which triggers fault-driven migration to VRAM
> + * Test category: functionality test
> + */
> +static void test_atomic_global(int fd, struct drm_xe_engine_class_instance *eci)
> +{
> + struct drm_xe_sync sync[1] = {
> + { .type = DRM_XE_SYNC_TYPE_USER_FENCE,
> + .flags = DRM_XE_SYNC_FLAG_SIGNAL,
> + .timeline_value = USER_FENCE_VALUE },
> + };
> + struct drm_xe_exec exec = {
> + .num_batch_buffer = 1,
> + .num_syncs = 1,
> + .syncs = to_user_pointer(sync),
> + };
> + struct atomic_data *data;
> + uint32_t vm, exec_queue;
> + uint64_t addr;
> + size_t bo_size;
> + int va_bits, i;
> + int n_cpu_ops = 100;
> + int pf_count_before, pf_count_after;
> +
> + va_bits = xe_va_bits(fd);
> + vm = xe_vm_create(fd, DRM_XE_VM_CREATE_FLAG_LR_MODE |
> + DRM_XE_VM_CREATE_FLAG_FAULT_MODE, 0);
> +
> + bo_size = xe_bb_size(fd, sizeof(*data));
> + data = aligned_alloc(bo_size, bo_size);
> + igt_assert(data);
> + memset(data, 0, bo_size);
> +
> + addr = to_user_pointer(data);
> +
> + sync[0].addr = to_user_pointer(&data->vm_sync);
> + __xe_vm_bind_assert(fd, vm, 0, 0, 0, 0, 0x1ull << va_bits,
> + DRM_XE_VM_BIND_OP_MAP,
> + DRM_XE_VM_BIND_FLAG_CPU_ADDR_MIRROR,
> + sync, 1, 0, 0);
> + xe_wait_ufence(fd, &data->vm_sync, USER_FENCE_VALUE, 0, FIVE_SEC);
> + data->vm_sync = 0;
> +
> + xe_vm_madvise(fd, vm, addr, bo_size, 0,
> + DRM_XE_MEM_RANGE_ATTR_ATOMIC, DRM_XE_ATOMIC_GLOBAL, 0, 0);
> +
> + for (i = 0; i < n_cpu_ops; i++)
> + __atomic_fetch_add(&data->data, 1, __ATOMIC_SEQ_CST);
> +
> + igt_assert_eq(data->data, n_cpu_ops);
> +
> + atomic_build_batch(data, addr);
> +
> + exec_queue = xe_exec_queue_create(fd, vm, eci, 0);
> + exec.exec_queue_id = exec_queue;
> + exec.address = addr + ((char *)&data->batch - (char *)data);
> +
> + pf_count_before = xe_gt_stats_get_count(fd, eci->gt_id,
> + "svm_pagefault_count");
> +
> + sync[0].addr = to_user_pointer(&data->exec_sync);
> + xe_exec(fd, &exec);
> + xe_wait_ufence(fd, &data->exec_sync, USER_FENCE_VALUE,
> + exec_queue, FIVE_SEC);
> +
> + pf_count_after = xe_gt_stats_get_count(fd, eci->gt_id,
> + "svm_pagefault_count");
> + igt_info("Pagefault count: before=%d, after=%d\n",
> + pf_count_before, pf_count_after);
Same nit as in Patch-2/4
> +
> + igt_assert_eq(data->data, n_cpu_ops + 1);
> +
> + xe_exec_queue_destroy(fd, exec_queue);
> + __xe_vm_bind_assert(fd, vm, 0, 0, 0, 0, 0x1ull << va_bits,
> + DRM_XE_VM_BIND_OP_UNMAP, 0, NULL, 0, 0, 0);
> + free(data);
> + xe_vm_destroy(fd, vm);
> +}
> +
> int igt_main()
> {
> struct drm_xe_engine_class_instance *hwe;
> @@ -944,6 +1026,10 @@ int igt_main()
> igt_subtest("atomic-device")
> xe_for_each_engine(fd, hwe)
> test_atomic_device(fd, hwe);
> +
> + igt_subtest("atomic-global")
> + xe_for_each_engine(fd, hwe)
> + test_atomic_global(fd, hwe);
> }
>
> igt_fixture() {
with above nit fix LGTM
Reviewed-by: Nishit Sharma <nishit.sharma@intel.com>
next prev parent reply other threads:[~2026-05-11 9:07 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-05-11 3:52 [PATCH i-g-t v2 0/4] tests/intel/xe_madvise: Add atomic madvise subtests Varun Gupta
2026-05-11 3:52 ` [PATCH i-g-t v2 1/4] tests/intel/xe_madvise: Generalize metadata and group purgeable subtests Varun Gupta
2026-05-11 8:51 ` Sharma, Nishit
2026-05-11 3:52 ` [PATCH i-g-t v2 2/4] tests/intel/xe_madvise: Add atomic-device subtest Varun Gupta
2026-05-11 8:54 ` Sharma, Nishit
2026-05-11 3:52 ` [PATCH i-g-t v2 3/4] tests/intel/xe_madvise: Add atomic-global subtest Varun Gupta
2026-05-11 9:06 ` Sharma, Nishit [this message]
2026-05-11 3:52 ` [PATCH i-g-t v2 4/4] tests/intel/xe_madvise: Add atomic-cpu subtest Varun Gupta
2026-05-11 9:08 ` Sharma, Nishit
2026-05-11 22:18 ` ✗ Fi.CI.BUILD: failure for tests/intel/xe_madvise: Add atomic madvise subtests (rev2) 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=4aa29c9d-2c96-48dc-b53a-3b34bd7edcaa@intel.com \
--to=nishit.sharma@intel.com \
--cc=arvind.yadav@intel.com \
--cc=himal.prasad.ghimiray@intel.com \
--cc=igt-dev@lists.freedesktop.org \
--cc=varun.gupta@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.