Module Name:    src
Committed By:   riastradh
Date:           Sun Dec 19 12:10:43 UTC 2021

Modified Files:
        src/sys/external/bsd/drm2/dist/drm/i915/gem: i915_gem_phys.c
            i915_gem_region.c i915_gem_stolen.c
        src/sys/external/bsd/drm2/dist/drm/i915/gt: intel_ggtt.c intel_gtt.c
        src/sys/external/bsd/drm2/include/linux: scatterlist.h
        src/sys/external/bsd/drm2/linux: linux_sgt.c

Log Message:
drm: Destroy dma map in sg_table_free.

Helps to reduce a little diff.


To generate a diff of this commit:
cvs rdiff -u -r1.6 -r1.7 \
    src/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_phys.c
cvs rdiff -u -r1.3 -r1.4 \
    src/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_region.c
cvs rdiff -u -r1.4 -r1.5 \
    src/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_stolen.c
cvs rdiff -u -r1.10 -r1.11 \
    src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_ggtt.c
cvs rdiff -u -r1.8 -r1.9 \
    src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_gtt.c
cvs rdiff -u -r1.6 -r1.7 \
    src/sys/external/bsd/drm2/include/linux/scatterlist.h
cvs rdiff -u -r1.2 -r1.3 src/sys/external/bsd/drm2/linux/linux_sgt.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_phys.c
diff -u src/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_phys.c:1.6 src/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_phys.c:1.7
--- src/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_phys.c:1.6	Sun Dec 19 12:10:20 2021
+++ src/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_phys.c	Sun Dec 19 12:10:42 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: i915_gem_phys.c,v 1.6 2021/12/19 12:10:20 riastradh Exp $	*/
+/*	$NetBSD: i915_gem_phys.c,v 1.7 2021/12/19 12:10:42 riastradh Exp $	*/
 
 /*
  * SPDX-License-Identifier: MIT
@@ -7,7 +7,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: i915_gem_phys.c,v 1.6 2021/12/19 12:10:20 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: i915_gem_phys.c,v 1.7 2021/12/19 12:10:42 riastradh Exp $");
 
 #include <linux/highmem.h>
 #include <linux/shmem_fs.h>
@@ -91,8 +91,11 @@ static int i915_gem_object_get_pages_phy
 	ret = -bus_dmamap_create(dmat, roundup_pow_of_two(obj->base.size), 1,
 	    roundup_pow_of_two(obj->base.size), 0, BUS_DMA_WAITOK,
 	    &sg->sg_dmamap);
-	if (ret)
+	if (ret) {
+		sg->sg_dmamap = NULL;
 		goto err_st1;
+	}
+	sg->sg_dmat = dmat;
 	/* XXX errno NetBSD->Linux */
 	ret = -bus_dmamap_load_raw(dmat, sg->sg_dmamap, &obj->mm.u.phys.seg, 1,
 	    roundup_pow_of_two(obj->base.size), BUS_DMA_WAITOK);
@@ -140,10 +143,6 @@ static int i915_gem_object_get_pages_phy
 err_st1:
 	if (loaded)
 		bus_dmamap_unload(dmat, st->sgl->sg_dmamap);
-	if (st->sgl->sg_dmamap) {
-		bus_dmamap_destroy(dmat, st->sgl->sg_dmamap);
-		st->sgl->sg_dmamap = NULL;
-	}
 	sg_free_table(st);
 #endif
 err_st:
