Commit 50dbe531 authored by Fan Ni's avatar Fan Ni Committed by Andrew Morton
Browse files

khugepaged: pass folio instead of head page to trace events

The trace functions trace_mm_collapse_huge_page_isolate() and
trace_mm_khugepaged_scan_pmd() each have a single user, which always
passes in the head page of a folio.  Refactor both functions to take a
folio directly.

Link: https://lkml.kernel.org/r/20250425002425.533698-1-nifan.cxl@gmail.com


Signed-off-by: default avatarFan Ni <fan.ni@samsung.com>
Reviewed-by: default avatarNico Pache <npache@redhat.com>
Reviewed-by: default avatarDavidlohr Bueso <dave@stgolabs.net>
Reviewed-by: default avatarBaolin Wang <baolin.wang@linux.alibaba.com>
Reviewed-by: default avatarYang Shi <yang@os.amperecomputing.com>
Acked-by: default avatarDavid Hildenbrand <david@redhat.com>
Reviewed-by: default avatarMatthew Wilcox (Oracle) <willy@infradead.org>
Cc: Adam Manzanares <a.manzanares@samsung.com>
Cc: Luis Chamberalin <mcgrof@kernel.org>
Cc: Mariano Pache <npache@redhat.com>
Cc: "Masami Hiramatsu (Google)" <mhiramat@kernel.org>
Cc: Steven Rostedt <rostedt@goodmis.org>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
parent a4b79af6
Loading
Loading
Loading
Loading
+6 −6
Original line number Diff line number Diff line
@@ -55,10 +55,10 @@ SCAN_STATUS

TRACE_EVENT(mm_khugepaged_scan_pmd,

	TP_PROTO(struct mm_struct *mm, struct page *page, bool writable,
	TP_PROTO(struct mm_struct *mm, struct folio *folio, bool writable,
		 int referenced, int none_or_zero, int status, int unmapped),

	TP_ARGS(mm, page, writable, referenced, none_or_zero, status, unmapped),
	TP_ARGS(mm, folio, writable, referenced, none_or_zero, status, unmapped),

	TP_STRUCT__entry(
		__field(struct mm_struct *, mm)
@@ -72,7 +72,7 @@ TRACE_EVENT(mm_khugepaged_scan_pmd,

	TP_fast_assign(
		__entry->mm = mm;
		__entry->pfn = page ? page_to_pfn(page) : -1;
		__entry->pfn = folio ? folio_pfn(folio) : -1;
		__entry->writable = writable;
		__entry->referenced = referenced;
		__entry->none_or_zero = none_or_zero;
@@ -116,10 +116,10 @@ TRACE_EVENT(mm_collapse_huge_page,

TRACE_EVENT(mm_collapse_huge_page_isolate,

	TP_PROTO(struct page *page, int none_or_zero,
	TP_PROTO(struct folio *folio, int none_or_zero,
		 int referenced, bool  writable, int status),

	TP_ARGS(page, none_or_zero, referenced, writable, status),
	TP_ARGS(folio, none_or_zero, referenced, writable, status),

	TP_STRUCT__entry(
		__field(unsigned long, pfn)
@@ -130,7 +130,7 @@ TRACE_EVENT(mm_collapse_huge_page_isolate,
	),

	TP_fast_assign(
		__entry->pfn = page ? page_to_pfn(page) : -1;
		__entry->pfn = folio ? folio_pfn(folio) : -1;
		__entry->none_or_zero = none_or_zero;
		__entry->referenced = referenced;
		__entry->writable = writable;
+3 −3
Original line number Diff line number Diff line
@@ -696,13 +696,13 @@ static int __collapse_huge_page_isolate(struct vm_area_struct *vma,
		result = SCAN_LACK_REFERENCED_PAGE;
	} else {
		result = SCAN_SUCCEED;
		trace_mm_collapse_huge_page_isolate(&folio->page, none_or_zero,
		trace_mm_collapse_huge_page_isolate(folio, none_or_zero,
						    referenced, writable, result);
		return result;
	}
out:
	release_pte_pages(pte, _pte, compound_pagelist);
	trace_mm_collapse_huge_page_isolate(&folio->page, none_or_zero,
	trace_mm_collapse_huge_page_isolate(folio, none_or_zero,
					    referenced, writable, result);
	return result;
}
@@ -1435,7 +1435,7 @@ static int hpage_collapse_scan_pmd(struct mm_struct *mm,
		*mmap_locked = false;
	}
out:
	trace_mm_khugepaged_scan_pmd(mm, &folio->page, writable, referenced,
	trace_mm_khugepaged_scan_pmd(mm, folio, writable, referenced,
				     none_or_zero, result, unmapped);
	return result;
}