cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

fs_dax.h (8456B)


      1/* SPDX-License-Identifier: GPL-2.0 */
      2#undef TRACE_SYSTEM
      3#define TRACE_SYSTEM fs_dax
      4
      5#if !defined(_TRACE_FS_DAX_H) || defined(TRACE_HEADER_MULTI_READ)
      6#define _TRACE_FS_DAX_H
      7
      8#include <linux/tracepoint.h>
      9
     10DECLARE_EVENT_CLASS(dax_pmd_fault_class,
     11	TP_PROTO(struct inode *inode, struct vm_fault *vmf,
     12		pgoff_t max_pgoff, int result),
     13	TP_ARGS(inode, vmf, max_pgoff, result),
     14	TP_STRUCT__entry(
     15		__field(unsigned long, ino)
     16		__field(unsigned long, vm_start)
     17		__field(unsigned long, vm_end)
     18		__field(unsigned long, vm_flags)
     19		__field(unsigned long, address)
     20		__field(pgoff_t, pgoff)
     21		__field(pgoff_t, max_pgoff)
     22		__field(dev_t, dev)
     23		__field(unsigned int, flags)
     24		__field(int, result)
     25	),
     26	TP_fast_assign(
     27		__entry->dev = inode->i_sb->s_dev;
     28		__entry->ino = inode->i_ino;
     29		__entry->vm_start = vmf->vma->vm_start;
     30		__entry->vm_end = vmf->vma->vm_end;
     31		__entry->vm_flags = vmf->vma->vm_flags;
     32		__entry->address = vmf->address;
     33		__entry->flags = vmf->flags;
     34		__entry->pgoff = vmf->pgoff;
     35		__entry->max_pgoff = max_pgoff;
     36		__entry->result = result;
     37	),
     38	TP_printk("dev %d:%d ino %#lx %s %s address %#lx vm_start "
     39			"%#lx vm_end %#lx pgoff %#lx max_pgoff %#lx %s",
     40		MAJOR(__entry->dev),
     41		MINOR(__entry->dev),
     42		__entry->ino,
     43		__entry->vm_flags & VM_SHARED ? "shared" : "private",
     44		__print_flags(__entry->flags, "|", FAULT_FLAG_TRACE),
     45		__entry->address,
     46		__entry->vm_start,
     47		__entry->vm_end,
     48		__entry->pgoff,
     49		__entry->max_pgoff,
     50		__print_flags(__entry->result, "|", VM_FAULT_RESULT_TRACE)
     51	)
     52)
     53
     54#define DEFINE_PMD_FAULT_EVENT(name) \
     55DEFINE_EVENT(dax_pmd_fault_class, name, \
     56	TP_PROTO(struct inode *inode, struct vm_fault *vmf, \
     57		pgoff_t max_pgoff, int result), \
     58	TP_ARGS(inode, vmf, max_pgoff, result))
     59
     60DEFINE_PMD_FAULT_EVENT(dax_pmd_fault);
     61DEFINE_PMD_FAULT_EVENT(dax_pmd_fault_done);
     62
     63DECLARE_EVENT_CLASS(dax_pmd_load_hole_class,
     64	TP_PROTO(struct inode *inode, struct vm_fault *vmf,
     65		struct page *zero_page,
     66		void *radix_entry),
     67	TP_ARGS(inode, vmf, zero_page, radix_entry),
     68	TP_STRUCT__entry(
     69		__field(unsigned long, ino)
     70		__field(unsigned long, vm_flags)
     71		__field(unsigned long, address)
     72		__field(struct page *, zero_page)
     73		__field(void *, radix_entry)
     74		__field(dev_t, dev)
     75	),
     76	TP_fast_assign(
     77		__entry->dev = inode->i_sb->s_dev;
     78		__entry->ino = inode->i_ino;
     79		__entry->vm_flags = vmf->vma->vm_flags;
     80		__entry->address = vmf->address;
     81		__entry->zero_page = zero_page;
     82		__entry->radix_entry = radix_entry;
     83	),
     84	TP_printk("dev %d:%d ino %#lx %s address %#lx zero_page %p "
     85			"radix_entry %#lx",
     86		MAJOR(__entry->dev),
     87		MINOR(__entry->dev),
     88		__entry->ino,
     89		__entry->vm_flags & VM_SHARED ? "shared" : "private",
     90		__entry->address,
     91		__entry->zero_page,
     92		(unsigned long)__entry->radix_entry
     93	)
     94)
     95
     96#define DEFINE_PMD_LOAD_HOLE_EVENT(name) \
     97DEFINE_EVENT(dax_pmd_load_hole_class, name, \
     98	TP_PROTO(struct inode *inode, struct vm_fault *vmf, \
     99		struct page *zero_page, void *radix_entry), \
    100	TP_ARGS(inode, vmf, zero_page, radix_entry))
    101
    102DEFINE_PMD_LOAD_HOLE_EVENT(dax_pmd_load_hole);
    103DEFINE_PMD_LOAD_HOLE_EVENT(dax_pmd_load_hole_fallback);
    104
    105DECLARE_EVENT_CLASS(dax_pmd_insert_mapping_class,
    106	TP_PROTO(struct inode *inode, struct vm_fault *vmf,
    107		long length, pfn_t pfn, void *radix_entry),
    108	TP_ARGS(inode, vmf, length, pfn, radix_entry),
    109	TP_STRUCT__entry(
    110		__field(unsigned long, ino)
    111		__field(unsigned long, vm_flags)
    112		__field(unsigned long, address)
    113		__field(long, length)
    114		__field(u64, pfn_val)
    115		__field(void *, radix_entry)
    116		__field(dev_t, dev)
    117		__field(int, write)
    118	),
    119	TP_fast_assign(
    120		__entry->dev = inode->i_sb->s_dev;
    121		__entry->ino = inode->i_ino;
    122		__entry->vm_flags = vmf->vma->vm_flags;
    123		__entry->address = vmf->address;
    124		__entry->write = vmf->flags & FAULT_FLAG_WRITE;
    125		__entry->length = length;
    126		__entry->pfn_val = pfn.val;
    127		__entry->radix_entry = radix_entry;
    128	),
    129	TP_printk("dev %d:%d ino %#lx %s %s address %#lx length %#lx "
    130			"pfn %#llx %s radix_entry %#lx",
    131		MAJOR(__entry->dev),
    132		MINOR(__entry->dev),
    133		__entry->ino,
    134		__entry->vm_flags & VM_SHARED ? "shared" : "private",
    135		__entry->write ? "write" : "read",
    136		__entry->address,
    137		__entry->length,
    138		__entry->pfn_val & ~PFN_FLAGS_MASK,
    139		__print_flags_u64(__entry->pfn_val & PFN_FLAGS_MASK, "|",
    140			PFN_FLAGS_TRACE),
    141		(unsigned long)__entry->radix_entry
    142	)
    143)
    144
    145#define DEFINE_PMD_INSERT_MAPPING_EVENT(name) \
    146DEFINE_EVENT(dax_pmd_insert_mapping_class, name, \
    147	TP_PROTO(struct inode *inode, struct vm_fault *vmf, \
    148		long length, pfn_t pfn, void *radix_entry), \
    149	TP_ARGS(inode, vmf, length, pfn, radix_entry))
    150
    151DEFINE_PMD_INSERT_MAPPING_EVENT(dax_pmd_insert_mapping);
    152
    153DECLARE_EVENT_CLASS(dax_pte_fault_class,
    154	TP_PROTO(struct inode *inode, struct vm_fault *vmf, int result),
    155	TP_ARGS(inode, vmf, result),
    156	TP_STRUCT__entry(
    157		__field(unsigned long, ino)
    158		__field(unsigned long, vm_flags)
    159		__field(unsigned long, address)
    160		__field(pgoff_t, pgoff)
    161		__field(dev_t, dev)
    162		__field(unsigned int, flags)
    163		__field(int, result)
    164	),
    165	TP_fast_assign(
    166		__entry->dev = inode->i_sb->s_dev;
    167		__entry->ino = inode->i_ino;
    168		__entry->vm_flags = vmf->vma->vm_flags;
    169		__entry->address = vmf->address;
    170		__entry->flags = vmf->flags;
    171		__entry->pgoff = vmf->pgoff;
    172		__entry->result = result;
    173	),
    174	TP_printk("dev %d:%d ino %#lx %s %s address %#lx pgoff %#lx %s",
    175		MAJOR(__entry->dev),
    176		MINOR(__entry->dev),
    177		__entry->ino,
    178		__entry->vm_flags & VM_SHARED ? "shared" : "private",
    179		__print_flags(__entry->flags, "|", FAULT_FLAG_TRACE),
    180		__entry->address,
    181		__entry->pgoff,
    182		__print_flags(__entry->result, "|", VM_FAULT_RESULT_TRACE)
    183	)
    184)
    185
    186#define DEFINE_PTE_FAULT_EVENT(name) \
    187DEFINE_EVENT(dax_pte_fault_class, name, \
    188	TP_PROTO(struct inode *inode, struct vm_fault *vmf, int result), \
    189	TP_ARGS(inode, vmf, result))
    190
    191DEFINE_PTE_FAULT_EVENT(dax_pte_fault);
    192DEFINE_PTE_FAULT_EVENT(dax_pte_fault_done);
    193DEFINE_PTE_FAULT_EVENT(dax_load_hole);
    194DEFINE_PTE_FAULT_EVENT(dax_insert_pfn_mkwrite_no_entry);
    195DEFINE_PTE_FAULT_EVENT(dax_insert_pfn_mkwrite);
    196
    197TRACE_EVENT(dax_insert_mapping,
    198	TP_PROTO(struct inode *inode, struct vm_fault *vmf, void *radix_entry),
    199	TP_ARGS(inode, vmf, radix_entry),
    200	TP_STRUCT__entry(
    201		__field(unsigned long, ino)
    202		__field(unsigned long, vm_flags)
    203		__field(unsigned long, address)
    204		__field(void *, radix_entry)
    205		__field(dev_t, dev)
    206		__field(int, write)
    207	),
    208	TP_fast_assign(
    209		__entry->dev = inode->i_sb->s_dev;
    210		__entry->ino = inode->i_ino;
    211		__entry->vm_flags = vmf->vma->vm_flags;
    212		__entry->address = vmf->address;
    213		__entry->write = vmf->flags & FAULT_FLAG_WRITE;
    214		__entry->radix_entry = radix_entry;
    215	),
    216	TP_printk("dev %d:%d ino %#lx %s %s address %#lx radix_entry %#lx",
    217		MAJOR(__entry->dev),
    218		MINOR(__entry->dev),
    219		__entry->ino,
    220		__entry->vm_flags & VM_SHARED ? "shared" : "private",
    221		__entry->write ? "write" : "read",
    222		__entry->address,
    223		(unsigned long)__entry->radix_entry
    224	)
    225)
    226
    227DECLARE_EVENT_CLASS(dax_writeback_range_class,
    228	TP_PROTO(struct inode *inode, pgoff_t start_index, pgoff_t end_index),
    229	TP_ARGS(inode, start_index, end_index),
    230	TP_STRUCT__entry(
    231		__field(unsigned long, ino)
    232		__field(pgoff_t, start_index)
    233		__field(pgoff_t, end_index)
    234		__field(dev_t, dev)
    235	),
    236	TP_fast_assign(
    237		__entry->dev = inode->i_sb->s_dev;
    238		__entry->ino = inode->i_ino;
    239		__entry->start_index = start_index;
    240		__entry->end_index = end_index;
    241	),
    242	TP_printk("dev %d:%d ino %#lx pgoff %#lx-%#lx",
    243		MAJOR(__entry->dev),
    244		MINOR(__entry->dev),
    245		__entry->ino,
    246		__entry->start_index,
    247		__entry->end_index
    248	)
    249)
    250
    251#define DEFINE_WRITEBACK_RANGE_EVENT(name) \
    252DEFINE_EVENT(dax_writeback_range_class, name, \
    253	TP_PROTO(struct inode *inode, pgoff_t start_index, pgoff_t end_index),\
    254	TP_ARGS(inode, start_index, end_index))
    255
    256DEFINE_WRITEBACK_RANGE_EVENT(dax_writeback_range);
    257DEFINE_WRITEBACK_RANGE_EVENT(dax_writeback_range_done);
    258
    259TRACE_EVENT(dax_writeback_one,
    260	TP_PROTO(struct inode *inode, pgoff_t pgoff, pgoff_t pglen),
    261	TP_ARGS(inode, pgoff, pglen),
    262	TP_STRUCT__entry(
    263		__field(unsigned long, ino)
    264		__field(pgoff_t, pgoff)
    265		__field(pgoff_t, pglen)
    266		__field(dev_t, dev)
    267	),
    268	TP_fast_assign(
    269		__entry->dev = inode->i_sb->s_dev;
    270		__entry->ino = inode->i_ino;
    271		__entry->pgoff = pgoff;
    272		__entry->pglen = pglen;
    273	),
    274	TP_printk("dev %d:%d ino %#lx pgoff %#lx pglen %#lx",
    275		MAJOR(__entry->dev),
    276		MINOR(__entry->dev),
    277		__entry->ino,
    278		__entry->pgoff,
    279		__entry->pglen
    280	)
    281)
    282
    283#endif /* _TRACE_FS_DAX_H */
    284
    285/* This part must be outside protection */
    286#include <trace/define_trace.h>