]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - mm/util.c
SLUB: add some more inlines and #ifdef CONFIG_SLUB_DEBUG
[karo-tx-linux.git] / mm / util.c
index e14fa84ef39a2df08b2087259c110851bfcf1bcc..f2f21b7755169b562d5dee3eb64d4d1e61f370c3 100644 (file)
--- a/mm/util.c
+++ b/mm/util.c
@@ -11,7 +11,7 @@
  */
 void *__kzalloc(size_t size, gfp_t flags)
 {
-       void *ret = ____kmalloc(size, flags);
+       void *ret = kmalloc_track_caller(size, flags);
        if (ret)
                memset(ret, 0, size);
        return ret;
@@ -33,7 +33,7 @@ char *kstrdup(const char *s, gfp_t gfp)
                return NULL;
 
        len = strlen(s) + 1;
-       buf = ____kmalloc(len, gfp);
+       buf = kmalloc_track_caller(len, gfp);
        if (buf)
                memcpy(buf, s, len);
        return buf;
@@ -51,13 +51,47 @@ void *kmemdup(const void *src, size_t len, gfp_t gfp)
 {
        void *p;
 
-       p = ____kmalloc(len, gfp);
+       p = kmalloc_track_caller(len, gfp);
        if (p)
                memcpy(p, src, len);
        return p;
 }
 EXPORT_SYMBOL(kmemdup);
 
+/**
+ * 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 @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;
+       size_t ks;
+
+       if (unlikely(!new_size)) {
+               kfree(p);
+               return ZERO_SIZE_PTR;
+       }
+
+       ks = ksize(p);
+       if (ks >= new_size)
+               return (void *)p;
+
+       ret = kmalloc_track_caller(new_size, flags);
+       if (ret) {
+               memcpy(ret, p, min(new_size, ks));
+               kfree(p);
+       }
+       return ret;
+}
+EXPORT_SYMBOL(krealloc);
+
 /*
  * strndup_user - duplicate an existing string from user space
  *