Re: [RFC v3 18/18] page_pool: access ->pp_magic through struct netmem_desc in page_pool_page_is_pp()

Pavel Begunkov
2025-05-29T20:48:43Z

On 5/29/25 20:54, Mina Almasry wrote:
...>> #endif /* _LINUX_MM_H */
>> diff --git a/include/net/netmem.h b/include/net/netmem.h
>> index f05a8b008d00..9e4ed3530788 100644
>> --- a/include/net/netmem.h
>> +++ b/include/net/netmem.h
>> @@ -53,6 +53,20 @@ NETMEM_DESC_ASSERT_OFFSET(pp_ref_count, pp_ref_count);
>> */
>> static_assert(sizeof(struct netmem_desc) <= offsetof(struct page, _refcount));
>>
>> +#ifdef CONFIG_PAGE_POOL
>> +static inline bool page_pool_page_is_pp(struct page *page)
>> +{
>> + struct netmem_desc *desc = (__force struct netmem_desc *)page;
>> +
>
> Is it expected that page can be cast to netmem_desc freely? I know it
> works now since netmem_desc and page have the same layout, but how is
> it going to continue to work when page is shrunk and no longer has
> 'pp_magic' inside of it? Is that series going to fixup all the places
> where casts are done?

It's expected the struct page will have a type field once it's shrunk.

> Is it also allowed that we can static cast netmem_desc to page?
>
> Consider creating netmem_desc_page helper like ptdesc_page.
>
> I'm not sure the __force is needed too.
>

--
Pavel Begunkov