Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

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: Fan Ni <fan.ni@samsung.com>
Reviewed-by: Nico Pache <npache@redhat.com>
Reviewed-by: Davidlohr Bueso <dave@stgolabs.net>
Reviewed-by: Baolin Wang <baolin.wang@linux.alibaba.com>
Reviewed-by: Yang Shi <yang@os.amperecomputing.com>
Acked-by: David Hildenbrand <david@redhat.com>
Reviewed-by: Matthew 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: Andrew Morton <akpm@linux-foundation.org>

authored by

Fan Ni and committed by
Andrew Morton
50dbe531 a4b79af6

+9 -9
+6 -6
include/trace/events/huge_memory.h
··· 55 55 56 56 TRACE_EVENT(mm_khugepaged_scan_pmd, 57 57 58 - TP_PROTO(struct mm_struct *mm, struct page *page, bool writable, 58 + TP_PROTO(struct mm_struct *mm, struct folio *folio, bool writable, 59 59 int referenced, int none_or_zero, int status, int unmapped), 60 60 61 - TP_ARGS(mm, page, writable, referenced, none_or_zero, status, unmapped), 61 + TP_ARGS(mm, folio, writable, referenced, none_or_zero, status, unmapped), 62 62 63 63 TP_STRUCT__entry( 64 64 __field(struct mm_struct *, mm) ··· 72 72 73 73 TP_fast_assign( 74 74 __entry->mm = mm; 75 - __entry->pfn = page ? page_to_pfn(page) : -1; 75 + __entry->pfn = folio ? folio_pfn(folio) : -1; 76 76 __entry->writable = writable; 77 77 __entry->referenced = referenced; 78 78 __entry->none_or_zero = none_or_zero; ··· 116 116 117 117 TRACE_EVENT(mm_collapse_huge_page_isolate, 118 118 119 - TP_PROTO(struct page *page, int none_or_zero, 119 + TP_PROTO(struct folio *folio, int none_or_zero, 120 120 int referenced, bool writable, int status), 121 121 122 - TP_ARGS(page, none_or_zero, referenced, writable, status), 122 + TP_ARGS(folio, none_or_zero, referenced, writable, status), 123 123 124 124 TP_STRUCT__entry( 125 125 __field(unsigned long, pfn) ··· 130 130 ), 131 131 132 132 TP_fast_assign( 133 - __entry->pfn = page ? page_to_pfn(page) : -1; 133 + __entry->pfn = folio ? folio_pfn(folio) : -1; 134 134 __entry->none_or_zero = none_or_zero; 135 135 __entry->referenced = referenced; 136 136 __entry->writable = writable;
+3 -3
mm/khugepaged.c
··· 696 696 result = SCAN_LACK_REFERENCED_PAGE; 697 697 } else { 698 698 result = SCAN_SUCCEED; 699 - trace_mm_collapse_huge_page_isolate(&folio->page, none_or_zero, 699 + trace_mm_collapse_huge_page_isolate(folio, none_or_zero, 700 700 referenced, writable, result); 701 701 return result; 702 702 } 703 703 out: 704 704 release_pte_pages(pte, _pte, compound_pagelist); 705 - trace_mm_collapse_huge_page_isolate(&folio->page, none_or_zero, 705 + trace_mm_collapse_huge_page_isolate(folio, none_or_zero, 706 706 referenced, writable, result); 707 707 return result; 708 708 } ··· 1435 1435 *mmap_locked = false; 1436 1436 } 1437 1437 out: 1438 - trace_mm_khugepaged_scan_pmd(mm, &folio->page, writable, referenced, 1438 + trace_mm_khugepaged_scan_pmd(mm, folio, writable, referenced, 1439 1439 none_or_zero, result, unmapped); 1440 1440 return result; 1441 1441 }