From: Christian Brauner <brauner@kernel.org>
To: Vlastimil Babka <vbabka@suse.cz>, Jens Axboe <axboe@kernel.dk>,
Jann Horn <jannh@google.com>,
Linus Torvalds <torvalds@linux-foundation.org>,
Mike Rapoport <rppt@kernel.org>
Cc: Kees Cook <kees@kernel.org>, Christoph Lameter <cl@linux.com>,
Pekka Enberg <penberg@kernel.org>,
David Rientjes <rientjes@google.com>,
Joonsoo Kim <iamjoonsoo.kim@lge.com>,
Andrew Morton <akpm@linux-foundation.org>,
Roman Gushchin <roman.gushchin@linux.dev>,
Hyeonggon Yoo <42.hyeyoo@gmail.com>,
linux-mm@kvack.org, linux-fsdevel@vger.kernel.org,
Christian Brauner <brauner@kernel.org>
Subject: [PATCH v3 00/17] slab: add struct kmem_cache_args
Date: Wed, 04 Sep 2024 12:21:05 +0200 [thread overview]
Message-ID: <20240904-work-kmem_cache_args-v3-0-05db2179a8c2@kernel.org> (raw)
Hey,
No meaningful changes in v3. This is mostly to make it easy for
Vlastimil to pull.
---
As discussed last week the various kmem_cache_*() functions should be
replaced by a unified function that is based around a struct, with only
the basic parameters passed separately.
Vlastimil already said that he would like to keep core parameters out
of the struct: name, object size, and flags. I personally don't care
much and would not object to moving everything into the struct but
that's a matter of taste and I yield that decision power to the
maintainer.
In the first version I pointed out that the choice of name is somewhat
forced as kmem_cache_create() is taken and the only way to reuse it
would be to replace all users in one go. Or to do a global
sed/kmem_cache_create()/kmem_cache_create2()/g. And then introduce
kmem_cache_setup(). That doesn't strike me as a viable option.
If we really cared about the *_create() suffix then an alternative might
be to do a sed/kmem_cache_setup()/kmem_cache_create()/g after every user
in the kernel is ported. I honestly don't think that's worth it but I
wanted to at least mention it to highlight the fact that this might lead
to a naming compromise.
However, I came up with an alternative using _Generic() to create a
compatibility layer that will call the correct variant of
kmem_cache_create() depending on whether struct kmem_cache_args is
passed or not. That compatibility layer can stay in place until we
updated all calls to be based on struct kmem_cache_args.
From a cursory grep (and not excluding Documentation mentions) we will
have to replace 44 kmem_cache_create_usercopy() calls and about 463
kmem_cache_create() calls which makes for a bit above 500 calls to port
to kmem_cache_setup(). That'll probably be good work for people getting
into kernel development.
To: Vlastimil Babka <vbabka@suse.cz>
To: Jens Axboe <axboe@kernel.dk>
To: Jann Horn <jannh@google.com>
To: Linus Torvalds <torvalds@linux-foundation.org>
To: Mike Rapoport <rppt@kernel.org>
Cc: Kees Cook <kees@kernel.org>
Cc: Christoph Lameter <cl@linux.com>
Cc: Pekka Enberg <penberg@kernel.org>
Cc: David Rientjes <rientjes@google.com>
Cc: Joonsoo Kim <iamjoonsoo.kim@lge.com>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Roman Gushchin <roman.gushchin@linux.dev>
Cc: Hyeonggon Yoo <42.hyeyoo@gmail.com>
Cc: linux-mm@kvack.org
Cc: linux-fsdevel@vger.kernel.org
Signed-off-by: Christian Brauner <brauner@kernel.org>
---
Changes in v3:
- Reworded some commit messages.
- Picked up various RvBs.
- Added two patches to make two functions static inline.
- Link to v2: https://lore.kernel.org/r/20240903-work-kmem_cache_args-v2-0-76f97e9a4560@kernel.org
Changes in v2:
- Remove kmem_cache_setup() and add a compatibility layer built around
_Generic() so that we can keep the kmem_cache_create() name and type
switch on the third argument to either call __kmem_cache_create() or
__kmem_cache_create_args().
- Link to v1: https://lore.kernel.org/r/20240902-work-kmem_cache_args-v1-0-27d05bc05128@kernel.org
---
Christian Brauner (17):
slab: s/__kmem_cache_create/do_kmem_cache_create/g
slab: add struct kmem_cache_args
slab: port kmem_cache_create() to struct kmem_cache_args
slab: port kmem_cache_create_rcu() to struct kmem_cache_args
slab: port kmem_cache_create_usercopy() to struct kmem_cache_args
slab: pass struct kmem_cache_args to create_cache()
slab: pull kmem_cache_open() into do_kmem_cache_create()
slab: pass struct kmem_cache_args to do_kmem_cache_create()
slab: remove rcu_freeptr_offset from struct kmem_cache
slab: port KMEM_CACHE() to struct kmem_cache_args
slab: port KMEM_CACHE_USERCOPY() to struct kmem_cache_args
slab: create kmem_cache_create() compatibility layer
file: port to struct kmem_cache_args
slab: remove kmem_cache_create_rcu()
slab: make kmem_cache_create_usercopy() static inline
slab: make __kmem_cache_create() static inline
io_uring: port to struct kmem_cache_args
fs/file_table.c | 11 ++-
include/linux/slab.h | 116 ++++++++++++++++++++++++------
io_uring/io_uring.c | 14 ++--
mm/slab.h | 6 +-
mm/slab_common.c | 197 +++++++++++----------------------------------------
mm/slub.c | 162 +++++++++++++++++++++---------------------
6 files changed, 236 insertions(+), 270 deletions(-)
---
base-commit: 6e016babce7c845ed015da25c7a097fa3482d95a
change-id: 20240902-work-kmem_cache_args-e9760972c7d4
next reply other threads:[~2024-09-04 10:21 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-09-04 10:21 Christian Brauner [this message]
2024-09-04 10:21 ` [PATCH v3 01/17] slab: s/__kmem_cache_create/do_kmem_cache_create/g Christian Brauner
2024-09-04 10:21 ` [PATCH v3 02/17] slab: add struct kmem_cache_args Christian Brauner
2024-09-04 10:21 ` [PATCH v3 03/17] slab: port kmem_cache_create() to " Christian Brauner
2024-09-04 10:21 ` [PATCH v3 04/17] slab: port kmem_cache_create_rcu() " Christian Brauner
2024-09-04 10:21 ` [PATCH v3 05/17] slab: port kmem_cache_create_usercopy() " Christian Brauner
2024-09-04 10:21 ` [PATCH v3 06/17] slab: pass struct kmem_cache_args to create_cache() Christian Brauner
2024-09-04 10:21 ` [PATCH v3 07/17] slab: pull kmem_cache_open() into do_kmem_cache_create() Christian Brauner
2024-09-04 10:21 ` [PATCH v3 08/17] slab: pass struct kmem_cache_args to do_kmem_cache_create() Christian Brauner
2024-09-04 10:21 ` [PATCH v3 09/17] slab: remove rcu_freeptr_offset from struct kmem_cache Christian Brauner
2024-09-04 10:21 ` [PATCH v3 10/17] slab: port KMEM_CACHE() to struct kmem_cache_args Christian Brauner
2024-09-04 10:21 ` [PATCH v3 11/17] slab: port KMEM_CACHE_USERCOPY() " Christian Brauner
2024-09-04 10:21 ` [PATCH v3 12/17] slab: create kmem_cache_create() compatibility layer Christian Brauner
2024-09-04 10:21 ` [PATCH v3 13/17] file: port to struct kmem_cache_args Christian Brauner
2024-09-04 10:21 ` [PATCH v3 14/17] slab: remove kmem_cache_create_rcu() Christian Brauner
2024-09-04 10:21 ` [PATCH v3 15/17] slab: make kmem_cache_create_usercopy() static inline Christian Brauner
2024-09-04 10:21 ` [PATCH v3 16/17] slab: make __kmem_cache_create() " Christian Brauner
2024-09-04 10:21 ` [PATCH v3 17/17] io_uring: port to struct kmem_cache_args Christian Brauner
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20240904-work-kmem_cache_args-v3-0-05db2179a8c2@kernel.org \
--to=brauner@kernel.org \
--cc=42.hyeyoo@gmail.com \
--cc=akpm@linux-foundation.org \
--cc=axboe@kernel.dk \
--cc=cl@linux.com \
--cc=iamjoonsoo.kim@lge.com \
--cc=jannh@google.com \
--cc=kees@kernel.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=penberg@kernel.org \
--cc=rientjes@google.com \
--cc=roman.gushchin@linux.dev \
--cc=rppt@kernel.org \
--cc=torvalds@linux-foundation.org \
--cc=vbabka@suse.cz \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).