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;
}