On Tue, Aug 15, 2023 at 4:01 PM Matthew Wilcox <willy@xxxxxxxxxxxxx> wrote: > > On Tue, Aug 15, 2023 at 03:31:42PM -0700, Yosry Ahmed wrote: > > On Tue, Aug 15, 2023 at 1:07 PM Matthew Wilcox <willy@xxxxxxxxxxxxx> wrote: > > > > > > On Tue, Aug 15, 2023 at 03:24:16PM -0400, Peter Xu wrote: > > > > On Tue, Aug 15, 2023 at 04:26:44AM +0100, Matthew Wilcox (Oracle) wrote: > > > > > +++ b/include/linux/page-flags.h > > > > > @@ -99,13 +99,15 @@ > > > > > */ > > > > > enum pageflags { > > > > > PG_locked, /* Page is locked. Don't touch. */ > > > > > + PG_writeback, /* Page is under writeback */ > > > > > PG_referenced, > > > > > PG_uptodate, > > > > > PG_dirty, > > > > > PG_lru, > > > > > + PG_head, /* Must be in bit 6 */ > > > > > > > > Could there be some explanation on "must be in bit 6" here? > > > > > > Not on this line, no. You get 40-50 characters to say something useful. > > > Happy to elaborate further in some other comment or in the commit log, > > > but not on this line. > > > > > > The idea behind all of this is that _folio_order moves into the bottom > > > byte of _flags_1. Because the order can never be greater than 63 (and > > > in practice I think the largest we're going to see is about 30 -- a 16GB > > > hugetlb page on some architectures), we know that PG_head and PG_waiters > > > will be clear, so we can write (folio->_flags_1 & 0xff) and the compiler > > > will just load a byte; it won't actually load the word and mask it. > > > > > > We can't move PG_head any lower, or we'll risk having a tail page with > > > PG_head set (which can happen with the vmemmmap optimisation, but eugh). > > > And we don't want to move it any higher because then we'll have a flag > > > that cannot be reused in a tail page. Bit 6 is the perfect spot for it. > > > > Is there some compile time assertion that the order cannot overflow into bit 6? > > An order-64 folio on a machine with a 4kB page size would be 64 > zettabytes. I intend to retire before we're managing memory in chunks > that large. I should have done the math :) Never say never though :)