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;