Commit 98f5559a authored by Christophe Lombard's avatar Christophe Lombard Committed by Michael Ellerman

ocxl: Add new kernel traces

Add specific kernel traces which provide information on mmu notifier and on
pages range.
Signed-off-by: default avatarChristophe Lombard <clombard@linux.vnet.ibm.com>
Acked-by: default avatarFrederic Barrat <fbarrat@linux.ibm.com>
Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/20201125155013.39955-6-clombard@linux.vnet.ibm.com
parent 5f686eea
...@@ -499,6 +499,7 @@ static void invalidate_range(struct mmu_notifier *mn, ...@@ -499,6 +499,7 @@ static void invalidate_range(struct mmu_notifier *mn,
unsigned long addr, pid, page_size = PAGE_SIZE; unsigned long addr, pid, page_size = PAGE_SIZE;
pid = mm->context.id; pid = mm->context.id;
trace_ocxl_mmu_notifier_range(start, end, pid);
spin_lock(&link->atsd_lock); spin_lock(&link->atsd_lock);
for (addr = start; addr < end; addr += page_size) 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, ...@@ -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 /* Use MMIO registers for the TLB Invalidate
* operations. * operations.
*/ */
trace_ocxl_init_mmu_notifier(pasid, mm->context.id);
mmu_notifier_register(&pe_data->mmu_notifier, mm); mmu_notifier_register(&pe_data->mmu_notifier, mm);
} }
} }
...@@ -725,6 +727,8 @@ int ocxl_link_remove_pe(void *link_handle, int pasid) ...@@ -725,6 +727,8 @@ int ocxl_link_remove_pe(void *link_handle, int pasid)
} else { } else {
if (pe_data->mm) { if (pe_data->mm) {
if (link->arva) { if (link->arva) {
trace_ocxl_release_mmu_notifier(pasid,
pe_data->mm->context.id);
mmu_notifier_unregister(&pe_data->mmu_notifier, mmu_notifier_unregister(&pe_data->mmu_notifier,
pe_data->mm); pe_data->mm);
spin_lock(&link->atsd_lock); spin_lock(&link->atsd_lock);
......
...@@ -8,6 +8,70 @@ ...@@ -8,6 +8,70 @@
#include <linux/tracepoint.h> #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, DECLARE_EVENT_CLASS(ocxl_context,
TP_PROTO(pid_t pid, void *spa, int pasid, u32 pidr, u32 tidr), TP_PROTO(pid_t pid, void *spa, int pasid, u32 pidr, u32 tidr),
TP_ARGS(pid, spa, pasid, pidr, tidr), TP_ARGS(pid, spa, pasid, pidr, tidr),
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment