On 02.10.2024 17:25, Matthew Wilcox (Oracle) wrote: > Check that this anonymous page is really anonymous, not > anonymous-or-KSM. This optimises the debug check, but its real purpose > is to remove the last two users of PageKsm(). > > Signed-off-by: Matthew Wilcox (Oracle) <willy@xxxxxxxxxxxxx> > --- > include/linux/page-flags.h | 11 +++++++++-- > 1 file changed, 9 insertions(+), 2 deletions(-) > > diff --git a/include/linux/page-flags.h b/include/linux/page-flags.h > index 4c2dfe289046..157c4ffc2fdc 100644 > --- a/include/linux/page-flags.h > +++ b/include/linux/page-flags.h > @@ -689,6 +689,13 @@ static __always_inline bool folio_test_anon(const struct folio *folio) > return ((unsigned long)folio->mapping & PAGE_MAPPING_ANON) != 0; > } > > +static __always_inline bool PageAnonNotKsm(const struct page *page) > +{ > + unsigned long flags = (unsigned long)page_folio(page)->mapping; > + > + return (flags & PAGE_MAPPING_FLAGS) == PAGE_MAPPING_ANON; > +} > + > static __always_inline bool PageAnon(const struct page *page) > { > return folio_test_anon(page_folio(page)); > @@ -1129,14 +1136,14 @@ static __always_inline int PageAnonExclusive(const struct page *page) > > static __always_inline void SetPageAnonExclusive(struct page *page) > { > - VM_BUG_ON_PGFLAGS(!PageAnon(page) || PageKsm(page), page); > + VM_BUG_ON_PGFLAGS(PageAnonNotKsm(page), page); !PageAnonNotKsm(page) ? At least such change fixes booting of today's linux-next with debug enabled on RISC-V based boards. > VM_BUG_ON_PGFLAGS(PageHuge(page) && !PageHead(page), page); > set_bit(PG_anon_exclusive, &PF_ANY(page, 1)->flags); > } > > static __always_inline void ClearPageAnonExclusive(struct page *page) > { > - VM_BUG_ON_PGFLAGS(!PageAnon(page) || PageKsm(page), page); > + VM_BUG_ON_PGFLAGS(PageAnonNotKsm(page), page); ditto > VM_BUG_ON_PGFLAGS(PageHuge(page) && !PageHead(page), page); > clear_bit(PG_anon_exclusive, &PF_ANY(page, 1)->flags); > } Best regards -- Marek Szyprowski, PhD Samsung R&D Institute Poland