]> www.infradead.org Git - users/sagi/nvme-cli.git/commitdiff
util/mem: move alloc helper to util section
authorDaniel Wagner <dwagner@suse.de>
Tue, 28 Nov 2023 10:24:17 +0000 (11:24 +0100)
committerDaniel Wagner <wagi@monom.org>
Fri, 1 Dec 2023 09:39:47 +0000 (10:39 +0100)
Move the alloc helpers to its own header file so that we avoid an
include header recursion when defining auto cleanup helpers.

Signed-off-by: Daniel Wagner <dwagner@suse.de>
nvme.c
nvme.h
util/mem.c [new file with mode: 0644]
util/mem.h [new file with mode: 0644]
util/meson.build

diff --git a/nvme.c b/nvme.c
index faf7e23ede67ddb421357611f19365df167254d0..4027766082fa1282909b6e96f411989f0d43b416 100644 (file)
--- a/nvme.c
+++ b/nvme.c
@@ -193,100 +193,6 @@ static char *output_format_val = "normal";
 
 static void *mmap_registers(nvme_root_t r, struct nvme_dev *dev);
 
-#define ROUND_UP(N, S) ((((N) + (S) - 1) / (S)) * (S))
-
-static void *nvme_alloc(size_t len)
-{
-       size_t _len = ROUND_UP(len, 0x1000);
-       void *p;
-
-       if (posix_memalign((void *)&p, getpagesize(), _len))
-               return NULL;
-
-       memset(p, 0, _len);
-       return p;
-}
-
-void *nvme_realloc(void *p, size_t len)
-{
-       size_t old_len = malloc_usable_size(p);
-
-       void *result = nvme_alloc(len);
-
-       if (p) {
-               memcpy(result, p, min(old_len, len));
-               free(p);
-       }
-
-       return result;
-}
-
-static void *__nvme_alloc_huge(size_t len, bool *huge)
-{
-       void *p;
-
-       if (!posix_memalign(&p, getpagesize(), len)) {
-               *huge = false;
-               memset(p, 0, len);
-               return p;
-       }
-       return NULL;
-}
-
-#define HUGE_MIN 0x80000
-
-#ifdef CONFIG_LIBHUGETLBFS
-void nvme_free_huge(void *p, bool huge)
-{
-       if (huge) {
-               if (p)
-                       free_hugepage_region(p);
-       } else {
-               free(p);
-       }
-}
-
-void *nvme_alloc_huge(size_t len, bool *huge)
-{
-       void *p;
-
-       if (len < HUGE_MIN)
-               return __nvme_alloc_huge(len, huge);
-
-       p = get_hugepage_region(len, GHR_DEFAULT);
-       if (!p)
-               return __nvme_alloc_huge(len, huge);
-
-       *huge = true;
-       return p;
-}
-#else
-void nvme_free_huge(void *p, bool huge)
-{
-       free(p);
-}
-
-void *nvme_alloc_huge(size_t len, bool *huge)
-{
-       return __nvme_alloc_huge(len, huge);
-}
-#endif
-
-void *nvme_realloc_huge(void *p, size_t len, bool *huge)
-{
-       size_t old_len = malloc_usable_size(p);
-       bool was_huge = *huge;
-
-       void *result = nvme_alloc_huge(len, huge);
-
-       if (p) {
-               memcpy(result, p, min(old_len, len));
-               nvme_free_huge(p, was_huge);
-       }
-
-       return result;
-}
-
 const char *nvme_strerror(int errnum)
 {
        if (errnum >= ENVME_CONNECT_RESOLVE)
diff --git a/nvme.h b/nvme.h
index 10a08f803270547f73ad5ec0432b463b29540642..a634664e5163927ff02a0c5d65839d661a3778b1 100644 (file)
--- a/nvme.h
+++ b/nvme.h
@@ -28,6 +28,7 @@
 
 #include "plugin.h"
 #include "util/json.h"
+#include "util/mem.h"
 #include "util/argconfig.h"
 #include "util/cleanup.h"
 
@@ -116,8 +117,6 @@ int __id_ctrl(int argc, char **argv, struct command *cmd,
        struct plugin *plugin, void (*vs)(uint8_t *vs, struct json_object *root));
 
 extern int current_index;
-void *nvme_alloc_huge(size_t len, bool *huge);
-void nvme_free_huge(void *p, bool huge);
 
 const char *nvme_strerror(int errnum);
 
diff --git a/util/mem.c b/util/mem.c
new file mode 100644 (file)
index 0000000..25370fe
--- /dev/null
@@ -0,0 +1,103 @@
+/* SPDX-License-Identifier: GPL-2.0-or-later */
+#include <stdlib.h>
+#include <unistd.h>
+#include <malloc.h>
+#include <string.h>
+
+#include "mem.h"
+
+#include "common.h"
+
+#define ROUND_UP(N, S) ((((N) + (S) - 1) / (S)) * (S))
+
+void *nvme_alloc(size_t len)
+{
+       size_t _len = ROUND_UP(len, 0x1000);
+       void *p;
+
+       if (posix_memalign((void *)&p, getpagesize(), _len))
+               return NULL;
+
+       memset(p, 0, _len);
+       return p;
+}
+
+void *nvme_realloc(void *p, size_t len)
+{
+       size_t old_len = malloc_usable_size(p);
+
+       void *result = nvme_alloc(len);
+
+       if (p) {
+               memcpy(result, p, min(old_len, len));
+               free(p);
+       }
+
+       return result;
+}
+
+static void *__nvme_alloc_huge(size_t len, bool *huge)
+{
+       void *p;
+
+       if (!posix_memalign(&p, getpagesize(), len)) {
+               *huge = false;
+               memset(p, 0, len);
+               return p;
+       }
+       return NULL;
+}
+
+#define HUGE_MIN 0x80000
+
+#ifdef CONFIG_LIBHUGETLBFS
+void nvme_free_huge(void *p, bool huge)
+{
+       if (huge) {
+               if (p)
+                       free_hugepage_region(p);
+       } else {
+               free(p);
+       }
+}
+
+void *nvme_alloc_huge(size_t len, bool *huge)
+{
+       void *p;
+
+       if (len < HUGE_MIN)
+               return __nvme_alloc_huge(len, huge);
+
+       p = get_hugepage_region(len, GHR_DEFAULT);
+       if (!p)
+               return __nvme_alloc_huge(len, huge);
+
+       *huge = true;
+       return p;
+}
+#else
+void nvme_free_huge(void *p, bool huge)
+{
+       free(p);
+}
+
+void *nvme_alloc_huge(size_t len, bool *huge)
+{
+       return __nvme_alloc_huge(len, huge);
+}
+#endif
+
+void *nvme_realloc_huge(void *p, size_t len, bool *huge)
+{
+       size_t old_len = malloc_usable_size(p);
+       bool was_huge = *huge;
+
+       void *result = nvme_alloc_huge(len, huge);
+
+       if (p) {
+               memcpy(result, p, min(old_len, len));
+               nvme_free_huge(p, was_huge);
+       }
+
+       return result;
+}
diff --git a/util/mem.h b/util/mem.h
new file mode 100644 (file)
index 0000000..12c5b0e
--- /dev/null
@@ -0,0 +1,14 @@
+/* SPDX-License-Identifier: GPL-2.0-or-later */
+#ifndef MEM_H_
+#define MEM_H_
+
+#include <stddef.h>
+#include <stdbool.h>
+
+void *nvme_alloc(size_t len);
+void *nvme_realloc(void *p, size_t len);
+
+void *nvme_alloc_huge(size_t len, bool *huge);
+void nvme_free_huge(void *p, bool huge);
+
+#endif /* MEM_H_ */
index f149d031956680746f34cfa155969e7f5b1f5dbf..c0ff637b3672694afcb76d851c14c6752ea24643 100644 (file)
@@ -5,6 +5,7 @@ sources += [
   'util/base64.c',
   'util/cleanup.c',
   'util/crc32.c',
+  'util/mem.c',
   'util/suffix.c',
   'util/types.c',
 ]