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(sz, GFP_KERNEL); 22 else if (hashdist) 23 n = vzalloc(sz); 24 else 25 n = (struct hlist_head *) 26 __get_free_pages(GFP_KERNEL | __GFP_NOWARN | __GFP_ZERO, 27 get_order(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(n); 36 else if (hashdist) 37 vfree(n); 38 else 39 free_pages((unsigned long)n, get_order(sz)); 40 } 41