xfrm_hash.c (803B)
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 16struct 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 32void 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}