at v6.19-rc4 1.4 kB view raw
1/* SPDX-License-Identifier: GPL-2.0 */ 2 3#ifndef _LINUX_PTDUMP_H 4#define _LINUX_PTDUMP_H 5 6#include <linux/mm_types.h> 7 8struct ptdump_range { 9 unsigned long start; 10 unsigned long end; 11}; 12 13struct ptdump_state { 14 void (*note_page_pte)(struct ptdump_state *st, unsigned long addr, pte_t pte); 15 void (*note_page_pmd)(struct ptdump_state *st, unsigned long addr, pmd_t pmd); 16 void (*note_page_pud)(struct ptdump_state *st, unsigned long addr, pud_t pud); 17 void (*note_page_p4d)(struct ptdump_state *st, unsigned long addr, p4d_t p4d); 18 void (*note_page_pgd)(struct ptdump_state *st, unsigned long addr, pgd_t pgd); 19 void (*note_page_flush)(struct ptdump_state *st); 20 void (*effective_prot_pte)(struct ptdump_state *st, pte_t pte); 21 void (*effective_prot_pmd)(struct ptdump_state *st, pmd_t pmd); 22 void (*effective_prot_pud)(struct ptdump_state *st, pud_t pud); 23 void (*effective_prot_p4d)(struct ptdump_state *st, p4d_t p4d); 24 void (*effective_prot_pgd)(struct ptdump_state *st, pgd_t pgd); 25 const struct ptdump_range *range; 26}; 27 28bool ptdump_walk_pgd_level_core(struct seq_file *m, 29 struct mm_struct *mm, pgd_t *pgd, 30 bool checkwx, bool dmesg); 31void ptdump_walk_pgd(struct ptdump_state *st, struct mm_struct *mm, pgd_t *pgd); 32bool ptdump_check_wx(void); 33 34static inline void debug_checkwx(void) 35{ 36 if (IS_ENABLED(CONFIG_DEBUG_WX)) 37 ptdump_check_wx(); 38} 39 40#endif /* _LINUX_PTDUMP_H */