| 699 | #endif |
| 700 | |
| 701 | void |
| 702 | vmem_startup(void) |
| 703 | { |
| 704 | |
| 705 | mtx_init(&vmem_list_lock, "vmem list lock", NULL, MTX_DEF); |
| 706 | vmem_zone = uma_zcreate("vmem", |
| 707 | sizeof(struct vmem), NULL, NULL, NULL, NULL, |
| 708 | UMA_ALIGN_PTR, 0); |
| 709 | vmem_bt_zone = uma_zcreate("vmem btag", |
| 710 | sizeof(struct vmem_btag), NULL, NULL, NULL, NULL, |
| 711 | UMA_ALIGN_PTR, UMA_ZONE_VM); |
| 712 | #ifndef UMA_MD_SMALL_ALLOC |
| 713 | mtx_init(&vmem_bt_lock, "btag lock", NULL, MTX_DEF); |
| 714 | uma_prealloc(vmem_bt_zone, BT_MAXALLOC); |
| 715 | /* |
| 716 | * Reserve enough tags to allocate new tags. We allow multiple |
| 717 | * CPUs to attempt to allocate new tags concurrently to limit |
| 718 | * false restarts in UMA. vmem_bt_alloc() allocates from a per-domain |
| 719 | * arena, which may involve importing a range from the kernel arena, |
| 720 | * so we need to keep at least 2 * BT_MAXALLOC tags reserved. |
| 721 | */ |
| 722 | uma_zone_reserve(vmem_bt_zone, 2 * BT_MAXALLOC * mp_ncpus); |
| 723 | uma_zone_set_allocf(vmem_bt_zone, vmem_bt_alloc); |
| 724 | #endif |
| 725 | } |
| 726 | |
| 727 | /* ---- rehash */ |
| 728 |
no test coverage detected