Branch data Line data Source code
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 : 2842 : struct hlist_head *xfrm_hash_alloc(unsigned int sz) 17 : : { 18 : : struct hlist_head *n; 19 : : 20 [ + - ]: 2842 : if (sz <= PAGE_SIZE) 21 : 2842 : n = kzalloc(sz, GFP_KERNEL); 22 : : else if (hashdist) 23 : : n = vzalloc(sz); 24 : : else 25 : 0 : n = (struct hlist_head *) 26 : 0 : __get_free_pages(GFP_KERNEL | __GFP_NOWARN | __GFP_ZERO, 27 : 0 : get_order(sz)); 28 : : 29 : 2842 : return n; 30 : : } 31 : : 32 : 14 : void xfrm_hash_free(struct hlist_head *n, unsigned int sz) 33 : : { 34 [ + - ]: 14 : if (sz <= PAGE_SIZE) 35 : 14 : kfree(n); 36 : : else if (hashdist) 37 : : vfree(n); 38 : : else 39 : 0 : free_pages((unsigned long)n, get_order(sz)); 40 : 14 : }