Date: Fri, 7 Dec 2012 06:05:35 +0000 (UTC) From: Jeff Roberson <jeff@FreeBSD.org> To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r243972 - in projects/physbio/sys: arm/arm ia64/ia64 powerpc/powerpc sparc64/sparc64 x86/x86 Message-ID: <201212070605.qB765Z3X030060@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: jeff Date: Fri Dec 7 06:05:34 2012 New Revision: 243972 URL: http://svnweb.freebsd.org/changeset/base/243972 Log: - Eliminate the 'first' argument required by some load_buffer() implementations by requiring that the segment count is -1 on entry. 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/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 05:55:48 2012 (r243971) +++ projects/physbio/sys/arm/arm/busdma_machdep-v6.c Fri Dec 7 06:05:34 2012 (r243972) @@ -713,7 +713,6 @@ _bus_dmamap_count_pages(bus_dma_tag_t dm /* * Utility function to load a linear buffer. segp contains * the starting segment on entrace, and the ending segment on exit. - * first indicates if this is the first invocation of this function. */ static __inline int _bus_dmamap_load_buffer(bus_dma_tag_t dmat, @@ -721,8 +720,7 @@ _bus_dmamap_load_buffer(bus_dma_tag_t dm void *buf, bus_size_t buflen, int flags, bus_dma_segment_t *segs, - int *segp, - int first) + int *segp) { bus_size_t sgsize; bus_addr_t curaddr, baddr, bmask; @@ -803,10 +801,10 @@ _bus_dmamap_load_buffer(bus_dma_tag_t dm * Insert chunk into a segment, coalescing with * previous segment if possible. */ - if (first) { + if (seg == -1) { + seg = 0; segs[seg].ds_addr = curaddr; segs[seg].ds_len = sgsize; - first = 0; } else { if (curaddr == segs[seg].ds_addr + segs[seg].ds_len && (segs[seg].ds_len + sgsize) <= dmat->maxsegsz && @@ -845,7 +843,7 @@ bus_dmamap_load(bus_dma_tag_t dmat, bus_ bus_size_t buflen, bus_dmamap_callback_t *callback, void *callback_arg, int flags) { - int error, nsegs = 0; + int error, nsegs = -1; flags |= BUS_DMA_WAITOK; map->callback = callback; @@ -853,7 +851,7 @@ bus_dmamap_load(bus_dma_tag_t dmat, bus_ map->pmap = kernel_pmap; error = _bus_dmamap_load_buffer(dmat, map, buf, buflen, flags, - dmat->segments, &nsegs, 1); + dmat->segments, &nsegs); CTR5(KTR_BUSDMA, "%s: tag %p tag flags 0x%x error %d nsegs %d", __func__, dmat, dmat->flags, error, nsegs + 1); @@ -892,18 +890,16 @@ _bus_dmamap_load_mbuf_sg(bus_dma_tag_t d map->pmap = kernel_pmap; flags |= BUS_DMA_NOWAIT; - *nsegs = 0; + *nsegs = -1; error = 0; if (m0->m_pkthdr.len <= dmat->maxsize) { - int first = 1; struct mbuf *m; for (m = m0; m != NULL && error == 0; m = m->m_next) { if (m->m_len > 0) { error = _bus_dmamap_load_buffer(dmat, map, m->m_data, m->m_len, - flags, segs, nsegs, first); - first = 0; + flags, segs, nsegs); } } } else { @@ -958,7 +954,7 @@ bus_dmamap_load_uio(bus_dma_tag_t dmat, bus_dmamap_callback2_t *callback, void *callback_arg, int flags) { - int nsegs, error, first, i; + int nsegs, error, i; bus_size_t resid; struct iovec *iov; @@ -973,9 +969,8 @@ bus_dmamap_load_uio(bus_dma_tag_t dmat, } else map->pmap = kernel_pmap; - nsegs = 0; + nsegs = -1; error = 0; - first = 1; for (i = 0; i < uio->uio_iovcnt && resid != 0 && !error; i++) { /* * Now at the first iovec to load. Load each iovec @@ -988,8 +983,7 @@ bus_dmamap_load_uio(bus_dma_tag_t dmat, if (minlen > 0) { error = _bus_dmamap_load_buffer(dmat, map, addr, minlen, flags, - dmat->segments, &nsegs, first); - first = 0; + dmat->segments, &nsegs); resid -= minlen; } } Modified: projects/physbio/sys/arm/arm/busdma_machdep.c ============================================================================== --- projects/physbio/sys/arm/arm/busdma_machdep.c Fri Dec 7 05:55:48 2012 (r243971) +++ projects/physbio/sys/arm/arm/busdma_machdep.c Fri Dec 7 06:05:34 2012 (r243972) @@ -748,7 +748,6 @@ _bus_dmamap_count_pages(bus_dma_tag_t dm /* * Utility function to load a linear buffer. segp contains * the starting segment on entrance, and the ending segment on exit. - * first indicates if this is the first invocation of this function. */ static __inline int bus_dmamap_load_buffer(bus_dma_tag_t dmat, bus_dma_segment_t *segs, Modified: projects/physbio/sys/ia64/ia64/busdma_machdep.c ============================================================================== --- projects/physbio/sys/ia64/ia64/busdma_machdep.c Fri Dec 7 05:55:48 2012 (r243971) +++ projects/physbio/sys/ia64/ia64/busdma_machdep.c Fri Dec 7 06:05:34 2012 (r243972) @@ -483,12 +483,11 @@ bus_dmamem_free(bus_dma_tag_t dmat, void /* * Utility function to load a linear buffer. segp contains * the starting segment on entrace, and the ending segment on exit. - * first indicates if this is the first invocation of this function. */ static int _bus_dmamap_load_buffer(bus_dma_tag_t dmat, bus_dmamap_t map, void *buf, bus_size_t buflen, struct thread *td, int flags, - bus_dma_segment_t *segs, int *segp, int first) + bus_dma_segment_t *segs, int *segp) { bus_size_t sgsize; bus_addr_t curaddr, baddr, bmask; @@ -589,10 +588,10 @@ _bus_dmamap_load_buffer(bus_dma_tag_t dm * Insert chunk into a segment, coalescing with * previous segment if possible. */ - if (first) { + if (seg == -1) { + seg = 0; segs[seg].ds_addr = curaddr; segs[seg].ds_len = sgsize; - first = 0; } else { if (curaddr == segs[seg].ds_addr + segs[seg].ds_len && (segs[seg].ds_len + sgsize) <= dmat->maxsegsz && @@ -627,7 +626,7 @@ bus_dmamap_load(bus_dma_tag_t dmat, bus_ bus_size_t buflen, bus_dmamap_callback_t *callback, void *callback_arg, int flags) { - int error, nsegs = 0; + int error, nsegs = -1; if (map != NULL) { flags |= BUS_DMA_WAITOK; @@ -636,7 +635,7 @@ bus_dmamap_load(bus_dma_tag_t dmat, bus_ } error = _bus_dmamap_load_buffer(dmat, map, buf, buflen, NULL, flags, - dmat->segments, &nsegs, 1); + dmat->segments, &nsegs); if (error == EINPROGRESS) return (error); @@ -661,18 +660,16 @@ bus_dmamap_load_mbuf(bus_dma_tag_t dmat, M_ASSERTPKTHDR(m0); flags |= BUS_DMA_NOWAIT; - nsegs = 0; + nsegs = -1; error = 0; if (m0->m_pkthdr.len <= dmat->maxsize) { - int first = 1; struct mbuf *m; for (m = m0; m != NULL && error == 0; m = m->m_next) { if (m->m_len > 0) { error = _bus_dmamap_load_buffer(dmat, map, m->m_data, m->m_len, NULL, flags, - dmat->segments, &nsegs, first); - first = 0; + dmat->segments, &nsegs); } } } else { @@ -698,18 +695,16 @@ bus_dmamap_load_mbuf_sg(bus_dma_tag_t dm M_ASSERTPKTHDR(m0); flags |= BUS_DMA_NOWAIT; - *nsegs = 0; + *nsegs = -1; error = 0; if (m0->m_pkthdr.len <= dmat->maxsize) { - int first = 1; struct mbuf *m; for (m = m0; m != NULL && error == 0; m = m->m_next) { if (m->m_len > 0) { error = _bus_dmamap_load_buffer(dmat, map, m->m_data, m->m_len, NULL, flags, - segs, nsegs, first); - first = 0; + segs, nsegs); } } ++*nsegs; @@ -727,7 +722,7 @@ int bus_dmamap_load_uio(bus_dma_tag_t dmat, bus_dmamap_t map, struct uio *uio, bus_dmamap_callback2_t *callback, void *callback_arg, int flags) { - int nsegs, error, first, i; + int nsegs, error, i; bus_size_t resid; struct iovec *iov; struct thread *td = NULL; @@ -742,9 +737,8 @@ bus_dmamap_load_uio(bus_dma_tag_t dmat, ("bus_dmamap_load_uio: USERSPACE but no proc")); } - nsegs = 0; + nsegs = -1; error = 0; - first = 1; for (i = 0; i < uio->uio_iovcnt && resid != 0 && !error; i++) { /* * Now at the first iovec to load. Load each iovec @@ -757,9 +751,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, first); - first = 0; - + &nsegs); resid -= minlen; } } Modified: projects/physbio/sys/powerpc/powerpc/busdma_machdep.c ============================================================================== --- projects/physbio/sys/powerpc/powerpc/busdma_machdep.c Fri Dec 7 05:55:48 2012 (r243971) +++ projects/physbio/sys/powerpc/powerpc/busdma_machdep.c Fri Dec 7 06:05:34 2012 (r243972) @@ -567,7 +567,6 @@ bus_dmamem_free(bus_dma_tag_t dmat, void /* * Utility function to load a linear buffer. segp contains * the starting segment on entrance, and the ending segment on exit. - * first indicates if this is the first invocation of this function. */ static __inline int _bus_dmamap_load_buffer(bus_dma_tag_t dmat, @@ -576,8 +575,7 @@ _bus_dmamap_load_buffer(bus_dma_tag_t dm pmap_t pmap, int flags, bus_dma_segment_t *segs, - int *segp, - int first) + int *segp) { bus_size_t sgsize; bus_addr_t curaddr, baddr, bmask; @@ -679,10 +677,10 @@ _bus_dmamap_load_buffer(bus_dma_tag_t dm * Insert chunk into a segment, coalescing with * previous segment if possible. */ - if (first) { + if (seg == -1) { + seg = 0; segs[seg].ds_addr = curaddr; segs[seg].ds_len = sgsize; - first = 0; } else { if (curaddr == segs[seg].ds_addr + segs[seg].ds_len && (segs[seg].ds_len + sgsize) <= dmat->maxsegsz && @@ -725,9 +723,9 @@ bus_dmamap_load(bus_dma_tag_t dmat, bus_ map->callback_arg = callback_arg; } - map->nsegs = 0; + map->nsegs = -1; error = _bus_dmamap_load_buffer(dmat, map, buf, buflen, NULL, flags, - map->segments, &map->nsegs, 1); + map->segments, &map->nsegs); map->nsegs++; CTR5(KTR_BUSDMA, "%s: tag %p tag flags 0x%x error %d nsegs %d", @@ -772,10 +770,9 @@ bus_dmamap_load_mbuf(bus_dma_tag_t dmat, M_ASSERTPKTHDR(m0); flags |= BUS_DMA_NOWAIT; - map->nsegs = 0; + map->nsegs = -1; error = 0; if (m0->m_pkthdr.len <= dmat->maxsize) { - int first = 1; struct mbuf *m; for (m = m0; m != NULL && error == 0; m = m->m_next) { @@ -783,8 +780,7 @@ bus_dmamap_load_mbuf(bus_dma_tag_t dmat, error = _bus_dmamap_load_buffer(dmat, map, m->m_data, m->m_len, NULL, flags, - map->segments, &map->nsegs, first); - first = 0; + map->segments, &map->nsegs); } } } else { @@ -819,10 +815,9 @@ bus_dmamap_load_mbuf_sg(bus_dma_tag_t dm M_ASSERTPKTHDR(m0); flags |= BUS_DMA_NOWAIT; - *nsegs = 0; + *nsegs = -1; error = 0; if (m0->m_pkthdr.len <= dmat->maxsize) { - int first = 1; struct mbuf *m; for (m = m0; m != NULL && error == 0; m = m->m_next) { @@ -830,8 +825,7 @@ bus_dmamap_load_mbuf_sg(bus_dma_tag_t dm error = _bus_dmamap_load_buffer(dmat, map, m->m_data, m->m_len, NULL, flags, - segs, nsegs, first); - first = 0; + segs, nsegs); } } } else { @@ -863,7 +857,7 @@ bus_dmamap_load_uio(bus_dma_tag_t dmat, bus_dmamap_callback2_t *callback, void *callback_arg, int flags) { - int error, first, i; + int error, i; bus_size_t resid; struct iovec *iov; pmap_t pmap; @@ -879,9 +873,8 @@ bus_dmamap_load_uio(bus_dma_tag_t dmat, } else pmap = NULL; - map->nsegs = 0; + map->nsegs = -1; error = 0; - first = 1; for (i = 0; i < uio->uio_iovcnt && resid != 0 && !error; i++) { /* * Now at the first iovec to load. Load each iovec @@ -894,8 +887,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, first); - first = 0; + map->segments, &map->nsegs); resid -= minlen; } Modified: projects/physbio/sys/sparc64/sparc64/bus_machdep.c ============================================================================== --- projects/physbio/sys/sparc64/sparc64/bus_machdep.c Fri Dec 7 05:55:48 2012 (r243971) +++ projects/physbio/sys/sparc64/sparc64/bus_machdep.c Fri Dec 7 06:05:34 2012 (r243972) @@ -328,12 +328,11 @@ nexus_dmamap_destroy(bus_dma_tag_t dmat, /* * Utility function to load a linear buffer. segp contains * the starting segment on entrace, and the ending segment on exit. - * first indicates if this is the first invocation of this function. */ static int _nexus_dmamap_load_buffer(bus_dma_tag_t dmat, void *buf, bus_size_t buflen, struct thread *td, int flags, - bus_dma_segment_t *segs, int *segp, int first) + bus_dma_segment_t *segs, int *segp) { bus_size_t sgsize; bus_addr_t curaddr, baddr, bmask; @@ -379,10 +378,10 @@ _nexus_dmamap_load_buffer(bus_dma_tag_t * Insert chunk into a segment, coalescing with * previous segment if possible. */ - if (first) { + if (seg == -1) { + seg = 0; segs[seg].ds_addr = curaddr; segs[seg].ds_len = sgsize; - first = 0; } else { if (curaddr == segs[seg].ds_addr + segs[seg].ds_len && (segs[seg].ds_len + sgsize) <= dmat->dt_maxsegsz && @@ -426,8 +425,9 @@ nexus_dmamap_load(bus_dma_tag_t dmat, bu { int error, nsegs; + nsegs = -1; error = _nexus_dmamap_load_buffer(dmat, buf, buflen, NULL, flags, - dmat->dt_segments, &nsegs, 1); + dmat->dt_segments, &nsegs); if (error == 0) { (*callback)(callback_arg, dmat->dt_segments, nsegs + 1, 0); @@ -449,18 +449,16 @@ nexus_dmamap_load_mbuf(bus_dma_tag_t dma M_ASSERTPKTHDR(m0); - nsegs = 0; + nsegs = -1; error = 0; if (m0->m_pkthdr.len <= dmat->dt_maxsize) { - int first = 1; struct mbuf *m; for (m = m0; m != NULL && error == 0; m = m->m_next) { if (m->m_len > 0) { error = _nexus_dmamap_load_buffer(dmat, m->m_data, m->m_len,NULL, flags, - dmat->dt_segments, &nsegs, first); - first = 0; + dmat->dt_segments, &nsegs); } } } else { @@ -486,18 +484,16 @@ nexus_dmamap_load_mbuf_sg(bus_dma_tag_t M_ASSERTPKTHDR(m0); - *nsegs = 0; + *nsegs = -1; error = 0; if (m0->m_pkthdr.len <= dmat->dt_maxsize) { - int first = 1; struct mbuf *m; for (m = m0; m != NULL && error == 0; m = m->m_next) { if (m->m_len > 0) { error = _nexus_dmamap_load_buffer(dmat, - m->m_data, m->m_len,NULL, flags, - segs, nsegs, first); - first = 0; + m->m_data, m->m_len, NULL, flags, + segs, nsegs); } } } else { @@ -515,7 +511,7 @@ static int nexus_dmamap_load_uio(bus_dma_tag_t dmat, bus_dmamap_t map, struct uio *uio, bus_dmamap_callback2_t *callback, void *callback_arg, int flags) { - int nsegs, error, first, i; + int nsegs, error, i; bus_size_t resid; struct iovec *iov; struct thread *td = NULL; @@ -528,9 +524,8 @@ nexus_dmamap_load_uio(bus_dma_tag_t dmat KASSERT(td != NULL, ("%s: USERSPACE but no proc", __func__)); } - nsegs = 0; + nsegs = -1; error = 0; - first = 1; for (i = 0; i < uio->uio_iovcnt && resid != 0 && !error; i++) { /* * Now at the first iovec to load. Load each iovec @@ -542,10 +537,7 @@ nexus_dmamap_load_uio(bus_dma_tag_t dmat if (minlen > 0) { error = _nexus_dmamap_load_buffer(dmat, addr, minlen, - td, flags, dmat->dt_segments, &nsegs, - first); - first = 0; - + td, flags, dmat->dt_segments, &nsegs); resid -= minlen; } } Modified: projects/physbio/sys/sparc64/sparc64/iommu.c ============================================================================== --- projects/physbio/sys/sparc64/sparc64/iommu.c Fri Dec 7 05:55:48 2012 (r243971) +++ projects/physbio/sys/sparc64/sparc64/iommu.c Fri Dec 7 06:05:34 2012 (r243972) @@ -852,7 +852,7 @@ iommu_dvmamap_destroy(bus_dma_tag_t dt, static int iommu_dvmamap_load_buffer(bus_dma_tag_t dt, struct iommu_state *is, bus_dmamap_t map, void *buf, bus_size_t buflen, struct thread *td, - int flags, bus_dma_segment_t *segs, int *segp, int align) + int flags, bus_dma_segment_t *segs, int *segp) { bus_addr_t amask, dvmaddr, dvmoffs; bus_size_t sgsize, esize; @@ -871,7 +871,7 @@ iommu_dvmamap_load_buffer(bus_dma_tag_t vaddr = (vm_offset_t)buf; voffs = vaddr & IO_PAGE_MASK; - amask = align ? dt->dt_alignment - 1 : 0; + amask = (*segp == -1) ? dt->dt_alignment - 1 : 0; /* Try to find a slab that is large enough. */ error = iommu_dvma_vallocseg(dt, is, map, voffs, buflen, amask, @@ -974,7 +974,7 @@ iommu_dvmamap_load(bus_dma_tag_t dt, bus IS_UNLOCK(is); error = iommu_dvmamap_load_buffer(dt, is, map, buf, buflen, NULL, - flags, dt->dt_segments, &seg, 1); + flags, dt->dt_segments, &seg); IS_LOCK(is); iommu_map_insq(is, map); @@ -997,7 +997,7 @@ iommu_dvmamap_load_mbuf(bus_dma_tag_t dt { struct iommu_state *is = dt->dt_cookie; struct mbuf *m; - int error = 0, first = 1, nsegs = -1; + int error = 0, nsegs = -1; M_ASSERTPKTHDR(m0); @@ -1018,8 +1018,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, NULL, flags, dt->dt_segments, - &nsegs, first); - first = 0; + &nsegs); } } else error = EINVAL; @@ -1045,7 +1044,7 @@ iommu_dvmamap_load_mbuf_sg(bus_dma_tag_t { struct iommu_state *is = dt->dt_cookie; struct mbuf *m; - int error = 0, first = 1; + int error = 0; M_ASSERTPKTHDR(m0); @@ -1067,8 +1066,7 @@ iommu_dvmamap_load_mbuf_sg(bus_dma_tag_t continue; error = iommu_dvmamap_load_buffer(dt, is, map, m->m_data, m->m_len, NULL, flags, segs, - nsegs, first); - first = 0; + nsegs); } } else error = EINVAL; @@ -1094,7 +1092,7 @@ iommu_dvmamap_load_uio(bus_dma_tag_t dt, struct iovec *iov; struct thread *td = NULL; bus_size_t minlen, resid; - int nsegs = -1, error = 0, first = 1, i; + int nsegs = -1, error = 0, i; if ((map->dm_flags & DMF_LOADED) != 0) { #ifdef DIAGNOSTIC @@ -1127,9 +1125,7 @@ iommu_dvmamap_load_uio(bus_dma_tag_t dt, error = iommu_dvmamap_load_buffer(dt, is, map, iov[i].iov_base, minlen, td, flags, dt->dt_segments, - &nsegs, first); - first = 0; - + &nsegs); resid -= minlen; } Modified: projects/physbio/sys/x86/x86/busdma_machdep.c ============================================================================== --- projects/physbio/sys/x86/x86/busdma_machdep.c Fri Dec 7 05:55:48 2012 (r243971) +++ projects/physbio/sys/x86/x86/busdma_machdep.c Fri Dec 7 06:05:34 2012 (r243972) @@ -647,7 +647,6 @@ _bus_dmamap_count_pages(bus_dma_tag_t dm /* * Utility function to load a linear buffer. segp contains * the starting segment on entrace, and the ending segment on exit. - * first indicates if this is the first invocation of this function. */ static __inline int _bus_dmamap_load_buffer(bus_dma_tag_t dmat, @@ -656,8 +655,7 @@ _bus_dmamap_load_buffer(bus_dma_tag_t dm pmap_t pmap, int flags, bus_dma_segment_t *segs, - int *segp, - int first) + int *segp) { bus_size_t sgsize; bus_addr_t curaddr, baddr, bmask; @@ -714,10 +712,10 @@ _bus_dmamap_load_buffer(bus_dma_tag_t dm * Insert chunk into a segment, coalescing with * previous segment if possible. */ - if (first) { + if (seg == -1) { + seg = 0; segs[seg].ds_addr = curaddr; segs[seg].ds_len = sgsize; - first = 0; } else { if (curaddr == segs[seg].ds_addr + segs[seg].ds_len && (segs[seg].ds_len + sgsize) <= dmat->maxsegsz && @@ -752,7 +750,7 @@ bus_dmamap_load(bus_dma_tag_t dmat, bus_ bus_size_t buflen, bus_dmamap_callback_t *callback, void *callback_arg, int flags) { - int error, nsegs = 0; + int error, nsegs = -1; if (map != NULL) { flags |= BUS_DMA_WAITOK; @@ -761,7 +759,7 @@ bus_dmamap_load(bus_dma_tag_t dmat, bus_ } error = _bus_dmamap_load_buffer(dmat, map, buf, buflen, NULL, flags, - dmat->segments, &nsegs, 1); + dmat->segments, &nsegs); CTR5(KTR_BUSDMA, "%s: tag %p tag flags 0x%x error %d nsegs %d", __func__, dmat, dmat->flags, error, nsegs + 1); @@ -799,10 +797,9 @@ _bus_dmamap_load_mbuf_sg(bus_dma_tag_t d M_ASSERTPKTHDR(m0); flags |= BUS_DMA_NOWAIT; - *nsegs = 0; + *nsegs = -1; error = 0; if (m0->m_pkthdr.len <= dmat->maxsize) { - int first = 1; struct mbuf *m; for (m = m0; m != NULL && error == 0; m = m->m_next) { @@ -810,8 +807,7 @@ _bus_dmamap_load_mbuf_sg(bus_dma_tag_t d error = _bus_dmamap_load_buffer(dmat, map, m->m_data, m->m_len, NULL, flags, - segs, nsegs, first); - first = 0; + segs, nsegs); } } } else { @@ -865,7 +861,7 @@ bus_dmamap_load_uio(bus_dma_tag_t dmat, bus_dmamap_callback2_t *callback, void *callback_arg, int flags) { - int nsegs, error, first, i; + int nsegs, error, i; bus_size_t resid; struct iovec *iov; pmap_t pmap; @@ -881,9 +877,8 @@ bus_dmamap_load_uio(bus_dma_tag_t dmat, } else pmap = NULL; - nsegs = 0; + nsegs = -1; error = 0; - first = 1; for (i = 0; i < uio->uio_iovcnt && resid != 0 && !error; i++) { /* * Now at the first iovec to load. Load each iovec @@ -896,9 +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, - dmat->segments, &nsegs, first); - first = 0; - + dmat->segments, &nsegs); resid -= minlen; } }
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201212070605.qB765Z3X030060>