From: Arvind Yadav <arvind.yadav@intel.com>
To: igt-dev@lists.freedesktop.org
Cc: matthew.brost@intel.com, himal.prasad.ghimiray@intel.com,
thomas.hellstrom@linux.intel.com, nishit.sharma@intel.com,
pravalika.gurram@intel.com
Subject: [PATCH i-g-t v4 4/8] tests/intel/xe_madvise: Add dontneed-after-mmap subtest
Date: Tue, 24 Feb 2026 20:57:52 +0530 [thread overview]
Message-ID: <20260224152804.1940820-5-arvind.yadav@intel.com> (raw)
In-Reply-To: <20260224152804.1940820-1-arvind.yadav@intel.com>
This test verifies that an existing mmap becomes invalid after the BO
is marked as purgeable and purged. The test creates a BO, maps it,
writes data, then marks it DONTNEED and triggers memory pressure.
Accessing the previously valid mapping should now trigger SIGBUS or
SIGSEGV, confirming that existing mappings are correctly invalidated
when the backing store is purged.
v4:
- Added proper resource cleanup before calling igt_skip(). (Nishit)
- Added assertion for xe_bo_map. (Nishit)
Cc: Nishit Sharma <nishit.sharma@intel.com>
Cc: Matthew Brost <matthew.brost@intel.com>
Cc: Thomas Hellström <thomas.hellstrom@linux.intel.com>
Cc: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com>
Reviewed-by: Pravalika Gurram <pravalika.gurram@intel.com>
Signed-off-by: Arvind Yadav <arvind.yadav@intel.com>
---
tests/intel/xe_madvise.c | 64 ++++++++++++++++++++++++++++++++++++++++
1 file changed, 64 insertions(+)
diff --git a/tests/intel/xe_madvise.c b/tests/intel/xe_madvise.c
index 25d544c28..2e5f6157f 100644
--- a/tests/intel/xe_madvise.c
+++ b/tests/intel/xe_madvise.c
@@ -199,6 +199,64 @@ static void test_dontneed_before_mmap(int fd, struct drm_xe_engine_class_instanc
xe_vm_destroy(fd, vm);
}
+/**
+ * SUBTEST: dontneed-after-mmap
+ * Description: Mark BO as DONTNEED after mmap, verify SIGBUS on accessing purged mapping
+ * Test category: functionality test
+ */
+static void test_dontneed_after_mmap(int fd, struct drm_xe_engine_class_instance *hwe)
+{
+ uint32_t bo, vm;
+ uint64_t addr = PURGEABLE_ADDR;
+ size_t bo_size = PURGEABLE_BO_SIZE;
+ void *map;
+
+ purgeable_setup_simple_bo(fd, &vm, &bo, addr, bo_size, true);
+
+ map = xe_bo_map(fd, bo, bo_size);
+ igt_assert(map != MAP_FAILED);
+ memset(map, 0xAB, bo_size);
+
+ if (!purgeable_mark_and_verify_purged(fd, vm, addr, bo_size)) {
+ munmap(map, bo_size);
+ gem_close(fd, bo);
+ xe_vm_destroy(fd, vm);
+ igt_skip("Unable to induce purge on this platform/config");
+ }
+
+ /* Access purged mapping - should trigger SIGBUS/SIGSEGV */
+ {
+ sighandler_t old_sigsegv, old_sigbus;
+ char *ptr = (char *)map;
+ int sig;
+
+ old_sigsegv = signal(SIGSEGV, (__sighandler_t)sigtrap);
+ old_sigbus = signal(SIGBUS, (__sighandler_t)sigtrap);
+
+ sig = sigsetjmp(jmp, SIGBUS | SIGSEGV);
+ switch (sig) {
+ case SIGBUS:
+ case SIGSEGV:
+ /* Expected - purged mapping access failed */
+ break;
+ case 0:
+ *ptr = 0;
+ default:
+ igt_assert_f(false,
+ "Access to purged mapping should trigger SIGBUS, got sig=%d\n",
+ sig);
+ break;
+ }
+
+ signal(SIGBUS, old_sigbus);
+ signal(SIGSEGV, old_sigsegv);
+ }
+
+ munmap(map, bo_size);
+ gem_close(fd, bo);
+ xe_vm_destroy(fd, vm);
+}
+
int igt_main()
{
struct drm_xe_engine_class_instance *hwe;
@@ -215,6 +273,12 @@ int igt_main()
break;
}
+ igt_subtest("dontneed-after-mmap")
+ xe_for_each_engine(fd, hwe) {
+ test_dontneed_after_mmap(fd, hwe);
+ break;
+ }
+
igt_fixture() {
xe_device_put(fd);
drm_close_driver(fd);
--
2.43.0
next prev parent reply other threads:[~2026-02-24 15:28 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-02-24 15:27 [PATCH i-g-t v4 0/8] tests/xe: Add purgeable memory madvise tests for system allocator Arvind Yadav
2026-02-24 15:27 ` [PATCH i-g-t v4 1/8] drm-uapi/xe_drm: Add UAPI support for purgeable buffer objects Arvind Yadav
2026-02-24 15:27 ` [PATCH i-g-t v4 2/8] lib/xe: Add purgeable memory ioctl support Arvind Yadav
2026-02-24 15:27 ` [PATCH i-g-t v4 3/8] tests/intel/xe_madvise: Add dontneed-before-mmap subtest Arvind Yadav
2026-02-24 15:27 ` Arvind Yadav [this message]
2026-02-24 15:27 ` [PATCH i-g-t v4 5/8] tests/intel/xe_madvise: Add dontneed-before-exec subtest Arvind Yadav
2026-02-24 15:27 ` [PATCH i-g-t v4 6/8] tests/intel/xe_madvise: Add dontneed-after-exec subtest Arvind Yadav
2026-02-24 15:27 ` [PATCH i-g-t v4 7/8] tests/intel/xe_madvise: Add per-vma-tracking subtest Arvind Yadav
2026-02-24 15:27 ` [PATCH i-g-t v4 8/8] tests/intel/xe_madvise: Add per-vma-protection subtest Arvind Yadav
2026-02-24 16:16 ` ✓ Xe.CI.BAT: success for tests/xe: Add purgeable memory madvise tests for system allocator (rev4) Patchwork
2026-02-24 16:30 ` ✗ i915.CI.BAT: failure " Patchwork
2026-02-25 2:54 ` ✗ Xe.CI.FULL: " 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=20260224152804.1940820-5-arvind.yadav@intel.com \
--to=arvind.yadav@intel.com \
--cc=himal.prasad.ghimiray@intel.com \
--cc=igt-dev@lists.freedesktop.org \
--cc=matthew.brost@intel.com \
--cc=nishit.sharma@intel.com \
--cc=pravalika.gurram@intel.com \
--cc=thomas.hellstrom@linux.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox