> We could go one step further and special case in mm_get_huge_zero_folio() + > mm_put_huge_zero_folio() on CONFIG_STATIC_HUGE_ZERO_FOLIO. > Hmm, but we could have also failed to allocate even though the option was enabled. 2 options: - we could do: if (IS_ENABLED(CONFIG_STATIC_HUGE_ZERO_FOLIO) && huge_zero_folio) return huge_zero_folio; or - As dave suggested, we could do a static key and enable it when the option is enabled and the allocation succeeded. The same static key can also be used in get_static_huge_zero_folio(). I think the latter option will look more clean and slightly more optimal? > Something like > > diff --git a/mm/huge_memory.c b/mm/huge_memory.c > index 9c38a95e9f091..9b87884e5f299 100644 > --- a/mm/huge_memory.c > +++ b/mm/huge_memory.c > @@ -248,6 +248,9 @@ static void put_huge_zero_page(void) > > struct folio *mm_get_huge_zero_folio(struct mm_struct *mm) > { > + if (IS_ENABLED(CONFIG_STATIC_HUGE_ZERO_FOLIO)) > + return huge_zero_folio; > + > if (test_bit(MMF_HUGE_ZERO_PAGE, &mm->flags)) > return READ_ONCE(huge_zero_folio); > > @@ -262,6 +265,9 @@ struct folio *mm_get_huge_zero_folio(struct mm_struct > *mm) > > void mm_put_huge_zero_folio(struct mm_struct *mm) > { > + if (IS_ENABLED(CONFIG_STATIC_HUGE_ZERO_FOLIO)) > + return huge_zero_folio; > + > if (test_bit(MMF_HUGE_ZERO_PAGE, &mm->flags)) > put_huge_zero_page(); > } > -- Pankaj