1282a8e03SRoss Zwisler #undef TRACE_SYSTEM 2282a8e03SRoss Zwisler #define TRACE_SYSTEM fs_dax 3282a8e03SRoss Zwisler 4282a8e03SRoss Zwisler #if !defined(_TRACE_FS_DAX_H) || defined(TRACE_HEADER_MULTI_READ) 5282a8e03SRoss Zwisler #define _TRACE_FS_DAX_H 6282a8e03SRoss Zwisler 7282a8e03SRoss Zwisler #include <linux/tracepoint.h> 8282a8e03SRoss Zwisler 9282a8e03SRoss Zwisler DECLARE_EVENT_CLASS(dax_pmd_fault_class, 10282a8e03SRoss Zwisler TP_PROTO(struct inode *inode, struct vm_area_struct *vma, 11d8a849e1SDave Jiang struct vm_fault *vmf, pgoff_t max_pgoff, int result), 12d8a849e1SDave Jiang TP_ARGS(inode, vma, vmf, max_pgoff, result), 13282a8e03SRoss Zwisler TP_STRUCT__entry( 14282a8e03SRoss Zwisler __field(unsigned long, ino) 15282a8e03SRoss Zwisler __field(unsigned long, vm_start) 16282a8e03SRoss Zwisler __field(unsigned long, vm_end) 17282a8e03SRoss Zwisler __field(unsigned long, vm_flags) 18282a8e03SRoss Zwisler __field(unsigned long, address) 19282a8e03SRoss Zwisler __field(pgoff_t, pgoff) 20282a8e03SRoss Zwisler __field(pgoff_t, max_pgoff) 21282a8e03SRoss Zwisler __field(dev_t, dev) 22282a8e03SRoss Zwisler __field(unsigned int, flags) 23282a8e03SRoss Zwisler __field(int, result) 24282a8e03SRoss Zwisler ), 25282a8e03SRoss Zwisler TP_fast_assign( 26282a8e03SRoss Zwisler __entry->dev = inode->i_sb->s_dev; 27282a8e03SRoss Zwisler __entry->ino = inode->i_ino; 28282a8e03SRoss Zwisler __entry->vm_start = vma->vm_start; 29282a8e03SRoss Zwisler __entry->vm_end = vma->vm_end; 30282a8e03SRoss Zwisler __entry->vm_flags = vma->vm_flags; 31d8a849e1SDave Jiang __entry->address = vmf->address; 32d8a849e1SDave Jiang __entry->flags = vmf->flags; 33d8a849e1SDave Jiang __entry->pgoff = vmf->pgoff; 34282a8e03SRoss Zwisler __entry->max_pgoff = max_pgoff; 35282a8e03SRoss Zwisler __entry->result = result; 36282a8e03SRoss Zwisler ), 37282a8e03SRoss Zwisler TP_printk("dev %d:%d ino %#lx %s %s address %#lx vm_start " 38282a8e03SRoss Zwisler "%#lx vm_end %#lx pgoff %#lx max_pgoff %#lx %s", 39282a8e03SRoss Zwisler MAJOR(__entry->dev), 40282a8e03SRoss Zwisler MINOR(__entry->dev), 41282a8e03SRoss Zwisler __entry->ino, 42282a8e03SRoss Zwisler __entry->vm_flags & VM_SHARED ? "shared" : "private", 43282a8e03SRoss Zwisler __print_flags(__entry->flags, "|", FAULT_FLAG_TRACE), 44282a8e03SRoss Zwisler __entry->address, 45282a8e03SRoss Zwisler __entry->vm_start, 46282a8e03SRoss Zwisler __entry->vm_end, 47282a8e03SRoss Zwisler __entry->pgoff, 48282a8e03SRoss Zwisler __entry->max_pgoff, 49282a8e03SRoss Zwisler __print_flags(__entry->result, "|", VM_FAULT_RESULT_TRACE) 50282a8e03SRoss Zwisler ) 51282a8e03SRoss Zwisler ) 52282a8e03SRoss Zwisler 53282a8e03SRoss Zwisler #define DEFINE_PMD_FAULT_EVENT(name) \ 54282a8e03SRoss Zwisler DEFINE_EVENT(dax_pmd_fault_class, name, \ 55282a8e03SRoss Zwisler TP_PROTO(struct inode *inode, struct vm_area_struct *vma, \ 56d8a849e1SDave Jiang struct vm_fault *vmf, \ 57282a8e03SRoss Zwisler pgoff_t max_pgoff, int result), \ 58d8a849e1SDave Jiang TP_ARGS(inode, vma, 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, 64653b2ea3SRoss Zwisler TP_PROTO(struct inode *inode, struct vm_area_struct *vma, 65653b2ea3SRoss Zwisler unsigned long address, struct page *zero_page, 66653b2ea3SRoss Zwisler void *radix_entry), 67653b2ea3SRoss Zwisler TP_ARGS(inode, vma, address, 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; 79653b2ea3SRoss Zwisler __entry->vm_flags = vma->vm_flags; 80653b2ea3SRoss Zwisler __entry->address = 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, \ 98653b2ea3SRoss Zwisler TP_PROTO(struct inode *inode, struct vm_area_struct *vma, \ 99653b2ea3SRoss Zwisler unsigned long address, struct page *zero_page, \ 100653b2ea3SRoss Zwisler void *radix_entry), \ 101653b2ea3SRoss Zwisler TP_ARGS(inode, vma, address, zero_page, radix_entry)) 102653b2ea3SRoss Zwisler 103653b2ea3SRoss Zwisler DEFINE_PMD_LOAD_HOLE_EVENT(dax_pmd_load_hole); 104653b2ea3SRoss Zwisler DEFINE_PMD_LOAD_HOLE_EVENT(dax_pmd_load_hole_fallback); 105282a8e03SRoss Zwisler 10627a7ffacSRoss Zwisler DECLARE_EVENT_CLASS(dax_pmd_insert_mapping_class, 10727a7ffacSRoss Zwisler TP_PROTO(struct inode *inode, struct vm_area_struct *vma, 10827a7ffacSRoss Zwisler unsigned long address, int write, long length, pfn_t pfn, 10927a7ffacSRoss Zwisler void *radix_entry), 11027a7ffacSRoss Zwisler TP_ARGS(inode, vma, address, write, length, pfn, radix_entry), 11127a7ffacSRoss Zwisler TP_STRUCT__entry( 11227a7ffacSRoss Zwisler __field(unsigned long, ino) 11327a7ffacSRoss Zwisler __field(unsigned long, vm_flags) 11427a7ffacSRoss Zwisler __field(unsigned long, address) 11527a7ffacSRoss Zwisler __field(long, length) 11627a7ffacSRoss Zwisler __field(u64, pfn_val) 11727a7ffacSRoss Zwisler __field(void *, radix_entry) 11827a7ffacSRoss Zwisler __field(dev_t, dev) 11927a7ffacSRoss Zwisler __field(int, write) 12027a7ffacSRoss Zwisler ), 12127a7ffacSRoss Zwisler TP_fast_assign( 12227a7ffacSRoss Zwisler __entry->dev = inode->i_sb->s_dev; 12327a7ffacSRoss Zwisler __entry->ino = inode->i_ino; 12427a7ffacSRoss Zwisler __entry->vm_flags = vma->vm_flags; 12527a7ffacSRoss Zwisler __entry->address = address; 12627a7ffacSRoss Zwisler __entry->write = write; 12727a7ffacSRoss Zwisler __entry->length = length; 12827a7ffacSRoss Zwisler __entry->pfn_val = pfn.val; 12927a7ffacSRoss Zwisler __entry->radix_entry = radix_entry; 13027a7ffacSRoss Zwisler ), 13127a7ffacSRoss Zwisler TP_printk("dev %d:%d ino %#lx %s %s address %#lx length %#lx " 13227a7ffacSRoss Zwisler "pfn %#llx %s radix_entry %#lx", 13327a7ffacSRoss Zwisler MAJOR(__entry->dev), 13427a7ffacSRoss Zwisler MINOR(__entry->dev), 13527a7ffacSRoss Zwisler __entry->ino, 13627a7ffacSRoss Zwisler __entry->vm_flags & VM_SHARED ? "shared" : "private", 13727a7ffacSRoss Zwisler __entry->write ? "write" : "read", 13827a7ffacSRoss Zwisler __entry->address, 13927a7ffacSRoss Zwisler __entry->length, 14027a7ffacSRoss Zwisler __entry->pfn_val & ~PFN_FLAGS_MASK, 14127a7ffacSRoss Zwisler __print_flags_u64(__entry->pfn_val & PFN_FLAGS_MASK, "|", 14227a7ffacSRoss Zwisler PFN_FLAGS_TRACE), 14327a7ffacSRoss Zwisler (unsigned long)__entry->radix_entry 14427a7ffacSRoss Zwisler ) 14527a7ffacSRoss Zwisler ) 14627a7ffacSRoss Zwisler 14727a7ffacSRoss Zwisler #define DEFINE_PMD_INSERT_MAPPING_EVENT(name) \ 14827a7ffacSRoss Zwisler DEFINE_EVENT(dax_pmd_insert_mapping_class, name, \ 14927a7ffacSRoss Zwisler TP_PROTO(struct inode *inode, struct vm_area_struct *vma, \ 15027a7ffacSRoss Zwisler unsigned long address, int write, long length, pfn_t pfn, \ 15127a7ffacSRoss Zwisler void *radix_entry), \ 15227a7ffacSRoss Zwisler TP_ARGS(inode, vma, address, write, length, pfn, radix_entry)) 15327a7ffacSRoss Zwisler 15427a7ffacSRoss Zwisler DEFINE_PMD_INSERT_MAPPING_EVENT(dax_pmd_insert_mapping); 15527a7ffacSRoss Zwisler DEFINE_PMD_INSERT_MAPPING_EVENT(dax_pmd_insert_mapping_fallback); 15627a7ffacSRoss Zwisler 157282a8e03SRoss Zwisler #endif /* _TRACE_FS_DAX_H */ 158282a8e03SRoss Zwisler 159282a8e03SRoss Zwisler /* This part must be outside protection */ 160282a8e03SRoss Zwisler #include <trace/define_trace.h> 161