@@ -375,17 +375,18 @@ EXPORT_SYMBOL_GPL(xdp_rxq_info_reg_mem_model);
void __xdp_return(void *data, struct xdp_mem_info *mem, bool napi_direct,
struct xdp_buff *xdp)
{
+ struct netmem *nmem;
struct page *page;
switch (mem->type) {
case MEM_TYPE_PAGE_POOL:
- page = virt_to_head_page(data);
+ nmem = virt_to_netmem(data);
if (napi_direct && xdp_return_frame_no_direct())
napi_direct = false;
- /* No need to check ((page->pp_magic & ~0x3UL) == PP_SIGNATURE)
+ /* No need to check ((nmem->pp_magic & ~0x3UL) == PP_SIGNATURE)
* as mem->type knows this a page_pool page
*/
- page_pool_put_full_page(page->pp, page, napi_direct);
+ page_pool_put_full_netmem(nmem->pp, nmem, napi_direct);
break;
case MEM_TYPE_PAGE_SHARED:
page_frag_free(data);
We dereference the 'pp' member of struct page, so we must use a netmem here. Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org> --- net/core/xdp.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-)