|
@@ -16,9 +16,6 @@
|
|
|
|
|
|
#include "internal.h"
|
|
|
|
|
|
-#define CREATE_TRACE_POINTS
|
|
|
-#include <trace/events/kmem.h>
|
|
|
-
|
|
|
/**
|
|
|
* kstrdup - allocate space for and copy an existing string
|
|
|
* @s: the string to duplicate
|
|
@@ -112,97 +109,6 @@ void *memdup_user(const void __user *src, size_t len)
|
|
|
}
|
|
|
EXPORT_SYMBOL(memdup_user);
|
|
|
|
|
|
-static __always_inline void *__do_krealloc(const void *p, size_t new_size,
|
|
|
- gfp_t flags)
|
|
|
-{
|
|
|
- void *ret;
|
|
|
- size_t ks = 0;
|
|
|
-
|
|
|
- if (p)
|
|
|
- ks = ksize(p);
|
|
|
-
|
|
|
- if (ks >= new_size)
|
|
|
- return (void *)p;
|
|
|
-
|
|
|
- ret = kmalloc_track_caller(new_size, flags);
|
|
|
- if (ret && p)
|
|
|
- memcpy(ret, p, ks);
|
|
|
-
|
|
|
- return ret;
|
|
|
-}
|
|
|
-
|
|
|
-/**
|
|
|
- * __krealloc - like krealloc() but don't free @p.
|
|
|
- * @p: object to reallocate memory for.
|
|
|
- * @new_size: how many bytes of memory are required.
|
|
|
- * @flags: the type of memory to allocate.
|
|
|
- *
|
|
|
- * This function is like krealloc() except it never frees the originally
|
|
|
- * allocated buffer. Use this if you don't want to free the buffer immediately
|
|
|
- * like, for example, with RCU.
|
|
|
- */
|
|
|
-void *__krealloc(const void *p, size_t new_size, gfp_t flags)
|
|
|
-{
|
|
|
- if (unlikely(!new_size))
|
|
|
- return ZERO_SIZE_PTR;
|
|
|
-
|
|
|
- return __do_krealloc(p, new_size, flags);
|
|
|
-
|
|
|
-}
|
|
|
-EXPORT_SYMBOL(__krealloc);
|
|
|
-
|
|
|
-/**
|
|
|
- * krealloc - reallocate memory. The contents will remain unchanged.
|
|
|
- * @p: object to reallocate memory for.
|
|
|
- * @new_size: how many bytes of memory are required.
|
|
|
- * @flags: the type of memory to allocate.
|
|
|
- *
|
|
|
- * The contents of the object pointed to are preserved up to the
|
|
|
- * lesser of the new and old sizes. If @p is %NULL, krealloc()
|
|
|
- * behaves exactly like kmalloc(). If @new_size is 0 and @p is not a
|
|
|
- * %NULL pointer, the object pointed to is freed.
|
|
|
- */
|
|
|
-void *krealloc(const void *p, size_t new_size, gfp_t flags)
|
|
|
-{
|
|
|
- void *ret;
|
|
|
-
|
|
|
- if (unlikely(!new_size)) {
|
|
|
- kfree(p);
|
|
|
- return ZERO_SIZE_PTR;
|
|
|
- }
|
|
|
-
|
|
|
- ret = __do_krealloc(p, new_size, flags);
|
|
|
- if (ret && p != ret)
|
|
|
- kfree(p);
|
|
|
-
|
|
|
- return ret;
|
|
|
-}
|
|
|
-EXPORT_SYMBOL(krealloc);
|
|
|
-
|
|
|
-/**
|
|
|
- * kzfree - like kfree but zero memory
|
|
|
- * @p: object to free memory of
|
|
|
- *
|
|
|
- * The memory of the object @p points to is zeroed before freed.
|
|
|
- * If @p is %NULL, kzfree() does nothing.
|
|
|
- *
|
|
|
- * Note: this function zeroes the whole allocated buffer which can be a good
|
|
|
- * deal bigger than the requested buffer size passed to kmalloc(). So be
|
|
|
- * careful when using this function in performance sensitive code.
|
|
|
- */
|
|
|
-void kzfree(const void *p)
|
|
|
-{
|
|
|
- size_t ks;
|
|
|
- void *mem = (void *)p;
|
|
|
-
|
|
|
- if (unlikely(ZERO_OR_NULL_PTR(mem)))
|
|
|
- return;
|
|
|
- ks = ksize(mem);
|
|
|
- memset(mem, 0, ks);
|
|
|
- kfree(mem);
|
|
|
-}
|
|
|
-EXPORT_SYMBOL(kzfree);
|
|
|
-
|
|
|
/*
|
|
|
* strndup_user - duplicate an existing string from user space
|
|
|
* @s: The string to duplicate
|
|
@@ -504,11 +410,3 @@ out_mm:
|
|
|
out:
|
|
|
return res;
|
|
|
}
|
|
|
-
|
|
|
-/* Tracepoints definitions. */
|
|
|
-EXPORT_TRACEPOINT_SYMBOL(kmalloc);
|
|
|
-EXPORT_TRACEPOINT_SYMBOL(kmem_cache_alloc);
|
|
|
-EXPORT_TRACEPOINT_SYMBOL(kmalloc_node);
|
|
|
-EXPORT_TRACEPOINT_SYMBOL(kmem_cache_alloc_node);
|
|
|
-EXPORT_TRACEPOINT_SYMBOL(kfree);
|
|
|
-EXPORT_TRACEPOINT_SYMBOL(kmem_cache_free);
|