| 1312 | } |
| 1313 | |
| 1314 | static int |
| 1315 | alloc_bounce_pages(bus_dma_tag_t dmat, u_int numpages) |
| 1316 | { |
| 1317 | struct bounce_zone *bz; |
| 1318 | int count; |
| 1319 | |
| 1320 | bz = dmat->bounce_zone; |
| 1321 | count = 0; |
| 1322 | while (numpages > 0) { |
| 1323 | struct bounce_page *bpage; |
| 1324 | |
| 1325 | bpage = (struct bounce_page *)malloc(sizeof(*bpage), M_DEVBUF, |
| 1326 | M_NOWAIT | M_ZERO); |
| 1327 | |
| 1328 | if (bpage == NULL) |
| 1329 | break; |
| 1330 | bpage->vaddr = (vm_offset_t)contigmalloc(PAGE_SIZE, M_DEVBUF, |
| 1331 | M_NOWAIT, 0ul, bz->lowaddr, PAGE_SIZE, 0); |
| 1332 | if (bpage->vaddr == 0) { |
| 1333 | free(bpage, M_DEVBUF); |
| 1334 | break; |
| 1335 | } |
| 1336 | bpage->busaddr = pmap_kextract(bpage->vaddr); |
| 1337 | mtx_lock(&bounce_lock); |
| 1338 | STAILQ_INSERT_TAIL(&bz->bounce_page_list, bpage, links); |
| 1339 | total_bpages++; |
| 1340 | bz->total_bpages++; |
| 1341 | bz->free_bpages++; |
| 1342 | mtx_unlock(&bounce_lock); |
| 1343 | count++; |
| 1344 | numpages--; |
| 1345 | } |
| 1346 | return (count); |
| 1347 | } |
| 1348 | |
| 1349 | static int |
| 1350 | reserve_bounce_pages(bus_dma_tag_t dmat, bus_dmamap_t map, int commit) |
no test coverage detected