diff mbox series

[2/5] mm: introduce save_page_flags to cooperate with show_page_flags

Message ID 20210714091800.42645-3-songmuchun@bytedance.com (mailing list archive)
State New
Headers show
Series Free the 2nd vmemmap page associated with each HugeTLB page | expand

Commit Message

Muchun Song July 14, 2021, 9:17 a.m. UTC
Introduce save_page_flags to return the page flags which can cooperate
with show_page_flags. If we want to hihe some page flags from users, it
will be useful to alter save_page_flags directly. This is a preparation
for the next patch to hide some page flags from users.

Signed-off-by: Muchun Song <songmuchun@bytedance.com>
---
 include/trace/events/mmflags.h  | 3 +++
 include/trace/events/page_ref.h | 8 ++++----
 2 files changed, 7 insertions(+), 4 deletions(-)

Comments

Mike Kravetz July 26, 2021, 11:18 p.m. UTC | #1
On 7/14/21 2:17 AM, Muchun Song wrote:
> Introduce save_page_flags to return the page flags which can cooperate
> with show_page_flags. If we want to hihe some page flags from users, it
> will be useful to alter save_page_flags directly. This is a preparation
> for the next patch to hide some page flags from users.
> 
> Signed-off-by: Muchun Song <songmuchun@bytedance.com>
> ---
>  include/trace/events/mmflags.h  | 3 +++
>  include/trace/events/page_ref.h | 8 ++++----
>  2 files changed, 7 insertions(+), 4 deletions(-)
> 
> diff --git a/include/trace/events/mmflags.h b/include/trace/events/mmflags.h
> index 390270e00a1d..69cb84b1257e 100644
> --- a/include/trace/events/mmflags.h
> +++ b/include/trace/events/mmflags.h
> @@ -121,6 +121,9 @@ IF_HAVE_PG_IDLE(PG_idle,		"idle"		)		\
>  IF_HAVE_PG_ARCH_2(PG_arch_2,		"arch_2"	)		\
>  IF_HAVE_PG_SKIP_KASAN_POISON(PG_skip_kasan_poison, "skip_kasan_poison")
>  
> +#define save_page_flags(page)						\
> +	(((page)->flags & ~PAGEFLAGS_MASK))
> +

Looking ahead to the next patch, this is changed to hide the PG_head
flag for 'fake' head pages.

IIRC, all vmemmap pages except the first will be mapped read only.  So,
all vmemmap pages with 'fake' head pages will be read only.

It seems that all the modified trace events below are associated with
updates to page structs.  Therefore, it seems these events will never
experience a 'fake' head page.  Am I missing something?
Muchun Song July 27, 2021, 7:06 a.m. UTC | #2
On Tue, Jul 27, 2021 at 7:18 AM Mike Kravetz <mike.kravetz@oracle.com> wrote:
>
> On 7/14/21 2:17 AM, Muchun Song wrote:
> > Introduce save_page_flags to return the page flags which can cooperate
> > with show_page_flags. If we want to hihe some page flags from users, it
> > will be useful to alter save_page_flags directly. This is a preparation
> > for the next patch to hide some page flags from users.
> >
> > Signed-off-by: Muchun Song <songmuchun@bytedance.com>
> > ---
> >  include/trace/events/mmflags.h  | 3 +++
> >  include/trace/events/page_ref.h | 8 ++++----
> >  2 files changed, 7 insertions(+), 4 deletions(-)
> >
> > diff --git a/include/trace/events/mmflags.h b/include/trace/events/mmflags.h
> > index 390270e00a1d..69cb84b1257e 100644
> > --- a/include/trace/events/mmflags.h
> > +++ b/include/trace/events/mmflags.h
> > @@ -121,6 +121,9 @@ IF_HAVE_PG_IDLE(PG_idle,          "idle"          )               \
> >  IF_HAVE_PG_ARCH_2(PG_arch_2,         "arch_2"        )               \
> >  IF_HAVE_PG_SKIP_KASAN_POISON(PG_skip_kasan_poison, "skip_kasan_poison")
> >
> > +#define save_page_flags(page)                                                \
> > +     (((page)->flags & ~PAGEFLAGS_MASK))
> > +
>
> Looking ahead to the next patch, this is changed to hide the PG_head
> flag for 'fake' head pages.
>
> IIRC, all vmemmap pages except the first will be mapped read only.  So,
> all vmemmap pages with 'fake' head pages will be read only.
>
> It seems that all the modified trace events below are associated with
> updates to page structs.  Therefore, it seems these events will never
> experience a 'fake' head page.  Am I missing something?

