*** busdma_machdep.c Sat Dec 4 06:55:10 2004 --- /tmp/busdma_machdep.c Fri Jan 28 10:37:35 2005 *************** *** 393,403 **** --- 393,405 ---- /* Must bounce */ int maxpages; + struct bounce_zone *bz; if (dmat->bounce_zone == NULL) { if ((error = alloc_bounce_zone(dmat)) != 0) return (error); } + bz = dmat->bounce_zone; *mapp = (bus_dmamap_t)malloc(sizeof(**mapp), M_DEVBUF, M_NOWAIT | M_ZERO); *************** *** 415,422 **** * basis up to a sane limit. */ maxpages = MIN(MAX_BPAGES, Maxmem - atop(dmat->lowaddr)); ! if ((dmat->flags & BUS_DMA_MIN_ALLOC_COMP) == 0 ! || (dmat->map_count > 0 && total_bpages < maxpages)) { int pages; if (dmat->lowaddr > bounce_lowaddr) { --- 417,424 ---- * basis up to a sane limit. */ maxpages = MIN(MAX_BPAGES, Maxmem - atop(dmat->lowaddr)); ! if (((dmat->flags & BUS_DMA_MIN_ALLOC_COMP) == 0 ! || dmat->map_count > 0) && bz->total_bpages < maxpages) { int pages; if (dmat->lowaddr > bounce_lowaddr) { *************** *** 428,434 **** "not implemented"); } pages = MAX(atop(dmat->maxsize), 1); ! pages = MIN(maxpages - total_bpages, pages); if (alloc_bounce_pages(dmat, pages) < pages) error = ENOMEM; --- 430,436 ---- "not implemented"); } pages = MAX(atop(dmat->maxsize), 1); ! pages = MIN(maxpages - bz->total_bpages, pages); if (alloc_bounce_pages(dmat, pages) < pages) error = ENOMEM;