netmem: use netmem_desc instead of page to access ->pp in __netmem_get_pp()
To eliminate the use of the page pool fields in struct page, the page pool code should use netmem descriptor and APIs instead. However, __netmem_get_pp() still accesses ->pp via struct page. So change it to use struct netmem_desc instead, since ->pp no longer will be available in struct page. While at it, add a helper, __netmem_to_nmdesc(), that can be used to unsafely get pointer to netmem_desc backing the netmem_ref, only when the netmem_ref is always backed by system memory. Signed-off-by: Byungchul Park <byungchul@sk.com> Link: https://patch.msgid.link/20250721021835.63939-3-byungchul@sk.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
committed by
Jakub Kicinski
parent
f3d85c9ee5
commit
38a436d4e2
@@ -247,6 +247,24 @@ static inline unsigned long netmem_pfn_trace(netmem_ref netmem)
|
||||
return page_to_pfn(netmem_to_page(netmem));
|
||||
}
|
||||
|
||||
/**
|
||||
* __netmem_to_nmdesc - unsafely get pointer to the &netmem_desc backing
|
||||
* @netmem
|
||||
* @netmem: netmem reference to convert
|
||||
*
|
||||
* Unsafe version that can be used only when @netmem is always backed by
|
||||
* system memory, performs faster and generates smaller object code (no
|
||||
* check for the LSB, no WARN). When @netmem points to IOV, provokes
|
||||
* undefined behaviour.
|
||||
*
|
||||
* Return: pointer to the &netmem_desc (garbage if @netmem is not backed
|
||||
* by system memory).
|
||||
*/
|
||||
static inline struct netmem_desc *__netmem_to_nmdesc(netmem_ref netmem)
|
||||
{
|
||||
return (__force struct netmem_desc *)netmem;
|
||||
}
|
||||
|
||||
/* __netmem_clear_lsb - convert netmem_ref to struct net_iov * for access to
|
||||
* common fields.
|
||||
* @netmem: netmem reference to extract as net_iov.
|
||||
@@ -280,7 +298,7 @@ static inline struct net_iov *__netmem_clear_lsb(netmem_ref netmem)
|
||||
*/
|
||||
static inline struct page_pool *__netmem_get_pp(netmem_ref netmem)
|
||||
{
|
||||
return __netmem_to_page(netmem)->pp;
|
||||
return __netmem_to_nmdesc(netmem)->pp;
|
||||
}
|
||||
|
||||
static inline struct page_pool *netmem_get_pp(netmem_ref netmem)
|
||||
|
||||
Reference in New Issue
Block a user