On 1/20/21 1:30 AM, Oscar Salvador wrote: > On Tue, Jan 19, 2021 at 05:30:45PM -0800, Mike Kravetz wrote: >> + * Macros to create test, set and clear function definitions for >> + * hugetlb specific page flags. >> + */ >> +#ifdef CONFIG_HUGETLB_PAGE >> +#define TESTHPAGEFLAG(uname, flname) \ >> +static inline int HPage##uname(struct page *page) \ >> + { BUILD_BUG_ON(sizeof_field(struct page, private) * \ >> + BITS_PER_BYTE < __NR_HPAGEFLAGS); \ >> + return test_bit(HPG_##flname, &(page->private)); } >> + >> +#define SETHPAGEFLAG(uname, flname) \ >> +static inline void SetHPage##uname(struct page *page) \ >> + { set_bit(HPG_##flname, &(page->private)); } >> + >> +#define CLEARHPAGEFLAG(uname, flname) \ >> +static inline void ClearHPage##uname(struct page *page) \ >> + { clear_bit(HPG_##flname, &(page->private)); } >> +#else >> +#define TESTHPAGEFLAG(uname, flname) \ >> +static inline int HPage##uname(struct page *page) \ >> + { BUILD_BUG_ON(sizeof_field(struct page, private) * \ >> + BITS_PER_BYTE < __NR_HPAGEFLAGS); \ >> + return 0 } > > You missed a ";" right there. Thanks. I made that typo when fixing up some trivial checkpatch warnings. Lesson learned (again), nothing is too trivial not to introduce erros. > I might be missing something, but I do not think we need a BUILD_BUG_ON there > when CONFIG_HUGETLB_PAGE is not set? > Actually, would make more sense to move the BUILD_BUG_ON from above to > hugetlb_init? Yes, hugetlb_init is a better location for the BUILD_BUG_ON. I initially put it there before creating the !CONFIG_HUGETLB_PAGE version of the macros. With the !CONFIG_HUGETLB_PAGE versions, none of the flags are ever used so it is OK if the BUILD_BUG_ON is not included if !CONFIG_HUGETLB_PAGE. -- Mike Kravetz