Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

ocxl: Add new kernel traces

Add specific kernel traces which provide information on mmu notifier and on
pages range.

Signed-off-by: Christophe Lombard <clombard@linux.vnet.ibm.com>
Acked-by: Frederic Barrat <fbarrat@linux.ibm.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/20201125155013.39955-6-clombard@linux.vnet.ibm.com

authored by

Christophe Lombard and committed by
Michael Ellerman
98f5559a 5f686eea

+68
+4
drivers/misc/ocxl/link.c
··· 499 499 unsigned long addr, pid, page_size = PAGE_SIZE; 500 500 501 501 pid = mm->context.id; 502 + trace_ocxl_mmu_notifier_range(start, end, pid); 502 503 503 504 spin_lock(&link->atsd_lock); 504 505 for (addr = start; addr < end; addr += page_size) ··· 591 590 /* Use MMIO registers for the TLB Invalidate 592 591 * operations. 593 592 */ 593 + trace_ocxl_init_mmu_notifier(pasid, mm->context.id); 594 594 mmu_notifier_register(&pe_data->mmu_notifier, mm); 595 595 } 596 596 } ··· 727 725 } else { 728 726 if (pe_data->mm) { 729 727 if (link->arva) { 728 + trace_ocxl_release_mmu_notifier(pasid, 729 + pe_data->mm->context.id); 730 730 mmu_notifier_unregister(&pe_data->mmu_notifier, 731 731 pe_data->mm); 732 732 spin_lock(&link->atsd_lock);
+64
drivers/misc/ocxl/trace.h
··· 8 8 9 9 #include <linux/tracepoint.h> 10 10 11 + 12 + TRACE_EVENT(ocxl_mmu_notifier_range, 13 + TP_PROTO(unsigned long start, unsigned long end, unsigned long pidr), 14 + TP_ARGS(start, end, pidr), 15 + 16 + TP_STRUCT__entry( 17 + __field(unsigned long, start) 18 + __field(unsigned long, end) 19 + __field(unsigned long, pidr) 20 + ), 21 + 22 + TP_fast_assign( 23 + __entry->start = start; 24 + __entry->end = end; 25 + __entry->pidr = pidr; 26 + ), 27 + 28 + TP_printk("start=0x%lx end=0x%lx pidr=0x%lx", 29 + __entry->start, 30 + __entry->end, 31 + __entry->pidr 32 + ) 33 + ); 34 + 35 + TRACE_EVENT(ocxl_init_mmu_notifier, 36 + TP_PROTO(int pasid, unsigned long pidr), 37 + TP_ARGS(pasid, pidr), 38 + 39 + TP_STRUCT__entry( 40 + __field(int, pasid) 41 + __field(unsigned long, pidr) 42 + ), 43 + 44 + TP_fast_assign( 45 + __entry->pasid = pasid; 46 + __entry->pidr = pidr; 47 + ), 48 + 49 + TP_printk("pasid=%d, pidr=0x%lx", 50 + __entry->pasid, 51 + __entry->pidr 52 + ) 53 + ); 54 + 55 + TRACE_EVENT(ocxl_release_mmu_notifier, 56 + TP_PROTO(int pasid, unsigned long pidr), 57 + TP_ARGS(pasid, pidr), 58 + 59 + TP_STRUCT__entry( 60 + __field(int, pasid) 61 + __field(unsigned long, pidr) 62 + ), 63 + 64 + TP_fast_assign( 65 + __entry->pasid = pasid; 66 + __entry->pidr = pidr; 67 + ), 68 + 69 + TP_printk("pasid=%d, pidr=0x%lx", 70 + __entry->pasid, 71 + __entry->pidr 72 + ) 73 + ); 74 + 11 75 DECLARE_EVENT_CLASS(ocxl_context, 12 76 TP_PROTO(pid_t pid, void *spa, int pasid, u32 pidr, u32 tidr), 13 77 TP_ARGS(pid, spa, pasid, pidr, tidr),