@@ -219,8 +218,6 @@ i915_gem_object_put_pages_phys(struct dr
 
 #ifdef __NetBSD__
 	bus_dmamap_unload(dmat, pages->sgl->sg_dmamap);
-	bus_dmamap_destroy(dmat, pages->sgl->sg_dmamap);
-	pages->sgl->sg_dmamap = NULL;
 #endif
 
 	sg_free_table(pages);

Index: src/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_region.c
diff -u src/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_region.c:1.3 src/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_region.c:1.4
--- src/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_region.c:1.3	Sun Dec 19 11:33:49 2021
+++ src/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_region.c	Sun Dec 19 12:10:42 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: i915_gem_region.c,v 1.3 2021/12/19 11:33:49 riastradh Exp $	*/
+/*	$NetBSD: i915_gem_region.c,v 1.4 2021/12/19 12:10:42 riastradh Exp $	*/
 
 // SPDX-License-Identifier: MIT
 /*
@@ -6,7 +6,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: i915_gem_region.c,v 1.3 2021/12/19 11:33:49 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: i915_gem_region.c,v 1.4 2021/12/19 12:10:42 riastradh Exp $");
 
 #include "intel_memory_region.h"
 #include "i915_gem_region.h"
@@ -22,7 +22,6 @@ i915_gem_object_put_pages_buddy(struct d
 	obj->mm.dirty = false;
 #ifdef __NetBSD__
 	bus_dmamap_unload(obj->base.dev->dmat, pages->sgl->sg_dmamap);
-	bus_dmamap_destroy(obj->base.dev->dmat, pages->sgl->sg_dmamap);
 #endif
 	sg_free_table(pages);
 	kfree(pages);
@@ -91,8 +90,11 @@ i915_gem_object_get_pages_buddy(struct d
 	/* XXX errno NetBSD->Linux */
 	ret = -bus_dmamap_create(dmat, size, nsegs, size, 0, BUS_DMA_WAITOK,
 	    &sg->sg_dmamap);
-	if (ret)
+	if (ret) {
+		sg->sg_dmamap = NULL;
 		goto err;
+	}
+	sg->sg_dmat = dmat;
 
 	/* XXX errno NetBSD->Linux */
 	ret = -bus_dmamap_load_raw(dmat, sg->sg_dmamap, segs, nsegs, size,
@@ -153,8 +155,6 @@ i915_gem_object_get_pages_buddy(struct d
 err:
 	if (loaded)
 		bus_dmamap_unload(dmat, st->sgl->sg_dmamap);
-	if (st->sgl->sg_dmamap)
-		bus_dmamap_destroy(dmat, st->sgl->sg_dmamap);
 	if (segs)
 		kmem_free(segs, nsegs * sizeof(segs[0]));
 	__intel_memory_region_put_pages_buddy(mem, blocks);

Index: src/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_stolen.c
diff -u src/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_stolen.c:1.4 src/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_stolen.c:1.5
--- src/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_stolen.c:1.4	Sun Dec 19 11:33:30 2021
+++ src/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_stolen.c	Sun Dec 19 12:10:42 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: i915_gem_stolen.c,v 1.4 2021/12/19 11:33:30 riastradh Exp $	*/
+/*	$NetBSD: i915_gem_stolen.c,v 1.5 2021/12/19 12:10:42 riastradh Exp $	*/
 
 /*
  * SPDX-License-Identifier: MIT
@@ -7,7 +7,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: i915_gem_stolen.c,v 1.4 2021/12/19 11:33:30 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: i915_gem_stolen.c,v 1.5 2021/12/19 12:10:42 riastradh Exp $");
 
 #include <linux/errno.h>
 #include <linux/mutex.h>
@@ -557,6 +557,7 @@ i915_pages_create_for_stolen(struct drm_
 		st->sgl->sg_dmamap = NULL;
 		goto out;
 	}
+	st->sgl->sg_dmat = dmat;
 
 	/* XXX errno NetBSD->Liux */
 	ret = -bus_dmamap_load_raw(dmat, st->sgl->sg_dmamap, seg, nseg, size,
@@ -571,10 +572,6 @@ i915_pages_create_for_stolen(struct drm_
 out:	if (ret) {
 		if (loaded)
 			bus_dmamap_unload(dmat, st->sgl->sg_dmamap);
-		if (st->sgl->sg_dmamap) {
-			bus_dmamap_destroy(dmat, st->sgl->sg_dmamap);
-			st->sgl->sg_dmamap = NULL;
-		}
 		sg_free_table(st);
 		kfree(st);
 		return ERR_PTR(ret);
@@ -611,8 +608,6 @@ static void i915_gem_object_put_pages_st
 	/* Should only be called from i915_gem_object_release_stolen() */
 #ifdef __NetBSD__
 	bus_dmamap_unload(obj->base.dev->dmat, pages->sgl->sg_dmamap);
-	bus_dmamap_destroy(obj->base.dev->dmat, pages->sgl->sg_dmamap);
-	pages->sgl->sg_dmamap = NULL;
 #endif
 	sg_free_table(pages);
 	kfree(pages);

Index: src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_ggtt.c
diff -u src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_ggtt.c:1.10 src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_ggtt.c:1.11
--- src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_ggtt.c:1.10	Sun Dec 19 12:10:07 2021
+++ src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_ggtt.c	Sun Dec 19 12:10:42 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: intel_ggtt.c,v 1.10 2021/12/19 12:10:07 riastradh Exp $	*/
+/*	$NetBSD: intel_ggtt.c,v 1.11 2021/12/19 12:10:42 riastradh Exp $	*/
 
 // SPDX-License-Identifier: MIT
 /*
@@ -6,7 +6,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: intel_ggtt.c,v 1.10 2021/12/19 12:10:07 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: intel_ggtt.c,v 1.11 2021/12/19 12:10:42 riastradh Exp $");
 
 #include <linux/stop_machine.h>
 
@@ -1631,8 +1631,11 @@ intel_partial_pages(const struct i915_gg
 		    (bus_size_t)view->partial.size << PAGE_SHIFT,
 		    view->partial.size, PAGE_SIZE, 0, BUS_DMA_NOWAIT,
 		    &st->sgl->sg_dmamap);
-		if (ret)
+		if (ret) {
+			st->sgl->sg_dmamap = NULL;
 			goto fail;
+		}
+		st->sgl->sg_dmat = obj->base.dev->dmat;
 	}
 
 	/*
@@ -1669,10 +1672,10 @@ intel_partial_pages(const struct i915_gg
 	/* Success!  */
 	return st;
 
-fail:	if (st->sgl->sg_dmamap)
-		bus_dmamap_destroy(obj->base.dev->dmat, st->sgl->sg_dmamap);
-	if (st)
+fail:	if (st) {
+		sg_free_table(st);
 		kfree(st);
+	}
 	return ERR_PTR(ret);
 #else
 	struct sg_table *st;

Index: src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_gtt.c
diff -u src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_gtt.c:1.8 src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_gtt.c:1.9
--- src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_gtt.c:1.8	Sun Dec 19 12:10:07 2021
+++ src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_gtt.c	Sun Dec 19 12:10:42 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: intel_gtt.c,v 1.8 2021/12/19 12:10:07 riastradh Exp $	*/
+/*	$NetBSD: intel_gtt.c,v 1.9 2021/12/19 12:10:42 riastradh Exp $	*/
 
 // SPDX-License-Identifier: MIT
 /*
@@ -6,7 +6,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: intel_gtt.c,v 1.8 2021/12/19 12:10:07 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: intel_gtt.c,v 1.9 2021/12/19 12:10:42 riastradh Exp $");
 
 #include <linux/slab.h> /* fault-inject.h is not standalone! */
 
@@ -268,12 +268,6 @@ void clear_pages(struct i915_vma *vma)
 	GEM_BUG_ON(!vma->pages);
 
 	if (vma->pages != vma->obj->mm.pages) {
-#ifdef __NetBSD__
-		if (vma->pages->sgl->sg_dmamap) {
-			bus_dma_tag_t dmat = vma->obj->base.dev->dmat;
-			bus_dmamap_destroy(dmat, vma->pages->sgl->sg_dmamap);
-		}
-#endif
 		sg_free_table(vma->pages);
 		kfree(vma->pages);
 	}

Index: src/sys/external/bsd/drm2/include/linux/scatterlist.h
diff -u src/sys/external/bsd/drm2/include/linux/scatterlist.h:1.6 src/sys/external/bsd/drm2/include/linux/scatterlist.h:1.7
--- src/sys/external/bsd/drm2/include/linux/scatterlist.h:1.6	Sun Dec 19 11:38:04 2021
+++ src/sys/external/bsd/drm2/include/linux/scatterlist.h	Sun Dec 19 12:10:42 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: scatterlist.h,v 1.6 2021/12/19 11:38:04 riastradh Exp $	*/
+/*	$NetBSD: scatterlist.h,v 1.7 2021/12/19 12:10:42 riastradh Exp $	*/
 
 /*-
  * Copyright (c) 2018 The NetBSD Foundation, Inc.
@@ -58,6 +58,7 @@ struct sg_table {
 	struct scatterlist {
 		struct page	**sg_pgs;
 		unsigned	sg_npgs;
+		bus_dma_tag_t	sg_dmat;
 		bus_dmamap_t	sg_dmamap;
 	} sgl[1];
 	unsigned	nents;

Index: src/sys/external/bsd/drm2/linux/linux_sgt.c
diff -u src/sys/external/bsd/drm2/linux/linux_sgt.c:1.2 src/sys/external/bsd/drm2/linux/linux_sgt.c:1.3
--- src/sys/external/bsd/drm2/linux/linux_sgt.c:1.2	Sun Dec 19 12:10:14 2021
+++ src/sys/external/bsd/drm2/linux/linux_sgt.c	Sun Dec 19 12:10:42 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: linux_sgt.c,v 1.2 2021/12/19 12:10:14 riastradh Exp $	*/
+/*	$NetBSD: linux_sgt.c,v 1.3 2021/12/19 12:10:42 riastradh Exp $	*/
 
 /*-
  * Copyright (c) 2021 The NetBSD Foundation, Inc.
@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: linux_sgt.c,v 1.2 2021/12/19 12:10:14 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: linux_sgt.c,v 1.3 2021/12/19 12:10:42 riastradh Exp $");
 
 #include <sys/bus.h>
 #include <sys/errno.h>
@@ -128,7 +128,10 @@ void
 sg_free_table(struct sg_table *sgt)
 {
 
-	KASSERT(sgt->sgl->sg_dmamap == NULL);
+	if (sgt->sgl->sg_dmamap) {
+		KASSERT(sgt->sgl->sg_dmat);
+		bus_dmamap_destroy(sgt->sgl->sg_dmat, sgt->sgl->sg_dmamap);
+	}
 	kfree(sgt->sgl->sg_pgs);
 	sgt->sgl->sg_pgs = NULL;
 	sgt->sgl->sg_npgs = 0;
@@ -182,6 +185,7 @@ dma_map_sg_attrs(bus_dma_tag_t dmat, str
 	/* Success! */
 	KASSERT(sg->sg_dmamap->dm_nsegs > 0);
 	KASSERT(sg->sg_dmamap->dm_nsegs <= nents);
+	sg->sg_dmat = dmat;
 	ret = sg->sg_dmamap->dm_nsegs;
 	error = 0;
 

Reply via email to