diff options
author | John Baldwin <jhb@FreeBSD.org> | 2007-11-27 17:28:12 +0000 |
---|---|---|
committer | John Baldwin <jhb@FreeBSD.org> | 2007-11-27 17:28:12 +0000 |
commit | 23d34db9561ae19c2dbcd2c477fd0231e35e3118 (patch) | |
tree | f0985e5ee1a2bfe1965388e2711189e15071b712 | |
parent | 0f7362f4171643d552a0647bcf598c7cb557daa9 (diff) | |
download | src-23d34db9561ae19c2dbcd2c477fd0231e35e3118.tar.gz src-23d34db9561ae19c2dbcd2c477fd0231e35e3118.zip |
Remove the 'needbounce' variable from the _bus_dmamap_load_buffer()
routine. It is not needed as the existing tests for segment coalescing
already handle bounced addresses and it prevents legal segment coalescing
in certain edge cases.
MFC after: 1 week
Reviewed by: scottl
Notes
Notes:
svn path=/head/; revision=173988
-rw-r--r-- | sys/amd64/amd64/busdma_machdep.c | 7 | ||||
-rw-r--r-- | sys/arm/arm/busdma_machdep.c | 14 | ||||
-rw-r--r-- | sys/i386/i386/busdma_machdep.c | 13 | ||||
-rw-r--r-- | sys/ia64/ia64/busdma_machdep.c | 7 |
4 files changed, 12 insertions, 29 deletions
diff --git a/sys/amd64/amd64/busdma_machdep.c b/sys/amd64/amd64/busdma_machdep.c index b726fbbda271..321c49ebf591 100644 --- a/sys/amd64/amd64/busdma_machdep.c +++ b/sys/amd64/amd64/busdma_machdep.c @@ -580,7 +580,6 @@ _bus_dmamap_load_buffer(bus_dma_tag_t dmat, bus_addr_t curaddr, lastaddr, baddr, bmask; vm_offset_t vaddr; bus_addr_t paddr; - int needbounce = 0; int seg; if (map == NULL) @@ -604,10 +603,8 @@ _bus_dmamap_load_buffer(bus_dma_tag_t dmat, while (vaddr < vendaddr) { paddr = pmap_kextract(vaddr); - if (run_filter(dmat, paddr) != 0) { - needbounce = 1; + if (run_filter(dmat, paddr) != 0) map->pagesneeded++; - } vaddr += PAGE_SIZE; } CTR1(KTR_BUSDMA, "pagesneeded= %d\n", map->pagesneeded); @@ -679,7 +676,7 @@ _bus_dmamap_load_buffer(bus_dma_tag_t dmat, segs[seg].ds_len = sgsize; first = 0; } else { - if (needbounce == 0 && curaddr == lastaddr && + if (curaddr == lastaddr && (segs[seg].ds_len + sgsize) <= dmat->maxsegsz && (dmat->boundary == 0 || (segs[seg].ds_addr & bmask) == (curaddr & bmask))) diff --git a/sys/arm/arm/busdma_machdep.c b/sys/arm/arm/busdma_machdep.c index 2044e2a1dece..6c8195ba8284 100644 --- a/sys/arm/arm/busdma_machdep.c +++ b/sys/arm/arm/busdma_machdep.c @@ -664,12 +664,11 @@ bus_dmamem_free(bus_dma_tag_t dmat, void *vaddr, bus_dmamap_t map) static int _bus_dmamap_count_pages(bus_dma_tag_t dmat, bus_dmamap_t map, void *buf, - bus_size_t buflen, int flags, int *nb) + bus_size_t buflen, int flags) { vm_offset_t vaddr; vm_offset_t vendaddr; bus_addr_t paddr; - int needbounce = *nb; if ((map->pagesneeded == 0)) { CTR4(KTR_BUSDMA, "lowaddr= %d Maxmem= %d, boundary= %d, " @@ -687,10 +686,8 @@ _bus_dmamap_count_pages(bus_dma_tag_t dmat, bus_dmamap_t map, void *buf, while (vaddr < vendaddr) { paddr = pmap_kextract(vaddr); if (((dmat->flags & BUS_DMA_COULD_BOUNCE) != 0) && - run_filter(dmat, paddr) != 0) { - needbounce = 1; + run_filter(dmat, paddr) != 0) map->pagesneeded++; - } vaddr += PAGE_SIZE; } CTR1(KTR_BUSDMA, "pagesneeded= %d\n", map->pagesneeded); @@ -716,7 +713,6 @@ _bus_dmamap_count_pages(bus_dma_tag_t dmat, bus_dmamap_t map, void *buf, mtx_unlock(&bounce_lock); } - *nb = needbounce; return (0); } @@ -739,14 +735,12 @@ bus_dmamap_load_buffer(bus_dma_tag_t dmat, bus_dma_segment_t *segs, pd_entry_t *pde; pt_entry_t pte; pt_entry_t *ptep; - int needbounce = 0; lastaddr = *lastaddrp; bmask = ~(dmat->boundary - 1); if ((dmat->flags & BUS_DMA_COULD_BOUNCE) != 0) { - error = _bus_dmamap_count_pages(dmat, map, buf, buflen, flags, - &needbounce); + error = _bus_dmamap_count_pages(dmat, map, buf, buflen, flags); if (error) return (error); } @@ -840,7 +834,7 @@ bus_dmamap_load_buffer(bus_dma_tag_t dmat, bus_dma_segment_t *segs, * Insert chunk into a segment, coalescing with * the previous segment if possible. */ - if (needbounce == 0 && seg >= 0 && curaddr == lastaddr && + if (seg >= 0 && curaddr == lastaddr && (segs[seg].ds_len + sgsize) <= dmat->maxsegsz && (dmat->boundary == 0 || (segs[seg].ds_addr & bmask) == diff --git a/sys/i386/i386/busdma_machdep.c b/sys/i386/i386/busdma_machdep.c index 90f8848d13fd..383061b78b60 100644 --- a/sys/i386/i386/busdma_machdep.c +++ b/sys/i386/i386/busdma_machdep.c @@ -142,7 +142,7 @@ static bus_addr_t add_bounce_page(bus_dma_tag_t dmat, bus_dmamap_t map, static void free_bounce_page(bus_dma_tag_t dmat, struct bounce_page *bpage); int run_filter(bus_dma_tag_t dmat, bus_addr_t paddr); int _bus_dmamap_count_pages(bus_dma_tag_t dmat, bus_dmamap_t map, void *buf, - bus_size_t buflen, int flags, int *nb); + bus_size_t buflen, int flags); /* * Return true if a match is made. @@ -569,12 +569,11 @@ bus_dmamem_free(bus_dma_tag_t dmat, void *vaddr, bus_dmamap_t map) int _bus_dmamap_count_pages(bus_dma_tag_t dmat, bus_dmamap_t map, void *buf, - bus_size_t buflen, int flags, int *nb) + bus_size_t buflen, int flags) { vm_offset_t vaddr; vm_offset_t vendaddr; bus_addr_t paddr; - int needbounce = *nb; if ((map != &nobounce_dmamap && map->pagesneeded == 0)) { CTR4(KTR_BUSDMA, "lowaddr= %d Maxmem= %d, boundary= %d, " @@ -593,7 +592,6 @@ _bus_dmamap_count_pages(bus_dma_tag_t dmat, bus_dmamap_t map, void *buf, paddr = pmap_kextract(vaddr); if (((dmat->flags & BUS_DMA_COULD_BOUNCE) != 0) && run_filter(dmat, paddr) != 0) { - needbounce = 1; map->pagesneeded++; } vaddr += PAGE_SIZE; @@ -624,7 +622,6 @@ _bus_dmamap_count_pages(bus_dma_tag_t dmat, bus_dmamap_t map, void *buf, mtx_unlock(&bounce_lock); } - *nb = needbounce; return (0); } @@ -648,15 +645,13 @@ _bus_dmamap_load_buffer(bus_dma_tag_t dmat, bus_size_t sgsize; bus_addr_t curaddr, lastaddr, baddr, bmask; vm_offset_t vaddr; - int needbounce = 0; int seg, error; if (map == NULL) map = &nobounce_dmamap; if ((dmat->flags & BUS_DMA_COULD_BOUNCE) != 0) { - error = _bus_dmamap_count_pages(dmat, map, buf, buflen, flags, - &needbounce); + error = _bus_dmamap_count_pages(dmat, map, buf, buflen, flags); if (error) return (error); } @@ -705,7 +700,7 @@ _bus_dmamap_load_buffer(bus_dma_tag_t dmat, segs[seg].ds_len = sgsize; first = 0; } else { - if (needbounce == 0 && curaddr == lastaddr && + if (curaddr == lastaddr && (segs[seg].ds_len + sgsize) <= dmat->maxsegsz && (dmat->boundary == 0 || (segs[seg].ds_addr & bmask) == (curaddr & bmask))) diff --git a/sys/ia64/ia64/busdma_machdep.c b/sys/ia64/ia64/busdma_machdep.c index 5ef2e5361986..8dd4a9bcf8bd 100644 --- a/sys/ia64/ia64/busdma_machdep.c +++ b/sys/ia64/ia64/busdma_machdep.c @@ -503,7 +503,6 @@ _bus_dmamap_load_buffer(bus_dma_tag_t dmat, bus_addr_t curaddr, lastaddr, baddr, bmask; vm_offset_t vaddr; bus_addr_t paddr; - int needbounce = 0; int seg; pmap_t pmap; @@ -529,10 +528,8 @@ _bus_dmamap_load_buffer(bus_dma_tag_t dmat, while (vaddr < vendaddr) { paddr = pmap_kextract(vaddr); - if (run_filter(dmat, paddr, 0) != 0) { - needbounce = 1; + if (run_filter(dmat, paddr, 0) != 0) map->pagesneeded++; - } vaddr += PAGE_SIZE; } } @@ -604,7 +601,7 @@ _bus_dmamap_load_buffer(bus_dma_tag_t dmat, segs[seg].ds_len = sgsize; first = 0; } else { - if (!needbounce && curaddr == lastaddr && + if (curaddr == lastaddr && (segs[seg].ds_len + sgsize) <= dmat->maxsegsz && (dmat->boundary == 0 || (segs[seg].ds_addr & bmask) == (curaddr & bmask))) |