]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
io_uring: add alloc_cache.c
authorPavel Begunkov <asml.silence@gmail.com>
Tue, 28 Jan 2025 20:56:11 +0000 (20:56 +0000)
committerJens Axboe <axboe@kernel.dk>
Tue, 28 Jan 2025 22:10:40 +0000 (15:10 -0700)
Avoid inlining all and everything from alloc_cache.h and move cold bits
into a new file.

Signed-off-by: Pavel Begunkov <asml.silence@gmail.com>
Reviewed-by: Gabriel Krisman Bertazi <krisman@suse.de>
Link: https://lore.kernel.org/r/06984c6cd58e703f7cfae5ab3067912f9f635a06.1738087204.git.asml.silence@gmail.com
Signed-off-by: Jens Axboe <axboe@kernel.dk>
io_uring/Makefile
io_uring/alloc_cache.c [new file with mode: 0644]
io_uring/alloc_cache.h

index 53167bef37d77e1fc8db935bcc8ed5f21dbec590..d695b60dba4f0410abc80acf9466a4cd166ad912 100644 (file)
@@ -13,7 +13,7 @@ obj-$(CONFIG_IO_URING)                += io_uring.o opdef.o kbuf.o rsrc.o notif.o \
                                        sync.o msg_ring.o advise.o openclose.o \
                                        epoll.o statx.o timeout.o fdinfo.o \
                                        cancel.o waitid.o register.o \
-                                       truncate.o memmap.o
+                                       truncate.o memmap.o alloc_cache.o
 obj-$(CONFIG_IO_WQ)            += io-wq.o
 obj-$(CONFIG_FUTEX)            += futex.o
 obj-$(CONFIG_NET_RX_BUSY_POLL) += napi.o
diff --git a/io_uring/alloc_cache.c b/io_uring/alloc_cache.c
new file mode 100644 (file)
index 0000000..5842388
--- /dev/null
@@ -0,0 +1,44 @@
+// SPDX-License-Identifier: GPL-2.0
+
+#include "alloc_cache.h"
+
+void io_alloc_cache_free(struct io_alloc_cache *cache,
+                        void (*free)(const void *))
+{
+       void *entry;
+
+       if (!cache->entries)
+               return;
+
+       while ((entry = io_alloc_cache_get(cache)) != NULL)
+               free(entry);
+
+       kvfree(cache->entries);
+       cache->entries = NULL;
+}
+
+/* returns false if the cache was initialized properly */
+bool io_alloc_cache_init(struct io_alloc_cache *cache,
+                        unsigned max_nr, unsigned int size,
+                        unsigned int init_bytes)
+{
+       cache->entries = kvmalloc_array(max_nr, sizeof(void *), GFP_KERNEL);
+       if (!cache->entries)
+               return true;
+
+       cache->nr_cached = 0;
+       cache->max_cached = max_nr;
+       cache->elem_size = size;
+       cache->init_clear = init_bytes;
+       return false;
+}
+
+void *io_cache_alloc_new(struct io_alloc_cache *cache, gfp_t gfp)
+{
+       void *obj;
+
+       obj = kmalloc(cache->elem_size, gfp);
+       if (obj && cache->init_clear)
+               memset(obj, 0, cache->init_clear);
+       return obj;
+}
index 9eb374ad7490cc99c5e9c7981a70848ebbebea39..0dd17d8ba93a800a7f8249269e472e1b78b6ea09 100644 (file)
@@ -8,6 +8,14 @@
  */
 #define IO_ALLOC_CACHE_MAX     128
 
+void io_alloc_cache_free(struct io_alloc_cache *cache,
+                        void (*free)(const void *));
+bool io_alloc_cache_init(struct io_alloc_cache *cache,
+                        unsigned max_nr, unsigned int size,
+                        unsigned int init_bytes);
+
+void *io_cache_alloc_new(struct io_alloc_cache *cache, gfp_t gfp);
+
 static inline void io_alloc_cache_kasan(struct iovec **iov, int *nr)
 {
        if (IS_ENABLED(CONFIG_KASAN)) {
@@ -57,41 +65,7 @@ static inline void *io_cache_alloc(struct io_alloc_cache *cache, gfp_t gfp)
        obj = io_alloc_cache_get(cache);
        if (obj)
                return obj;
-
-       obj = kmalloc(cache->elem_size, gfp);
-       if (obj && cache->init_clear)
-               memset(obj, 0, cache->init_clear);
-       return obj;
-}
-
-/* returns false if the cache was initialized properly */
-static inline bool io_alloc_cache_init(struct io_alloc_cache *cache,
-                                      unsigned max_nr, unsigned int size,
-                                      unsigned int init_bytes)
-{
-       cache->entries = kvmalloc_array(max_nr, sizeof(void *), GFP_KERNEL);
-       if (cache->entries) {
-               cache->nr_cached = 0;
-               cache->max_cached = max_nr;
-               cache->elem_size = size;
-               cache->init_clear = init_bytes;
-               return false;
-       }
-       return true;
+       return io_cache_alloc_new(cache, gfp);
 }
 
-static inline void io_alloc_cache_free(struct io_alloc_cache *cache,
-                                      void (*free)(const void *))
-{
-       void *entry;
-
-       if (!cache->entries)
-               return;
-
-       while ((entry = io_alloc_cache_get(cache)) != NULL)
-               free(entry);
-
-       kvfree(cache->entries);
-       cache->entries = NULL;
-}
 #endif