vmem_xalloc man page on NetBSD

Man page or keyword search:  
man Server   9087 pages
apropos Keyword Search (all sections)
Output format
NetBSD logo
[printable version]

VMEM(9)			 BSD Kernel Developer's Manual		       VMEM(9)

NAME
     vmem — virtual memory allocator

SYNOPSIS
     #include <sys/vmem.h>

     vmem_t *
     vmem_create(const char *name, vmem_addr_t base, vmem_size_t size,
	 vmem_size_t quantum,
	 int (*allocfn)(void *, vmem_size_t, vmem_size_t *, vm_flag_t, vmem_addr_t *),
	 void (*freefn)(void *, vmem_addr_t, vmem_size_t), void *arg,
	 vmem_size_t qcache_max, vm_flag_t flags, int ipl);

     int
     vmem_add(vmem_t *vm, vmem_addr_t addr, vmem_size_t size, vm_flag_t flags,
	 vmem_addr_t *addrp);

     int
     vmem_xalloc(vmem_t *vm, vmem_size_t size, vmem_size_t align,
	 vmem_size_t phase, vmem_size_t nocross, vmem_addr_t minaddr,
	 vmem_addr_t maxaddr, vm_flag_t flags, vmem_addr_t *addrp);

     void
     vmem_xfree(vmem_t *vm, vmem_addr_t addr, vmem_size_t size);

     int
     vmem_alloc(vmem_t *vm, vmem_size_t size, vm_flag_t flags,
	 vmem_addr_t *addrp);

     void
     vmem_free(vmem_t *vm, vmem_addr_t addr, vmem_size_t size);

     void
     vmem_destroy(vmem_t *vm);

DESCRIPTION
     The vmem is a general purpose resource allocator.	Despite its name, it
     can be used for arbitrary resources other than virtual memory.

     vmem_create() creates a new vmem arena.

     name	 The string to describe the vmem.

     base	 The start address of the initial span.	 Pass 0 if no initial
		 span is required.

     size	 The size of the initial span.	Pass 0 if no initial span is
		 required.

     quantum	 The smallest unit of allocation.

     allocfn	 The callback function used to import spans from the backend
		 arena.	 Set both allocfn and freefn to NULL to disable auto‐
		 matic imports.	 vmem calls (*allocfn)(arg, size, &actualsize,
		 flags, &addrp) to import a span of size at least size.
		 allocfn should accept the same flags as vmem_alloc().
		 allocfn must return ENOMEM to indicate failure, or 0 on suc‐
		 cess.	If allocfn succeeds, it must write the actual size of
		 the allocation to actualsize and the starting address of the
		 imported span to addrp.  The actual size will always be
		 greater than or equal to the requested size.

     freefn	 The callback function used to free spans to the backend
		 arena.	 freefn may be NULL even if allocfn is not NULL.  vmem
		 calls (*freefn)(arg, addr, size) to return to arg a span of
		 size size, starting at addr, that was previously allocated by
		 allocfn.

     arg	 The backend arena.  arg may be NULL.  vmem passes arg as the
		 first argument of allocfn and freefn.

     qcache_max	 The largest size of allocations which can be served by quan‐
		 tum cache.  It is merely a hint and can be ignored.

     flags	 Either of:

		 VM_SLEEP    Can sleep until enough resources are available.

		 VM_NOSLEEP  Don't sleep.  Immediately return NULL if there
			     are not enough resources available.

     ipl	 Interrupt level to be blocked for allocating from vmem.

     vmem_add() adds a span of size size starting at addr to the arena.
     Returns 0 on success, ENOMEM on failure.  flags should be one of:

     VM_SLEEP	 Can sleep until enough resources are available.

     VM_NOSLEEP	 Don't sleep.  Immediately return ENOMEM if there are not
		 enough resources available.

     vmem_xalloc() allocates a resource from the arena.

     vm	      The arena which we allocate from.

     size     Specify the size of the allocation.

     align    If zero, don't care about the alignment of the allocation.  Oth‐
	      erwise, request a resource segment starting at offset phase from
	      an align aligned boundary.

     phase    See the above description of align.  If align is zero, phase
	      should be zero.  Otherwise, phase should be smaller than align.

     nocross  Request a resource which doesn't cross nocross aligned boundary.

     minaddr  Specify the minimum address which can be allocated, or
	      VMEM_ADDR_MIN if the caller does not care.

     maxaddr  Specify the maximum address which can be allocated, or
	      VMEM_ADDR_MAX if the caller does not care.

     flags    A bitwise OR of an allocation strategy and a sleep flag.

	      The allocation strategy is one of:

	      VM_BESTFIT     Prefer space efficiency.

	      VM_INSTANTFIT  Prefer performance.

	      The sleep flag should be one of:

	      VM_SLEEP	  Can sleep until enough resources are available.

	      VM_NOSLEEP  Don't sleep.	Immediately return ENOMEM if there are
			  not enough resources available.

     addrp    On success, if addrp is not NULL, vmem_xalloc() overwrites it
	      with the start address of the allocated span.

     vmem_xfree() frees resource allocated by vmem_xalloc() to the arena.

     vm	   The arena which we free to.

     addr  The resource being freed.  It must be the one returned by
	   vmem_xalloc().  Notably, it must not be the one from vmem_alloc().
	   Otherwise, the behaviour is undefined.

     size  The size of the resource being freed.  It must be the same as the
	   size argument used for vmem_xalloc().

     vmem_alloc() allocates a resource from the arena.

     vm	    The arena which we allocate from.

     size   Specify the size of the allocation.

     flags  A bitwise OR of an allocation strategy and a sleep flag.

	    The allocation strategy is one of:

	    VM_BESTFIT	   Prefer space efficiency.

	    VM_INSTANTFIT  Prefer performance.

	    The sleep flag should be one of:

	    VM_SLEEP	Can sleep until enough resources are available.

	    VM_NOSLEEP	Don't sleep.  Immediately return ENOMEM if there are
			not enough resources available.

     addrp  On success, if addrp is not NULL, vmem_alloc() overwrites it with
	    the start address of the allocated span.

     vmem_free() frees resource allocated by vmem_alloc() to the arena.

     vm	   The arena which we free to.

     addr  The resource being freed.  It must be the one returned by
	   vmem_alloc().  Notably, it must not be the one from vmem_xalloc().
	   Otherwise, the behaviour is undefined.

     size  The size of the resource being freed.  It must be the same as the
	   size argument used for vmem_alloc().

     vmem_destroy() destroys a vmem arena.

     vm	 The vmem arena being destroyed.  The caller should ensure that no one
	 will use it anymore.

