From: Manoj Kumar <manoj@linux.vnet.ibm.com>
To: linuxppc-dev@lists.ozlabs.org
Subject: Re: [PATCH v5 18/18] cxl: Add tracepoints around the cxl hcall
Date: Wed, 24 Feb 2016 15:49:08 -0600 [thread overview]
Message-ID: <56CE2554.9060503@linux.vnet.ibm.com> (raw)
In-Reply-To: <1456244519-18934-19-git-send-email-fbarrat@linux.vnet.ibm.com>
Reviewed-by: Manoj Kumar <manoj@linux.vnet.ibm.com>
---
Manoj Kumar
On 2/23/2016 10:21 AM, Frederic Barrat wrote:
> From: Christophe Lombard <clombard@linux.vnet.ibm.com>
>
> To ease debugging, add a few tracepoints around the cxl hcalls.
>
> Co-authored-by: Frederic Barrat <fbarrat@linux.vnet.ibm.com>
> Signed-off-by: Frederic Barrat <fbarrat@linux.vnet.ibm.com>
> Signed-off-by: Christophe Lombard <clombard@linux.vnet.ibm.com>
> Acked-by: Ian Munsie <imunsie@au1.ibm.com>
> ---
> drivers/misc/cxl/hcalls.c | 9 +++
> drivers/misc/cxl/trace.h | 193 ++++++++++++++++++++++++++++++++++++++++++++++
> 2 files changed, 202 insertions(+)
>
> diff --git a/drivers/misc/cxl/hcalls.c b/drivers/misc/cxl/hcalls.c
> index 7e4c517..f01d4c0 100644
> --- a/drivers/misc/cxl/hcalls.c
> +++ b/drivers/misc/cxl/hcalls.c
> @@ -14,6 +14,7 @@
> #include <asm/hvcall.h>
> #include <asm/byteorder.h>
> #include "hcalls.h"
> +#include "trace.h"
>
> #define CXL_HCALL_TIMEOUT 60000
> #define CXL_HCALL_TIMEOUT_DOWNLOAD 120000
> @@ -142,6 +143,7 @@ long cxl_h_attach_process(u64 unit_address,
> CXL_H_WAIT_UNTIL_DONE(rc, retbuf, H_ATTACH_CA_PROCESS, unit_address, virt_to_phys(element));
> _PRINT_MSG(rc, "cxl_h_attach_process(%#.16llx, %#.16lx): %li\n",
> unit_address, virt_to_phys(element), rc);
> + trace_cxl_hcall_attach(unit_address, virt_to_phys(element), retbuf[0], retbuf[1], retbuf[2], rc);
>
> pr_devel("token: 0x%.8lx mmio_addr: 0x%lx mmio_size: 0x%lx\nProcess Element Structure:\n",
> retbuf[0], retbuf[1], retbuf[2]);
> @@ -181,6 +183,7 @@ long cxl_h_detach_process(u64 unit_address, u64 process_token)
>
> CXL_H_WAIT_UNTIL_DONE(rc, retbuf, H_DETACH_CA_PROCESS, unit_address, process_token);
> _PRINT_MSG(rc, "cxl_h_detach_process(%#.16llx, 0x%.8llx): %li\n", unit_address, process_token, rc);
> + trace_cxl_hcall_detach(unit_address, process_token, rc);
>
> switch (rc) {
> case H_SUCCESS: /* The process was detached from the coherent platform function */
> @@ -213,6 +216,7 @@ static long cxl_h_control_function(u64 unit_address, u64 op,
> CXL_H9_WAIT_UNTIL_DONE(rc, retbuf, H_CONTROL_CA_FUNCTION, unit_address, op, p1, p2, p3, p4);
> _PRINT_MSG(rc, "cxl_h_control_function(%#.16llx, %s(%#llx, %#llx, %#llx, %#llx, R4: %#lx)): %li\n",
> unit_address, OP_STR_AFU(op), p1, p2, p3, p4, retbuf[0], rc);
> + trace_cxl_hcall_control_function(unit_address, OP_STR_AFU(op), p1, p2, p3, p4, retbuf[0], rc);
>
> switch (rc) {
> case H_SUCCESS: /* The operation is completed for the coherent platform function */
> @@ -406,6 +410,7 @@ long cxl_h_collect_int_info(u64 unit_address, u64 process_token,
> unit_address, process_token);
> _PRINT_MSG(rc, "cxl_h_collect_int_info(%#.16llx, 0x%llx): %li\n",
> unit_address, process_token, rc);
> + trace_cxl_hcall_collect_int_info(unit_address, process_token, rc);
>
> switch (rc) {
> case H_SUCCESS: /* The interrupt info is returned in return registers. */
> @@ -449,6 +454,8 @@ long cxl_h_control_faults(u64 unit_address, u64 process_token,
> _PRINT_MSG(rc, "cxl_h_control_faults(%#.16llx, 0x%llx, %#llx, %#llx): %li (%#lx)\n",
> unit_address, process_token, control_mask, reset_mask,
> rc, retbuf[0]);
> + trace_cxl_hcall_control_faults(unit_address, process_token,
> + control_mask, reset_mask, retbuf[0], rc);
>
> switch (rc) {
> case H_SUCCESS: /* Faults were successfully controlled for the function. */
> @@ -482,6 +489,7 @@ static long cxl_h_control_facility(u64 unit_address, u64 op,
> CXL_H9_WAIT_UNTIL_DONE(rc, retbuf, H_CONTROL_CA_FACILITY, unit_address, op, p1, p2, p3, p4);
> _PRINT_MSG(rc, "cxl_h_control_facility(%#.16llx, %s(%#llx, %#llx, %#llx, %#llx, R4: %#lx)): %li\n",
> unit_address, OP_STR_CONTROL_ADAPTER(op), p1, p2, p3, p4, retbuf[0], rc);
> + trace_cxl_hcall_control_facility(unit_address, OP_STR_CONTROL_ADAPTER(op), p1, p2, p3, p4, retbuf[0], rc);
>
> switch (rc) {
> case H_SUCCESS: /* The operation is completed for the coherent platform facility */
> @@ -588,6 +596,7 @@ static long cxl_h_download_facility(u64 unit_address, u64 op,
> }
> _PRINT_MSG(rc, "cxl_h_download_facility(%#.16llx, %s(%#llx, %#llx), %#lx): %li\n",
> unit_address, OP_STR_DOWNLOAD_ADAPTER(op), list_address, num, retbuf[0], rc);
> + trace_cxl_hcall_download_facility(unit_address, OP_STR_DOWNLOAD_ADAPTER(op), list_address, num, retbuf[0], rc);
>
> switch (rc) {
> case H_SUCCESS: /* The operation is completed for the coherent platform facility */
> diff --git a/drivers/misc/cxl/trace.h b/drivers/misc/cxl/trace.h
> index 6e1e2ad..751d611 100644
> --- a/drivers/misc/cxl/trace.h
> +++ b/drivers/misc/cxl/trace.h
> @@ -450,6 +450,199 @@ DEFINE_EVENT(cxl_pe_class, cxl_slbia,
> TP_ARGS(ctx)
> );
>
> +TRACE_EVENT(cxl_hcall,
> + TP_PROTO(u64 unit_address, u64 process_token, long rc),
> +
> + TP_ARGS(unit_address, process_token, rc),
> +
> + TP_STRUCT__entry(
> + __field(u64, unit_address)
> + __field(u64, process_token)
> + __field(long, rc)
> + ),
> +
> + TP_fast_assign(
> + __entry->unit_address = unit_address;
> + __entry->process_token = process_token;
> + __entry->rc = rc;
> + ),
> +
> + TP_printk("unit_address=0x%016llx process_token=0x%016llx rc=%li",
> + __entry->unit_address,
> + __entry->process_token,
> + __entry->rc
> + )
> +);
> +
> +TRACE_EVENT(cxl_hcall_control,
> + TP_PROTO(u64 unit_address, char *fct, u64 p1, u64 p2, u64 p3,
> + u64 p4, unsigned long r4, long rc),
> +
> + TP_ARGS(unit_address, fct, p1, p2, p3, p4, r4, rc),
> +
> + TP_STRUCT__entry(
> + __field(u64, unit_address)
> + __field(char *, fct)
> + __field(u64, p1)
> + __field(u64, p2)
> + __field(u64, p3)
> + __field(u64, p4)
> + __field(unsigned long, r4)
> + __field(long, rc)
> + ),
> +
> + TP_fast_assign(
> + __entry->unit_address = unit_address;
> + __entry->fct = fct;
> + __entry->p1 = p1;
> + __entry->p2 = p2;
> + __entry->p3 = p3;
> + __entry->p4 = p4;
> + __entry->r4 = r4;
> + __entry->rc = rc;
> + ),
> +
> + TP_printk("unit_address=%#.16llx %s(%#llx, %#llx, %#llx, %#llx, R4: %#lx)): %li",
> + __entry->unit_address,
> + __entry->fct,
> + __entry->p1,
> + __entry->p2,
> + __entry->p3,
> + __entry->p4,
> + __entry->r4,
> + __entry->rc
> + )
> +);
> +
> +TRACE_EVENT(cxl_hcall_attach,
> + TP_PROTO(u64 unit_address, u64 phys_addr, unsigned long process_token,
> + unsigned long mmio_addr, unsigned long mmio_size, long rc),
> +
> + TP_ARGS(unit_address, phys_addr, process_token,
> + mmio_addr, mmio_size, rc),
> +
> + TP_STRUCT__entry(
> + __field(u64, unit_address)
> + __field(u64, phys_addr)
> + __field(unsigned long, process_token)
> + __field(unsigned long, mmio_addr)
> + __field(unsigned long, mmio_size)
> + __field(long, rc)
> + ),
> +
> + TP_fast_assign(
> + __entry->unit_address = unit_address;
> + __entry->phys_addr = phys_addr;
> + __entry->process_token = process_token;
> + __entry->mmio_addr = mmio_addr;
> + __entry->mmio_size = mmio_size;
> + __entry->rc = rc;
> + ),
> +
> + TP_printk("unit_address=0x%016llx phys_addr=0x%016llx "
> + "token=0x%.8lx mmio_addr=0x%lx mmio_size=0x%lx rc=%li",
> + __entry->unit_address,
> + __entry->phys_addr,
> + __entry->process_token,
> + __entry->mmio_addr,
> + __entry->mmio_size,
> + __entry->rc
> + )
> +);
> +
> +DEFINE_EVENT(cxl_hcall, cxl_hcall_detach,
> + TP_PROTO(u64 unit_address, u64 process_token, long rc),
> + TP_ARGS(unit_address, process_token, rc)
> +);
> +
> +DEFINE_EVENT(cxl_hcall_control, cxl_hcall_control_function,
> + TP_PROTO(u64 unit_address, char *fct, u64 p1, u64 p2, u64 p3,
> + u64 p4, unsigned long r4, long rc),
> + TP_ARGS(unit_address, fct, p1, p2, p3, p4, r4, rc)
> +);
> +
> +DEFINE_EVENT(cxl_hcall, cxl_hcall_collect_int_info,
> + TP_PROTO(u64 unit_address, u64 process_token, long rc),
> + TP_ARGS(unit_address, process_token, rc)
> +);
> +
> +TRACE_EVENT(cxl_hcall_control_faults,
> + TP_PROTO(u64 unit_address, u64 process_token,
> + u64 control_mask, u64 reset_mask, unsigned long r4,
> + long rc),
> +
> + TP_ARGS(unit_address, process_token,
> + control_mask, reset_mask, r4, rc),
> +
> + TP_STRUCT__entry(
> + __field(u64, unit_address)
> + __field(u64, process_token)
> + __field(u64, control_mask)
> + __field(u64, reset_mask)
> + __field(unsigned long, r4)
> + __field(long, rc)
> + ),
> +
> + TP_fast_assign(
> + __entry->unit_address = unit_address;
> + __entry->process_token = process_token;
> + __entry->control_mask = control_mask;
> + __entry->reset_mask = reset_mask;
> + __entry->r4 = r4;
> + __entry->rc = rc;
> + ),
> +
> + TP_printk("unit_address=0x%016llx process_token=0x%llx "
> + "control_mask=%#llx reset_mask=%#llx r4=%#lx rc=%li",
> + __entry->unit_address,
> + __entry->process_token,
> + __entry->control_mask,
> + __entry->reset_mask,
> + __entry->r4,
> + __entry->rc
> + )
> +);
> +
> +DEFINE_EVENT(cxl_hcall_control, cxl_hcall_control_facility,
> + TP_PROTO(u64 unit_address, char *fct, u64 p1, u64 p2, u64 p3,
> + u64 p4, unsigned long r4, long rc),
> + TP_ARGS(unit_address, fct, p1, p2, p3, p4, r4, rc)
> +);
> +
> +TRACE_EVENT(cxl_hcall_download_facility,
> + TP_PROTO(u64 unit_address, char *fct, u64 list_address, u64 num,
> + unsigned long r4, long rc),
> +
> + TP_ARGS(unit_address, fct, list_address, num, r4, rc),
> +
> + TP_STRUCT__entry(
> + __field(u64, unit_address)
> + __field(char *, fct)
> + __field(u64, list_address)
> + __field(u64, num)
> + __field(unsigned long, r4)
> + __field(long, rc)
> + ),
> +
> + TP_fast_assign(
> + __entry->unit_address = unit_address;
> + __entry->fct = fct;
> + __entry->list_address = list_address;
> + __entry->num = num;
> + __entry->r4 = r4;
> + __entry->rc = rc;
> + ),
> +
> + TP_printk("%#.16llx, %s(%#llx, %#llx), %#lx): %li",
> + __entry->unit_address,
> + __entry->fct,
> + __entry->list_address,
> + __entry->num,
> + __entry->r4,
> + __entry->rc
> + )
> +);
> +
> #endif /* _CXL_TRACE_H */
>
> /* This part must be outside protection */
>
prev parent reply other threads:[~2016-02-24 21:48 UTC|newest]
Thread overview: 51+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-02-23 16:21 [PATCH v5 00/18] cxl: Add support for powerVM guest Frederic Barrat
2016-02-23 16:21 ` [PATCH v5 01/18] cxl: Move common code away from bare-metal-specific files Frederic Barrat
2016-02-23 19:08 ` Manoj Kumar
2016-02-23 16:21 ` [PATCH v5 02/18] cxl: Move bare-metal specific code to specialized files Frederic Barrat
2016-02-23 19:09 ` Manoj Kumar
2016-02-23 16:21 ` [PATCH v5 03/18] cxl: Define process problem state area at attach time only Frederic Barrat
2016-02-23 19:09 ` Manoj Kumar
2016-03-03 3:55 ` Ian Munsie
2016-02-23 16:21 ` [PATCH v5 04/18] cxl: Introduce implementation-specific API Frederic Barrat
2016-02-23 19:09 ` Manoj Kumar
2016-02-23 16:21 ` [PATCH v5 05/18] cxl: Rename some bare-metal specific functions Frederic Barrat
2016-02-23 19:11 ` Manoj Kumar
2016-03-03 4:56 ` Ian Munsie
2016-02-23 16:21 ` [PATCH v5 06/18] cxl: Isolate a few bare-metal-specific calls Frederic Barrat
2016-02-23 19:12 ` Manoj Kumar
2016-02-23 16:21 ` [PATCH v5 07/18] cxl: Update cxl_irq() prototype Frederic Barrat
2016-02-23 19:13 ` Manoj Kumar
2016-02-23 16:21 ` [PATCH v5 08/18] cxl: IRQ allocation for guests Frederic Barrat
2016-02-23 19:16 ` Manoj Kumar
2016-03-03 4:59 ` Ian Munsie
2016-02-23 16:21 ` [PATCH v5 09/18] cxl: New possible return value from hcall Frederic Barrat
2016-02-23 19:18 ` Manoj Kumar
2016-02-23 19:28 ` Michael Neuling
2016-02-23 16:21 ` [PATCH v5 10/18] cxl: New hcalls to support cxl adapters Frederic Barrat
2016-02-23 19:23 ` Manoj Kumar
2016-03-03 4:04 ` Ian Munsie
2016-02-23 16:21 ` [PATCH v5 11/18] cxl: Separate bare-metal fields in adapter and AFU data structures Frederic Barrat
2016-02-24 16:50 ` Manoj Kumar
2016-03-03 4:09 ` Ian Munsie
2016-02-23 16:21 ` [PATCH v5 12/18] cxl: Add guest-specific code Frederic Barrat
2016-02-24 18:55 ` Manoj Kumar
2016-03-03 5:02 ` Ian Munsie
2016-02-23 16:21 ` [PATCH v5 13/18] cxl: sysfs support for guests Frederic Barrat
2016-02-24 19:03 ` Manoj Kumar
2016-03-03 5:04 ` Ian Munsie
2016-02-23 16:21 ` [PATCH v5 14/18] cxl: Support to flash a new image on the adapter from a guest Frederic Barrat
2016-02-24 20:03 ` Manoj Kumar
2016-02-25 13:11 ` Frederic Barrat
2016-02-25 16:59 ` Manoj Kumar
2016-03-03 4:52 ` Ian Munsie
2016-02-23 16:21 ` [PATCH v5 15/18] cxl: Parse device tree and create cxl device(s) at boot Frederic Barrat
2016-02-24 20:15 ` Manoj Kumar
2016-02-25 13:19 ` Frederic Barrat
2016-02-25 16:44 ` Manoj Kumar
2016-02-23 16:21 ` [PATCH v5 16/18] cxl: Support the cxl kernel API from a guest Frederic Barrat
2016-02-24 21:09 ` Manoj Kumar
2016-03-03 5:08 ` Ian Munsie
2016-02-23 16:21 ` [PATCH v5 17/18] cxl: Adapter failure handling Frederic Barrat
2016-02-24 21:41 ` Manoj Kumar
2016-02-23 16:21 ` [PATCH v5 18/18] cxl: Add tracepoints around the cxl hcall Frederic Barrat
2016-02-24 21:49 ` Manoj Kumar [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=56CE2554.9060503@linux.vnet.ibm.com \
--to=manoj@linux.vnet.ibm.com \
--cc=linuxppc-dev@lists.ozlabs.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.