* [PATCH] mm: convert page type macros to enum
@ 2024-06-06 17:25 Stephen Brennan
2024-06-06 17:34 ` Omar Sandoval
0 siblings, 1 reply; 2+ messages in thread
From: Stephen Brennan @ 2024-06-06 17:25 UTC (permalink / raw)
To: Andrew Morton
Cc: linux-mm, linux-kernel, Stephen Brennan, David Hildenbrand,
Hao Ge, Vlastimil Babka, Vishal Moola (Oracle),
Matthew Wilcox (Oracle),
Omar Sandoval
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@oracle.com>
---
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
-#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
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: [PATCH] mm: convert page type macros to enum
2024-06-06 17:25 [PATCH] mm: convert page type macros to enum Stephen Brennan
@ 2024-06-06 17:34 ` Omar Sandoval
0 siblings, 0 replies; 2+ messages in thread
From: Omar Sandoval @ 2024-06-06 17:34 UTC (permalink / raw)
To: Stephen Brennan
Cc: Andrew Morton, linux-mm, linux-kernel, David Hildenbrand, Hao Ge,
Vlastimil Babka, Vishal Moola (Oracle), Matthew Wilcox (Oracle),
linux-debuggers
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@oracle.com>
> ---
> 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
>
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2024-06-06 17:34 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-06-06 17:25 [PATCH] mm: convert page type macros to enum Stephen Brennan
2024-06-06 17:34 ` Omar Sandoval
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox