From patchwork Tue Dec 30 23:41:13 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Simon Glass X-Patchwork-Id: 1124 Return-Path: X-Original-To: u-boot-concept@u-boot.org Delivered-To: u-boot-concept@u-boot.org DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=u-boot.org; s=default; t=1767138271; bh=eJkwQowsObw3x9CBH8amL41EHcUgKNF6P6hKnmPL6Bw=; h=From:To:Date:In-Reply-To:References:CC:Subject:List-Id: List-Archive:List-Help:List-Owner:List-Post:List-Subscribe: List-Unsubscribe:From; b=maKyripvPRnpWSrzevFB0B/A8Saf7/OdVNGNsrnmzRoRklqckxvBwlNE+ne0KC1Og bEGhnFcVqFcH8BKMvbWxNh+7kvM75RtCwdOgznslEESN1yXdFxQD4oMH+TK5RmGbfB 2Ox6a/HStJ4JJTOVpLkRWlJJcCobM6xPKySycTTX7HmgdZq3UdPcmYUacd4BJ1UHKi uKwMY6ruqH3Y0pX0QE/VyynV81Hw1M5W2Z5bhuxQGNSLEy9AasoQHTXX1VK9qFuNAg MlAXINfpkWbdTr1QJGSGCOKcZ0DkrAezkdg3d9xU0FDPrkfsW93Zfm0miqB+F+XeFu KvyIIaJ9wXQ9Q== Received: from localhost (localhost [127.0.0.1]) by mail.u-boot.org (Postfix) with ESMTP id CB92368F8E for ; Tue, 30 Dec 2025 16:44:31 -0700 (MST) X-Virus-Scanned: Debian amavis at Received: from mail.u-boot.org ([127.0.0.1]) by localhost (mail.u-boot.org [127.0.0.1]) (amavis, port 10024) with ESMTP id iRG9TwrkaQHf for ; Tue, 30 Dec 2025 16:44:31 -0700 (MST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=u-boot.org; s=default; t=1767138271; bh=eJkwQowsObw3x9CBH8amL41EHcUgKNF6P6hKnmPL6Bw=; h=From:To:Date:In-Reply-To:References:CC:Subject:List-Id: List-Archive:List-Help:List-Owner:List-Post:List-Subscribe: List-Unsubscribe:From; b=maKyripvPRnpWSrzevFB0B/A8Saf7/OdVNGNsrnmzRoRklqckxvBwlNE+ne0KC1Og bEGhnFcVqFcH8BKMvbWxNh+7kvM75RtCwdOgznslEESN1yXdFxQD4oMH+TK5RmGbfB 2Ox6a/HStJ4JJTOVpLkRWlJJcCobM6xPKySycTTX7HmgdZq3UdPcmYUacd4BJ1UHKi uKwMY6ruqH3Y0pX0QE/VyynV81Hw1M5W2Z5bhuxQGNSLEy9AasoQHTXX1VK9qFuNAg MlAXINfpkWbdTr1QJGSGCOKcZ0DkrAezkdg3d9xU0FDPrkfsW93Zfm0miqB+F+XeFu KvyIIaJ9wXQ9Q== Received: from mail.u-boot.org (localhost [127.0.0.1]) by mail.u-boot.org (Postfix) with ESMTP id BA7DA68C58 for ; Tue, 30 Dec 2025 16:44:31 -0700 (MST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=u-boot.org; s=default; t=1767138270; bh=mVfBM5jkVBotui2cJaLELhg07K6pG8OBlse5M2Gh8co=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=mXBYQuCbVCMb10ZNmEAKY8/NXvQz/256RHwbiLGgJjGzeonV9/lWUmaj5HV88fwFh VRNszOBeJQszE8onzmqnIZCtMyM4ZBkGQcPV9A0Pb1SmkosTZ2VPUyGocmSV63livU nQDYMcoqb2ioo3AEWFB/HO9K+DPg1EJpyWK1x1AvU9DAkccnT5nlSxE9RpDNfc4OH2 wFrB8U8JFRXo7DFamML7QXBzaN1yndowZskl78HlSU7LTwfeEXk0jIfEZVZNxyU3lM gFbE6lZWiS0+6T20cN3Y1w0h2HbsYi0W+pdnCEfx596q3BvcfV0Hd5z+HtL4GcwXuo is857fZCrWiOw== Received: from localhost (localhost [127.0.0.1]) by mail.u-boot.org (Postfix) with ESMTP id 8A7D664E2A; Tue, 30 Dec 2025 16:44:30 -0700 (MST) X-Virus-Scanned: Debian amavis at Received: from mail.u-boot.org ([127.0.0.1]) by localhost (mail.u-boot.org [127.0.0.1]) (amavis, port 10026) with ESMTP id gay8AhsW1XNA; Tue, 30 Dec 2025 16:44:30 -0700 (MST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=u-boot.org; s=default; t=1767138266; bh=9NjmARiCpteJAP7hcLoznYU0bXyC8s6MgweSeGYf0NE=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=MIXcEjOvEgA6mdbzCLfC8XHBm1KDQR6alXXkkGDG1OKSsiTP85n0i2wNabV0UwSvY hTYzZIIq9d9c4M2wZfqjFK4XpqJOuOOFkwl39IpXbMIYBSj3zLh9MR97PJOejJ9IJN V6P/XquVTqMaNH7Gkb/xuJL9+RixhtRy6Ni64GQny+ZegH3784P2UuRU4R5Foe3SwM Ik+jupaFmqO7jooQNqcTiZYcJKdriPggGPCZQ4jlYd5yv+6+Bh3ayOwJ3EfA/8nrxJ dYe/zNJl1OBo2AndXtBPttt7L7kWjfmPchc5YXUs0bV3C+dDOMt/v823FRyqX7waq6 WkG4YVBQBnyHQ== Received: from u-boot.org (unknown [73.34.74.121]) by mail.u-boot.org (Postfix) with ESMTPSA id 3D22A68C0F; Tue, 30 Dec 2025 16:44:26 -0700 (MST) From: Simon Glass To: U-Boot Concept Date: Tue, 30 Dec 2025 16:41:13 -0700 Message-ID: <20251230234134.906477-2-sjg@u-boot.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20251230234134.906477-1-sjg@u-boot.org> References: <20251230234134.906477-1-sjg@u-boot.org> MIME-Version: 1.0 Message-ID-Hash: F2L7IRWDX3OE4XRRI6HZY7JB5D3DXEKD X-Message-ID-Hash: F2L7IRWDX3OE4XRRI6HZY7JB5D3DXEKD X-MailFrom: sjg@u-boot.org X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header CC: Simon Glass , Claude X-Mailman-Version: 3.3.10 Precedence: list Subject: [Concept] [PATCH 01/15] lib: Add CONFIG_LIB_KMEM_CACHE for full kmem_cache support List-Id: Discussion and patches related to U-Boot Concept Archived-At: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: From: Simon Glass Add a Kconfig option to control whether full kmem_cache_free() and kmem_cache_destroy() implementations are provided in lib/linux_compat.c Most boards do not need these functions, so they can use simple inline stubs in slab.h. Subsystems like ext4 that require proper cache management can select CONFIG_LIB_KMEM_CACHE. Co-developed-by: Claude Signed-off-by: Simon Glass --- include/linux/slab.h | 27 ++++++++++++++++----------- lib/Kconfig | 8 ++++++++ lib/Makefile | 1 + lib/kmem_cache.c | 20 ++++++++++++++++++++ 4 files changed, 45 insertions(+), 11 deletions(-) create mode 100644 lib/kmem_cache.c diff --git a/include/linux/slab.h b/include/linux/slab.h index 2b374641534..caaaa3d9e16 100644 --- a/include/linux/slab.h +++ b/include/linux/slab.h @@ -84,24 +84,19 @@ static inline void *krealloc(const void *p, size_t new_size, gfp_t flags) void *kmemdup(const void *src, size_t len, gfp_t gfp); -/* kmem_cache stubs */ +/* kmem_cache implementation / stubs */ struct kmem_cache { int sz; }; struct kmem_cache *get_mem(int element_sz); -#define kmem_cache_create(a, sz, c, d, e) ({ (void)(a); (void)(e); get_mem(sz); }) +#define kmem_cache_create(a, sz, c, d, e) get_mem(sz) void *kmem_cache_alloc(struct kmem_cache *obj, gfp_t flag); -static inline void *kmem_cache_zalloc(struct kmem_cache *obj, gfp_t flags) -{ - void *ret = kmem_cache_alloc(obj, flags); - - if (ret) - memset(ret, 0, obj->sz); - return ret; -} - +#if CONFIG_IS_ENABLED(LIB_KMEM_CACHE) +void kmem_cache_free(struct kmem_cache *cachep, void *obj); +void kmem_cache_destroy(struct kmem_cache *cachep); +#else static inline void kmem_cache_free(struct kmem_cache *cachep, void *obj) { free(obj); @@ -111,5 +106,15 @@ static inline void kmem_cache_destroy(struct kmem_cache *cachep) { free(cachep); } +#endif + +static inline void *kmem_cache_zalloc(struct kmem_cache *obj, gfp_t flags) +{ + void *ret = kmem_cache_alloc(obj, flags); + + if (ret) + memset(ret, 0, obj->sz); + return ret; +} #endif /* _LINUX_SLAB_H */ diff --git a/lib/Kconfig b/lib/Kconfig index 9c7eb27c392..5ddf8125766 100644 --- a/lib/Kconfig +++ b/lib/Kconfig @@ -396,6 +396,14 @@ config TPL_TINY_MEMSET config RBTREE bool +config LIB_KMEM_CACHE + bool "Enable full kmem_cache implementation" + help + Provide a proper kmem_cache implementation in lib/linux_compat.c + that tracks allocated objects. This is needed by subsystems like + ext4 that require cache management. When disabled, simple inline + stubs are used instead. + config BITREVERSE bool "Bit reverse library from Linux" diff --git a/lib/Makefile b/lib/Makefile index 15a43b2cc5e..01b967d46b7 100644 --- a/lib/Makefile +++ b/lib/Makefile @@ -135,6 +135,7 @@ obj-$(CONFIG_$(PHASE_)OF_LIBFDT) += fdtdec.o fdtdec_common.o fdt_print.o obj-y += hang.o obj-y += linux_compat.o obj-y += linux_string.o +obj-$(CONFIG_$(PHASE_)LIB_KMEM_CACHE) += kmem_cache.o obj-$(CONFIG_$(PHASE_)LMB) += lmb.o obj-y += membuf.o obj-$(CONFIG_REGEX) += slre.o diff --git a/lib/kmem_cache.c b/lib/kmem_cache.c new file mode 100644 index 00000000000..bff9329aa53 --- /dev/null +++ b/lib/kmem_cache.c @@ -0,0 +1,20 @@ +// SPDX-License-Identifier: GPL-2.0+ +/* + * kmem_cache implementation for U-Boot + * + * Copyright 2025 Canonical Ltd + * Written by Simon Glass + */ + +#include +#include + +void kmem_cache_free(struct kmem_cache *cachep, void *obj) +{ + free(obj); +} + +void kmem_cache_destroy(struct kmem_cache *cachep) +{ + free(cachep); +}