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