aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Baldwin <jhb@FreeBSD.org>2007-11-27 17:28:12 +0000
committerJohn Baldwin <jhb@FreeBSD.org>2007-11-27 17:28:12 +0000
commit23d34db9561ae19c2dbcd2c477fd0231e35e3118 (patch)
treef0985e5ee1a2bfe1965388e2711189e15071b712
parent0f7362f4171643d552a0647bcf598c7cb557daa9 (diff)
downloadsrc-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.c7
-rw-r--r--sys/arm/arm/busdma_machdep.c14
-rw-r--r--sys/i386/i386/busdma_machdep.c13
-rw-r--r--sys/ia64/ia64/busdma_machdep.c7
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)))