This commit was manufactured by cvs2svn to create branch 'vserver'.
[linux-2.6.git] / net / xfrm / xfrm_hash.c
diff --git a/net/xfrm/xfrm_hash.c b/net/xfrm/xfrm_hash.c
new file mode 100644 (file)
index 0000000..37643bb
--- /dev/null
@@ -0,0 +1,41 @@
+/* xfrm_hash.c: Common hash table code.
+ *
+ * Copyright (C) 2006 David S. Miller (davem@davemloft.net)
+ */
+
+#include <linux/kernel.h>
+#include <linux/mm.h>
+#include <linux/bootmem.h>
+#include <linux/vmalloc.h>
+#include <linux/slab.h>
+#include <linux/xfrm.h>
+
+#include "xfrm_hash.h"
+
+struct hlist_head *xfrm_hash_alloc(unsigned int sz)
+{
+       struct hlist_head *n;
+
+       if (sz <= PAGE_SIZE)
+               n = kmalloc(sz, GFP_KERNEL);
+       else if (hashdist)
+               n = __vmalloc(sz, GFP_KERNEL, PAGE_KERNEL);
+       else
+               n = (struct hlist_head *)
+                       __get_free_pages(GFP_KERNEL, get_order(sz));
+
+       if (n)
+               memset(n, 0, sz);
+
+       return n;
+}
+
+void xfrm_hash_free(struct hlist_head *n, unsigned int sz)
+{
+       if (sz <= PAGE_SIZE)
+               kfree(n);
+       else if (hashdist)
+               vfree(n);
+       else
+               free_pages((unsigned long)n, get_order(sz));
+}