linux/net/xfrm/xfrm_hash.c
<<
>>
Prefs
   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}
  41