On Tue, Mar 10, 2020 at 02:50:50PM -0700, Alexander Duyck wrote: > On Tue, Mar 10, 2020 at 1:37 PM Matthew Wilcox <willy@xxxxxxxxxxxxx> wrote: > > > > -#define PageType(page, flag) \ > > > > - ((page->page_type & (PAGE_TYPE_BASE | flag)) == PAGE_TYPE_BASE) > > > > - > > >From what I can tell this is the only consumer of PAGE_TYPE_BASE. > Since it is removed you can probably remove that definition as well. I _could_ ... I do want to indicate to people that they probably shouldn't use those bits in order to leave space for overflow and wraparound of _mapcount. > > > > +#define PageType(page, flag) \ > > > > + (page_has_type(page) && (~page->page_type & flag)) > > You can probably spare a cycle or two here by testing for > "!(page->page_type & flag)". That way you avoid the extra bit flipping > since the compiler can just handle the result of the AND op as it sees > fit. GCC already knows to do that optimisation; mm/page_alloc.o is identical (same md5sum) when changing from (~page->page_type & flag) to !(page->page_type & flag). So it's just a question of which one is easier for humans to read and reason about. Do you have an opinion which one you'd like to see?