Messages in this thread | | | Subject | Re: [PATCH 1/4] mm: introduce 'encoded' page pointers with embedded extra bits | From | Nadav Amit <> | Date | Tue, 8 Nov 2022 12:37:28 -0800 |
| |
On Nov 8, 2022, at 11:41 AM, Linus Torvalds <torvalds@linux-foundation.org> wrote:
> We already have this notion in parts of the MM code (see the mlock code > with the LRU_PAGE and NEW_PAGE) bits, but I'm going to introduce a new > case, and I refuse to do the same thing we've done before where we just > put bits in the raw pointer and say it's still a normal pointer. > > So this introduces a 'struct encoded_page' pointer that cannot be used > for anything else than to encode a real page pointer and a couple of > extra bits in the low bits. That way the compiler can trivially track > the state of the pointer and you just explicitly encode and decode the > extra bits.
I tested again all of the patches with the PoC. They pass.
> > +struct encoded_page; > +#define ENCODE_PAGE_BITS 3ul > +static inline struct encoded_page *encode_page(struct page *page, unsigned long flags) > +{ > + return (struct encoded_page *)(flags | (unsigned long)page); > +} > + > +static inline bool encoded_page_flags(struct encoded_page *page) > +{ > + return ENCODE_PAGE_BITS & (unsigned long)page; > +}
I think this one wants to be some unsigned, as otherwise why have ENCODE_PAGE_BITS as 3ul ?
| |