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

Function alloc_bounce_pages

freebsd/arm64/arm64/busdma_bounce.c:1314–1347  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1312}
1313
1314static int
1315alloc_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
1349static int
1350reserve_bounce_pages(bus_dma_tag_t dmat, bus_dmamap_t map, int commit)

Callers 2

bounce_bus_dmamap_createFunction · 0.70

Calls 6

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

Tested by

no test coverage detected