From owner-svn-src-projects@FreeBSD.ORG Fri Dec 7 07:00:33 2012 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 4C4F84B2; Fri, 7 Dec 2012 07:00:33 +0000 (UTC) (envelope-from jeff@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) by mx1.freebsd.org (Postfix) with ESMTP id 23F458FC0C; Fri, 7 Dec 2012 07:00:33 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.5/8.14.5) with ESMTP id qB770Xxk040148; Fri, 7 Dec 2012 07:00:33 GMT (envelope-from jeff@svn.freebsd.org) Received: (from jeff@localhost) by svn.freebsd.org (8.14.5/8.14.5/Submit) id qB770Vkt040137; Fri, 7 Dec 2012 07:00:31 GMT (envelope-from jeff@svn.freebsd.org) Message-Id: <201212070700.qB770Vkt040137@svn.freebsd.org> From: Jeff Roberson Date: Fri, 7 Dec 2012 07:00:31 +0000 (UTC) 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 X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 07 Dec 2012 07:00:33 -0000 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; } }