Re: [PATCH v2 1/5] hugetlb: use page.private for hugetlb specific page flags
From: Mike Kravetz <hidden>
Date: 2021-01-20 18:42:13
Also in:
lkml
On 1/20/21 1:30 AM, Oscar Salvador wrote:
On Tue, Jan 19, 2021 at 05:30:45PM -0800, Mike Kravetz wrote:quoted
+ * 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