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

Signed-off-by: Christophe Lombard <clomb...@linux.vnet.ibm.com>
---
 drivers/misc/ocxl/link.c  |  4 +++
 drivers/misc/ocxl/trace.h | 64 +++++++++++++++++++++++++++++++++++++++
 2 files changed, 68 insertions(+)

diff --git a/drivers/misc/ocxl/link.c b/drivers/misc/ocxl/link.c
index 100bdfe9ec37..2e0eb46d032e 100644
--- a/drivers/misc/ocxl/link.c
+++ b/drivers/misc/ocxl/link.c
@@ -496,6 +496,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)
@@ -587,6 +588,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);
                }
        }
@@ -722,6 +724,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);
diff --git a/drivers/misc/ocxl/trace.h b/drivers/misc/ocxl/trace.h
index 17e21cb2addd..a33a5094ff6c 100644
--- a/drivers/misc/ocxl/trace.h
+++ b/drivers/misc/ocxl/trace.h
@@ -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),
-- 
2.28.0

Reply via email to