Module Name:    src
Committed By:   riastradh
Date:           Tue Jun  4 21:42:40 UTC 2024

Modified Files:
        src/sys/external/bsd/drm2/dist/drm/i915/gem: i915_gem_mman.c

Log Message:
i915_gem_mman.c: Apply mmap types via pmap flags.

This way, userland gets buffers mapped write-combining or uncached as
needed.

PR xsrc/58307


To generate a diff of this commit:
cvs rdiff -u -r1.22 -r1.23 \
    src/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_mman.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_mman.c
diff -u src/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_mman.c:1.22 src/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_mman.c:1.23
--- src/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_mman.c:1.22	Fri Jan 19 22:22:40 2024
+++ src/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_mman.c	Tue Jun  4 21:42:40 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: i915_gem_mman.c,v 1.22 2024/01/19 22:22:40 riastradh Exp $	*/
+/*	$NetBSD: i915_gem_mman.c,v 1.23 2024/06/04 21:42:40 riastradh Exp $	*/
 
 /*
  * SPDX-License-Identifier: MIT
@@ -7,7 +7,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: i915_gem_mman.c,v 1.22 2024/01/19 22:22:40 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: i915_gem_mman.c,v 1.23 2024/06/04 21:42:40 riastradh Exp $");
 
 #include <linux/anon_inodes.h>
 #include <linux/mman.h>
@@ -334,6 +334,23 @@ static vm_fault_t vm_fault_cpu(struct vm
 	KASSERT(i915_gem_object_type_has(obj,
 		I915_GEM_OBJECT_HAS_STRUCT_PAGE));
 
+	int pmapflags;
+	switch (mmo->mmap_type) {
+	case I915_MMAP_TYPE_WC:
+		pmapflags = PMAP_WRITE_COMBINE;
+		break;
+	case I915_MMAP_TYPE_WB:
+		pmapflags = 0;	/* default */
+		break;
+	case I915_MMAP_TYPE_UC:
+		pmapflags = PMAP_NOCACHE;
+		break;
+	case I915_MMAP_TYPE_GTT: /* handled by vm_fault_gtt */
+	default:
+		panic("invalid i915 gem mmap offset type: %d",
+		    mmo->mmap_type);
+	}
+
 	struct scatterlist *sg = obj->mm.pages->sgl;
 	unsigned startpage = (ufi->entry->offset + (vaddr - ufi->entry->start))
 	    >> PAGE_SHIFT;
@@ -349,7 +366,7 @@ static vm_fault_t vm_fault_cpu(struct vm
 		/* XXX errno NetBSD->Linux */
 		err = -pmap_enter(ufi->orig_map->pmap,
 		    vaddr + i*PAGE_SIZE, paddr, ufi->entry->protection,
-		    PMAP_CANFAIL | ufi->entry->protection);
+		    PMAP_CANFAIL | ufi->entry->protection | pmapflags);
 		if (err)
 			break;
 	}
@@ -489,7 +506,7 @@ static vm_fault_t vm_fault_gtt(struct vm
 		/* XXX errno NetBSD->Linux */
 		ret = -pmap_enter(ufi->orig_map->pmap,
 		    vaddr + i*PAGE_SIZE, paddr, ufi->entry->protection,
-		    PMAP_CANFAIL | ufi->entry->protection);
+		    PMAP_CANFAIL|PMAP_WRITE_COMBINE | ufi->entry->protection);
 		if (ret)
 			break;
 	}

Reply via email to