Lines Matching defs:bt

189 #define	bt_free(vm, bt)		free(bt)
258 bt_t *bt;
270 bt = LIST_FIRST(&vmem_btag_freelist);
271 LIST_REMOVE(bt, bt_freelist);
272 bt->bt_flags = 0;
273 LIST_INSERT_HEAD(&vm->vm_freetags, bt, bt_freelist);
284 bt = pool_get(&vmem_btag_pool, PR_NOWAIT);
287 if (bt == NULL)
289 bt->bt_flags = 0;
290 LIST_INSERT_HEAD(&vm->vm_freetags, bt, bt_freelist);
323 bt_t *bt;
346 bt = LIST_FIRST(&vm->vm_freetags);
347 LIST_REMOVE(bt, bt_freelist);
350 return bt;
354 bt_free(vmem_t *vm, bt_t *bt)
359 LIST_INSERT_HEAD(&vm->vm_freetags, bt, bt_freelist);
366 bt_t *bt, *next_bt;
373 LIST_FOREACH_SAFE(bt, &vm->vm_freetags, bt_freelist, next_bt) {
377 if (bt->bt_flags & BT_F_PRIVATE) {
380 LIST_REMOVE(bt, bt_freelist);
382 if (bt >= static_bts
383 && bt < &static_bts[STATIC_BT_COUNT]) {
385 LIST_INSERT_HEAD(&vmem_btag_freelist, bt, bt_freelist);
390 LIST_INSERT_HEAD(&tofree, bt, bt_freelist);
396 bt = LIST_FIRST(&tofree);
397 LIST_REMOVE(bt, bt_freelist);
398 pool_put(&vmem_btag_pool, bt);
493 bt_t *bt;
496 LIST_FOREACH(bt, list, bt_hashlist) {
497 if (bt->bt_start == addr) {
502 return bt;
506 bt_rembusy(vmem_t *vm, bt_t *bt)
510 vm->vm_inuse -= bt->bt_size;
512 LIST_REMOVE(bt, bt_hashlist);
516 bt_insbusy(vmem_t *vm, bt_t *bt)
520 KASSERT(bt->bt_type == BT_TYPE_BUSY);
522 list = bt_hashhead(vm, bt->bt_start);
523 LIST_INSERT_HEAD(list, bt, bt_hashlist);
527 vm->vm_inuse += bt->bt_size;
533 bt_remseg(vmem_t *vm, bt_t *bt)
536 TAILQ_REMOVE(&vm->vm_seglist, bt, bt_seglist);
540 bt_insseg(vmem_t *vm, bt_t *bt, bt_t *prev)
543 TAILQ_INSERT_AFTER(&vm->vm_seglist, prev, bt, bt_seglist);
547 bt_insseg_tail(vmem_t *vm, bt_t *bt)
550 TAILQ_INSERT_TAIL(&vm->vm_seglist, bt, bt_seglist);
554 bt_remfree(vmem_t *vm, bt_t *bt)
557 KASSERT(bt->bt_type == BT_TYPE_FREE);
559 LIST_REMOVE(bt, bt_freelist);
563 bt_insfree(vmem_t *vm, bt_t *bt)
567 list = bt_freehead_tofree(vm, bt->bt_size);
568 LIST_INSERT_HEAD(list, bt, bt_freelist);
717 bt_t *bt = &static_bts[static_bt_count];
718 LIST_INSERT_HEAD(&vmem_btag_freelist, bt, bt_freelist);
794 bt_t *bt;
796 while ((bt = LIST_FIRST(&vm->vm_hashlist[i])) != NULL) {
797 KASSERT(bt->bt_type == BT_TYPE_SPAN_STATIC);
798 LIST_REMOVE(bt, bt_hashlist);
799 bt_free(vm, bt);
858 bt_t *bt;
898 while ((bt = LIST_FIRST(&oldhashlist[i])) != NULL) {
899 bt_rembusy(vm, bt); /* XXX */
900 bt_insbusy(vm, bt);
915 * vmem_fit: check if a bt can satisfy the given restrictions.
922 vmem_fit(const bt_t *bt, vmem_size_t size, vmem_size_t align,
930 KASSERT(bt->bt_size >= size); /* caller's responsibility */
937 start = bt->bt_start;
941 end = BT_END(bt);
950 if (start < bt->bt_start) {
962 KASSERT(bt->bt_start <= start);
963 KASSERT(BT_END(bt) - start >= size - 1);
1193 bt_t *bt;
1245 bt = NULL;
1256 bt = LIST_FIRST(list);
1257 if (bt != NULL) {
1258 rc = vmem_fit(bt, size, align, phase,
1285 LIST_FOREACH(bt, list, bt_freelist) {
1286 if (bt->bt_size >= size) {
1287 rc = vmem_fit(bt, size, align, phase,
1329 KASSERT(bt->bt_type == BT_TYPE_FREE);
1330 KASSERT(bt->bt_size >= size);
1331 bt_remfree(vm, bt);
1333 if (bt->bt_start != start) {
1335 btnew2->bt_start = bt->bt_start;
1336 btnew2->bt_size = start - bt->bt_start;
1337 bt->bt_start = start;
1338 bt->bt_size -= btnew2->bt_size;
1340 bt_insseg(vm, btnew2, TAILQ_PREV(bt, vmem_seglist, bt_seglist));
1344 KASSERT(bt->bt_start == start);
1345 if (bt->bt_size != size && bt->bt_size - size > vm->vm_quantum_mask) {
1348 btnew->bt_start = bt->bt_start;
1350 bt->bt_start = bt->bt_start + size;
1351 bt->bt_size -= size;
1352 bt_insfree(vm, bt);
1353 bt_insseg(vm, btnew, TAILQ_PREV(bt, vmem_seglist, bt_seglist));
1357 bt->bt_type = BT_TYPE_BUSY;
1358 bt_insbusy(vm, bt);
1361 btnew = bt;
1407 bt_t *bt;
1416 bt = bt_lookupbusy(vm, addr);
1417 KASSERTMSG(bt != NULL, "vmem %s addr 0x%jx size 0x%jx",
1419 KASSERT(bt->bt_start == addr);
1420 KASSERT(bt->bt_size == vmem_roundup_size(vm, size) ||
1421 bt->bt_size - vmem_roundup_size(vm, size) <= vm->vm_quantum_mask);
1424 vmem_xfree_bt(vm, bt);
1430 bt_t *bt;
1439 TAILQ_FOREACH(bt, &vm->vm_seglist, bt_seglist) {
1440 if (bt->bt_type == BT_TYPE_BUSY)
1443 if (bt != NULL) {
1445 vmem_xfree_bt(vm, bt);
1454 vmem_xfree_bt(vmem_t *vm, bt_t *bt)
1460 KASSERT(bt->bt_type == BT_TYPE_BUSY);
1461 bt_rembusy(vm, bt);
1462 bt->bt_type = BT_TYPE_FREE;
1465 t = TAILQ_NEXT(bt, bt_seglist);
1467 KASSERT(BT_END(bt) < t->bt_start); /* YYY */
1470 bt->bt_size += t->bt_size;
1473 t = TAILQ_PREV(bt, vmem_seglist, bt_seglist);
1475 KASSERT(BT_END(t) < bt->bt_start); /* YYY */
1478 bt->bt_size += t->bt_size;
1479 bt->bt_start = t->bt_start;
1483 t = TAILQ_PREV(bt, vmem_seglist, bt_seglist);
1487 t->bt_size == bt->bt_size) {
1491 KASSERT(t->bt_start == bt->bt_start);
1492 spanaddr = bt->bt_start;
1493 spansize = bt->bt_size;
1494 bt_remseg(vm, bt);
1495 bt_free(vm, bt);
1504 bt_insfree(vm, bt);
1636 bt_dump(const bt_t *bt, void (*pr)(const char *, ...))
1640 bt, (uint64_t)bt->bt_start, (uint64_t)bt->bt_size,
1641 bt->bt_type, bt_type_string(bt->bt_type));
1647 const bt_t *bt;
1651 TAILQ_FOREACH(bt, &vm->vm_seglist, bt_seglist) {
1652 bt_dump(bt, pr);
1663 LIST_FOREACH(bt, fl, bt_freelist) {
1664 bt_dump(bt, pr);
1675 bt_t *bt;
1677 TAILQ_FOREACH(bt, &vm->vm_seglist, bt_seglist) {
1678 if (BT_ISSPAN_P(bt)) {
1681 if (bt->bt_start <= addr && addr <= BT_END(bt)) {
1682 return bt;
1695 bt_t *bt;
1697 bt = vmem_whatis_lookup(vm, addr);
1698 if (bt == NULL) {
1702 (void *)addr, (void *)bt->bt_start,
1703 (size_t)(addr - bt->bt_start), vm->vm_name,
1704 (bt->bt_type == BT_TYPE_BUSY) ? "allocated" : "free");
1748 const bt_t *bt, *bt2;
1752 TAILQ_FOREACH(bt, &vm->vm_seglist, bt_seglist) {
1753 if (bt->bt_start > BT_END(bt)) {
1755 bt_dump(bt, vmem_printf);
1759 TAILQ_FOREACH(bt, &vm->vm_seglist, bt_seglist) {
1761 if (bt == bt2) {
1764 if (BT_ISSPAN_P(bt) != BT_ISSPAN_P(bt2)) {
1767 if (bt->bt_start <= BT_END(bt2) &&
1768 bt2->bt_start <= BT_END(bt)) {
1770 bt_dump(bt, vmem_printf);