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;