Date: Fri, 7 Dec 2012 05:42:01 +0000 (UTC) From: Jeff Roberson <jeff@FreeBSD.org> To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r243970 - in projects/physbio/sys: arm/arm ia64/ia64 mips/mips powerpc/powerpc sparc64/sparc64 x86/x86 Message-ID: <201212070542.qB75g1PQ025512@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
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;
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201212070542.qB75g1PQ025512>