alloc_unr(9)
NAME
- new_unrhdr, delete_unrhdr, alloc_unr, free_unr - kernel unit
- number allocator
SYNOPSIS
#include <sys/systm.h> struct unrhdr * new_unrhdr(int low, int high, struct mtx *mutex); void delete_unrhdr(struct unrhdr *uh); int alloc_unr(struct unrhdr *uh); int alloc_unrl(struct unrhdr *uh); void free_unr(struct unrhdr *uh, u_int item);
DESCRIPTION
- The kernel unit number allocator is a generic facility,
- which allows to
allocate unit numbers within a specified range. - new_unrhdr(low, high, mutex)
- Initialize a new unit number allocator entity. The
- low and high
arguments specify minimum and maximum number of unit - numbers.
There is no cost associated with the range of unit - numbers, so
unless the resource really is finite, INT_MAX can be - used. If
mutex is not NULL, it is used for locking when allo - cating and
freeing units. Otherwise, internal mutex is used. - delete_unrhdr(uh)
- Destroy specified unit number allocator entity.
- alloc_unr(uh)
- Return a new unit number. The lowest free number is
- always allocated. This function does not allocate memory and
- never sleeps,
however it may block on a mutex. If no free unit - numbers are
left, -1 is returned. - alloc_unrl(uh)
- Same as alloc_unr() except that mutex is assumed to
- be already
locked and thus is not used. - free_unr(uh)
- Free a previously allocated unit number. This func
- tion may
require allocating memory, and thus it can sleep. - There is no
pre-locked variant.
CODE REFERENCES
The above functions are implemented in sys/kern/subr_unit.c.
HISTORY
Kernel unit number allocator first appeared in FreeBSD 6.0.
AUTHORS
- Kernel unit number allocator was written by Poul-Henning
- Kamp. This manpage was written by Gleb Smirnoff.
- BSD March 23, 2005