Index: sys/compat/linuxkpi/common/include/linux/mm.h =================================================================== --- sys/compat/linuxkpi/common/include/linux/mm.h +++ sys/compat/linuxkpi/common/include/linux/mm.h @@ -517,4 +517,14 @@ return (page_address(&folio->page)); } +static inline bool +folio_mapped(struct folio *folio) +{ +#ifdef PAGE_IS_LKPI_PAGE + return (pmap_page_is_mapped(folio->page.vm_page)); +#else + return (pmap_page_is_mapped(&folio->page)); +#endif +} + #endif /* _LINUXKPI_LINUX_MM_H_ */ Index: sys/compat/linuxkpi/common/include/linux/page-flags.h =================================================================== --- sys/compat/linuxkpi/common/include/linux/page-flags.h +++ sys/compat/linuxkpi/common/include/linux/page-flags.h @@ -38,4 +38,12 @@ const struct page *: (const struct folio *)(p), \ struct page *: (struct folio *)(p))) +static inline struct page * +folio_page(struct folio *folio, int n) +{ + KASSERT(n == 0, ("%s: n = %d but only n = 0 supported\n", __func__, n)); + + return (&folio->page); +} + #endif /* _LINUXKPI_LINUX_PAGEFLAGS_H_ */ Index: sys/compat/linuxkpi/common/include/linux/pagemap.h =================================================================== --- sys/compat/linuxkpi/common/include/linux/pagemap.h +++ sys/compat/linuxkpi/common/include/linux/pagemap.h @@ -35,6 +35,34 @@ struct folio_batch; +static inline struct page * +folio_file_page(struct folio *folio, pgoff_t index) +{ + return (folio_page(folio, index & (folio_nr_pages(folio) - 1))); +} + +static inline void +folio_lock(struct folio *folio) +{ +#ifdef PAGE_IS_LKPI_PAGE + if (!vm_page_tryxbusy(folio->page.vm_page)) + vm_page_busy_sleep(folio->page.vm_page, __func__, 0); +#else + if (!vm_page_tryxbusy(&folio->page)) + vm_page_busy_sleep(&folio->page, __func__, 0); +#endif +} + +static inline void +folio_unlock(struct folio *folio) +{ +#ifdef PAGE_IS_LKPI_PAGE + vm_page_xunbusy(folio->page.vm_page); +#else + vm_page_xunbusy(&folio->page); +#endif +} + #define invalidate_mapping_pages(...) \ linux_invalidate_mapping_pages(__VA_ARGS__)