Totally right. I didn't realize this point before. We cannot see a fake page
struct in page refcount tracing. So this patch is definitely pointless. I'll
drop it in the next version. Thanks Mike.


>
> --
> Mike Kravetz
diff mbox series

Patch

diff --git a/include/trace/events/mmflags.h b/include/trace/events/mmflags.h
index 390270e00a1d..69cb84b1257e 100644
--- a/include/trace/events/mmflags.h
+++ b/include/trace/events/mmflags.h
@@ -121,6 +121,9 @@  IF_HAVE_PG_IDLE(PG_idle,		"idle"		)		\
 IF_HAVE_PG_ARCH_2(PG_arch_2,		"arch_2"	)		\
 IF_HAVE_PG_SKIP_KASAN_POISON(PG_skip_kasan_poison, "skip_kasan_poison")
 
+#define save_page_flags(page)						\
+	(((page)->flags & ~PAGEFLAGS_MASK))
+
 #define show_page_flags(flags)						\
 	(flags) ? __print_flags(flags, "|",				\
 	__def_pageflag_names						\
diff --git a/include/trace/events/page_ref.h b/include/trace/events/page_ref.h
index 643b1b4e9f27..53d303048d27 100644
--- a/include/trace/events/page_ref.h
+++ b/include/trace/events/page_ref.h
@@ -28,7 +28,7 @@  DECLARE_EVENT_CLASS(page_ref_mod_template,
 
 	TP_fast_assign(
 		__entry->pfn = page_to_pfn(page);
-		__entry->flags = page->flags;
+		__entry->flags = save_page_flags(page);
 		__entry->count = page_ref_count(page);
 		__entry->mapcount = page_mapcount(page);
 		__entry->mapping = page->mapping;
@@ -38,7 +38,7 @@  DECLARE_EVENT_CLASS(page_ref_mod_template,
 
 	TP_printk("pfn=0x%lx flags=%s count=%d mapcount=%d mapping=%p mt=%d val=%d",
 		__entry->pfn,
-		show_page_flags(__entry->flags & ~PAGEFLAGS_MASK),
+		show_page_flags(__entry->flags),
 		__entry->count,
 		__entry->mapcount, __entry->mapping, __entry->mt,
 		__entry->val)
@@ -77,7 +77,7 @@  DECLARE_EVENT_CLASS(page_ref_mod_and_test_template,
 
 	TP_fast_assign(
 		__entry->pfn = page_to_pfn(page);
-		__entry->flags = page->flags;
+		__entry->flags = save_page_flags(page);
 		__entry->count = page_ref_count(page);
 		__entry->mapcount = page_mapcount(page);
 		__entry->mapping = page->mapping;
@@ -88,7 +88,7 @@  DECLARE_EVENT_CLASS(page_ref_mod_and_test_template,
 
 	TP_printk("pfn=0x%lx flags=%s count=%d mapcount=%d mapping=%p mt=%d val=%d ret=%d",
 		__entry->pfn,
-		show_page_flags(__entry->flags & ~PAGEFLAGS_MASK),
+		show_page_flags(__entry->flags),
 		__entry->count,
 		__entry->mapcount, __entry->mapping, __entry->mt,
 		__entry->val, __entry->ret)