MCPcopy Create free account
hub / github.com/F-Stack/f-stack / alloc_bounce_pages

Function alloc_bounce_pages

freebsd/mips/mips/busdma_machdep.c:1385–1423  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1383}
1384
1385static int
1386alloc_bounce_pages(bus_dma_tag_t dmat, u_int numpages)
1387{
1388 struct bounce_zone *bz;
1389 int count;
1390
1391 bz = dmat->bounce_zone;
1392 count = 0;
1393 while (numpages > 0) {
1394 struct bounce_page *bpage;
1395
1396 bpage = (struct bounce_page *)malloc(sizeof(*bpage), M_BUSDMA,
1397 M_NOWAIT | M_ZERO);
1398
1399 if (bpage == NULL)
1400 break;
1401 bpage->vaddr = (vm_offset_t)contigmalloc(PAGE_SIZE, M_BOUNCE,
1402 M_NOWAIT, 0ul,
1403 bz->lowaddr,
1404 PAGE_SIZE,
1405 0);
1406 if (bpage->vaddr == 0) {
1407 free(bpage, M_BUSDMA);
1408 break;
1409 }
1410 bpage->busaddr = pmap_kextract(bpage->vaddr);
1411 bpage->vaddr_nocache =
1412 (vm_offset_t)pmap_mapdev(bpage->busaddr, PAGE_SIZE);
1413 mtx_lock(&bounce_lock);
1414 STAILQ_INSERT_TAIL(&bz->bounce_page_list, bpage, links);
1415 total_bpages++;
1416 bz->total_bpages++;
1417 bz->free_bpages++;
1418 mtx_unlock(&bounce_lock);
1419 count++;
1420 numpages--;
1421 }
1422 return (count);
1423}
1424
1425static int
1426reserve_bounce_pages(bus_dma_tag_t dmat, bus_dmamap_t map, int commit)

Callers 2

bus_dma_tag_createFunction · 0.70
bus_dmamap_createFunction · 0.70

Calls 7

mallocFunction · 0.85
contigmallocFunction · 0.85
pmap_kextractFunction · 0.70
pmap_mapdevFunction · 0.70
freeFunction · 0.50
mtx_lockFunction · 0.50
mtx_unlockFunction · 0.50

Tested by

no test coverage detected