On Thu, May 25, 2023 at 10:15 AM David Howells <dhowells@xxxxxxxxxx> wrote: > > It doesn't seem I can add it to mm.h as an inline function. What? We already have that pattern inside is_longterm_pinnable_page(), so that's really strange. But regardless, please don't duplicate that odd conditional for no reason, and don't scream. So regardless of where it is, make that "is_zero_folio()" just do "is_zero_page(&folio->page)" rather than repeat the question. I also wonder whether we shouldn't just use the "transparent union" argument thing more aggressively. Something like typedef union { struct page *page; struct folio *folio; } page_or_folio_t __attribute__ ((__transparent_union__)); and then you should be able to do something like this: static inline bool is_zero_page(const page_or_folio_t arg) { return is_zero_pfn(page_to_pfn(arg.page)); } and we don't have to keep generating the two versions over and over and over again. Linus