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

Function alloc_bounce_pages

freebsd/arm/arm/busdma_machdep.c:1600–1633  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1598}
1599
1600static int
1601alloc_bounce_pages(bus_dma_tag_t dmat, u_int numpages)
1602{
1603 struct bounce_zone *bz;
1604 int count;
1605
1606 bz = dmat->bounce_zone;
1607 count = 0;
1608 while (numpages > 0) {
1609 struct bounce_page *bpage;
1610
1611 bpage = (struct bounce_page *)malloc(sizeof(*bpage), M_BUSDMA,
1612 M_NOWAIT | M_ZERO);
1613
1614 if (bpage == NULL)
1615 break;
1616 bpage->vaddr = (vm_offset_t)contigmalloc(PAGE_SIZE, M_BOUNCE,
1617 M_NOWAIT, 0ul, bz->lowaddr, PAGE_SIZE, 0);
1618 if (bpage->vaddr == 0) {
1619 free(bpage, M_BUSDMA);
1620 break;
1621 }
1622 bpage->busaddr = pmap_kextract(bpage->vaddr);
1623 mtx_lock(&bounce_lock);
1624 STAILQ_INSERT_TAIL(&bz->bounce_page_list, bpage, links);
1625 total_bpages++;
1626 bz->total_bpages++;
1627 bz->free_bpages++;
1628 mtx_unlock(&bounce_lock);
1629 count++;
1630 numpages--;
1631 }
1632 return (count);
1633}
1634
1635static int
1636reserve_bounce_pages(bus_dma_tag_t dmat, bus_dmamap_t map, int commit)

Callers 2

bus_dma_tag_createFunction · 0.70
allocate_bz_and_pagesFunction · 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