svn commit: r243972 - in projects/physbio/sys: arm/arm ia64/ia64 powerpc/powerpc sparc64/sparc64 x86/x86
Jeff Roberson
jeff at FreeBSD.org
Fri Dec 7 06:05:36 UTC 2012
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;
}
}
More information about the svn-src-projects
mailing list