Re: [PATCH] mm: convert page type macros to enum

From: Omar Sandoval
Date: Thu Jun 06 2024 - 13:34:45 EST


On Thu, Jun 06, 2024 at 10:25:29AM -0700, Stephen Brennan wrote:
> Changing PG_slab from a page flag to a page type in commit 46df8e73a4a3
> ("mm: free up PG_slab") in has the unintended consequence of removing
> the PG_slab constant from kernel debuginfo. The commit does add the
> value to the vmcoreinfo note, which allows debuggers to find the value
> without hardcoding it. However it's most flexible to continue
> representing the constant with an enum. To that end, convert the page
> type fields into an enum. Debuggers will now be able to detect that
> PG_slab's type has changed from enum pageflags to enum page_type.
>
> Fixes: 46df8e73a4a3 ("mm: free up PG_slab")
>
> Signed-off-by: Stephen Brennan <stephen.s.brennan@xxxxxxxxxx>
> ---
> include/linux/page-flags.h | 15 +++++++++------
> 1 file changed, 9 insertions(+), 6 deletions(-)
>
> diff --git a/include/linux/page-flags.h b/include/linux/page-flags.h
> index 104078afe0b16..64fc191a75e8d 100644
> --- a/include/linux/page-flags.h
> +++ b/include/linux/page-flags.h
> @@ -947,12 +947,15 @@ PAGEFLAG_FALSE(HasHWPoisoned, has_hwpoisoned)
> #define PAGE_TYPE_BASE 0xf0000000
> /* Reserve 0x0000007f to catch underflows of _mapcount */
> #define PAGE_MAPCOUNT_RESERVE -128

Adding linux-debuggers to Cc.

Can we also get PAGE_TYPE_BASE and PAGE_MAPCOUNT_RESERVE as enums? That
would make it possible for debuggers to implement PageType() and
page_has_type().

> -#define PG_buddy 0x00000080
> -#define PG_offline 0x00000100
> -#define PG_table 0x00000200
> -#define PG_guard 0x00000400
> -#define PG_hugetlb 0x00000800
> -#define PG_slab 0x00001000
> +
> +enum page_type {
> + PG_buddy = 0x00000080,
> + PG_offline = 0x00000100,
> + PG_table = 0x00000200,
> + PG_guard = 0x00000400,
> + PG_hugetlb = 0x00000800,
> + PG_slab = 0x00001000,
> +};
>
> #define PageType(page, flag) \
> ((page->page_type & (PAGE_TYPE_BASE | flag)) == PAGE_TYPE_BASE)
> --
> 2.43.0
>