|
@@ -40,3 +40,22 @@ void *kmem_cache_alloc(struct kmem_cache *obj, int flag)
|
|
{
|
|
{
|
|
return malloc_cache_aligned(obj->sz);
|
|
return malloc_cache_aligned(obj->sz);
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+/**
|
|
|
|
+ * kmemdup - duplicate region of memory
|
|
|
|
+ *
|
|
|
|
+ * @src: memory region to duplicate
|
|
|
|
+ * @len: memory region length
|
|
|
|
+ * @gfp: GFP mask to use
|
|
|
|
+ *
|
|
|
|
+ * Return: newly allocated copy of @src or %NULL in case of error
|
|
|
|
+ */
|
|
|
|
+void *kmemdup(const void *src, size_t len, gfp_t gfp)
|
|
|
|
+{
|
|
|
|
+ void *p;
|
|
|
|
+
|
|
|
|
+ p = kmalloc(len, gfp);
|
|
|
|
+ if (p)
|
|
|
|
+ memcpy(p, src, len);
|
|
|
|
+ return p;
|
|
|
|
+}
|