#undef TRACE_SYSTEM #define TRACE_SYSTEM fs_dax #if !defined(_TRACE_FS_DAX_H) || defined(TRACE_HEADER_MULTI_READ) #define _TRACE_FS_DAX_H #include DECLARE_EVENT_CLASS(dax_pmd_fault_class, TP_PROTO(struct inode *inode, struct vm_area_struct *vma, struct vm_fault *vmf, pgoff_t max_pgoff, int result), TP_ARGS(inode, vma, vmf, max_pgoff, result), TP_STRUCT__entry( __field(unsigned long, ino) __field(unsigned long, vm_start) __field(unsigned long, vm_end) __field(unsigned long, vm_flags) __field(unsigned long, address) __field(pgoff_t, pgoff) __field(pgoff_t, max_pgoff) __field(dev_t, dev) __field(unsigned int, flags) __field(int, result) ), TP_fast_assign( __entry->dev = inode->i_sb->s_dev; __entry->ino = inode->i_ino; __entry->vm_start = vma->vm_start; __entry->vm_end = vma->vm_end; __entry->vm_flags = vma->vm_flags; __entry->address = vmf->address; __entry->flags = vmf->flags; __entry->pgoff = vmf->pgoff; __entry->max_pgoff = max_pgoff; __entry->result = result; ), TP_printk("dev %d:%d ino %#lx %s %s address %#lx vm_start " "%#lx vm_end %#lx pgoff %#lx max_pgoff %#lx %s", MAJOR(__entry->dev), MINOR(__entry->dev), __entry->ino, __entry->vm_flags & VM_SHARED ? "shared" : "private", __print_flags(__entry->flags, "|", FAULT_FLAG_TRACE), __entry->address, __entry->vm_start, __entry->vm_end, __entry->pgoff, __entry->max_pgoff, __print_flags(__entry->result, "|", VM_FAULT_RESULT_TRACE) ) ) #define DEFINE_PMD_FAULT_EVENT(name) \ DEFINE_EVENT(dax_pmd_fault_class, name, \ TP_PROTO(struct inode *inode, struct vm_area_struct *vma, \ struct vm_fault *vmf, \ pgoff_t max_pgoff, int result), \ TP_ARGS(inode, vma, vmf, max_pgoff, result)) DEFINE_PMD_FAULT_EVENT(dax_pmd_fault); DEFINE_PMD_FAULT_EVENT(dax_pmd_fault_done); DECLARE_EVENT_CLASS(dax_pmd_load_hole_class, TP_PROTO(struct inode *inode, struct vm_area_struct *vma, unsigned long address, struct page *zero_page, void *radix_entry), TP_ARGS(inode, vma, address, zero_page, radix_entry), TP_STRUCT__entry( __field(unsigned long, ino) __field(unsigned long, vm_flags) __field(unsigned long, address) __field(struct page *, zero_page) __field(void *, radix_entry) __field(dev_t, dev) ), TP_fast_assign( __entry->dev = inode->i_sb->s_dev; __entry->ino = inode->i_ino; __entry->vm_flags = vma->vm_flags; __entry->address = address; __entry->zero_page = zero_page; __entry->radix_entry = radix_entry; ), TP_printk("dev %d:%d ino %#lx %s address %#lx zero_page %p " "radix_entry %#lx", MAJOR(__entry->dev), MINOR(__entry->dev), __entry->ino, __entry->vm_flags & VM_SHARED ? "shared" : "private", __entry->address, __entry->zero_page, (unsigned long)__entry->radix_entry ) ) #define DEFINE_PMD_LOAD_HOLE_EVENT(name) \ DEFINE_EVENT(dax_pmd_load_hole_class, name, \ TP_PROTO(struct inode *inode, struct vm_area_struct *vma, \ unsigned long address, struct page *zero_page, \ void *radix_entry), \ TP_ARGS(inode, vma, address, zero_page, radix_entry)) DEFINE_PMD_LOAD_HOLE_EVENT(dax_pmd_load_hole); DEFINE_PMD_LOAD_HOLE_EVENT(dax_pmd_load_hole_fallback); DECLARE_EVENT_CLASS(dax_pmd_insert_mapping_class, TP_PROTO(struct inode *inode, struct vm_area_struct *vma, unsigned long address, int write, long length, pfn_t pfn, void *radix_entry), TP_ARGS(inode, vma, address, write, length, pfn, radix_entry), TP_STRUCT__entry( __field(unsigned long, ino) __field(unsigned long, vm_flags) __field(unsigned long, address) __field(long, length) __field(u64, pfn_val) __field(void *, radix_entry) __field(dev_t, dev) __field(int, write) ), TP_fast_assign( __entry->dev = inode->i_sb->s_dev; __entry->ino = inode->i_ino; __entry->vm_flags = vma->vm_flags; __entry->address = address; __entry->write = write; __entry->length = length; __entry->pfn_val = pfn.val; __entry->radix_entry = radix_entry; ), TP_printk("dev %d:%d ino %#lx %s %s address %#lx length %#lx " "pfn %#llx %s radix_entry %#lx", MAJOR(__entry->dev), MINOR(__entry->dev), __entry->ino, __entry->vm_flags & VM_SHARED ? "shared" : "private", __entry->write ? "write" : "read", __entry->address, __entry->length, __entry->pfn_val & ~PFN_FLAGS_MASK, __print_flags_u64(__entry->pfn_val & PFN_FLAGS_MASK, "|", PFN_FLAGS_TRACE), (unsigned long)__entry->radix_entry ) ) #define DEFINE_PMD_INSERT_MAPPING_EVENT(name) \ DEFINE_EVENT(dax_pmd_insert_mapping_class, name, \ TP_PROTO(struct inode *inode, struct vm_area_struct *vma, \ unsigned long address, int write, long length, pfn_t pfn, \ void *radix_entry), \ TP_ARGS(inode, vma, address, write, length, pfn, radix_entry)) DEFINE_PMD_INSERT_MAPPING_EVENT(dax_pmd_insert_mapping); DEFINE_PMD_INSERT_MAPPING_EVENT(dax_pmd_insert_mapping_fallback); #endif /* _TRACE_FS_DAX_H */ /* This part must be outside protection */ #include