ocxl: Add new kernel traces
authorChristophe Lombard <clombard@linux.vnet.ibm.com>
Wed, 25 Nov 2020 15:50:13 +0000 (16:50 +0100)
committerMichael Ellerman <mpe@ellerman.id.au>
Thu, 3 Dec 2020 14:01:30 +0000 (01:01 +1100)
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
drivers/misc/ocxl/link.c
drivers/misc/ocxl/trace.h

index 129d4ed..ab039c1 100644 (file)
@@ -499,6 +499,7 @@ static void invalidate_range(struct mmu_notifier *mn,
        unsigned long addr, pid, page_size = PAGE_SIZE;
 
        pid = mm->context.id;
+       trace_ocxl_mmu_notifier_range(start, end, pid);
 
        spin_lock(&link->atsd_lock);
        for (addr = start; addr < end; addr += page_size)
@@ -590,6 +591,7 @@ int ocxl_link_add_pe(void *link_handle, int pasid, u32 pidr, u32 tidr,
                        /* Use MMIO registers for the TLB Invalidate
                         * operations.
                         */
+                       trace_ocxl_init_mmu_notifier(pasid, mm->context.id);
                        mmu_notifier_register(&pe_data->mmu_notifier, mm);
                }
        }
@@ -725,6 +727,8 @@ int ocxl_link_remove_pe(void *link_handle, int pasid)
        } else {
                if (pe_data->mm) {
                        if (link->arva) {
+                               trace_ocxl_release_mmu_notifier(pasid,
+                                                               pe_data->mm->context.id);
                                mmu_notifier_unregister(&pe_data->mmu_notifier,
                                                        pe_data->mm);
                                spin_lock(&link->atsd_lock);
index 17e21cb..a33a509 100644 (file)
@@ -8,6 +8,70 @@
 
 #include <linux/tracepoint.h>
 
+
+TRACE_EVENT(ocxl_mmu_notifier_range,
+       TP_PROTO(unsigned long start, unsigned long end, unsigned long pidr),
+       TP_ARGS(start, end, pidr),
+
+       TP_STRUCT__entry(
+               __field(unsigned long, start)
+               __field(unsigned long, end)
+               __field(unsigned long, pidr)
+       ),
+
+       TP_fast_assign(
+               __entry->start = start;
+               __entry->end = end;
+               __entry->pidr = pidr;
+       ),
+
+       TP_printk("start=0x%lx end=0x%lx pidr=0x%lx",
+               __entry->start,
+               __entry->end,
+               __entry->pidr
+       )
+);
+
+TRACE_EVENT(ocxl_init_mmu_notifier,
+       TP_PROTO(int pasid, unsigned long pidr),
+       TP_ARGS(pasid, pidr),
+
+       TP_STRUCT__entry(
+               __field(int, pasid)
+               __field(unsigned long, pidr)
+       ),
+
+       TP_fast_assign(
+               __entry->pasid = pasid;
+               __entry->pidr = pidr;
+       ),
+
+       TP_printk("pasid=%d, pidr=0x%lx",
+               __entry->pasid,
+               __entry->pidr
+       )
+);
+
+TRACE_EVENT(ocxl_release_mmu_notifier,
+       TP_PROTO(int pasid, unsigned long pidr),
+       TP_ARGS(pasid, pidr),
+
+       TP_STRUCT__entry(
+               __field(int, pasid)
+               __field(unsigned long, pidr)
+       ),
+
+       TP_fast_assign(
+               __entry->pasid = pasid;
+               __entry->pidr = pidr;
+       ),
+
+       TP_printk("pasid=%d, pidr=0x%lx",
+               __entry->pasid,
+               __entry->pidr
+       )
+);
+
 DECLARE_EVENT_CLASS(ocxl_context,
        TP_PROTO(pid_t pid, void *spa, int pasid, u32 pidr, u32 tidr),
        TP_ARGS(pid, spa, pasid, pidr, tidr),