1 | // SPDX-License-Identifier: GPL-2.0 |
---|---|
2 | /* xfrm_hash.c: Common hash table code. |
3 | * |
4 | * Copyright (C) 2006 David S. Miller (davem@davemloft.net) |
5 | */ |
6 | |
7 | #include <linux/kernel.h> |
8 | #include <linux/mm.h> |
9 | #include <linux/memblock.h> |
10 | #include <linux/vmalloc.h> |
11 | #include <linux/slab.h> |
12 | #include <linux/xfrm.h> |
13 | |
14 | #include "xfrm_hash.h" |
15 | |
16 | struct hlist_head *xfrm_hash_alloc(unsigned int sz) |
17 | { |
18 | struct hlist_head *n; |
19 | |
20 | if (sz <= PAGE_SIZE) |
21 | n = kzalloc(size: sz, GFP_KERNEL); |
22 | else if (hashdist) |
23 | n = vzalloc(size: sz); |
24 | else |
25 | n = (struct hlist_head *) |
26 | __get_free_pages(GFP_KERNEL | __GFP_NOWARN | __GFP_ZERO, |
27 | order: get_order(size: sz)); |
28 | |
29 | return n; |
30 | } |
31 | |
32 | void xfrm_hash_free(struct hlist_head *n, unsigned int sz) |
33 | { |
34 | if (sz <= PAGE_SIZE) |
35 | kfree(objp: n); |
36 | else if (hashdist) |
37 | vfree(addr: n); |
38 | else |
39 | free_pages(addr: (unsigned long)n, order: get_order(size: sz)); |
40 | } |
41 |