Branch data Line data Source code
1 : : /* xfrm_hash.c: Common hash table code.
2 : : *
3 : : * Copyright (C) 2006 David S. Miller (davem@davemloft.net)
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 : 0 : struct hlist_head *xfrm_hash_alloc(unsigned int sz)
16 : : {
17 : : struct hlist_head *n;
18 : :
19 [ # # ]: 0 : if (sz <= PAGE_SIZE)
20 : : n = kzalloc(sz, GFP_KERNEL);
21 [ # # ]: 0 : else if (hashdist)
22 : 0 : n = vzalloc(sz);
23 : : else
24 : 0 : n = (struct hlist_head *)
25 [ # # ][ # # ]: 0 : __get_free_pages(GFP_KERNEL | __GFP_NOWARN | __GFP_ZERO,
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ]
26 : 0 : get_order(sz));
27 : :
28 : 0 : return n;
29 : : }
30 : :
31 : 0 : void xfrm_hash_free(struct hlist_head *n, unsigned int sz)
32 : : {
33 [ # # ]: 0 : if (sz <= PAGE_SIZE)
34 : 0 : kfree(n);
35 [ # # ]: 0 : else if (hashdist)
36 : 0 : vfree(n);
37 : : else
38 [ # # ][ # # ]: 0 : free_pages((unsigned long)n, get_order(sz));
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ]
39 : 0 : }
|