PageRenderTime 12ms CodeModel.GetById 8ms app.highlight 1ms RepoModel.GetById 1ms app.codeStats 0ms

/share/man/man9/hashinit.9

https://bitbucket.org/freebsd/freebsd-head/
Unknown | 176 lines | 176 code | 0 blank | 0 comment | 0 complexity | 6b8c2d9a0306f9f9c6720e68c3ea87bd MD5 | raw file
  1.\"
  2.\" Copyright (c) 2004 Joseph Koshy
  3.\" All rights reserved.
  4.\"
  5.\" Redistribution and use in source and binary forms, with or without
  6.\" modification, are permitted provided that the following conditions
  7.\" are met:
  8.\" 1. Redistributions of source code must retain the above copyright
  9.\"    notice, this list of conditions and the following disclaimer.
 10.\" 2. Redistributions in binary form must reproduce the above copyright
 11.\"    notice, this list of conditions and the following disclaimer in the
 12.\"    documentation and/or other materials provided with the distribution.
 13.\"
 14.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS''
 15.\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
 16.\" TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 17.\" PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE
 18.\" LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 19.\" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 20.\" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 21.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 22.\" CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 23.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 24.\" POSSIBILITY OF SUCH DAMAGE.
 25.\"
 26.\" $FreeBSD$
 27.\"
 28.Dd October 10, 2004
 29.Dt HASHINIT 9
 30.Os
 31.Sh NAME
 32.Nm hashinit , hashinit_flags , hashdestroy , phashinit
 33.Nd manage kernel hash tables
 34.Sh SYNOPSIS
 35.In sys/malloc.h
 36.In sys/systm.h
 37.In sys/queue.h
 38.Ft "void *"
 39.Fn hashinit "int nelements" "struct malloc_type *type" "u_long *hashmask"
 40.Ft void
 41.Fo hashinit_flags
 42.Fa "int nelements" "struct malloc_type *type" "u_long *hashmask" "int flags"
 43.Fc
 44.Ft void
 45.Fn hashdestroy "void *hashtbl" "struct malloc_type *type" "u_long hashmask"
 46.Ft "void *"
 47.Fn phashinit "int nelements" "struct malloc_type *type" "u_long *nentries"
 48.Sh DESCRIPTION
 49The
 50.Fn hashinit ,
 51.Fn hashinit_flags
 52and
 53.Fn phashinit
 54functions allocate space for hash tables of size given by the argument
 55.Fa nelements .
 56.Pp
 57The
 58.Fn hashinit
 59function allocates hash tables that are sized to largest power of two
 60less than or equal to argument
 61.Fa nelements .
 62The
 63.Fn phashinit
 64function allocates hash tables that are sized to the largest prime
 65number less than or equal to argument
 66.Fa nelements .
 67The
 68.Fn hashinit_flags
 69function operates like
 70.Fn hashinit
 71but also accepts an additional argument
 72.Fa flags
 73which control various options during allocation.
 74Allocated hash tables are contiguous arrays of
 75.Xr LIST_HEAD 3
 76entries, allocated using
 77.Xr malloc 9 ,
 78and initialized using
 79.Xr LIST_INIT 3 .
 80The malloc arena to be used for allocation is pointed to by argument
 81.Fa type .
 82.Pp
 83The
 84.Fn hashdestroy
 85function frees the space occupied by the hash table pointed to by argument
 86.Fa hashtbl .
 87Argument
 88.Fa type
 89determines the malloc arena to use when freeing space.
 90The argument
 91.Fa hashmask
 92should be the bit mask returned by the call to
 93.Fn hashinit
 94that allocated the hash table.
 95The argument
 96.Fa flags
 97must be used with one of the following values.
 98.Pp
 99.Bl -tag -width ".Dv HASH_NOWAIT" -offset indent -compact
100.It Dv HASH_NOWAIT
101Any malloc performed by the
102.Fn hashinit_flags
103function will not be allowed to wait, and therefore may fail.
104.It Dv HASH_WAITOK
105Any malloc performed by the
106.Fn hashinit_flags
107function is allowed to wait for memory.
108.El
109.Sh IMPLEMENTATION NOTES
110The largest prime hash value chosen by
111.Fn phashinit
112is 32749.
113.Sh RETURN VALUES
114The
115.Fn hashinit
116function returns a pointer to an allocated hash table and sets the
117location pointed to by
118.Fa hashmask
119to the bit mask to be used for computing the correct slot in the
120hash table.
121.Pp
122The
123.Fn phashinit
124function returns a pointer to an allocated hash table and sets the
125location pointed to by
126.Fa nentries
127to the number of rows in the hash table.
128.Sh EXAMPLES
129A typical example is shown below:
130.Bd -literal -offset indent
131\&...
132static LIST_HEAD(foo, foo) *footable;
133static u_long foomask;
134\&...
135footable = hashinit(32, M_FOO, &foomask);
136.Ed
137.Pp
138Here we allocate a hash table with 32 entries from the malloc arena
139pointed to by
140.Dv M_FOO .
141The mask for the allocated hash table is returned in
142.Va foomask .
143A subsequent call to
144.Fn hashdestroy
145uses the value in
146.Va foomask :
147.Bd -literal -offset indent
148\&...
149hashdestroy(footable, M_FOO, foomask);
150.Ed
151.Sh DIAGNOSTICS
152The
153.Fn hashinit
154and
155.Fn phashinit
156functions will panic if argument
157.Fa nelements
158is less than or equal to zero.
159.Pp
160The
161.Fn hashdestroy
162function will panic if the hash table
163pointed to by
164.Fa hashtbl
165is not empty.
166.Sh SEE ALSO
167.Xr LIST_HEAD 3 ,
168.Xr malloc 9
169.Sh BUGS
170There is no
171.Fn phashdestroy
172function, and using
173.Fn hashdestroy
174to free a hash table allocated by
175.Fn phashinit
176usually has grave consequences.