1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */ 2282a8e03SRoss Zwisler #undef TRACE_SYSTEM 3282a8e03SRoss Zwisler #define TRACE_SYSTEM fs_dax 4282a8e03SRoss Zwisler 5282a8e03SRoss Zwisler #if !defined(_TRACE_FS_DAX_H) || defined(TRACE_HEADER_MULTI_READ) 6282a8e03SRoss Zwisler #define _TRACE_FS_DAX_H 7282a8e03SRoss Zwisler 8282a8e03SRoss Zwisler #include <linux/tracepoint.h> 9282a8e03SRoss Zwisler 10282a8e03SRoss Zwisler DECLARE_EVENT_CLASS(dax_pmd_fault_class, 11f4200391SDave Jiang TP_PROTO(struct inode *inode, struct vm_fault *vmf, 12f4200391SDave Jiang pgoff_t max_pgoff, int result), 13f4200391SDave Jiang TP_ARGS(inode, vmf, max_pgoff, result), 14282a8e03SRoss Zwisler TP_STRUCT__entry( 15282a8e03SRoss Zwisler __field(unsigned long, ino) 16282a8e03SRoss Zwisler __field(unsigned long, vm_start) 17282a8e03SRoss Zwisler __field(unsigned long, vm_end) 18282a8e03SRoss Zwisler __field(unsigned long, vm_flags) 19282a8e03SRoss Zwisler __field(unsigned long, address) 20282a8e03SRoss Zwisler __field(pgoff_t, pgoff) 21282a8e03SRoss Zwisler __field(pgoff_t, max_pgoff) 22282a8e03SRoss Zwisler __field(dev_t, dev) 23282a8e03SRoss Zwisler __field(unsigned int, flags) 24282a8e03SRoss Zwisler __field(int, result) 25282a8e03SRoss Zwisler ), 26282a8e03SRoss Zwisler TP_fast_assign( 27282a8e03SRoss Zwisler __entry->dev = inode->i_sb->s_dev; 28282a8e03SRoss Zwisler __entry->ino = inode->i_ino; 29f4200391SDave Jiang __entry->vm_start = vmf->vma->vm_start; 30f4200391SDave Jiang __entry->vm_end = vmf->vma->vm_end; 31f4200391SDave Jiang __entry->vm_flags = vmf->vma->vm_flags; 32d8a849e1SDave Jiang __entry->address = vmf->address; 33d8a849e1SDave Jiang __entry->flags = vmf->flags; 34d8a849e1SDave Jiang __entry->pgoff = vmf->pgoff; 35282a8e03SRoss Zwisler __entry->max_pgoff = max_pgoff; 36282a8e03SRoss Zwisler __entry->result = result; 37282a8e03SRoss Zwisler ), 38282a8e03SRoss Zwisler TP_printk("dev %d:%d ino %#lx %s %s address %#lx vm_start " 39282a8e03SRoss Zwisler "%#lx vm_end %#lx pgoff %#lx max_pgoff %#lx %s", 40282a8e03SRoss Zwisler MAJOR(__entry->dev), 41282a8e03SRoss Zwisler MINOR(__entry->dev), 42282a8e03SRoss Zwisler __entry->ino, 43282a8e03SRoss Zwisler __entry->vm_flags & VM_SHARED ? "shared" : "private", 44282a8e03SRoss Zwisler __print_flags(__entry->flags, "|", FAULT_FLAG_TRACE), 45282a8e03SRoss Zwisler __entry->address, 46282a8e03SRoss Zwisler __entry->vm_start, 47282a8e03SRoss Zwisler __entry->vm_end, 48282a8e03SRoss Zwisler __entry->pgoff, 49282a8e03SRoss Zwisler __entry->max_pgoff, 50282a8e03SRoss Zwisler __print_flags(__entry->result, "|", VM_FAULT_RESULT_TRACE) 51282a8e03SRoss Zwisler ) 52282a8e03SRoss Zwisler ) 53282a8e03SRoss Zwisler 54282a8e03SRoss Zwisler #define DEFINE_PMD_FAULT_EVENT(name) \ 55282a8e03SRoss Zwisler DEFINE_EVENT(dax_pmd_fault_class, name, \ 56f4200391SDave Jiang TP_PROTO(struct inode *inode, struct vm_fault *vmf, \ 57282a8e03SRoss Zwisler pgoff_t max_pgoff, int result), \ 58f4200391SDave Jiang TP_ARGS(inode, vmf, max_pgoff, result)) 59282a8e03SRoss Zwisler 60282a8e03SRoss Zwisler DEFINE_PMD_FAULT_EVENT(dax_pmd_fault); 61282a8e03SRoss Zwisler DEFINE_PMD_FAULT_EVENT(dax_pmd_fault_done); 62282a8e03SRoss Zwisler 63653b2ea3SRoss Zwisler DECLARE_EVENT_CLASS(dax_pmd_load_hole_class, 64f4200391SDave Jiang TP_PROTO(struct inode *inode, struct vm_fault *vmf, 65f4200391SDave Jiang struct page *zero_page, 66653b2ea3SRoss Zwisler void *radix_entry), 67f4200391SDave Jiang TP_ARGS(inode, vmf, zero_page, radix_entry), 68653b2ea3SRoss Zwisler TP_STRUCT__entry( 69653b2ea3SRoss Zwisler __field(unsigned long, ino) 70653b2ea3SRoss Zwisler __field(unsigned long, vm_flags) 71653b2ea3SRoss Zwisler __field(unsigned long, address) 72653b2ea3SRoss Zwisler __field(struct page *, zero_page) 73653b2ea3SRoss Zwisler __field(void *, radix_entry) 74653b2ea3SRoss Zwisler __field(dev_t, dev) 75653b2ea3SRoss Zwisler ), 76653b2ea3SRoss Zwisler TP_fast_assign( 77653b2ea3SRoss Zwisler __entry->dev = inode->i_sb->s_dev; 78653b2ea3SRoss Zwisler __entry->ino = inode->i_ino; 79f4200391SDave Jiang __entry->vm_flags = vmf->vma->vm_flags; 80f4200391SDave Jiang __entry->address = vmf->address; 81653b2ea3SRoss Zwisler __entry->zero_page = zero_page; 82653b2ea3SRoss Zwisler __entry->radix_entry = radix_entry; 83653b2ea3SRoss Zwisler ), 84653b2ea3SRoss Zwisler TP_printk("dev %d:%d ino %#lx %s address %#lx zero_page %p " 85653b2ea3SRoss Zwisler "radix_entry %#lx", 86653b2ea3SRoss Zwisler MAJOR(__entry->dev), 87653b2ea3SRoss Zwisler MINOR(__entry->dev), 88653b2ea3SRoss Zwisler __entry->ino, 89653b2ea3SRoss Zwisler __entry->vm_flags & VM_SHARED ? "shared" : "private", 90653b2ea3SRoss Zwisler __entry->address, 91653b2ea3SRoss Zwisler __entry->zero_page, 92653b2ea3SRoss Zwisler (unsigned long)__entry->radix_entry 93653b2ea3SRoss Zwisler ) 94653b2ea3SRoss Zwisler ) 95653b2ea3SRoss Zwisler 96653b2ea3SRoss Zwisler #define DEFINE_PMD_LOAD_HOLE_EVENT(name) \ 97653b2ea3SRoss Zwisler DEFINE_EVENT(dax_pmd_load_hole_class, name, \ 98f4200391SDave Jiang TP_PROTO(struct inode *inode, struct vm_fault *vmf, \ 99f4200391SDave Jiang struct page *zero_page, void *radix_entry), \ 100f4200391SDave Jiang TP_ARGS(inode, vmf, zero_page, radix_entry)) 101653b2ea3SRoss Zwisler 102653b2ea3SRoss Zwisler DEFINE_PMD_LOAD_HOLE_EVENT(dax_pmd_load_hole); 103653b2ea3SRoss Zwisler DEFINE_PMD_LOAD_HOLE_EVENT(dax_pmd_load_hole_fallback); 104282a8e03SRoss Zwisler 10527a7ffacSRoss Zwisler DECLARE_EVENT_CLASS(dax_pmd_insert_mapping_class, 106f4200391SDave Jiang TP_PROTO(struct inode *inode, struct vm_fault *vmf, 107f4200391SDave Jiang long length, pfn_t pfn, void *radix_entry), 108f4200391SDave Jiang TP_ARGS(inode, vmf, length, pfn, radix_entry), 10927a7ffacSRoss Zwisler TP_STRUCT__entry( 11027a7ffacSRoss Zwisler __field(unsigned long, ino) 11127a7ffacSRoss Zwisler __field(unsigned long, vm_flags) 11227a7ffacSRoss Zwisler __field(unsigned long, address) 11327a7ffacSRoss Zwisler __field(long, length) 11427a7ffacSRoss Zwisler __field(u64, pfn_val) 11527a7ffacSRoss Zwisler __field(void *, radix_entry) 11627a7ffacSRoss Zwisler __field(dev_t, dev) 11727a7ffacSRoss Zwisler __field(int, write) 11827a7ffacSRoss Zwisler ), 11927a7ffacSRoss Zwisler TP_fast_assign( 12027a7ffacSRoss Zwisler __entry->dev = inode->i_sb->s_dev; 12127a7ffacSRoss Zwisler __entry->ino = inode->i_ino; 122f4200391SDave Jiang __entry->vm_flags = vmf->vma->vm_flags; 123f4200391SDave Jiang __entry->address = vmf->address; 124f4200391SDave Jiang __entry->write = vmf->flags & FAULT_FLAG_WRITE; 12527a7ffacSRoss Zwisler __entry->length = length; 12627a7ffacSRoss Zwisler __entry->pfn_val = pfn.val; 12727a7ffacSRoss Zwisler __entry->radix_entry = radix_entry; 12827a7ffacSRoss Zwisler ), 12927a7ffacSRoss Zwisler TP_printk("dev %d:%d ino %#lx %s %s address %#lx length %#lx " 13027a7ffacSRoss Zwisler "pfn %#llx %s radix_entry %#lx", 13127a7ffacSRoss Zwisler MAJOR(__entry->dev), 13227a7ffacSRoss Zwisler MINOR(__entry->dev), 13327a7ffacSRoss Zwisler __entry->ino, 13427a7ffacSRoss Zwisler __entry->vm_flags & VM_SHARED ? "shared" : "private", 13527a7ffacSRoss Zwisler __entry->write ? "write" : "read", 13627a7ffacSRoss Zwisler __entry->address, 13727a7ffacSRoss Zwisler __entry->length, 13827a7ffacSRoss Zwisler __entry->pfn_val & ~PFN_FLAGS_MASK, 13927a7ffacSRoss Zwisler __print_flags_u64(__entry->pfn_val & PFN_FLAGS_MASK, "|", 14027a7ffacSRoss Zwisler PFN_FLAGS_TRACE), 14127a7ffacSRoss Zwisler (unsigned long)__entry->radix_entry 14227a7ffacSRoss Zwisler ) 14327a7ffacSRoss Zwisler ) 14427a7ffacSRoss Zwisler 14527a7ffacSRoss Zwisler #define DEFINE_PMD_INSERT_MAPPING_EVENT(name) \ 14627a7ffacSRoss Zwisler DEFINE_EVENT(dax_pmd_insert_mapping_class, name, \ 147f4200391SDave Jiang TP_PROTO(struct inode *inode, struct vm_fault *vmf, \ 148f4200391SDave Jiang long length, pfn_t pfn, void *radix_entry), \ 149f4200391SDave Jiang TP_ARGS(inode, vmf, length, pfn, radix_entry)) 15027a7ffacSRoss Zwisler 15127a7ffacSRoss Zwisler DEFINE_PMD_INSERT_MAPPING_EVENT(dax_pmd_insert_mapping); 15227a7ffacSRoss Zwisler 153a9c42b33SRoss Zwisler DECLARE_EVENT_CLASS(dax_pte_fault_class, 154a9c42b33SRoss Zwisler TP_PROTO(struct inode *inode, struct vm_fault *vmf, int result), 155a9c42b33SRoss Zwisler TP_ARGS(inode, vmf, result), 156a9c42b33SRoss Zwisler TP_STRUCT__entry( 157a9c42b33SRoss Zwisler __field(unsigned long, ino) 158a9c42b33SRoss Zwisler __field(unsigned long, vm_flags) 159a9c42b33SRoss Zwisler __field(unsigned long, address) 160a9c42b33SRoss Zwisler __field(pgoff_t, pgoff) 161a9c42b33SRoss Zwisler __field(dev_t, dev) 162a9c42b33SRoss Zwisler __field(unsigned int, flags) 163a9c42b33SRoss Zwisler __field(int, result) 164a9c42b33SRoss Zwisler ), 165a9c42b33SRoss Zwisler TP_fast_assign( 166a9c42b33SRoss Zwisler __entry->dev = inode->i_sb->s_dev; 167a9c42b33SRoss Zwisler __entry->ino = inode->i_ino; 168a9c42b33SRoss Zwisler __entry->vm_flags = vmf->vma->vm_flags; 169a9c42b33SRoss Zwisler __entry->address = vmf->address; 170a9c42b33SRoss Zwisler __entry->flags = vmf->flags; 171a9c42b33SRoss Zwisler __entry->pgoff = vmf->pgoff; 172a9c42b33SRoss Zwisler __entry->result = result; 173a9c42b33SRoss Zwisler ), 174a9c42b33SRoss Zwisler TP_printk("dev %d:%d ino %#lx %s %s address %#lx pgoff %#lx %s", 175a9c42b33SRoss Zwisler MAJOR(__entry->dev), 176a9c42b33SRoss Zwisler MINOR(__entry->dev), 177a9c42b33SRoss Zwisler __entry->ino, 178a9c42b33SRoss Zwisler __entry->vm_flags & VM_SHARED ? "shared" : "private", 179a9c42b33SRoss Zwisler __print_flags(__entry->flags, "|", FAULT_FLAG_TRACE), 180a9c42b33SRoss Zwisler __entry->address, 181a9c42b33SRoss Zwisler __entry->pgoff, 182a9c42b33SRoss Zwisler __print_flags(__entry->result, "|", VM_FAULT_RESULT_TRACE) 183a9c42b33SRoss Zwisler ) 184a9c42b33SRoss Zwisler ) 185a9c42b33SRoss Zwisler 186a9c42b33SRoss Zwisler #define DEFINE_PTE_FAULT_EVENT(name) \ 187a9c42b33SRoss Zwisler DEFINE_EVENT(dax_pte_fault_class, name, \ 188a9c42b33SRoss Zwisler TP_PROTO(struct inode *inode, struct vm_fault *vmf, int result), \ 189a9c42b33SRoss Zwisler TP_ARGS(inode, vmf, result)) 190a9c42b33SRoss Zwisler 191a9c42b33SRoss Zwisler DEFINE_PTE_FAULT_EVENT(dax_pte_fault); 192a9c42b33SRoss Zwisler DEFINE_PTE_FAULT_EVENT(dax_pte_fault_done); 193678c9fd0SRoss Zwisler DEFINE_PTE_FAULT_EVENT(dax_load_hole); 194*71eab6dfSJan Kara DEFINE_PTE_FAULT_EVENT(dax_insert_pfn_mkwrite_no_entry); 195*71eab6dfSJan Kara DEFINE_PTE_FAULT_EVENT(dax_insert_pfn_mkwrite); 196a9c42b33SRoss Zwisler 197b4440734SRoss Zwisler TRACE_EVENT(dax_insert_mapping, 198b4440734SRoss Zwisler TP_PROTO(struct inode *inode, struct vm_fault *vmf, void *radix_entry), 199b4440734SRoss Zwisler TP_ARGS(inode, vmf, radix_entry), 200b4440734SRoss Zwisler TP_STRUCT__entry( 201b4440734SRoss Zwisler __field(unsigned long, ino) 202b4440734SRoss Zwisler __field(unsigned long, vm_flags) 203b4440734SRoss Zwisler __field(unsigned long, address) 204b4440734SRoss Zwisler __field(void *, radix_entry) 205b4440734SRoss Zwisler __field(dev_t, dev) 206b4440734SRoss Zwisler __field(int, write) 207b4440734SRoss Zwisler ), 208b4440734SRoss Zwisler TP_fast_assign( 209b4440734SRoss Zwisler __entry->dev = inode->i_sb->s_dev; 210b4440734SRoss Zwisler __entry->ino = inode->i_ino; 211b4440734SRoss Zwisler __entry->vm_flags = vmf->vma->vm_flags; 212b4440734SRoss Zwisler __entry->address = vmf->address; 213b4440734SRoss Zwisler __entry->write = vmf->flags & FAULT_FLAG_WRITE; 214b4440734SRoss Zwisler __entry->radix_entry = radix_entry; 215b4440734SRoss Zwisler ), 216b4440734SRoss Zwisler TP_printk("dev %d:%d ino %#lx %s %s address %#lx radix_entry %#lx", 217b4440734SRoss Zwisler MAJOR(__entry->dev), 218b4440734SRoss Zwisler MINOR(__entry->dev), 219b4440734SRoss Zwisler __entry->ino, 220b4440734SRoss Zwisler __entry->vm_flags & VM_SHARED ? "shared" : "private", 221b4440734SRoss Zwisler __entry->write ? "write" : "read", 222b4440734SRoss Zwisler __entry->address, 223b4440734SRoss Zwisler (unsigned long)__entry->radix_entry 224b4440734SRoss Zwisler ) 225b4440734SRoss Zwisler ) 226b4440734SRoss Zwisler 227d14a3f48SRoss Zwisler DECLARE_EVENT_CLASS(dax_writeback_range_class, 228d14a3f48SRoss Zwisler TP_PROTO(struct inode *inode, pgoff_t start_index, pgoff_t end_index), 229d14a3f48SRoss Zwisler TP_ARGS(inode, start_index, end_index), 230d14a3f48SRoss Zwisler TP_STRUCT__entry( 231d14a3f48SRoss Zwisler __field(unsigned long, ino) 232d14a3f48SRoss Zwisler __field(pgoff_t, start_index) 233d14a3f48SRoss Zwisler __field(pgoff_t, end_index) 234d14a3f48SRoss Zwisler __field(dev_t, dev) 235d14a3f48SRoss Zwisler ), 236d14a3f48SRoss Zwisler TP_fast_assign( 237d14a3f48SRoss Zwisler __entry->dev = inode->i_sb->s_dev; 238d14a3f48SRoss Zwisler __entry->ino = inode->i_ino; 239d14a3f48SRoss Zwisler __entry->start_index = start_index; 240d14a3f48SRoss Zwisler __entry->end_index = end_index; 241d14a3f48SRoss Zwisler ), 242d14a3f48SRoss Zwisler TP_printk("dev %d:%d ino %#lx pgoff %#lx-%#lx", 243d14a3f48SRoss Zwisler MAJOR(__entry->dev), 244d14a3f48SRoss Zwisler MINOR(__entry->dev), 245d14a3f48SRoss Zwisler __entry->ino, 246d14a3f48SRoss Zwisler __entry->start_index, 247d14a3f48SRoss Zwisler __entry->end_index 248d14a3f48SRoss Zwisler ) 249d14a3f48SRoss Zwisler ) 250d14a3f48SRoss Zwisler 251d14a3f48SRoss Zwisler #define DEFINE_WRITEBACK_RANGE_EVENT(name) \ 252d14a3f48SRoss Zwisler DEFINE_EVENT(dax_writeback_range_class, name, \ 253d14a3f48SRoss Zwisler TP_PROTO(struct inode *inode, pgoff_t start_index, pgoff_t end_index),\ 254d14a3f48SRoss Zwisler TP_ARGS(inode, start_index, end_index)) 255d14a3f48SRoss Zwisler 256d14a3f48SRoss Zwisler DEFINE_WRITEBACK_RANGE_EVENT(dax_writeback_range); 257d14a3f48SRoss Zwisler DEFINE_WRITEBACK_RANGE_EVENT(dax_writeback_range_done); 258d14a3f48SRoss Zwisler 259f9bc3a07SRoss Zwisler TRACE_EVENT(dax_writeback_one, 260f9bc3a07SRoss Zwisler TP_PROTO(struct inode *inode, pgoff_t pgoff, pgoff_t pglen), 261f9bc3a07SRoss Zwisler TP_ARGS(inode, pgoff, pglen), 262f9bc3a07SRoss Zwisler TP_STRUCT__entry( 263f9bc3a07SRoss Zwisler __field(unsigned long, ino) 264f9bc3a07SRoss Zwisler __field(pgoff_t, pgoff) 265f9bc3a07SRoss Zwisler __field(pgoff_t, pglen) 266f9bc3a07SRoss Zwisler __field(dev_t, dev) 267f9bc3a07SRoss Zwisler ), 268f9bc3a07SRoss Zwisler TP_fast_assign( 269f9bc3a07SRoss Zwisler __entry->dev = inode->i_sb->s_dev; 270f9bc3a07SRoss Zwisler __entry->ino = inode->i_ino; 271f9bc3a07SRoss Zwisler __entry->pgoff = pgoff; 272f9bc3a07SRoss Zwisler __entry->pglen = pglen; 273f9bc3a07SRoss Zwisler ), 274f9bc3a07SRoss Zwisler TP_printk("dev %d:%d ino %#lx pgoff %#lx pglen %#lx", 275f9bc3a07SRoss Zwisler MAJOR(__entry->dev), 276f9bc3a07SRoss Zwisler MINOR(__entry->dev), 277f9bc3a07SRoss Zwisler __entry->ino, 278f9bc3a07SRoss Zwisler __entry->pgoff, 279f9bc3a07SRoss Zwisler __entry->pglen 280f9bc3a07SRoss Zwisler ) 281f9bc3a07SRoss Zwisler ) 282f9bc3a07SRoss Zwisler 283282a8e03SRoss Zwisler #endif /* _TRACE_FS_DAX_H */ 284282a8e03SRoss Zwisler 285282a8e03SRoss Zwisler /* This part must be outside protection */ 286282a8e03SRoss Zwisler #include <trace/define_trace.h> 287