On Thu, Jun 20, 2024 at 10:43:39PM +0200, Vlastimil Babka wrote: > On 6/20/24 8:54 PM, Kees Cook wrote: > > On Thu, Jun 20, 2024 at 03:56:27PM +0200, Vlastimil Babka wrote: > >> > @@ -549,6 +549,11 @@ void *kmem_cache_alloc_lru_noprof(struct kmem_cache *s, struct list_lru *lru, > >> > > >> > void kmem_cache_free(struct kmem_cache *s, void *objp); > >> > > >> > +kmem_buckets *kmem_buckets_create(const char *name, unsigned int align, > >> > + slab_flags_t flags, > >> > + unsigned int useroffset, unsigned int usersize, > >> > + void (*ctor)(void *)); > >> > >> I'd drop the ctor, I can't imagine how it would be used with variable-sized > >> allocations. > > > > I've kept it because for "kmalloc wrapper" APIs, e.g. devm_kmalloc(), > > there is some "housekeeping" that gets done explicitly right now that I > > think would be better served by using a ctor in the future. These APIs > > are variable-sized, but have a fixed size header, so they have a > > "minimum size" that the ctor can still operate on, etc. > > > >> Probably also "align" doesn't make much sense since we're just > >> copying the kmalloc cache sizes and its implicit alignment of any > >> power-of-two allocations. > > > > Yeah, that's probably true. I kept it since I wanted to mirror > > kmem_cache_create() to make this API more familiar looking. > > Rust people were asking about kmalloc alignment (but I forgot the details) It was me! The ask is whether we can specify the alignment for the allocation API, for example, requesting a size=96 and align=32 memory, or the allocation API could do a "best alignment", for example, allocating a size=96 will give a align=32 memory. As far as I understand, kmalloc() doesn't support this. > so maybe this could be useful for them? CC rust-for-linux. > I took a quick look as what kmem_buckets is, and seems to me that align doesn't make sense here (and probably not useful in Rust as well) because a kmem_buckets is a set of kmem_caches, each has its own object size, making them share the same alignment is probably not what you want. But I could be missing something. Regards, Boqun > >> I don't think any current kmalloc user would > >> suddenly need either of those as you convert it to buckets, and definitely > >> not any user converted automatically by the code tagging. > > > > Right, it's not needed for either the explicit users nor the future > > automatic users. But since these arguments are available internally, > > there seems to be future utility, it's not fast path, and it made things > > feel like the existing API, I'd kind of like to keep it. > > > > But all that said, if you really don't want it, then sure I can drop > > those arguments. Adding them back in the future shouldn't be too > > much churn. > > I guess we can keep it then. >