On 5/27/25 18:38, Mina Almasry wrote:
...>>>> struct netmem_desc *page_to_netmem_desc(struct page *page)
{
return &page->netmem_desc;
page will not have any netmem things in it after this, that matters.
Ok, the question is where are you going to stash the fields?
We still need space to store them. Are you going to do the
indirection mm folks want?
I think I see some confusion here. I'm not sure indirection is what mm
folks want. The memdesc effort has already been implemented for zpdesc
To the best of my knowledge, it is. What you're looking at should be
a temporary state before all other users are converted, after which
mm will shrink the page in a single patch / small series.
and ptdesc[1], and the approach they did is very different from this
series. zpdesc and ptdesc have created a struct that mirrors the
entirety of struct page, not a subfield of struct page with
indirection:
https://elixir.bootlin.com/linux/v6.14.3/source/mm/zpdesc.h#L29
I'm now a bit confused, because the code changes in this series do not
match the general approach that zpdesc and ptdesc have done.
In my estimation, the only bits that mm needs for a clean final
patch is a new struct with use case specific fields (i.e. netmem_desc),
a helper converting a page to it, and that everyone uses the helper
to access the fields. I'd argue a temporary placeholder in struct
page is an easier approach than separate overlays, but either is
fine to me.
Byungchul, is the deviation in approach from zpdesc and ptdecs
intentional? And if so why? Should we follow the zpdesc and ptdesc
lead and implement a new struct that mirrors the entirety of struct
page?
[1] https://kernelnewbies.org/MatthewWilcox/Memdescs/Path
--
Pavel Begunkov