Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
xfrm_hash.c
Go to the documentation of this file.
1 /* xfrm_hash.c: Common hash table code.
2  *
3  * Copyright (C) 2006 David S. Miller ([email protected])
4  */
5 
6 #include <linux/kernel.h>
7 #include <linux/mm.h>
8 #include <linux/bootmem.h>
9 #include <linux/vmalloc.h>
10 #include <linux/slab.h>
11 #include <linux/xfrm.h>
12 
13 #include "xfrm_hash.h"
14 
15 struct hlist_head *xfrm_hash_alloc(unsigned int sz)
16 {
17  struct hlist_head *n;
18 
19  if (sz <= PAGE_SIZE)
20  n = kzalloc(sz, GFP_KERNEL);
21  else if (hashdist)
22  n = vzalloc(sz);
23  else
24  n = (struct hlist_head *)
26  get_order(sz));
27 
28  return n;
29 }
30 
31 void xfrm_hash_free(struct hlist_head *n, unsigned int sz)
32 {
33  if (sz <= PAGE_SIZE)
34  kfree(n);
35  else if (hashdist)
36  vfree(n);
37  else
38  free_pages((unsigned long)n, get_order(sz));
39 }