To simplify struct page, the effort to separate its own descriptor from struct page is required and the work for page pool is on going. To achieve that, all the code should avoid directly accessing page pool members of struct page. Access ->pp_magic through struct netmem_desc instead of directly accessing it through struct page in page_pool_page_is_pp(). Plus, move page_pool_page_is_pp() from mm.h to netmem.h to use struct netmem_desc without header dependency issue. Signed-off-by: Byungchul Park Reviewed-by: Toke Høiland-Jørgensen Reviewed-by: Mina Almasry Reviewed-by: Pavel Begunkov Reviewed-by: Vlastimil Babka Acked-by: Harry Yoo --- include/linux/mm.h | 12 ------------ include/net/netmem.h | 17 +++++++++++++++++ mm/page_alloc.c | 1 + 3 files changed, 18 insertions(+), 12 deletions(-) diff --git a/include/linux/mm.h b/include/linux/mm.h index 0ef2ba0c667a..0b7f7f998085 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h @@ -4172,16 +4172,4 @@ int arch_lock_shadow_stack_status(struct task_struct *t, unsigned long status); */ #define PP_MAGIC_MASK ~(PP_DMA_INDEX_MASK | 0x3UL) -#ifdef CONFIG_PAGE_POOL -static inline bool page_pool_page_is_pp(struct page *page) -{ - return (page->pp_magic & PP_MAGIC_MASK) == PP_SIGNATURE; -} -#else -static inline bool page_pool_page_is_pp(struct page *page) -{ - return false; -} -#endif - #endif /* _LINUX_MM_H */ diff --git a/include/net/netmem.h b/include/net/netmem.h index ad9444be229a..11e9de45efcb 100644 --- a/include/net/netmem.h +++ b/include/net/netmem.h @@ -355,6 +355,23 @@ static inline void *nmdesc_address(struct netmem_desc *nmdesc) return page_address(nmdesc_to_page(nmdesc)); } +#ifdef CONFIG_PAGE_POOL +/* XXX: This would better be moved to mm, once mm gets its way to + * identify the type of page for page pool. + */ +static inline bool page_pool_page_is_pp(struct page *page) +{ + struct netmem_desc *desc = page_to_nmdesc(page); + + return (desc->pp_magic & PP_MAGIC_MASK) == PP_SIGNATURE; +} +#else +static inline bool page_pool_page_is_pp(struct page *page) +{ + return false; +} +#endif + /** * __netmem_address - unsafely get pointer to the memory backing @netmem * @netmem: netmem reference to get the pointer for diff --git a/mm/page_alloc.c b/mm/page_alloc.c index 2ef3c07266b3..cc1d169853e8 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -55,6 +55,7 @@ #include #include #include +#include #include #include "internal.h" #include "shuffle.h" -- 2.17.1