Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 7 Dec 2012 07:00:31 +0000 (UTC)
From:      Jeff Roberson <jeff@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject:   svn commit: r243976 - in projects/physbio/sys: arm/arm ia64/ia64 mips/mips powerpc/powerpc sparc64/sparc64 x86/x86
Message-ID:  <201212070700.qB770Vkt040137@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: jeff
Date: Fri Dec  7 07:00:31 2012
New Revision: 243976
URL: http://svnweb.freebsd.org/changeset/base/243976

Log:
   - Permit the opacity of maps and tags in callers to *dmamap_load_buffer()
     by fetching the default tag set if NULL is passed in.
  
  Sponsored by:	EMC / Isilon Storage Division

Modified:
  projects/physbio/sys/arm/arm/busdma_machdep-v6.c
  projects/physbio/sys/arm/arm/busdma_machdep.c
  projects/physbio/sys/ia64/ia64/busdma_machdep.c
  projects/physbio/sys/mips/mips/busdma_machdep.c
  projects/physbio/sys/powerpc/powerpc/busdma_machdep.c
  projects/physbio/sys/sparc64/sparc64/bus_machdep.c
  projects/physbio/sys/sparc64/sparc64/iommu.c
  projects/physbio/sys/x86/x86/busdma_machdep.c

Modified: projects/physbio/sys/arm/arm/busdma_machdep-v6.c
==============================================================================
--- projects/physbio/sys/arm/arm/busdma_machdep-v6.c	Fri Dec  7 06:38:30 2012	(r243975)
+++ projects/physbio/sys/arm/arm/busdma_machdep-v6.c	Fri Dec  7 07:00:31 2012	(r243976)
@@ -729,6 +729,9 @@ _bus_dmamap_load_buffer(bus_dma_tag_t dm
 	struct sync_list *sl;
 	int seg, error;
 
+	if (segs == NULL)
+		segs = dmat->segments;
+
 	if ((dmat->flags & BUS_DMA_COULD_BOUNCE) != 0) {
 		error = _bus_dmamap_count_pages(dmat, map, buf, buflen, flags);
 		if (error)
@@ -852,7 +855,7 @@ bus_dmamap_load(bus_dma_tag_t dmat, bus_
 	map->callback_arg = callback_arg;
 
 	error = _bus_dmamap_load_buffer(dmat, map, buf, buflen, kernel_pmap,
-	    flags, dmat->segments, &nsegs);
+	    flags, NULL, &nsegs);
 
 	CTR5(KTR_BUSDMA, "%s: tag %p tag flags 0x%x error %d nsegs %d",
 	    __func__, dmat, dmat->flags, error, nsegs + 1);
@@ -922,8 +925,7 @@ bus_dmamap_load_mbuf(bus_dma_tag_t dmat,
 {
 	int nsegs, error;
 
-	error = _bus_dmamap_load_mbuf_sg(dmat, map, m0, dmat->segments, &nsegs,
-		    flags);
+	error = _bus_dmamap_load_mbuf_sg(dmat, map, m0, NULL, &nsegs, flags);
 
 	if (error) {
 		/* force "no valid mappings" in callback */
@@ -985,7 +987,7 @@ bus_dmamap_load_uio(bus_dma_tag_t dmat, 
 		if (minlen > 0) {
 			error = _bus_dmamap_load_buffer(dmat, map,
 					addr, minlen, pmap, flags,
-					dmat->segments, &nsegs);
+					NULL, &nsegs);
 			resid -= minlen;
 		}
 	}

Modified: projects/physbio/sys/arm/arm/busdma_machdep.c
==============================================================================
--- projects/physbio/sys/arm/arm/busdma_machdep.c	Fri Dec  7 06:38:30 2012	(r243975)
+++ projects/physbio/sys/arm/arm/busdma_machdep.c	Fri Dec  7 07:00:31 2012	(r243976)
@@ -765,6 +765,9 @@ bus_dmamap_load_buffer(bus_dma_tag_t dma
 
 	bmask = ~(dmat->boundary - 1);
 
+	if (segs == NULL)
+		segs = dmat->segments;
+
 	if ((dmat->flags & BUS_DMA_COULD_BOUNCE) != 0) {
 		error = _bus_dmamap_count_pages(dmat, map, pmap, buf, buflen,
 		    flags);
@@ -913,7 +916,7 @@ bus_dmamap_load(bus_dma_tag_t dmat, bus_
 	map->buffer = buf;
 	map->len = buflen;
 	error = bus_dmamap_load_buffer(dmat,
-	    dmat->segments, map, buf, buflen, kernel_pmap,
+	    NULL, map, buf, buflen, kernel_pmap,
 	    flags, &nsegs);
 	if (error == EINPROGRESS)
 		return (error);
@@ -950,7 +953,7 @@ bus_dmamap_load_mbuf(bus_dma_tag_t dmat,
 		for (m = m0; m != NULL && error == 0; m = m->m_next) {
 			if (m->m_len > 0) {
 				error = bus_dmamap_load_buffer(dmat,
-				    dmat->segments, map, m->m_data, m->m_len,
+				    NULL, map, m->m_data, m->m_len,
 				    kernel_pmap, flags, &nsegs);
 				map->len += m->m_len;
 			}
@@ -1050,7 +1053,7 @@ bus_dmamap_load_uio(bus_dma_tag_t dmat, 
 		caddr_t addr = (caddr_t) iov[i].iov_base;
 
 		if (minlen > 0) {
-			error = bus_dmamap_load_buffer(dmat, dmat->segments,
+			error = bus_dmamap_load_buffer(dmat, NULL,
 			    map, addr, minlen, pmap, flags, &nsegs);
 
 			map->len += minlen;

Modified: projects/physbio/sys/ia64/ia64/busdma_machdep.c
==============================================================================
--- projects/physbio/sys/ia64/ia64/busdma_machdep.c	Fri Dec  7 06:38:30 2012	(r243975)
+++ projects/physbio/sys/ia64/ia64/busdma_machdep.c	Fri Dec  7 07:00:31 2012	(r243976)
@@ -498,6 +498,9 @@ _bus_dmamap_load_buffer(bus_dma_tag_t dm
 	if (map == NULL)
 		map = &nobounce_dmamap;
 
+	if (segs == NULL)
+		segs = dmat->segments;
+
 	if ((dmat->lowaddr < paddr_max || dmat->boundary > 0 ||
 	    dmat->alignment > 1) && map != &nobounce_dmamap &&
 	    map->pagesneeded == 0) {
@@ -629,7 +632,7 @@ bus_dmamap_load(bus_dma_tag_t dmat, bus_
 	}
 
 	error = _bus_dmamap_load_buffer(dmat, map, buf, buflen, kernel_pmap,
-	    flags, dmat->segments, &nsegs);
+	    flags, NULL, &nsegs);
 
 	if (error == EINPROGRESS)
 		return (error);
@@ -663,7 +666,7 @@ bus_dmamap_load_mbuf(bus_dma_tag_t dmat,
 			if (m->m_len > 0) {
 				error = _bus_dmamap_load_buffer(dmat, map,
 				    m->m_data, m->m_len, kernel_pmap, flags,
-				    dmat->segments, &nsegs);
+				    NULL, &nsegs);
 			}
 		}
 	} else {
@@ -745,8 +748,7 @@ bus_dmamap_load_uio(bus_dma_tag_t dmat, 
 
 		if (minlen > 0) {
 			error = _bus_dmamap_load_buffer(dmat, map, addr,
-			    minlen, td, flags, dmat->segments,
-			    &nsegs);
+			    minlen, td, flags, NULL, &nsegs);
 			resid -= minlen;
 		}
 	}

Modified: projects/physbio/sys/mips/mips/busdma_machdep.c
==============================================================================
--- projects/physbio/sys/mips/mips/busdma_machdep.c	Fri Dec  7 06:38:30 2012	(r243975)
+++ projects/physbio/sys/mips/mips/busdma_machdep.c	Fri Dec  7 07:00:31 2012	(r243976)
@@ -761,6 +761,9 @@ bus_dmamap_load_buffer(bus_dma_tag_t dma
 
 	bmask = ~(dmat->boundary - 1);
 
+	if (segs == NULL)
+		segs = dmat->segments;
+
 	if ((dmat->flags & BUS_DMA_COULD_BOUNCE) != 0) {
 		error = _bus_dmamap_count_pages(dmat, map, pmap, buf, buflen,
 		    flags);
@@ -856,7 +859,7 @@ bus_dmamap_load(bus_dma_tag_t dmat, bus_
 	map->buffer = buf;
 	map->len = buflen;
 	error = bus_dmamap_load_buffer(dmat,
-	    dmat->segments, map, buf, buflen, kernel_pmap,
+	    NULL, map, buf, buflen, kernel_pmap,
 	    flags, &nsegs);
 	if (error == EINPROGRESS)
 		return (error);
@@ -893,7 +896,7 @@ bus_dmamap_load_mbuf(bus_dma_tag_t dmat,
 		for (m = m0; m != NULL && error == 0; m = m->m_next) {
 			if (m->m_len > 0) {
 				error = bus_dmamap_load_buffer(dmat,
-				    dmat->segments, map, m->m_data, m->m_len, 
+				    NULL, map, m->m_data, m->m_len, 
 				    kernel_pmap, flags, &nsegs);
 				map->len += m->m_len;
 			}
@@ -994,7 +997,7 @@ bus_dmamap_load_uio(bus_dma_tag_t dmat, 
 		caddr_t addr = (caddr_t) iov[i].iov_base;
 
 		if (minlen > 0) {
-			error = bus_dmamap_load_buffer(dmat, dmat->segments,
+			error = bus_dmamap_load_buffer(dmat, NULL,
 			    map, addr, minlen, pmap, flags, &nsegs);
 
 			map->len += minlen;

Modified: projects/physbio/sys/powerpc/powerpc/busdma_machdep.c
==============================================================================
--- projects/physbio/sys/powerpc/powerpc/busdma_machdep.c	Fri Dec  7 06:38:30 2012	(r243975)
+++ projects/physbio/sys/powerpc/powerpc/busdma_machdep.c	Fri Dec  7 07:00:31 2012	(r243976)
@@ -583,6 +583,9 @@ _bus_dmamap_load_buffer(bus_dma_tag_t dm
 	bus_addr_t paddr;
 	int seg;
 
+	if (segs == NULL)
+		segs = map->segments;
+
 	if (map->pagesneeded == 0 && ((dmat->flags & BUS_DMA_COULD_BOUNCE) != 0)) {
 		vm_offset_t	vendaddr;
 
@@ -700,6 +703,7 @@ _bus_dmamap_load_buffer(bus_dma_tag_t dm
 	}
 
 	*segp = seg;
+	map->nsegs = seg;
 
 	/*
 	 * Did we fit?
@@ -725,7 +729,7 @@ bus_dmamap_load(bus_dma_tag_t dmat, bus_
 
 	map->nsegs = -1;
 	error = _bus_dmamap_load_buffer(dmat, map, buf, buflen, kernel_pmap,
-	    flags, map->segments, &map->nsegs);
+	    flags, NULL, &map->nsegs);
 	map->nsegs++;
 
 	CTR5(KTR_BUSDMA, "%s: tag %p tag flags 0x%x error %d nsegs %d",
@@ -780,7 +784,7 @@ bus_dmamap_load_mbuf(bus_dma_tag_t dmat,
 				error = _bus_dmamap_load_buffer(dmat, map,
 						m->m_data, m->m_len,
 						kernel_pmap, flags,
-						map->segments, &map->nsegs);
+						NULL, &map->nsegs);
 			}
 		}
 	} else {
@@ -887,7 +891,7 @@ bus_dmamap_load_uio(bus_dma_tag_t dmat, 
 		if (minlen > 0) {
 			error = _bus_dmamap_load_buffer(dmat, map,
 					addr, minlen, pmap, flags,
-					map->segments, &map->nsegs);
+					NULL, &map->nsegs);
 
 			resid -= minlen;
 		}

Modified: projects/physbio/sys/sparc64/sparc64/bus_machdep.c
==============================================================================
--- projects/physbio/sys/sparc64/sparc64/bus_machdep.c	Fri Dec  7 06:38:30 2012	(r243975)
+++ projects/physbio/sys/sparc64/sparc64/bus_machdep.c	Fri Dec  7 07:00:31 2012	(r243976)
@@ -339,6 +339,9 @@ _nexus_dmamap_load_buffer(bus_dma_tag_t 
 	vm_offset_t vaddr = (vm_offset_t)buf;
 	int seg;
 
+	if (segs == NULL)
+		segs = dmat->dt_segments;
+
 	bmask  = ~(dmat->dt_boundary - 1);
 
 	for (seg = *segp; buflen > 0 ; ) {
@@ -421,7 +424,7 @@ nexus_dmamap_load(bus_dma_tag_t dmat, bu
 
 	nsegs = -1;
 	error = _nexus_dmamap_load_buffer(dmat, buf, buflen, kernel_pmap,
-	    flags, dmat->dt_segments, &nsegs);
+	    flags, NULL, &nsegs);
 
 	if (error == 0) {
 		(*callback)(callback_arg, dmat->dt_segments, nsegs + 1, 0);
@@ -452,7 +455,7 @@ nexus_dmamap_load_mbuf(bus_dma_tag_t dma
 			if (m->m_len > 0) {
 				error = _nexus_dmamap_load_buffer(dmat,
 				    m->m_data, m->m_len, kernel_pmap, flags,
-				    dmat->dt_segments, &nsegs);
+				    NULL, &nsegs);
 			}
 		}
 	} else {
@@ -531,7 +534,7 @@ nexus_dmamap_load_uio(bus_dma_tag_t dmat
 
 		if (minlen > 0) {
 			error = _nexus_dmamap_load_buffer(dmat, addr, minlen,
-			    pmap, flags, dmat->dt_segments, &nsegs);
+			    pmap, flags, NULL, &nsegs);
 			resid -= minlen;
 		}
 	}

Modified: projects/physbio/sys/sparc64/sparc64/iommu.c
==============================================================================
--- projects/physbio/sys/sparc64/sparc64/iommu.c	Fri Dec  7 06:38:30 2012	(r243975)
+++ projects/physbio/sys/sparc64/sparc64/iommu.c	Fri Dec  7 07:00:31 2012	(r243976)
@@ -865,6 +865,9 @@ iommu_dvmamap_load_buffer(bus_dma_tag_t 
 	if (buflen > dt->dt_maxsize)
 		return (EINVAL);
 
+	if (segs == NULL)
+		segs = dt->dt_segments;
+
 	vaddr = (vm_offset_t)buf;
 	voffs = vaddr & IO_PAGE_MASK;
 	amask = (*segp == -1) ? dt->dt_alignment - 1 : 0;
@@ -970,7 +973,7 @@ iommu_dvmamap_load(bus_dma_tag_t dt, bus
 	IS_UNLOCK(is);
 
 	error = iommu_dvmamap_load_buffer(dt, is, map, buf, buflen,
-	    kernel_pmap, flags, dt->dt_segments, &seg);
+	    kernel_pmap, flags, NULL, &seg);
 
 	IS_LOCK(is);
 	iommu_map_insq(is, map);
@@ -1014,7 +1017,7 @@ iommu_dvmamap_load_mbuf(bus_dma_tag_t dt
 				continue;
 			error = iommu_dvmamap_load_buffer(dt, is, map,
 			    m->m_data, m->m_len, kernel_pmap, flags,
-			    dt->dt_segments, &nsegs);
+			    NULL, &nsegs);
 		}
 	} else
 		error = EINVAL;
@@ -1123,7 +1126,7 @@ iommu_dvmamap_load_uio(bus_dma_tag_t dt,
 			continue;
 
 		error = iommu_dvmamap_load_buffer(dt, is, map,
-		    iov[i].iov_base, minlen, pmap, flags, dt->dt_segments,
+		    iov[i].iov_base, minlen, pmap, flags, NULL,
 		    &nsegs);
 		resid -= minlen;
 	}

Modified: projects/physbio/sys/x86/x86/busdma_machdep.c
==============================================================================
--- projects/physbio/sys/x86/x86/busdma_machdep.c	Fri Dec  7 06:38:30 2012	(r243975)
+++ projects/physbio/sys/x86/x86/busdma_machdep.c	Fri Dec  7 07:00:31 2012	(r243976)
@@ -665,6 +665,9 @@ _bus_dmamap_load_buffer(bus_dma_tag_t dm
 	if (map == NULL || map == &contig_dmamap)
 		map = &nobounce_dmamap;
 
+	if (segs == NULL)
+		segs = dmat->segments;
+
 	if ((dmat->flags & BUS_DMA_COULD_BOUNCE) != 0) {
 		error = _bus_dmamap_count_pages(dmat, map, pmap, buf, buflen, flags);
 		if (error)
@@ -759,7 +762,7 @@ bus_dmamap_load(bus_dma_tag_t dmat, bus_
 	}
 
 	error = _bus_dmamap_load_buffer(dmat, map, buf, buflen, kernel_pmap,
-	    flags, dmat->segments, &nsegs);
+	    flags, NULL, &nsegs);
 
 	CTR5(KTR_BUSDMA, "%s: tag %p tag flags 0x%x error %d nsegs %d",
 	    __func__, dmat, dmat->flags, error, nsegs + 1);
@@ -829,8 +832,7 @@ bus_dmamap_load_mbuf(bus_dma_tag_t dmat,
 {
 	int nsegs, error;
 
-	error = _bus_dmamap_load_mbuf_sg(dmat, map, m0, dmat->segments, &nsegs,
-	    flags);
+	error = _bus_dmamap_load_mbuf_sg(dmat, map, m0, NULL, &nsegs, flags);
 
 	if (error) {
 		/* force "no valid mappings" in callback */
@@ -891,7 +893,7 @@ bus_dmamap_load_uio(bus_dma_tag_t dmat, 
 		if (minlen > 0) {
 			error = _bus_dmamap_load_buffer(dmat, map,
 					addr, minlen, pmap, flags,
-					dmat->segments, &nsegs);
+					NULL, &nsegs);
 			resid -= minlen;
 		}
 	}



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201212070700.qB770Vkt040137>