Message ID | 20201124095838.18665-6-clombard@linux.vnet.ibm.com (mailing list archive) |
---|---|
State | Changes Requested |
Headers | show |
Series | ocxl: Mmio invalidation support | expand |
Context | Check | Description |
---|---|---|
snowpatch_ozlabs/apply_patch | success | Successfully applied on branch powerpc/merge (7c94b5d4e9d328a69d43a11d7e3dfd7a6d762cb6) |
snowpatch_ozlabs/build-ppc64le | success | Build succeeded |
snowpatch_ozlabs/build-ppc64be | success | Build succeeded |
snowpatch_ozlabs/build-ppc64e | success | Build succeeded |
snowpatch_ozlabs/build-pmac32 | success | Build succeeded |
snowpatch_ozlabs/checkpatch | warning | total: 0 errors, 0 warnings, 12 checks, 92 lines checked |
snowpatch_ozlabs/needsstable | success | Patch has no Fixes tags |
On 24/11/2020 10:58, Christophe Lombard wrote: > 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> > 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 129d4eddc4d2..ab039c115381 100644 > --- a/drivers/misc/ocxl/link.c > +++ b/drivers/misc/ocxl/link.c > @@ -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); > 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), >
diff --git a/drivers/misc/ocxl/link.c b/drivers/misc/ocxl/link.c index 129d4eddc4d2..ab039c115381 100644 --- a/drivers/misc/ocxl/link.c +++ b/drivers/misc/ocxl/link.c @@ -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); 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),
Add specific kernel traces which provide information on mmu notifier and on pages range. Signed-off-by: Christophe Lombard <clombard@linux.vnet.ibm.com> --- drivers/misc/ocxl/link.c | 4 +++ drivers/misc/ocxl/trace.h | 64 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 68 insertions(+)