From: Vlastimil Babka <vbabka@suse.cz>
To: "Christoph Lameter (Ampere)" <cl@gentwo.org>,
"Matthew Wilcox (Oracle)" <willy@infradead.org>
Cc: Andrew Morton <akpm@linux-foundation.org>,
David Rientjes <rientjes@google.com>,
Roman Gushchin <roman.gushchin@linux.dev>,
Harry Yoo <harry.yoo@oracle.com>,
linux-mm@kvack.org
Subject: Re: [PATCH v2 06/22] slab: Reimplement page_slab()
Date: Thu, 11 Sep 2025 09:10:48 +0200 [thread overview]
Message-ID: <08e7cac0-704e-48c4-ba13-c857dc1d11f0@suse.cz> (raw)
In-Reply-To: <8eefb8ca-e310-48d4-0c3a-fa80665cab87@gentwo.org>
On 9/11/25 00:46, Christoph Lameter (Ampere) wrote:
> On Wed, 10 Sep 2025, Matthew Wilcox (Oracle) wrote:
>
>> In order to separate slabs from folios, we need to convert from any page
>> in a slab to the slab directly without going through a page to folio
>> conversion first. page_slab() is a little different from other memdesc
>> converters we have in that it will return NULL if the page is not part
>> of a slab. This will be the normal style for memdesc converters in
>> the future.
>
> We are looking forward to another level of indirection in order
> to get to struct slab?
>
>> -#define page_slab(p) (_Generic((p), \
>> - const struct page *: (const struct slab *)(p), \
>> - struct page *: (struct slab *)(p)))
>> +static inline struct slab *page_slab(const struct page *page)
>> +{
>> + unsigned long head;
>> +
>> + head = READ_ONCE(page->compound_head);
>> + if (head & 1)
>> + page = (struct page *)(head - 1);
>> + if (data_race(page->page_type >> 24) != PGTY_slab)
>> + page = NULL;
>> +
>> + return (struct slab *)page;
>> +}
>
> compound_head() is open coded in there.
But since this is replacing going through page_folio() (in the following
patches) that does compound_head() itself, we're not really adding a new
indirection, no? Except to kfence here which knows the page pointer is head
already and now we're adding an unnecessary compound_head(). But it affects
only kfence_init_pool() and not any fastpaths, AFAICS.
I guess later with memdescs we can have a scheme where all head and tail
memdescs could contain the struct slab pointer so we don't have go through
the head one first? Which would replace one indirection with another and not
add a new one either.
next prev parent reply other threads:[~2025-09-11 7:10 UTC|newest]
Thread overview: 39+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-09-10 11:54 [PATCH v2 00/22] Prepare slab for memdescs Matthew Wilcox (Oracle)
2025-09-10 11:54 ` [PATCH v2 01/22] slab: Remove unnecessary test from alloc_debug_processing() Matthew Wilcox (Oracle)
2025-09-10 22:19 ` Christoph Lameter (Ampere)
2025-09-10 11:54 ` [PATCH v2 02/22] slab: Remove unnecessary test from alloc_single_from_partial() Matthew Wilcox (Oracle)
2025-09-10 22:23 ` Christoph Lameter (Ampere)
2025-09-11 16:38 ` Vlastimil Babka
2025-09-10 11:54 ` [PATCH v2 03/22] slab: Remove dead code in check_slab() Matthew Wilcox (Oracle)
2025-09-10 22:27 ` Christoph Lameter (Ampere)
2025-09-10 11:54 ` [PATCH v2 04/22] slab: Remove dead code in free_consistency_checks() Matthew Wilcox (Oracle)
2025-09-10 22:30 ` Christoph Lameter (Ampere)
2025-09-11 15:29 ` Vlastimil Babka
2025-09-10 11:54 ` [PATCH v2 05/22] mm: Constify compound_order() and page_size() Matthew Wilcox (Oracle)
2025-09-10 14:01 ` Vlastimil Babka
2025-09-10 17:33 ` Christoph Lameter (Ampere)
2025-09-10 11:54 ` [PATCH v2 06/22] slab: Reimplement page_slab() Matthew Wilcox (Oracle)
2025-09-10 22:46 ` Christoph Lameter (Ampere)
2025-09-10 23:01 ` Matthew Wilcox
2025-09-10 23:14 ` Christoph Lameter (Ampere)
2025-09-11 7:10 ` Vlastimil Babka [this message]
2025-09-11 11:35 ` Matthew Wilcox
2025-09-10 11:54 ` [PATCH v2 07/22] slab: Remove folio references from __ksize() Matthew Wilcox (Oracle)
2025-09-10 11:54 ` [PATCH v2 08/22] slab: Remove folio references in memcg_slab_post_charge() Matthew Wilcox (Oracle)
2025-09-10 11:54 ` [PATCH v2 09/22] slab: Remove folio references in slab alloc/free Matthew Wilcox (Oracle)
2025-09-10 11:54 ` [PATCH v2 10/22] slab: Remove folio references from ___kmalloc_large_node() Matthew Wilcox (Oracle)
2025-09-10 11:54 ` [PATCH v2 11/22] slab: Remove folio references from free_large_kmalloc() Matthew Wilcox (Oracle)
2025-09-10 11:54 ` [PATCH v2 12/22] slab: Remove folio references from kvfree_rcu_cb() Matthew Wilcox (Oracle)
2025-09-10 11:54 ` [PATCH v2 13/22] slab: Remove folio references from kvfree() Matthew Wilcox (Oracle)
2025-09-10 11:54 ` [PATCH v2 14/22] slab: Remove folio references from __do_krealloc() Matthew Wilcox (Oracle)
2025-09-10 11:54 ` [PATCH v2 15/22] slab: Remove folio references from build_detached_freelist() Matthew Wilcox (Oracle)
2025-09-10 11:54 ` [PATCH v2 16/22] slab: Remove dead code from free_large_kmalloc() Matthew Wilcox (Oracle)
2025-09-10 22:45 ` Christoph Lameter (Ampere)
2025-09-10 11:54 ` [PATCH v2 17/22] slab: Remove folio references from kfree_rcu_sheaf() Matthew Wilcox (Oracle)
2025-09-10 11:55 ` [PATCH v2 18/22] usercopy: Remove folio references from check_heap_object() Matthew Wilcox (Oracle)
2025-09-10 11:55 ` [PATCH v2 19/22] memcg: Convert mem_cgroup_from_obj_folio() to mem_cgroup_from_obj_slab() Matthew Wilcox (Oracle)
2025-09-10 11:55 ` [PATCH v2 20/22] kasan: Remove references to folio in __kasan_mempool_poison_object() Matthew Wilcox (Oracle)
2025-09-10 11:55 ` [PATCH v2 21/22] slab: Remove references to folios from virt_to_slab() Matthew Wilcox (Oracle)
2025-09-10 11:55 ` [PATCH v2 22/22] mm: Remove redundant test in validate_page_before_insert() Matthew Wilcox (Oracle)
2025-09-10 14:02 ` Vlastimil Babka
2025-09-10 14:05 ` [PATCH v2 00/22] Prepare slab for memdescs Vlastimil Babka
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=08e7cac0-704e-48c4-ba13-c857dc1d11f0@suse.cz \
--to=vbabka@suse.cz \
--cc=akpm@linux-foundation.org \
--cc=cl@gentwo.org \
--cc=harry.yoo@oracle.com \
--cc=linux-mm@kvack.org \
--cc=rientjes@google.com \
--cc=roman.gushchin@linux.dev \
--cc=willy@infradead.org \
/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