On Wed, Mar 11, 2020 at 06:13:04AM -0700, Matthew Wilcox wrote: > 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 No dog in this fight... But for simpletons like me... !(page->page_type & flag) ... makes much more sense, Ira > easier for humans to read and reason about. Do you have an opinion > which one you'd like to see? > >