]> xenbits.xensource.com Git - people/julieng/freebsd.git/commitdiff
Ensure the client regions for unmapped bounce buffers created through bus_dmamap_load...
authorjah <jah@FreeBSD.org>
Tue, 13 Oct 2015 02:17:56 +0000 (02:17 +0000)
committerjah <jah@FreeBSD.org>
Tue, 13 Oct 2015 02:17:56 +0000 (02:17 +0000)
This is already done for mapped buffers.
While here, stop casting bus_addr_t to vm_offset_t.

sys/x86/x86/busdma_bounce.c

index 48c500fe6873f0c4e82373b967510e08f332c484..48f9bb317878274729ace63df57e513d55882752 100644 (file)
@@ -476,7 +476,8 @@ _bus_dmamap_count_phys(bus_dma_tag_t dmat, bus_dmamap_t map, vm_paddr_t buf,
                while (buflen != 0) {
                        sgsize = MIN(buflen, dmat->common.maxsegsz);
                        if (bus_dma_run_filter(&dmat->common, curaddr)) {
-                               sgsize = MIN(sgsize, PAGE_SIZE);
+                               sgsize = MIN(sgsize,
+                                   PAGE_SIZE - (curaddr & PAGE_MASK));
                                map->pagesneeded++;
                        }
                        curaddr += sgsize;
@@ -630,7 +631,7 @@ bounce_bus_dmamap_load_phys(bus_dma_tag_t dmat, bus_dmamap_t map,
                if (((dmat->bounce_flags & BUS_DMA_COULD_BOUNCE) != 0) &&
                    map->pagesneeded != 0 &&
                    bus_dma_run_filter(&dmat->common, curaddr)) {
-                       sgsize = MIN(sgsize, PAGE_SIZE);
+                       sgsize = MIN(sgsize, PAGE_SIZE - (curaddr & PAGE_MASK));
                        curaddr = add_bounce_page(dmat, map, 0, curaddr,
                            sgsize);
                }
@@ -694,7 +695,7 @@ bounce_bus_dmamap_load_buffer(bus_dma_tag_t dmat, bus_dmamap_t map, void *buf,
                 * Compute the segment size, and adjust counts.
                 */
                max_sgsize = MIN(buflen, dmat->common.maxsegsz);
-               sgsize = PAGE_SIZE - ((vm_offset_t)curaddr & PAGE_MASK);
+               sgsize = PAGE_SIZE - (curaddr & PAGE_MASK);
                if (((dmat->bounce_flags & BUS_DMA_COULD_BOUNCE) != 0) &&
                    map->pagesneeded != 0 &&
                    bus_dma_run_filter(&dmat->common, curaddr)) {