lkml.org 
[lkml]   [2022]   [Feb]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectRe: [PATCH v2 10/13] mm/munlock: mlock_page() munlock_page() batch by pagevec
On Tue, 15 Feb 2022, Matthew Wilcox wrote:
> On Mon, Feb 14, 2022 at 06:37:29PM -0800, Hugh Dickins wrote:
> > +/*
> > + * Flags held in the low bits of a struct page pointer on the mlock_pvec.
> > + */
> > +#define LRU_PAGE 0x1
> > +#define NEW_PAGE 0x2
> > +#define mlock_lru(page) ((struct page *)((unsigned long)page + LRU_PAGE))
> > +#define mlock_new(page) ((struct page *)((unsigned long)page + NEW_PAGE))
>
> You've tripped over one of the weirdnesses in the C preprocessor here.
> If the variable passed is not _named_ page, it gets cast to a pointer
> to a struct of the same name as the variable. There's no way to tell
> cpp that that 'page' after 'struct' is literal and not to be replaced
> by the 'page' argument.
>
> I'm going to change this to:
>
> static inline struct page *mlock_lru(struct page *page)
> {
> return (struct page *)((unsigned long)page + LRU_PAGE);
> }
>
> (mutatis mutandi for mlock_new)

Okay, thanks. (You're not naming your folio "page" :-?)

Hugh

\
 
 \ /
  Last update: 2022-02-15 22:03    [W:0.208 / U:0.120 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site