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