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

Function alloc_bounce_zone

freebsd/arm64/arm64/busdma_bounce.c:1240–1312  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1238}
1239
1240static int
1241alloc_bounce_zone(bus_dma_tag_t dmat)
1242{
1243 struct bounce_zone *bz;
1244
1245 /* Check to see if we already have a suitable zone */
1246 STAILQ_FOREACH(bz, &bounce_zone_list, links) {
1247 if ((dmat->common.alignment <= bz->alignment) &&
1248 (dmat->common.lowaddr >= bz->lowaddr)) {
1249 dmat->bounce_zone = bz;
1250 return (0);
1251 }
1252 }
1253
1254 if ((bz = (struct bounce_zone *)malloc(sizeof(*bz), M_DEVBUF,
1255 M_NOWAIT | M_ZERO)) == NULL)
1256 return (ENOMEM);
1257
1258 STAILQ_INIT(&bz->bounce_page_list);
1259 bz->free_bpages = 0;
1260 bz->reserved_bpages = 0;
1261 bz->active_bpages = 0;
1262 bz->lowaddr = dmat->common.lowaddr;
1263 bz->alignment = MAX(dmat->common.alignment, PAGE_SIZE);
1264 bz->map_count = 0;
1265 snprintf(bz->zoneid, 8, "zone%d", busdma_zonecount);
1266 busdma_zonecount++;
1267 snprintf(bz->lowaddrid, 18, "%#jx", (uintmax_t)bz->lowaddr);
1268 STAILQ_INSERT_TAIL(&bounce_zone_list, bz, links);
1269 dmat->bounce_zone = bz;
1270
1271 sysctl_ctx_init(&bz->sysctl_tree);
1272 bz->sysctl_tree_top = SYSCTL_ADD_NODE(&bz->sysctl_tree,
1273 SYSCTL_STATIC_CHILDREN(_hw_busdma), OID_AUTO, bz->zoneid,
1274 CTLFLAG_RD | CTLFLAG_MPSAFE, 0, "");
1275 if (bz->sysctl_tree_top == NULL) {
1276 sysctl_ctx_free(&bz->sysctl_tree);
1277 return (0); /* XXX error code? */
1278 }
1279
1280 SYSCTL_ADD_INT(busdma_sysctl_tree(bz),
1281 SYSCTL_CHILDREN(busdma_sysctl_tree_top(bz)), OID_AUTO,
1282 "total_bpages", CTLFLAG_RD, &bz->total_bpages, 0,
1283 "Total bounce pages");
1284 SYSCTL_ADD_INT(busdma_sysctl_tree(bz),
1285 SYSCTL_CHILDREN(busdma_sysctl_tree_top(bz)), OID_AUTO,
1286 "free_bpages", CTLFLAG_RD, &bz->free_bpages, 0,
1287 "Free bounce pages");
1288 SYSCTL_ADD_INT(busdma_sysctl_tree(bz),
1289 SYSCTL_CHILDREN(busdma_sysctl_tree_top(bz)), OID_AUTO,
1290 "reserved_bpages", CTLFLAG_RD, &bz->reserved_bpages, 0,
1291 "Reserved bounce pages");
1292 SYSCTL_ADD_INT(busdma_sysctl_tree(bz),
1293 SYSCTL_CHILDREN(busdma_sysctl_tree_top(bz)), OID_AUTO,
1294 "active_bpages", CTLFLAG_RD, &bz->active_bpages, 0,
1295 "Active bounce pages");
1296 SYSCTL_ADD_INT(busdma_sysctl_tree(bz),
1297 SYSCTL_CHILDREN(busdma_sysctl_tree_top(bz)), OID_AUTO,

Callers 2

bounce_bus_dmamap_createFunction · 0.70

Calls 6

mallocFunction · 0.85
snprintfFunction · 0.85
sysctl_ctx_initFunction · 0.85
sysctl_ctx_freeFunction · 0.85
busdma_sysctl_treeFunction · 0.70
busdma_sysctl_tree_topFunction · 0.70

Tested by

no test coverage detected