linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
From: David Hildenbrand <david@redhat.com>
To: "Matthew Wilcox (Oracle)" <willy@infradead.org>,
	Andrew Morton <akpm@linux-foundation.org>
Cc: linux-mm@kvack.org
Subject: Re: [PATCH 1/8] mm: Separate out FOLIO_FLAGS from PAGEFLAGS
Date: Fri, 1 Mar 2024 12:23:55 +0100	[thread overview]
Message-ID: <1a31af4f-d15c-43c7-9dbf-ae5398b88673@redhat.com> (raw)
In-Reply-To: <20240227192337.757313-2-willy@infradead.org>

On 27.02.24 20:23, Matthew Wilcox (Oracle) wrote:
> We've progressed far enough with the folio transition that some flags
> are now no longer checked on pages, but only on folios.  To prevent
> new users appearing, prepare to only define the folio versions of the
> flag test/set/clear.
> 
> Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
> ---
>   include/linux/page-flags.h | 63 ++++++++++++++++++++++++++------------
>   1 file changed, 43 insertions(+), 20 deletions(-)
> 
> diff --git a/include/linux/page-flags.h b/include/linux/page-flags.h
> index 735cddc13d20..95ab75d0b39c 100644
> --- a/include/linux/page-flags.h
> +++ b/include/linux/page-flags.h
> @@ -367,54 +367,77 @@ static unsigned long *folio_flags(struct folio *folio, unsigned n)
>   #define FOLIO_PF_NO_COMPOUND	0
>   #define FOLIO_PF_SECOND		1
>   
> +#define FOLIO_HEAD_PAGE		0
> +#define FOLIO_SECOND_PAGE	1
> +
>   /*
>    * Macros to create function definitions for page flags
>    */
> +#define FOLIO_TEST_FLAG(name, page)					\
> +static __always_inline bool folio_test_##name(struct folio *folio)	\
> +{ return test_bit(PG_##name, folio_flags(folio, page)); }
> +
> +#define FOLIO_SET_FLAG(name, page)					\
> +static __always_inline void folio_set_##name(struct folio *folio)	\
> +{ set_bit(PG_##name, folio_flags(folio, page)); }
> +
> +#define FOLIO_CLEAR_FLAG(name, page)					\
> +static __always_inline void folio_clear_##name(struct folio *folio)	\
> +{ clear_bit(PG_##name, folio_flags(folio, page)); }
> +
> +#define __FOLIO_SET_FLAG(name, page)					\
> +static __always_inline void __folio_set_##name(struct folio *folio)	\
> +{ __set_bit(PG_##name, folio_flags(folio, page)); }
> +
> +#define __FOLIO_CLEAR_FLAG(name, page)					\
> +static __always_inline void __folio_clear_##name(struct folio *folio)	\
> +{ __clear_bit(PG_##name, folio_flags(folio, page)); }
> +
> +#define FOLIO_TEST_SET_FLAG(name, page)					\
> +static __always_inline bool folio_test_set_##name(struct folio *folio)	\
> +{ return test_and_set_bit(PG_##name, folio_flags(folio, page)); }
> +
> +#define FOLIO_TEST_CLEAR_FLAG(name, page)				\
> +static __always_inline bool folio_test_clear_##name(struct folio *folio) \
> +{ return test_and_clear_bit(PG_##name, folio_flags(folio, page)); }
> +
> +#define FOLIO_FLAG(name, page)						\
> +FOLIO_TEST_FLAG(name, page)						\
> +FOLIO_SET_FLAG(name, page)						\
> +FOLIO_CLEAR_FLAG(name, page)
> +
>   #define TESTPAGEFLAG(uname, lname, policy)				\
> -static __always_inline bool folio_test_##lname(struct folio *folio)	\
> -{ return test_bit(PG_##lname, folio_flags(folio, FOLIO_##policy)); }	\
> +FOLIO_TEST_FLAG(lname, FOLIO_##policy)					\
>   static __always_inline int Page##uname(struct page *page)		\
>   { return test_bit(PG_##lname, &policy(page, 0)->flags); }
>   
>   #define SETPAGEFLAG(uname, lname, policy)				\
> -static __always_inline							\
> -void folio_set_##lname(struct folio *folio)				\
> -{ set_bit(PG_##lname, folio_flags(folio, FOLIO_##policy)); }		\
> +FOLIO_SET_FLAG(lname, FOLIO_##policy)					\
>   static __always_inline void SetPage##uname(struct page *page)		\
>   { set_bit(PG_##lname, &policy(page, 1)->flags); }
>   
>   #define CLEARPAGEFLAG(uname, lname, policy)				\
> -static __always_inline							\
> -void folio_clear_##lname(struct folio *folio)				\
> -{ clear_bit(PG_##lname, folio_flags(folio, FOLIO_##policy)); }		\
> +FOLIO_CLEAR_FLAG(lname, FOLIO_##policy)					\
>   static __always_inline void ClearPage##uname(struct page *page)		\
>   { clear_bit(PG_##lname, &policy(page, 1)->flags); }
>   
>   #define __SETPAGEFLAG(uname, lname, policy)				\
> -static __always_inline							\
> -void __folio_set_##lname(struct folio *folio)				\
> -{ __set_bit(PG_##lname, folio_flags(folio, FOLIO_##policy)); }		\
> +__FOLIO_SET_FLAG(lname, FOLIO_##policy)					\
>   static __always_inline void __SetPage##uname(struct page *page)		\
>   { __set_bit(PG_##lname, &policy(page, 1)->flags); }
>   
>   #define __CLEARPAGEFLAG(uname, lname, policy)				\
> -static __always_inline							\
> -void __folio_clear_##lname(struct folio *folio)				\
> -{ __clear_bit(PG_##lname, folio_flags(folio, FOLIO_##policy)); }	\
> +__FOLIO_CLEAR_FLAG(lname, FOLIO_##policy)				\
>   static __always_inline void __ClearPage##uname(struct page *page)	\
>   { __clear_bit(PG_##lname, &policy(page, 1)->flags); }
>   
>   #define TESTSETFLAG(uname, lname, policy)				\
> -static __always_inline							\
> -bool folio_test_set_##lname(struct folio *folio)			\
> -{ return test_and_set_bit(PG_##lname, folio_flags(folio, FOLIO_##policy)); } \
> +FOLIO_TEST_SET_FLAG(lname, FOLIO_##policy)				\
>   static __always_inline int TestSetPage##uname(struct page *page)	\
>   { return test_and_set_bit(PG_##lname, &policy(page, 1)->flags); }
>   
>   #define TESTCLEARFLAG(uname, lname, policy)				\
> -static __always_inline							\
> -bool folio_test_clear_##lname(struct folio *folio)			\
> -{ return test_and_clear_bit(PG_##lname, folio_flags(folio, FOLIO_##policy)); } \
> +FOLIO_TEST_CLEAR_FLAG(lname, FOLIO_##policy)				\
>   static __always_inline int TestClearPage##uname(struct page *page)	\
>   { return test_and_clear_bit(PG_##lname, &policy(page, 1)->flags); }
>   

Reviewed-by: David Hildenbrand <david@redhat.com>

-- 
Cheers,

David / dhildenb



  reply	other threads:[~2024-03-01 11:24 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-02-27 19:23 [PATCH 0/8] PageFlags cleanups Matthew Wilcox (Oracle)
2024-02-27 19:23 ` [PATCH 1/8] mm: Separate out FOLIO_FLAGS from PAGEFLAGS Matthew Wilcox (Oracle)
2024-03-01 11:23   ` David Hildenbrand [this message]
2024-02-27 19:23 ` [PATCH 2/8] mm: Remove PageWaiters, PageSetWaiters and PageClearWaiters Matthew Wilcox (Oracle)
2024-03-01 11:24   ` David Hildenbrand
2024-02-27 19:23 ` [PATCH 3/8] mm: Remove PageYoung and PageIdle definitions Matthew Wilcox (Oracle)
2024-03-01 11:25   ` David Hildenbrand
2024-02-27 19:23 ` [PATCH 4/8] mm: Add __dump_folio() Matthew Wilcox (Oracle)
2024-02-28 21:34   ` SeongJae Park
2024-02-29  4:37     ` Matthew Wilcox
2024-02-29  5:05       ` SeongJae Park
2024-03-01 10:21   ` Ryan Roberts
2024-03-01 21:32     ` Matthew Wilcox
2024-03-04 19:02       ` Matthew Wilcox
2024-05-14  4:33   ` Kees Cook
2024-05-14  4:53     ` Matthew Wilcox
2024-05-14 14:25     ` Matthew Wilcox
2024-02-27 19:23 ` [PATCH 5/8] mm: Make dump_page() take a const argument Matthew Wilcox (Oracle)
2024-03-01 11:26   ` David Hildenbrand
2024-02-27 19:23 ` [PATCH 6/8] mm: Constify testing page/folio flags Matthew Wilcox (Oracle)
2024-03-01 11:28   ` David Hildenbrand
2024-02-27 19:23 ` [PATCH 7/8] mm: Constify more page/folio tests Matthew Wilcox (Oracle)
2024-03-01 11:28   ` David Hildenbrand
2024-02-27 19:23 ` [PATCH 8/8] mm: Remove cast from page_to_nid() Matthew Wilcox (Oracle)
2024-03-01 11:27   ` David Hildenbrand

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1a31af4f-d15c-43c7-9dbf-ae5398b88673@redhat.com \
    --to=david@redhat.com \
    --cc=akpm@linux-foundation.org \
    --cc=linux-mm@kvack.org \
    --cc=willy@infradead.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).