* [PATCH] cxl: Add new kernel traces
@ 2018-03-13 9:30 Christophe Lombard
2018-03-16 15:56 ` Frederic Barrat
2019-05-01 6:44 ` Michael Ellerman
0 siblings, 2 replies; 3+ messages in thread
From: Christophe Lombard @ 2018-03-13 9:30 UTC (permalink / raw)
To: linuxppc-dev, fbarrat, vaibhav, andrew.donnellan
This patch adds new kernel traces in the current in-kernel 'library'
which can be called by other drivers to help interacting with an
IBM XSL on a POWER9 system.
If some kernel traces exist in the 'normal path' to handle a page or a
segment fault, some others are missing when a page fault is handle
through cxllib.
Signed-off-by: Christophe Lombard <clombard@linux.vnet.ibm.com>
---
drivers/misc/cxl/cxllib.c | 3 ++
drivers/misc/cxl/fault.c | 2 +
drivers/misc/cxl/irq.c | 2 +-
drivers/misc/cxl/trace.h | 115 ++++++++++++++++++++++++++--------------------
4 files changed, 72 insertions(+), 50 deletions(-)
diff --git a/drivers/misc/cxl/cxllib.c b/drivers/misc/cxl/cxllib.c
index 30ccba4..91cfb69 100644
--- a/drivers/misc/cxl/cxllib.c
+++ b/drivers/misc/cxl/cxllib.c
@@ -13,6 +13,7 @@
#include <misc/cxllib.h>
#include "cxl.h"
+#include "trace.h"
#define CXL_INVALID_DRA ~0ull
#define CXL_DUMMY_READ_SIZE 128
@@ -218,6 +219,8 @@ int cxllib_handle_fault(struct mm_struct *mm, u64 addr, u64 size, u64 flags)
if (mm == NULL)
return -EFAULT;
+ trace_cxl_lib_handle_fault(addr, size, flags);
+
down_read(&mm->mmap_sem);
vma = find_vma(mm, addr);
diff --git a/drivers/misc/cxl/fault.c b/drivers/misc/cxl/fault.c
index 70dbb6d..1c4fd74 100644
--- a/drivers/misc/cxl/fault.c
+++ b/drivers/misc/cxl/fault.c
@@ -138,6 +138,8 @@ int cxl_handle_mm_fault(struct mm_struct *mm, u64 dsisr, u64 dar)
int result;
unsigned long access, flags, inv_flags = 0;
+ trace_cxl_handle_mm_fault(dsisr, dar);
+
/*
* Add the fault handling cpu to task mm cpumask so that we
* can do a safe lockless page table walk when inserting the
diff --git a/drivers/misc/cxl/irq.c b/drivers/misc/cxl/irq.c
index ce08a9f..79b8b49 100644
--- a/drivers/misc/cxl/irq.c
+++ b/drivers/misc/cxl/irq.c
@@ -41,7 +41,7 @@ irqreturn_t cxl_irq_psl9(int irq, struct cxl_context *ctx, struct cxl_irq_info *
dsisr = irq_info->dsisr;
dar = irq_info->dar;
- trace_cxl_psl9_irq(ctx, irq, dsisr, dar);
+ trace_cxl_psl_irq(ctx, irq, dsisr, dar);
pr_devel("CXL interrupt %i for afu pe: %i DSISR: %#llx DAR: %#llx\n", irq, ctx->pe, dsisr, dar);
diff --git a/drivers/misc/cxl/trace.h b/drivers/misc/cxl/trace.h
index b8e300a..8eb2607 100644
--- a/drivers/misc/cxl/trace.h
+++ b/drivers/misc/cxl/trace.h
@@ -26,19 +26,20 @@
{ CXL_PSL9_DSISR_An_OC, "OC" }, \
{ CXL_PSL9_DSISR_An_S, "S" })
-#define DSISR_FLAGS \
- { CXL_PSL_DSISR_An_DS, "DS" }, \
- { CXL_PSL_DSISR_An_DM, "DM" }, \
- { CXL_PSL_DSISR_An_ST, "ST" }, \
- { CXL_PSL_DSISR_An_UR, "UR" }, \
- { CXL_PSL_DSISR_An_PE, "PE" }, \
- { CXL_PSL_DSISR_An_AE, "AE" }, \
- { CXL_PSL_DSISR_An_OC, "OC" }, \
- { CXL_PSL_DSISR_An_M, "M" }, \
- { CXL_PSL_DSISR_An_P, "P" }, \
- { CXL_PSL_DSISR_An_A, "A" }, \
- { CXL_PSL_DSISR_An_S, "S" }, \
- { CXL_PSL_DSISR_An_K, "K" }
+#define dsisr_psl8_flags(flags) \
+ __print_flags(flags, "|", \
+ { CXL_PSL_DSISR_An_DS, "DS" }, \
+ { CXL_PSL_DSISR_An_DM, "DM" }, \
+ { CXL_PSL_DSISR_An_ST, "ST" }, \
+ { CXL_PSL_DSISR_An_UR, "UR" }, \
+ { CXL_PSL_DSISR_An_PE, "PE" }, \
+ { CXL_PSL_DSISR_An_AE, "AE" }, \
+ { CXL_PSL_DSISR_An_OC, "OC" }, \
+ { CXL_PSL_DSISR_An_M, "M" }, \
+ { CXL_PSL_DSISR_An_P, "P" }, \
+ { CXL_PSL_DSISR_An_A, "A" }, \
+ { CXL_PSL_DSISR_An_S, "S" }, \
+ { CXL_PSL_DSISR_An_K, "K" })
#define TFC_FLAGS \
{ CXL_PSL_TFC_An_A, "A" }, \
@@ -163,7 +164,7 @@ TRACE_EVENT(cxl_afu_irq,
)
);
-TRACE_EVENT(cxl_psl9_irq,
+TRACE_EVENT(cxl_psl_irq,
TP_PROTO(struct cxl_context *ctx, int irq, u64 dsisr, u64 dar),
TP_ARGS(ctx, irq, dsisr, dar),
@@ -192,40 +193,8 @@ TRACE_EVENT(cxl_psl9_irq,
__entry->pe,
__entry->irq,
__entry->dsisr,
- dsisr_psl9_flags(__entry->dsisr),
- __entry->dar
- )
-);
-
-TRACE_EVENT(cxl_psl_irq,
- TP_PROTO(struct cxl_context *ctx, int irq, u64 dsisr, u64 dar),
-
- TP_ARGS(ctx, irq, dsisr, dar),
-
- TP_STRUCT__entry(
- __field(u8, card)
- __field(u8, afu)
- __field(u16, pe)
- __field(int, irq)
- __field(u64, dsisr)
- __field(u64, dar)
- ),
-
- TP_fast_assign(
- __entry->card = ctx->afu->adapter->adapter_num;
- __entry->afu = ctx->afu->slice;
- __entry->pe = ctx->pe;
- __entry->irq = irq;
- __entry->dsisr = dsisr;
- __entry->dar = dar;
- ),
-
- TP_printk("afu%i.%i pe=%i irq=%i dsisr=%s dar=0x%016llx",
- __entry->card,
- __entry->afu,
- __entry->pe,
- __entry->irq,
- __print_flags(__entry->dsisr, "|", DSISR_FLAGS),
+ cxl_is_power8() ? dsisr_psl8_flags(__entry->dsisr) :
+ dsisr_psl9_flags(__entry->dsisr),
__entry->dar
)
);
@@ -342,11 +311,59 @@ TRACE_EVENT(cxl_pte_miss,
__entry->card,
__entry->afu,
__entry->pe,
- __print_flags(__entry->dsisr, "|", DSISR_FLAGS),
+ cxl_is_power8() ? dsisr_psl8_flags(__entry->dsisr) :
+ dsisr_psl9_flags(__entry->dsisr),
+ __entry->dar
+ )
+);
+
+TRACE_EVENT(cxl_handle_mm_fault,
+ TP_PROTO(u64 dsisr, u64 dar),
+
+ TP_ARGS(dsisr, dar),
+
+ TP_STRUCT__entry(
+ __field(u64, dsisr)
+ __field(u64, dar)
+ ),
+
+ TP_fast_assign(
+ __entry->dsisr = dsisr;
+ __entry->dar = dar;
+ ),
+
+ TP_printk("dsisr=0x%016llx(%s), dar=0x%016llx",
+ __entry->dsisr,
+ cxl_is_power8() ? dsisr_psl8_flags(__entry->dsisr) :
+ dsisr_psl9_flags(__entry->dsisr),
__entry->dar
)
);
+TRACE_EVENT(cxl_lib_handle_fault,
+ TP_PROTO(u64 addr, u64 size, u64 flags),
+
+ TP_ARGS(addr, size, flags),
+
+ TP_STRUCT__entry(
+ __field(u64, addr)
+ __field(u64, size)
+ __field(u64, flags)
+ ),
+
+ TP_fast_assign(
+ __entry->addr = addr;
+ __entry->size = size;
+ __entry->flags = flags;
+ ),
+
+ TP_printk("addr=0x%016llx, size=0x%016llx, flags=0x%016llx",
+ __entry->addr,
+ __entry->size,
+ __entry->flags
+ )
+);
+
TRACE_EVENT(cxl_llcmd,
TP_PROTO(struct cxl_context *ctx, u64 cmd),
--
2.7.4
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH] cxl: Add new kernel traces
2018-03-13 9:30 [PATCH] cxl: Add new kernel traces Christophe Lombard
@ 2018-03-16 15:56 ` Frederic Barrat
2019-05-01 6:44 ` Michael Ellerman
1 sibling, 0 replies; 3+ messages in thread
From: Frederic Barrat @ 2018-03-16 15:56 UTC (permalink / raw)
To: Christophe Lombard, linuxppc-dev, vaibhav, andrew.donnellan
Le 13/03/2018 à 10:30, Christophe Lombard a écrit :
> This patch adds new kernel traces in the current in-kernel 'library'
> which can be called by other drivers to help interacting with an
> IBM XSL on a POWER9 system.
>
> If some kernel traces exist in the 'normal path' to handle a page or a
> segment fault, some others are missing when a page fault is handle
> through cxllib.
>
> Signed-off-by: Christophe Lombard <clombard@linux.vnet.ibm.com>
> ---
Thanks!
Acked-by: Frederic Barrat <fbarrat@linux.vnet.ibm.com>
> drivers/misc/cxl/cxllib.c | 3 ++
> drivers/misc/cxl/fault.c | 2 +
> drivers/misc/cxl/irq.c | 2 +-
> drivers/misc/cxl/trace.h | 115 ++++++++++++++++++++++++++--------------------
> 4 files changed, 72 insertions(+), 50 deletions(-)
>
> diff --git a/drivers/misc/cxl/cxllib.c b/drivers/misc/cxl/cxllib.c
> index 30ccba4..91cfb69 100644
> --- a/drivers/misc/cxl/cxllib.c
> +++ b/drivers/misc/cxl/cxllib.c
> @@ -13,6 +13,7 @@
> #include <misc/cxllib.h>
>
> #include "cxl.h"
> +#include "trace.h"
>
> #define CXL_INVALID_DRA ~0ull
> #define CXL_DUMMY_READ_SIZE 128
> @@ -218,6 +219,8 @@ int cxllib_handle_fault(struct mm_struct *mm, u64 addr, u64 size, u64 flags)
> if (mm == NULL)
> return -EFAULT;
>
> + trace_cxl_lib_handle_fault(addr, size, flags);
> +
> down_read(&mm->mmap_sem);
>
> vma = find_vma(mm, addr);
> diff --git a/drivers/misc/cxl/fault.c b/drivers/misc/cxl/fault.c
> index 70dbb6d..1c4fd74 100644
> --- a/drivers/misc/cxl/fault.c
> +++ b/drivers/misc/cxl/fault.c
> @@ -138,6 +138,8 @@ int cxl_handle_mm_fault(struct mm_struct *mm, u64 dsisr, u64 dar)
> int result;
> unsigned long access, flags, inv_flags = 0;
>
> + trace_cxl_handle_mm_fault(dsisr, dar);
> +
> /*
> * Add the fault handling cpu to task mm cpumask so that we
> * can do a safe lockless page table walk when inserting the
> diff --git a/drivers/misc/cxl/irq.c b/drivers/misc/cxl/irq.c
> index ce08a9f..79b8b49 100644
> --- a/drivers/misc/cxl/irq.c
> +++ b/drivers/misc/cxl/irq.c
> @@ -41,7 +41,7 @@ irqreturn_t cxl_irq_psl9(int irq, struct cxl_context *ctx, struct cxl_irq_info *
> dsisr = irq_info->dsisr;
> dar = irq_info->dar;
>
> - trace_cxl_psl9_irq(ctx, irq, dsisr, dar);
> + trace_cxl_psl_irq(ctx, irq, dsisr, dar);
>
> pr_devel("CXL interrupt %i for afu pe: %i DSISR: %#llx DAR: %#llx\n", irq, ctx->pe, dsisr, dar);
>
> diff --git a/drivers/misc/cxl/trace.h b/drivers/misc/cxl/trace.h
> index b8e300a..8eb2607 100644
> --- a/drivers/misc/cxl/trace.h
> +++ b/drivers/misc/cxl/trace.h
> @@ -26,19 +26,20 @@
> { CXL_PSL9_DSISR_An_OC, "OC" }, \
> { CXL_PSL9_DSISR_An_S, "S" })
>
> -#define DSISR_FLAGS \
> - { CXL_PSL_DSISR_An_DS, "DS" }, \
> - { CXL_PSL_DSISR_An_DM, "DM" }, \
> - { CXL_PSL_DSISR_An_ST, "ST" }, \
> - { CXL_PSL_DSISR_An_UR, "UR" }, \
> - { CXL_PSL_DSISR_An_PE, "PE" }, \
> - { CXL_PSL_DSISR_An_AE, "AE" }, \
> - { CXL_PSL_DSISR_An_OC, "OC" }, \
> - { CXL_PSL_DSISR_An_M, "M" }, \
> - { CXL_PSL_DSISR_An_P, "P" }, \
> - { CXL_PSL_DSISR_An_A, "A" }, \
> - { CXL_PSL_DSISR_An_S, "S" }, \
> - { CXL_PSL_DSISR_An_K, "K" }
> +#define dsisr_psl8_flags(flags) \
> + __print_flags(flags, "|", \
> + { CXL_PSL_DSISR_An_DS, "DS" }, \
> + { CXL_PSL_DSISR_An_DM, "DM" }, \
> + { CXL_PSL_DSISR_An_ST, "ST" }, \
> + { CXL_PSL_DSISR_An_UR, "UR" }, \
> + { CXL_PSL_DSISR_An_PE, "PE" }, \
> + { CXL_PSL_DSISR_An_AE, "AE" }, \
> + { CXL_PSL_DSISR_An_OC, "OC" }, \
> + { CXL_PSL_DSISR_An_M, "M" }, \
> + { CXL_PSL_DSISR_An_P, "P" }, \
> + { CXL_PSL_DSISR_An_A, "A" }, \
> + { CXL_PSL_DSISR_An_S, "S" }, \
> + { CXL_PSL_DSISR_An_K, "K" })
>
> #define TFC_FLAGS \
> { CXL_PSL_TFC_An_A, "A" }, \
> @@ -163,7 +164,7 @@ TRACE_EVENT(cxl_afu_irq,
> )
> );
>
> -TRACE_EVENT(cxl_psl9_irq,
> +TRACE_EVENT(cxl_psl_irq,
> TP_PROTO(struct cxl_context *ctx, int irq, u64 dsisr, u64 dar),
>
> TP_ARGS(ctx, irq, dsisr, dar),
> @@ -192,40 +193,8 @@ TRACE_EVENT(cxl_psl9_irq,
> __entry->pe,
> __entry->irq,
> __entry->dsisr,
> - dsisr_psl9_flags(__entry->dsisr),
> - __entry->dar
> - )
> -);
> -
> -TRACE_EVENT(cxl_psl_irq,
> - TP_PROTO(struct cxl_context *ctx, int irq, u64 dsisr, u64 dar),
> -
> - TP_ARGS(ctx, irq, dsisr, dar),
> -
> - TP_STRUCT__entry(
> - __field(u8, card)
> - __field(u8, afu)
> - __field(u16, pe)
> - __field(int, irq)
> - __field(u64, dsisr)
> - __field(u64, dar)
> - ),
> -
> - TP_fast_assign(
> - __entry->card = ctx->afu->adapter->adapter_num;
> - __entry->afu = ctx->afu->slice;
> - __entry->pe = ctx->pe;
> - __entry->irq = irq;
> - __entry->dsisr = dsisr;
> - __entry->dar = dar;
> - ),
> -
> - TP_printk("afu%i.%i pe=%i irq=%i dsisr=%s dar=0x%016llx",
> - __entry->card,
> - __entry->afu,
> - __entry->pe,
> - __entry->irq,
> - __print_flags(__entry->dsisr, "|", DSISR_FLAGS),
> + cxl_is_power8() ? dsisr_psl8_flags(__entry->dsisr) :
> + dsisr_psl9_flags(__entry->dsisr),
> __entry->dar
> )
> );
> @@ -342,11 +311,59 @@ TRACE_EVENT(cxl_pte_miss,
> __entry->card,
> __entry->afu,
> __entry->pe,
> - __print_flags(__entry->dsisr, "|", DSISR_FLAGS),
> + cxl_is_power8() ? dsisr_psl8_flags(__entry->dsisr) :
> + dsisr_psl9_flags(__entry->dsisr),
> + __entry->dar
> + )
> +);
> +
> +TRACE_EVENT(cxl_handle_mm_fault,
> + TP_PROTO(u64 dsisr, u64 dar),
> +
> + TP_ARGS(dsisr, dar),
> +
> + TP_STRUCT__entry(
> + __field(u64, dsisr)
> + __field(u64, dar)
> + ),
> +
> + TP_fast_assign(
> + __entry->dsisr = dsisr;
> + __entry->dar = dar;
> + ),
> +
> + TP_printk("dsisr=0x%016llx(%s), dar=0x%016llx",
> + __entry->dsisr,
> + cxl_is_power8() ? dsisr_psl8_flags(__entry->dsisr) :
> + dsisr_psl9_flags(__entry->dsisr),
> __entry->dar
> )
> );
>
> +TRACE_EVENT(cxl_lib_handle_fault,
> + TP_PROTO(u64 addr, u64 size, u64 flags),
> +
> + TP_ARGS(addr, size, flags),
> +
> + TP_STRUCT__entry(
> + __field(u64, addr)
> + __field(u64, size)
> + __field(u64, flags)
> + ),
> +
> + TP_fast_assign(
> + __entry->addr = addr;
> + __entry->size = size;
> + __entry->flags = flags;
> + ),
> +
> + TP_printk("addr=0x%016llx, size=0x%016llx, flags=0x%016llx",
> + __entry->addr,
> + __entry->size,
> + __entry->flags
> + )
> +);
> +
> TRACE_EVENT(cxl_llcmd,
> TP_PROTO(struct cxl_context *ctx, u64 cmd),
>
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] cxl: Add new kernel traces
2018-03-13 9:30 [PATCH] cxl: Add new kernel traces Christophe Lombard
2018-03-16 15:56 ` Frederic Barrat
@ 2019-05-01 6:44 ` Michael Ellerman
1 sibling, 0 replies; 3+ messages in thread
From: Michael Ellerman @ 2019-05-01 6:44 UTC (permalink / raw)
To: Christophe Lombard, linuxppc-dev, fbarrat, vaibhav, andrew.donnellan
Christophe Lombard <clombard@linux.vnet.ibm.com> writes:
> This patch adds new kernel traces in the current in-kernel 'library'
> which can be called by other drivers to help interacting with an
> IBM XSL on a POWER9 system.
>
> If some kernel traces exist in the 'normal path' to handle a page or a
> segment fault, some others are missing when a page fault is handle
> through cxllib.
>
> Signed-off-by: Christophe Lombard <clombard@linux.vnet.ibm.com>
> ---
> drivers/misc/cxl/cxllib.c | 3 ++
> drivers/misc/cxl/fault.c | 2 +
> drivers/misc/cxl/irq.c | 2 +-
> drivers/misc/cxl/trace.h | 115 ++++++++++++++++++++++++++--------------------
> 4 files changed, 72 insertions(+), 50 deletions(-)
Sorry this no longer builds:
drivers/misc/cxl/cxllib.c:215:35: note: each undeclared identifier is reported only once for each function it appears in
drivers/misc/cxl/cxllib.c:215:41: error: 'flags' undeclared (first use in this function); did you mean 'class'?
trace_cxl_lib_handle_fault(addr, size, flags);
^~~~~
class
cheers
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2019-05-01 6:46 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-03-13 9:30 [PATCH] cxl: Add new kernel traces Christophe Lombard
2018-03-16 15:56 ` Frederic Barrat
2019-05-01 6:44 ` Michael Ellerman
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.