[PATCH] xe_exec_system_allocator: fix MADVISE_MULTI_VMA and PREFETCH_SAME_ATTR bo_size for PVC
Jia Yao <[email protected]> Mon, 3 Aug 2026 21:25:49 +0000
| Newsgroups | org.freedesktop.lists.igt-dev |
|---|---|
| Message-ID | <[email protected]> |
Both flags split the buffer in half with madvise, creating a bo_size/2
VMA fragment. On PVC (NEED64K) drm_gpusvm requires chunks >= 64K, so
with bo_size=SZ_64K the 32K fragment causes -EINVAL, a GPU CAT error
and EIO from xe_wait_ufence.
Add both flags to the existing SZ_128K condition so each half is exactly
64K on NEED64K platforms.
Fixes: 022265cb9ebcb199 ("xe_exec_system_allocator: fix PREFETCH_SPLIT_VMA bo_size for PVC")
Cc: Nishit Sharma <[email protected]>
Signed-off-by: Jia Yao <[email protected]>
---
tests/intel/xe_exec_system_allocator.c | 12 +++++++++++-
1 file changed, 11 insertions(+), 1 deletion(-)
diff --git a/tests/intel/xe_exec_system_allocator.c b/tests/intel/xe_exec_system_allocator.c
index 50cd6ead7..6ca53aa5f 100644
--- a/tests/intel/xe_exec_system_allocator.c
+++ b/tests/intel/xe_exec_system_allocator.c
@@ -2814,8 +2814,18 @@ int igt_main()
* and migrates the first half. On platforms with
* 64K VRAM granularity (e.g. PVC), each half
* must be >= 64K, so use SZ_128K as bo_size.
+ *
+ * MADVISE_MULTI_VMA applies madvise on
+ * data+bo_size/2 for bo_size/2 bytes, and
+ * PREFETCH_SAME_ATTR applies madvise on data
+ * for bo_size/2 bytes after a full-buffer
+ * prefetch. Both create a bo_size/2 VMA
+ * fragment; on NEED64K platforms that fragment
+ * must be >= 64K, so use SZ_128K for them too.
*/
- size_t bo_size = (s->flags & PREFETCH_SPLIT_VMA) ?
+ size_t bo_size = (s->flags & (PREFETCH_SPLIT_VMA |
+ MADVISE_MULTI_VMA |
+ PREFETCH_SAME_ATTR)) ?
SZ_128K : SZ_64K;
test_exec(fd, hwe, 1, 1, bo_size, 0, 0, NULL,
--
2.43.0