svn commit: r243970 - in projects/physbio/sys: arm/arm ia64/ia64 mips/mips powerpc/powerpc sparc64/sparc64 x86/x86
Jeff Roberson
jeff at FreeBSD.org
Fri Dec 7 05:42:02 UTC 2012
Author: jeff
Date: Fri Dec 7 05:42:00 2012
New Revision: 243970
URL: http://svnweb.freebsd.org/changeset/base/243970
Log:
- Eliminate the 'lastaddrp' argument to the load_buffer() routines. It is
surely less error prone and less expensive to recalculate than it is to
remember. This is a step towards moving all of these functions to the
same prototype.
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/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:40:45 2012 (r243969)
+++ projects/physbio/sys/arm/arm/busdma_machdep-v6.c Fri Dec 7 05:42:00 2012 (r243970)
@@ -711,8 +711,7 @@ _bus_dmamap_count_pages(bus_dma_tag_t dm
}
/*
- * Utility function to load a linear buffer. lastaddrp holds state
- * between invocations (for multiple-buffer loads). segp contains
+ * 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.
*/
@@ -721,13 +720,12 @@ _bus_dmamap_load_buffer(bus_dma_tag_t dm
bus_dmamap_t map,
void *buf, bus_size_t buflen,
int flags,
- bus_addr_t *lastaddrp,
bus_dma_segment_t *segs,
int *segp,
int first)
{
bus_size_t sgsize;
- bus_addr_t curaddr, lastaddr, baddr, bmask;
+ bus_addr_t curaddr, baddr, bmask;
vm_offset_t vaddr;
struct sync_list *sl;
int seg, error;
@@ -740,7 +738,6 @@ _bus_dmamap_load_buffer(bus_dma_tag_t dm
sl = NULL;
vaddr = (vm_offset_t)buf;
- lastaddr = *lastaddrp;
bmask = ~(dmat->boundary - 1);
for (seg = *segp; buflen > 0 ; ) {
@@ -811,7 +808,7 @@ _bus_dmamap_load_buffer(bus_dma_tag_t dm
segs[seg].ds_len = sgsize;
first = 0;
} else {
- if (curaddr == lastaddr &&
+ if (curaddr == segs[seg].ds_addr + segs[seg].ds_len &&
(segs[seg].ds_len + sgsize) <= dmat->maxsegsz &&
(dmat->boundary == 0 ||
(segs[seg].ds_addr & bmask) == (curaddr & bmask)))
@@ -824,13 +821,11 @@ _bus_dmamap_load_buffer(bus_dma_tag_t dm
}
}
- lastaddr = curaddr + sgsize;
vaddr += sgsize;
buflen -= sgsize;
}
*segp = seg;
- *lastaddrp = lastaddr;
cleanup:
/*
* Did we fit?
@@ -850,7 +845,6 @@ bus_dmamap_load(bus_dma_tag_t dmat, bus_
bus_size_t buflen, bus_dmamap_callback_t *callback,
void *callback_arg, int flags)
{
- bus_addr_t lastaddr = 0;
int error, nsegs = 0;
flags |= BUS_DMA_WAITOK;
@@ -859,7 +853,7 @@ bus_dmamap_load(bus_dma_tag_t dmat, bus_
map->pmap = kernel_pmap;
error = _bus_dmamap_load_buffer(dmat, map, buf, buflen, flags,
- &lastaddr, dmat->segments, &nsegs, 1);
+ dmat->segments, &nsegs, 1);
CTR5(KTR_BUSDMA, "%s: tag %p tag flags 0x%x error %d nsegs %d",
__func__, dmat, dmat->flags, error, nsegs + 1);
@@ -902,15 +896,13 @@ _bus_dmamap_load_mbuf_sg(bus_dma_tag_t d
error = 0;
if (m0->m_pkthdr.len <= dmat->maxsize) {
int first = 1;
- bus_addr_t lastaddr = 0;
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, &lastaddr,
- segs, nsegs, first);
+ flags, segs, nsegs, first);
first = 0;
}
}
@@ -966,7 +958,6 @@ bus_dmamap_load_uio(bus_dma_tag_t dmat,
bus_dmamap_callback2_t *callback, void *callback_arg,
int flags)
{
- bus_addr_t lastaddr;
int nsegs, error, first, i;
bus_size_t resid;
struct iovec *iov;
@@ -985,7 +976,6 @@ bus_dmamap_load_uio(bus_dma_tag_t dmat,
nsegs = 0;
error = 0;
first = 1;
- lastaddr = (bus_addr_t) 0;
for (i = 0; i < uio->uio_iovcnt && resid != 0 && !error; i++) {
/*
* Now at the first iovec to load. Load each iovec
@@ -997,7 +987,7 @@ bus_dmamap_load_uio(bus_dma_tag_t dmat,
if (minlen > 0) {
error = _bus_dmamap_load_buffer(dmat, map,
- addr, minlen, flags, &lastaddr,
+ addr, minlen, flags,
dmat->segments, &nsegs, first);
first = 0;
resid -= minlen;
Modified: projects/physbio/sys/arm/arm/busdma_machdep.c
==============================================================================
--- projects/physbio/sys/arm/arm/busdma_machdep.c Fri Dec 7 05:40:45 2012 (r243969)
+++ projects/physbio/sys/arm/arm/busdma_machdep.c Fri Dec 7 05:42:00 2012 (r243970)
@@ -224,7 +224,7 @@ SYSINIT(busdma, SI_SUB_VM, SI_ORDER_ANY,
static __inline int
bus_dmamap_load_buffer(bus_dma_tag_t dmat, bus_dma_segment_t *segs,
bus_dmamap_t map, void *buf, bus_size_t buflen, struct pmap *pmap,
- int flags, vm_offset_t *lastaddrp, int *segp);
+ int flags, int *segp);
static __inline int
_bus_dma_can_bounce(vm_offset_t lowaddr, vm_offset_t highaddr)
@@ -746,18 +746,17 @@ _bus_dmamap_count_pages(bus_dma_tag_t dm
}
/*
- * Utility function to load a linear buffer. lastaddrp holds state
- * between invocations (for multiple-buffer loads). segp contains
+ * 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,
bus_dmamap_t map, void *buf, bus_size_t buflen, struct pmap *pmap,
- int flags, vm_offset_t *lastaddrp, int *segp)
+ int flags, int *segp)
{
bus_size_t sgsize;
- bus_addr_t curaddr, lastaddr, baddr, bmask;
+ bus_addr_t curaddr, baddr, bmask;
vm_offset_t vaddr = (vm_offset_t)buf;
int seg;
int error = 0;
@@ -765,7 +764,6 @@ bus_dmamap_load_buffer(bus_dma_tag_t dma
pt_entry_t pte;
pt_entry_t *ptep;
- lastaddr = *lastaddrp;
bmask = ~(dmat->boundary - 1);
if ((dmat->flags & BUS_DMA_COULD_BOUNCE) != 0) {
@@ -866,7 +864,8 @@ bus_dmamap_load_buffer(bus_dma_tag_t dma
* Insert chunk into a segment, coalescing with
* the previous segment if possible.
*/
- if (seg >= 0 && curaddr == lastaddr &&
+ if (seg >= 0 &&
+ curaddr == segs[seg].ds_addr + segs[seg].ds_len &&
(segs[seg].ds_len + sgsize) <= dmat->maxsegsz &&
(dmat->boundary == 0 ||
(segs[seg].ds_addr & bmask) ==
@@ -882,13 +881,11 @@ bus_dmamap_load_buffer(bus_dma_tag_t dma
if (error)
break;
segdone:
- lastaddr = curaddr + sgsize;
vaddr += sgsize;
buflen -= sgsize;
}
*segp = seg;
- *lastaddrp = lastaddr;
/*
* Did we fit?
@@ -906,7 +903,6 @@ bus_dmamap_load(bus_dma_tag_t dmat, bus_
bus_size_t buflen, bus_dmamap_callback_t *callback,
void *callback_arg, int flags)
{
- vm_offset_t lastaddr = 0;
int error, nsegs = -1;
KASSERT(dmat != NULL, ("dmatag is NULL"));
@@ -919,7 +915,7 @@ bus_dmamap_load(bus_dma_tag_t dmat, bus_
map->len = buflen;
error = bus_dmamap_load_buffer(dmat,
dmat->segments, map, buf, buflen, kernel_pmap,
- flags, &lastaddr, &nsegs);
+ flags, &nsegs);
if (error == EINPROGRESS)
return (error);
if (error)
@@ -950,14 +946,13 @@ bus_dmamap_load_mbuf(bus_dma_tag_t dmat,
map->buffer = m0;
map->len = 0;
if (m0->m_pkthdr.len <= dmat->maxsize) {
- vm_offset_t lastaddr = 0;
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,
dmat->segments, map, m->m_data, m->m_len,
- pmap_kernel(), flags, &lastaddr, &nsegs);
+ pmap_kernel(), flags, &nsegs);
map->len += m->m_len;
}
}
@@ -995,14 +990,13 @@ bus_dmamap_load_mbuf_sg(bus_dma_tag_t dm
map->buffer = m0;
map->len = 0;
if (m0->m_pkthdr.len <= dmat->maxsize) {
- vm_offset_t lastaddr = 0;
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, segs, map,
m->m_data, m->m_len,
- pmap_kernel(), flags, &lastaddr,
+ pmap_kernel(), flags,
nsegs);
map->len += m->m_len;
}
@@ -1026,7 +1020,6 @@ bus_dmamap_load_uio(bus_dma_tag_t dmat,
bus_dmamap_callback2_t *callback, void *callback_arg,
int flags)
{
- vm_offset_t lastaddr = 0;
int nsegs, i, error;
bus_size_t resid;
struct iovec *iov;
@@ -1059,7 +1052,7 @@ bus_dmamap_load_uio(bus_dma_tag_t dmat,
if (minlen > 0) {
error = bus_dmamap_load_buffer(dmat, dmat->segments,
- map, addr, minlen, pmap, flags, &lastaddr, &nsegs);
+ map, addr, minlen, pmap, flags, &nsegs);
map->len += minlen;
resid -= minlen;
Modified: projects/physbio/sys/ia64/ia64/busdma_machdep.c
==============================================================================
--- projects/physbio/sys/ia64/ia64/busdma_machdep.c Fri Dec 7 05:40:45 2012 (r243969)
+++ projects/physbio/sys/ia64/ia64/busdma_machdep.c Fri Dec 7 05:42:00 2012 (r243970)
@@ -481,18 +481,17 @@ bus_dmamem_free(bus_dma_tag_t dmat, void
}
/*
- * Utility function to load a linear buffer. lastaddrp holds state
- * between invocations (for multiple-buffer loads). segp contains
+ * 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_addr_t *lastaddrp,
+ bus_size_t buflen, struct thread *td, int flags,
bus_dma_segment_t *segs, int *segp, int first)
{
bus_size_t sgsize;
- bus_addr_t curaddr, lastaddr, baddr, bmask;
+ bus_addr_t curaddr, baddr, bmask;
vm_offset_t vaddr;
bus_addr_t paddr;
int seg;
@@ -554,7 +553,6 @@ _bus_dmamap_load_buffer(bus_dma_tag_t dm
mtx_unlock(&bounce_lock);
}
- lastaddr = *lastaddrp;
bmask = ~(dmat->boundary - 1);
for (seg = *segp; buflen > 0 ; ) {
@@ -596,7 +594,7 @@ _bus_dmamap_load_buffer(bus_dma_tag_t dm
segs[seg].ds_len = sgsize;
first = 0;
} else {
- if (curaddr == lastaddr &&
+ if (curaddr == segs[seg].ds_addr + segs[seg].ds_len &&
(segs[seg].ds_len + sgsize) <= dmat->maxsegsz &&
(dmat->boundary == 0 ||
(segs[seg].ds_addr & bmask) == (curaddr & bmask)))
@@ -609,13 +607,11 @@ _bus_dmamap_load_buffer(bus_dma_tag_t dm
}
}
- lastaddr = curaddr + sgsize;
vaddr += sgsize;
buflen -= sgsize;
}
*segp = seg;
- *lastaddrp = lastaddr;
/*
* Did we fit?
@@ -631,7 +627,6 @@ bus_dmamap_load(bus_dma_tag_t dmat, bus_
bus_size_t buflen, bus_dmamap_callback_t *callback, void *callback_arg,
int flags)
{
- bus_addr_t lastaddr = 0;
int error, nsegs = 0;
if (map != NULL) {
@@ -641,7 +636,7 @@ bus_dmamap_load(bus_dma_tag_t dmat, bus_
}
error = _bus_dmamap_load_buffer(dmat, map, buf, buflen, NULL, flags,
- &lastaddr, dmat->segments, &nsegs, 1);
+ dmat->segments, &nsegs, 1);
if (error == EINPROGRESS)
return (error);
@@ -670,14 +665,13 @@ bus_dmamap_load_mbuf(bus_dma_tag_t dmat,
error = 0;
if (m0->m_pkthdr.len <= dmat->maxsize) {
int first = 1;
- bus_addr_t lastaddr = 0;
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,
- &lastaddr, dmat->segments, &nsegs, first);
+ dmat->segments, &nsegs, first);
first = 0;
}
}
@@ -708,14 +702,13 @@ bus_dmamap_load_mbuf_sg(bus_dma_tag_t dm
error = 0;
if (m0->m_pkthdr.len <= dmat->maxsize) {
int first = 1;
- bus_addr_t lastaddr = 0;
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,
- &lastaddr, segs, nsegs, first);
+ segs, nsegs, first);
first = 0;
}
}
@@ -734,7 +727,6 @@ 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)
{
- bus_addr_t lastaddr;
int nsegs, error, first, i;
bus_size_t resid;
struct iovec *iov;
@@ -764,7 +756,7 @@ bus_dmamap_load_uio(bus_dma_tag_t dmat,
if (minlen > 0) {
error = _bus_dmamap_load_buffer(dmat, map, addr,
- minlen, td, flags, &lastaddr, dmat->segments,
+ minlen, td, flags, dmat->segments,
&nsegs, first);
first = 0;
Modified: projects/physbio/sys/mips/mips/busdma_machdep.c
==============================================================================
--- projects/physbio/sys/mips/mips/busdma_machdep.c Fri Dec 7 05:40:45 2012 (r243969)
+++ projects/physbio/sys/mips/mips/busdma_machdep.c Fri Dec 7 05:42:00 2012 (r243970)
@@ -217,7 +217,7 @@ SYSINIT(busdma, SI_SUB_VM, SI_ORDER_ANY,
static __inline int
bus_dmamap_load_buffer(bus_dma_tag_t dmat, bus_dma_segment_t *segs,
bus_dmamap_t map, void *buf, bus_size_t buflen, struct pmap *pmap,
- int flags, vm_offset_t *lastaddrp, int *segp);
+ int flags, int *segp);
static __inline int
_bus_dma_can_bounce(vm_offset_t lowaddr, vm_offset_t highaddr)
@@ -744,23 +744,21 @@ _bus_dmamap_count_pages(bus_dma_tag_t dm
}
/*
- * Utility function to load a linear buffer. lastaddrp holds state
- * between invocations (for multiple-buffer loads). segp contains
+ * 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,
bus_dmamap_t map, void *buf, bus_size_t buflen, struct pmap *pmap,
- int flags, vm_offset_t *lastaddrp, int *segp)
+ int flags, int *segp)
{
bus_size_t sgsize;
- bus_addr_t curaddr, lastaddr, baddr, bmask;
+ bus_addr_t curaddr, baddr, bmask;
vm_offset_t vaddr = (vm_offset_t)buf;
int seg;
int error = 0;
- lastaddr = *lastaddrp;
bmask = ~(dmat->boundary - 1);
if ((dmat->flags & BUS_DMA_COULD_BOUNCE) != 0) {
@@ -808,7 +806,8 @@ bus_dmamap_load_buffer(bus_dma_tag_t dma
* Insert chunk into a segment, coalescing with
* the previous segment if possible.
*/
- if (seg >= 0 && curaddr == lastaddr &&
+ if (seg >= 0 &&
+ curaddr == segs[seg].ds_addr + segs[seg].ds_len &&
(segs[seg].ds_len + sgsize) <= dmat->maxsegsz &&
(dmat->boundary == 0 ||
(segs[seg].ds_addr & bmask) ==
@@ -824,13 +823,11 @@ bus_dmamap_load_buffer(bus_dma_tag_t dma
if (error)
break;
segdone:
- lastaddr = curaddr + sgsize;
vaddr += sgsize;
buflen -= sgsize;
}
*segp = seg;
- *lastaddrp = lastaddr;
/*
* Did we fit?
@@ -848,7 +845,6 @@ bus_dmamap_load(bus_dma_tag_t dmat, bus_
bus_size_t buflen, bus_dmamap_callback_t *callback,
void *callback_arg, int flags)
{
- vm_offset_t lastaddr = 0;
int error, nsegs = -1;
KASSERT(dmat != NULL, ("dmatag is NULL"));
@@ -861,7 +857,7 @@ bus_dmamap_load(bus_dma_tag_t dmat, bus_
map->len = buflen;
error = bus_dmamap_load_buffer(dmat,
dmat->segments, map, buf, buflen, kernel_pmap,
- flags, &lastaddr, &nsegs);
+ flags, &nsegs);
if (error == EINPROGRESS)
return (error);
if (error)
@@ -892,14 +888,13 @@ bus_dmamap_load_mbuf(bus_dma_tag_t dmat,
map->buffer = m0;
map->len = 0;
if (m0->m_pkthdr.len <= dmat->maxsize) {
- vm_offset_t lastaddr = 0;
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,
dmat->segments, map, m->m_data, m->m_len,
- kernel_pmap, flags, &lastaddr, &nsegs);
+ kernel_pmap, flags, &nsegs);
map->len += m->m_len;
}
}
@@ -937,14 +932,13 @@ bus_dmamap_load_mbuf_sg(bus_dma_tag_t dm
map->buffer = m0;
map->len = 0;
if (m0->m_pkthdr.len <= dmat->maxsize) {
- vm_offset_t lastaddr = 0;
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, segs, map,
m->m_data, m->m_len,
- kernel_pmap, flags, &lastaddr,
+ kernel_pmap, flags,
nsegs);
map->len += m->m_len;
}
@@ -968,7 +962,6 @@ bus_dmamap_load_uio(bus_dma_tag_t dmat,
bus_dmamap_callback2_t *callback, void *callback_arg,
int flags)
{
- vm_offset_t lastaddr = 0;
int nsegs, i, error;
bus_size_t resid;
struct iovec *iov;
@@ -1002,7 +995,7 @@ bus_dmamap_load_uio(bus_dma_tag_t dmat,
if (minlen > 0) {
error = bus_dmamap_load_buffer(dmat, dmat->segments,
- map, addr, minlen, pmap, flags, &lastaddr, &nsegs);
+ map, addr, minlen, pmap, flags, &nsegs);
map->len += minlen;
resid -= minlen;
Modified: projects/physbio/sys/powerpc/powerpc/busdma_machdep.c
==============================================================================
--- projects/physbio/sys/powerpc/powerpc/busdma_machdep.c Fri Dec 7 05:40:45 2012 (r243969)
+++ projects/physbio/sys/powerpc/powerpc/busdma_machdep.c Fri Dec 7 05:42:00 2012 (r243970)
@@ -565,8 +565,7 @@ bus_dmamem_free(bus_dma_tag_t dmat, void
}
/*
- * Utility function to load a linear buffer. lastaddrp holds state
- * between invocations (for multiple-buffer loads). segp contains
+ * 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.
*/
@@ -576,13 +575,12 @@ _bus_dmamap_load_buffer(bus_dma_tag_t dm
void *buf, bus_size_t buflen,
pmap_t pmap,
int flags,
- bus_addr_t *lastaddrp,
bus_dma_segment_t *segs,
int *segp,
int first)
{
bus_size_t sgsize;
- bus_addr_t curaddr, lastaddr, baddr, bmask;
+ bus_addr_t curaddr, baddr, bmask;
vm_offset_t vaddr;
bus_addr_t paddr;
int seg;
@@ -642,7 +640,6 @@ _bus_dmamap_load_buffer(bus_dma_tag_t dm
}
vaddr = (vm_offset_t)buf;
- lastaddr = *lastaddrp;
bmask = ~(dmat->boundary - 1);
for (seg = *segp; buflen > 0 ; ) {
@@ -687,7 +684,7 @@ _bus_dmamap_load_buffer(bus_dma_tag_t dm
segs[seg].ds_len = sgsize;
first = 0;
} else {
- if (curaddr == lastaddr &&
+ if (curaddr == segs[seg].ds_addr + segs[seg].ds_len &&
(segs[seg].ds_len + sgsize) <= dmat->maxsegsz &&
(dmat->boundary == 0 ||
(segs[seg].ds_addr & bmask) == (curaddr & bmask)))
@@ -700,13 +697,11 @@ _bus_dmamap_load_buffer(bus_dma_tag_t dm
}
}
- lastaddr = curaddr + sgsize;
vaddr += sgsize;
buflen -= sgsize;
}
*segp = seg;
- *lastaddrp = lastaddr;
/*
* Did we fit?
@@ -722,7 +717,6 @@ bus_dmamap_load(bus_dma_tag_t dmat, bus_
bus_size_t buflen, bus_dmamap_callback_t *callback,
void *callback_arg, int flags)
{
- bus_addr_t lastaddr = 0;
int error;
if (dmat->flags & BUS_DMA_COULD_BOUNCE) {
@@ -733,7 +727,7 @@ bus_dmamap_load(bus_dma_tag_t dmat, bus_
map->nsegs = 0;
error = _bus_dmamap_load_buffer(dmat, map, buf, buflen, NULL, flags,
- &lastaddr, map->segments, &map->nsegs, 1);
+ map->segments, &map->nsegs, 1);
map->nsegs++;
CTR5(KTR_BUSDMA, "%s: tag %p tag flags 0x%x error %d nsegs %d",
@@ -782,14 +776,13 @@ bus_dmamap_load_mbuf(bus_dma_tag_t dmat,
error = 0;
if (m0->m_pkthdr.len <= dmat->maxsize) {
int first = 1;
- bus_addr_t lastaddr = 0;
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, &lastaddr,
+ NULL, flags,
map->segments, &map->nsegs, first);
first = 0;
}
@@ -830,14 +823,13 @@ bus_dmamap_load_mbuf_sg(bus_dma_tag_t dm
error = 0;
if (m0->m_pkthdr.len <= dmat->maxsize) {
int first = 1;
- bus_addr_t lastaddr = 0;
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, &lastaddr,
+ NULL, flags,
segs, nsegs, first);
first = 0;
}
@@ -871,7 +863,6 @@ bus_dmamap_load_uio(bus_dma_tag_t dmat,
bus_dmamap_callback2_t *callback, void *callback_arg,
int flags)
{
- bus_addr_t lastaddr = 0;
int error, first, i;
bus_size_t resid;
struct iovec *iov;
@@ -902,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, &lastaddr,
+ addr, minlen, pmap, flags,
map->segments, &map->nsegs, first);
first = 0;
Modified: projects/physbio/sys/sparc64/sparc64/bus_machdep.c
==============================================================================
--- projects/physbio/sys/sparc64/sparc64/bus_machdep.c Fri Dec 7 05:40:45 2012 (r243969)
+++ projects/physbio/sys/sparc64/sparc64/bus_machdep.c Fri Dec 7 05:42:00 2012 (r243970)
@@ -326,18 +326,17 @@ nexus_dmamap_destroy(bus_dma_tag_t dmat,
}
/*
- * Utility function to load a linear buffer. lastaddrp holds state
- * between invocations (for multiple-buffer loads). segp contains
+ * 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_addr_t *lastaddrp,
+ struct thread *td, int flags,
bus_dma_segment_t *segs, int *segp, int first)
{
bus_size_t sgsize;
- bus_addr_t curaddr, lastaddr, baddr, bmask;
+ bus_addr_t curaddr, baddr, bmask;
vm_offset_t vaddr = (vm_offset_t)buf;
int seg;
pmap_t pmap;
@@ -347,7 +346,6 @@ _nexus_dmamap_load_buffer(bus_dma_tag_t
else
pmap = NULL;
- lastaddr = *lastaddrp;
bmask = ~(dmat->dt_boundary - 1);
for (seg = *segp; buflen > 0 ; ) {
@@ -386,7 +384,7 @@ _nexus_dmamap_load_buffer(bus_dma_tag_t
segs[seg].ds_len = sgsize;
first = 0;
} else {
- if (curaddr == lastaddr &&
+ if (curaddr == segs[seg].ds_addr + segs[seg].ds_len &&
(segs[seg].ds_len + sgsize) <= dmat->dt_maxsegsz &&
(dmat->dt_boundary == 0 ||
(segs[seg].ds_addr & bmask) == (curaddr & bmask)))
@@ -399,13 +397,11 @@ _nexus_dmamap_load_buffer(bus_dma_tag_t
}
}
- lastaddr = curaddr + sgsize;
vaddr += sgsize;
buflen -= sgsize;
}
*segp = seg;
- *lastaddrp = lastaddr;
/*
* Did we fit?
@@ -428,11 +424,10 @@ nexus_dmamap_load(bus_dma_tag_t dmat, bu
bus_size_t buflen, bus_dmamap_callback_t *callback, void *callback_arg,
int flags)
{
- bus_addr_t lastaddr;
int error, nsegs;
error = _nexus_dmamap_load_buffer(dmat, buf, buflen, NULL, flags,
- &lastaddr, dmat->dt_segments, &nsegs, 1);
+ dmat->dt_segments, &nsegs, 1);
if (error == 0) {
(*callback)(callback_arg, dmat->dt_segments, nsegs + 1, 0);
@@ -458,13 +453,12 @@ nexus_dmamap_load_mbuf(bus_dma_tag_t dma
error = 0;
if (m0->m_pkthdr.len <= dmat->dt_maxsize) {
int first = 1;
- bus_addr_t lastaddr = 0;
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, &lastaddr,
+ m->m_data, m->m_len,NULL, flags,
dmat->dt_segments, &nsegs, first);
first = 0;
}
@@ -496,13 +490,12 @@ nexus_dmamap_load_mbuf_sg(bus_dma_tag_t
error = 0;
if (m0->m_pkthdr.len <= dmat->dt_maxsize) {
int first = 1;
- bus_addr_t lastaddr = 0;
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, &lastaddr,
+ m->m_data, m->m_len,NULL, flags,
segs, nsegs, first);
first = 0;
}
@@ -522,7 +515,6 @@ 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)
{
- bus_addr_t lastaddr;
int nsegs, error, first, i;
bus_size_t resid;
struct iovec *iov;
@@ -550,7 +542,7 @@ nexus_dmamap_load_uio(bus_dma_tag_t dmat
if (minlen > 0) {
error = _nexus_dmamap_load_buffer(dmat, addr, minlen,
- td, flags, &lastaddr, dmat->dt_segments, &nsegs,
+ td, flags, dmat->dt_segments, &nsegs,
first);
first = 0;
Modified: projects/physbio/sys/x86/x86/busdma_machdep.c
==============================================================================
--- projects/physbio/sys/x86/x86/busdma_machdep.c Fri Dec 7 05:40:45 2012 (r243969)
+++ projects/physbio/sys/x86/x86/busdma_machdep.c Fri Dec 7 05:42:00 2012 (r243970)
@@ -645,8 +645,7 @@ _bus_dmamap_count_pages(bus_dma_tag_t dm
}
/*
- * Utility function to load a linear buffer. lastaddrp holds state
- * between invocations (for multiple-buffer loads). segp contains
+ * 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.
*/
@@ -656,13 +655,12 @@ _bus_dmamap_load_buffer(bus_dma_tag_t dm
void *buf, bus_size_t buflen,
pmap_t pmap,
int flags,
- bus_addr_t *lastaddrp,
bus_dma_segment_t *segs,
int *segp,
int first)
{
bus_size_t sgsize;
- bus_addr_t curaddr, lastaddr, baddr, bmask;
+ bus_addr_t curaddr, baddr, bmask;
vm_offset_t vaddr;
int seg, error;
@@ -676,7 +674,6 @@ _bus_dmamap_load_buffer(bus_dma_tag_t dm
}
vaddr = (vm_offset_t)buf;
- lastaddr = *lastaddrp;
bmask = ~(dmat->boundary - 1);
for (seg = *segp; buflen > 0 ; ) {
@@ -722,7 +719,7 @@ _bus_dmamap_load_buffer(bus_dma_tag_t dm
segs[seg].ds_len = sgsize;
first = 0;
} else {
- if (curaddr == lastaddr &&
+ if (curaddr == segs[seg].ds_addr + segs[seg].ds_len &&
(segs[seg].ds_len + sgsize) <= dmat->maxsegsz &&
(dmat->boundary == 0 ||
(segs[seg].ds_addr & bmask) == (curaddr & bmask)))
@@ -735,13 +732,11 @@ _bus_dmamap_load_buffer(bus_dma_tag_t dm
}
}
- lastaddr = curaddr + sgsize;
vaddr += sgsize;
buflen -= sgsize;
}
*segp = seg;
- *lastaddrp = lastaddr;
/*
* Did we fit?
@@ -757,7 +752,6 @@ bus_dmamap_load(bus_dma_tag_t dmat, bus_
bus_size_t buflen, bus_dmamap_callback_t *callback,
void *callback_arg, int flags)
{
- bus_addr_t lastaddr = 0;
int error, nsegs = 0;
if (map != NULL) {
@@ -767,7 +761,7 @@ bus_dmamap_load(bus_dma_tag_t dmat, bus_
}
error = _bus_dmamap_load_buffer(dmat, map, buf, buflen, NULL, flags,
- &lastaddr, dmat->segments, &nsegs, 1);
+ dmat->segments, &nsegs, 1);
CTR5(KTR_BUSDMA, "%s: tag %p tag flags 0x%x error %d nsegs %d",
__func__, dmat, dmat->flags, error, nsegs + 1);
@@ -809,14 +803,13 @@ _bus_dmamap_load_mbuf_sg(bus_dma_tag_t d
error = 0;
if (m0->m_pkthdr.len <= dmat->maxsize) {
int first = 1;
- bus_addr_t lastaddr = 0;
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, &lastaddr,
+ NULL, flags,
segs, nsegs, first);
first = 0;
}
@@ -872,7 +865,6 @@ bus_dmamap_load_uio(bus_dma_tag_t dmat,
bus_dmamap_callback2_t *callback, void *callback_arg,
int flags)
{
- bus_addr_t lastaddr = 0;
int nsegs, error, first, i;
bus_size_t resid;
struct iovec *iov;
@@ -903,7 +895,7 @@ bus_dmamap_load_uio(bus_dma_tag_t dmat,
if (minlen > 0) {
error = _bus_dmamap_load_buffer(dmat, map,
- addr, minlen, pmap, flags, &lastaddr,
+ addr, minlen, pmap, flags,
dmat->segments, &nsegs, first);
first = 0;
More information about the svn-src-projects
mailing list