RETURN VALUES
     vmem_create() return a pointer to the newly allocated vmem_t.  Otherwise,
     it returns NULL.

     On success, vmem_xalloc() and vmem_alloc() return 0.  Otherwise, ENOMEM
     is returned.

CODE REFERENCES
     The vmem subsystem is implemented within the file sys/kern/subr_vmem.c.

SEE ALSO
     intro(9), kmem(9), memoryallocators(9), uvm(9)

     Jeff Bonwick and Jonathan Adams, "Magazines and Vmem: Extending the Slab
     Allocator to Many CPUs and Arbitrary Resources", 2001 USENIX Annual
     Technical Conference, 2001.

AUTHORS
     This implementation of vmem was written by YAMAMOTO Takashi.

BUGS
     vmem relies on malloc(9), pool(9), and RUN_ONCE(9), so it cannot be used
     as early during system bootstrap as extent(9).

BSD			       September 2, 2011			   BSD
[top]
                             _         _         _ 
                            | |       | |       | |     
                            | |       | |       | |     
                         __ | | __ __ | | __ __ | | __  
                         \ \| |/ / \ \| |/ / \ \| |/ /  
                          \ \ / /   \ \ / /   \ \ / /   
                           \   /     \   /     \   /    
                            \_/       \_/       \_/ 
More information is available in HTML format for server NetBSD

List of man pages available for NetBSD

Copyright (c) for man pages and the logo by the respective OS vendor.

For those who want to learn more, the polarhome community provides shell access and support.

[legal] [privacy] [GNU] [policy] [cookies] [netiquette] [sponsors] [FAQ]
Tweet
Polarhome, production since 1999.
Member of Polarhome portal.
Based on Fawad Halim's script.
....................................................................
Vote for polarhome
Free Shell Accounts :: the biggest list on the net