NetBSD-Bugs archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
PR/57833 CVS commit: [netbsd-10] src/sys/external/bsd/drm2/dist/drm/i915/gem
The following reply was made to PR kern/57833; it has been noted by GNATS.
From: "Martin Husemann" <martin%netbsd.org@localhost>
To: gnats-bugs%gnats.NetBSD.org@localhost
Cc:
Subject: PR/57833 CVS commit: [netbsd-10] src/sys/external/bsd/drm2/dist/drm/i915/gem
Date: Sat, 3 Feb 2024 11:15:12 +0000
Module Name: src
Committed By: martin
Date: Sat Feb 3 11:15:12 UTC 2024
Modified Files:
src/sys/external/bsd/drm2/dist/drm/i915/gem [netbsd-10]:
i915_gem_mman.c i915_gem_pages.c i915_gem_phys.c i915_gem_region.c
i915_gem_stolen.c
Log Message:
Pull up following revision(s) (requested by riastradh in ticket #559):
sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_stolen.c: revision 1.6
sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_stolen.c: revision 1.7
sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_pages.c: revision 1.7
sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_phys.c: revision 1.9
sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_mman.c: revision 1.22
sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_region.c: revision 1.5
sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_region.c: revision 1.6
i915_gem_region: Reduce diff from upstream a little.
No functional change intended.
Prompted by upcoming nearby changes related to PR kern/57833.
i915_gem: Avoid walking off end of sg_pgs.
sg_npgs currently fails to match obj->base.size/PAGE_SIZE only due to
bugs in the construction of sg_pgs in various i915 gem object types,
which we should also fix, but let's avoid compounding it here.
Related to PR kern/57833.
i915_gem: Assert page array size.
Let's detect the bug of sg_npgs failing to match
obj->base.size/PAGE_SIZE earlier.
Related to PR kern/57833.
i915_gem_phys: Fill sg_pgs.
This is needed by i915 gem fault, which maps user virtual addresses
to those pages, and by i915 gem object destruction, which does
pmap_page_protect on the pages to remove any of those user virtual
mappings.
This needs pmap_kenter_pa rather than pmap_enter(pmap_kernel(), ...)
in order to preserve the _kernel's_ mapping of the pages after
pmap_page_protect.
But bus_dmamem_map currently uses pmap_enter(pmap_kernel(), ...)
instead which creates a mapping that is removed by pmap_page_protect.
So we use a variant of bus_dmamem_map that uses pmap_kenter_pa
instead. Perhaps bus_dmamem_map should do this itself, but this
change is less risky to pull up than a change to bus_dmamem_map
itself.
PR kern/57833: kernel panic on xorg exit
i915_gem_region: Fill sg_pgs, with size/PAGE_SIZE entries.
Use sg_alloc_table_from_bus_dmamem to do this.
i915_gem_mman.c vm_fault_cpu and i915_gem_object_release_mmap_offset
both rely on sg_pgs to be a page array, so using something else like
size >> ilog2(mem->mm.chunk_size) entries doesn't work. And they
rely on the sg_pgs entries to be initialized, which we weren't doing
before, and which sg_alloc_table_from_bus_dmamem does for us.
Related to PR kern/57833.
i915_gem_stolen: Fix memory leak.
Found while trying to address the PR 57833 class of problems.
i915_gem_stolen: Fill sg_pgs, with size/PAGE_SIZE entries.
Use sg_alloc_table_from_bus_dmamem to do this.
i915_gem_mman.c vm_fault_cpu and i915_gem_object_release_mmap_offset
both rely on sg_pgs to be a page array, so providing a table with
only one entry doesn't work (except by accident, if the object is
page-sized anyway). And they rely on the sg_pgs entries to be
initialized, which we weren't doing before, and which
sg_alloc_table_from_bus_dmamem does for us.
Related to PR kern/57833.
To generate a diff of this commit:
cvs rdiff -u -r1.21 -r1.21.4.1 \
src/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_mman.c
cvs rdiff -u -r1.6 -r1.6.4.1 \
src/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_pages.c
cvs rdiff -u -r1.8 -r1.8.4.1 \
src/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_phys.c
cvs rdiff -u -r1.4 -r1.4.4.1 \
src/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_region.c
cvs rdiff -u -r1.5 -r1.5.4.1 \
src/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_stolen.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Home |
Main Index |
Thread Index |
Old Index