[PATCH i-g-t v2 02/12] lib/intel_bufops: Fix mapping/unmapping for i915 and xe

Zbigniew Kempczyński zbigniew.kempczynski at intel.com
Tue Jun 18 05:23:25 UTC 2024


It looks previously there was no user of intel-buf mapping code so
missing xe path wasn't notice. Lets add xe path along with correct
buffer size mapping.

Signed-off-by: Zbigniew Kempczyński <zbigniew.kempczynski at intel.com>
Cc: Juha-Pekka Heikkila <juhapekka.heikkila at gmail.com>
Reviewed-by: Juha-Pekka Heikkila <juhapekka.heikkila at gmail.com>
---
 lib/intel_bufops.c | 39 ++++++++++++++++++++++++---------------
 1 file changed, 24 insertions(+), 15 deletions(-)

diff --git a/lib/intel_bufops.c b/lib/intel_bufops.c
index 313c2665ae..b4ccf4c093 100644
--- a/lib/intel_bufops.c
+++ b/lib/intel_bufops.c
@@ -1232,37 +1232,46 @@ void intel_buf_destroy(struct intel_buf *buf)
 
 void *intel_buf_cpu_map(struct intel_buf *buf, bool write)
 {
-	int i915 = buf_ops_get_fd(buf->bops);
+	int fd = buf_ops_get_fd(buf->bops);
 
 	igt_assert(buf);
 	igt_assert(buf->ptr == NULL); /* already mapped */
 
 	buf->cpu_write = write;
-	buf->ptr = gem_mmap__cpu_coherent(i915, buf->handle, 0,
-					  buf->surface[0].size,
-					  write ? PROT_WRITE : PROT_READ);
 
-	gem_set_domain(i915, buf->handle,
-		       I915_GEM_DOMAIN_CPU,
-		       write ? I915_GEM_DOMAIN_CPU : 0);
+	if (is_xe_device(fd)) {
+		buf->ptr = xe_bo_map(fd, buf->handle, buf->bo_size);
+	} else {
+		buf->ptr = gem_mmap__cpu_coherent(fd, buf->handle, 0,
+						  buf->bo_size,
+						  write ? PROT_WRITE : PROT_READ);
+
+		gem_set_domain(fd, buf->handle,
+			       I915_GEM_DOMAIN_CPU,
+			       write ? I915_GEM_DOMAIN_CPU : 0);
+	}
 
 	return buf->ptr;
 }
 
 void *intel_buf_device_map(struct intel_buf *buf, bool write)
 {
-	int i915 = buf_ops_get_fd(buf->bops);
+	int fd = buf_ops_get_fd(buf->bops);
 
 	igt_assert(buf);
 	igt_assert(buf->ptr == NULL); /* already mapped */
 
-	buf->ptr = gem_mmap__device_coherent(i915, buf->handle, 0,
-					     buf->surface[0].size,
-					     write ? PROT_WRITE : PROT_READ);
+	if (is_xe_device(fd)) {
+		buf->ptr = xe_bo_map(fd, buf->handle, buf->bo_size);
+	} else {
+		buf->ptr = gem_mmap__device_coherent(fd, buf->handle, 0,
+						     buf->bo_size,
+						     write ? PROT_WRITE : PROT_READ);
 
-	gem_set_domain(i915, buf->handle,
-		       I915_GEM_DOMAIN_WC,
-		       write ? I915_GEM_DOMAIN_WC : 0);
+		gem_set_domain(fd, buf->handle,
+			       I915_GEM_DOMAIN_WC,
+			       write ? I915_GEM_DOMAIN_WC : 0);
+	}
 
 	return buf->ptr;
 }
@@ -1272,7 +1281,7 @@ void intel_buf_unmap(struct intel_buf *buf)
 	igt_assert(buf);
 	igt_assert(buf->ptr);
 
-	munmap(buf->ptr, buf->surface[0].size);
+	munmap(buf->ptr, buf->bo_size);
 	buf->ptr = NULL;
 }
 
-- 
2.34.1



More information about the igt-dev mailing list