All of lore.kernel.org
 help / color / mirror / Atom feed
From: tip-bot for Tzvetomir Stoyanov <tipbot@zytor.com>
To: linux-tip-commits@vger.kernel.org
Cc: akpm@linux-foundation.org, rostedt@goodmis.org, mingo@kernel.org,
	linux-kernel@vger.kernel.org, hpa@zytor.com, jolsa@redhat.com,
	acme@redhat.com, tglx@linutronix.de, tstoyanov@vmware.com,
	namhyung@kernel.org
Subject: [tip:perf/core] tools lib traceevent: Man pages for registering print function
Date: Sat, 18 May 2019 02:08:03 -0700	[thread overview]
Message-ID: <tip-10e679751cde169434dffb6c87f9b93c02050bef@git.kernel.org> (raw)
In-Reply-To: <20190510200107.857252818@goodmis.org>

Commit-ID:  10e679751cde169434dffb6c87f9b93c02050bef
Gitweb:     https://git.kernel.org/tip/10e679751cde169434dffb6c87f9b93c02050bef
Author:     Tzvetomir Stoyanov <tstoyanov@vmware.com>
AuthorDate: Fri, 10 May 2019 15:56:19 -0400
Committer:  Arnaldo Carvalho de Melo <acme@redhat.com>
CommitDate: Wed, 15 May 2019 16:36:48 -0300

tools lib traceevent: Man pages for registering print function

Create man pages for libtraceevent APIs:

  tep_register_print_function()
  tep_unregister_print_function()

Signed-off-by: Tzvetomir Stoyanov <tstoyanov@vmware.com>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: linux-trace-devel@vger.kernel.org
Link: http://lkml.kernel.org/r/20190510200107.857252818@goodmis.org
Link: http://lore.kernel.org/linux-trace-devel/20190503091119.23399-13-tstoyanov@vmware.com
Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 .../Documentation/libtraceevent-reg_print_func.txt | 155 +++++++++++++++++++++
 1 file changed, 155 insertions(+)

diff --git a/tools/lib/traceevent/Documentation/libtraceevent-reg_print_func.txt b/tools/lib/traceevent/Documentation/libtraceevent-reg_print_func.txt
new file mode 100644
index 000000000000..708dce91ebd8
--- /dev/null
+++ b/tools/lib/traceevent/Documentation/libtraceevent-reg_print_func.txt
@@ -0,0 +1,155 @@
+libtraceevent(3)
+================
+
+NAME
+----
+tep_register_print_function,tep_unregister_print_function -
+Registers / Unregisters a helper function.
+
+SYNOPSIS
+--------
+[verse]
+--
+*#include <event-parse.h>*
+
+enum *tep_func_arg_type* {
+	TEP_FUNC_ARG_VOID,
+	TEP_FUNC_ARG_INT,
+	TEP_FUNC_ARG_LONG,
+	TEP_FUNC_ARG_STRING,
+	TEP_FUNC_ARG_PTR,
+	TEP_FUNC_ARG_MAX_TYPES
+};
+
+typedef unsigned long long (*pass:[*]tep_func_handler*)(struct trace_seq pass:[*]s, unsigned long long pass:[*]args);
+
+int *tep_register_print_function*(struct tep_handle pass:[*]_tep_, tep_func_handler _func_, enum tep_func_arg_type _ret_type_, char pass:[*]_name_, _..._);
+int *tep_unregister_print_function*(struct tep_handle pass:[*]_tep_, tep_func_handler _func_, char pass:[*]_name_);
+--
+
+DESCRIPTION
+-----------
+Some events may have helper functions in the print format arguments.
+This allows a plugin to dynamically create a way to process one of
+these functions.
+
+The _tep_register_print_function()_ registers such helper function. The _tep_
+argument is the trace event parser context. The _func_ argument  is a pointer
+to the helper function. The _ret_type_ argument is  the return type of the
+helper function, value from the _tep_func_arg_type_ enum. The _name_ is the name
+of the helper function, as seen in the print format arguments. The _..._ is a
+variable list of _tep_func_arg_type_ enums, the _func_ function arguments.
+This list must end with _TEP_FUNC_ARG_VOID_. See 'EXAMPLE' section.
+
+The _tep_unregister_print_function()_ unregisters a helper function, previously
+registered with _tep_register_print_function()_. The _tep_ argument is the
+trace event parser context. The _func_ and _name_ arguments are the same, used
+when the helper function was registered.
+
+The _tep_func_handler_ is the type of the helper function. The _s_ argument is
+the trace sequence, it can be used to create a custom string.
+The _args_  is a list of arguments, defined when the helper function was
+registered.
+
+RETURN VALUE
+------------
+The _tep_register_print_function()_ function returns 0 in case of success.
+In case of an error, TEP_ERRNO_... code is returned.
+
+The _tep_unregister_print_function()_ returns 0 in case of success, or -1 in
+case of an error.
+
+EXAMPLE
+-------
+Some events have internal functions calls, that appear in the print format
+output. For example "tracefs/events/i915/g4x_wm/format" has:
+[source,c]
+--
+print fmt: "pipe %c, frame=%u, scanline=%u, wm %d/%d/%d, sr %s/%d/%d/%d, hpll %s/%d/%d/%d, fbc %s",
+	    ((REC->pipe) + 'A'), REC->frame, REC->scanline, REC->primary,
+	    REC->sprite, REC->cursor, yesno(REC->cxsr), REC->sr_plane,
+	    REC->sr_cursor, REC->sr_fbc, yesno(REC->hpll), REC->hpll_plane,
+	    REC->hpll_cursor, REC->hpll_fbc, yesno(REC->fbc)
+--
+Notice the call to function _yesno()_ in the print arguments. In the kernel
+context, this function has the following implementation:
+[source,c]
+--
+static const char *yesno(int x)
+{
+	static const char *yes = "yes";
+	static const char *no = "no";
+
+	return x ? yes : no;
+}
+--
+The user space event parser has no idea how to handle this _yesno()_ function.
+The _tep_register_print_function()_ API can be used to register a user space
+helper function, mapped to the kernel's _yesno()_:
+[source,c]
+--
+#include <event-parse.h>
+#include <trace-seq.h>
+...
+struct tep_handle *tep = tep_alloc();
+...
+static const char *yes_no_helper(int x)
+{
+	return x ? "yes" : "no";
+}
+...
+	if ( tep_register_print_function(tep,
+				    yes_no_helper,
+				    TEP_FUNC_ARG_STRING,
+				    "yesno",
+				    TEP_FUNC_ARG_INT,
+				    TEP_FUNC_ARG_VOID) != 0) {
+		/* Failed to register yes_no_helper function */
+	}
+
+/*
+   Now, when the event parser encounters this yesno() function, it will know
+   how to handle it.
+*/
+...
+	if (tep_unregister_print_function(tep, yes_no_helper, "yesno") != 0) {
+		/* Failed to unregister yes_no_helper function */
+	}
+--
+
+FILES
+-----
+[verse]
+--
+*event-parse.h*
+	Header file to include in order to have access to the library APIs.
+*trace-seq.h*
+	Header file to include in order to have access to trace sequences
+	related APIs. Trace sequences are used to allow a function to call
+	several other functions to create a string of data to use.
+*-ltraceevent*
+	Linker switch to add when building a program that uses the library.
+--
+
+SEE ALSO
+--------
+_libtraceevent(3)_, _trace-cmd(1)_
+
+AUTHOR
+------
+[verse]
+--
+*Steven Rostedt* <rostedt@goodmis.org>, author of *libtraceevent*.
+*Tzvetomir Stoyanov* <tz.stoyanov@gmail.com>, author of this man page.
+--
+REPORTING BUGS
+--------------
+Report bugs to  <linux-trace-devel@vger.kernel.org>
+
+LICENSE
+-------
+libtraceevent is Free Software licensed under the GNU LGPL 2.1
+
+RESOURCES
+---------
+https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git

  reply	other threads:[~2019-05-18  9:08 UTC|newest]

Thread overview: 58+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-05-10 19:56 [PATCH 00/27] tools/lib/traceevent: Add man pages for most libtraceevent functions Steven Rostedt
2019-05-10 19:56 ` [PATCH 01/27] tools lib traceevent: Remove hard coded install paths from pkg-config file Steven Rostedt
2019-05-10 20:11   ` Steven Rostedt
2019-05-10 21:25     ` Arnaldo Carvalho de Melo
2019-05-14 15:05       ` Arnaldo Carvalho de Melo
2019-05-14 15:49         ` Steven Rostedt
2019-05-10 19:56 ` [PATCH 02/27] tools/lib/traceevent: Implement libtraceevent man pages Steven Rostedt
2019-05-18  9:00   ` [tip:perf/core] tools lib traceevent: Introduce " tip-bot for Tzvetomir Stoyanov
2019-05-10 19:56 ` [PATCH 03/27] tools/lib/traceevent: Add support for man pages with multiple names Steven Rostedt
2019-05-18  9:00   ` [tip:perf/core] tools lib traceevent: " tip-bot for Tzvetomir Stoyanov
2019-05-10 19:56 ` [PATCH 04/27] tools/lib/traceevent: libtraceevent man pages for tep_handler related APIs Steven Rostedt
2019-05-18  9:01   ` [tip:perf/core] tools lib traceevent: Man " tip-bot for Tzvetomir Stoyanov
2019-05-10 19:56 ` [PATCH 05/27] tools/lib/traceevent: Man page for header_page APIs Steven Rostedt
2019-05-18  9:02   ` [tip:perf/core] tools lib traceevent: " tip-bot for Tzvetomir Stoyanov
2019-05-10 19:56 ` [PATCH 06/27] tools/lib/traceevent: Man page for get/set cpus APIs Steven Rostedt
2019-05-18  9:02   ` [tip:perf/core] tools lib traceevent: " tip-bot for Tzvetomir Stoyanov
2019-05-10 19:56 ` [PATCH 07/27] tools/lib/traceevent: Man page for file endian APIs Steven Rostedt
2019-05-18  9:03   ` [tip:perf/core] tools lib traceevent: " tip-bot for Tzvetomir Stoyanov
2019-05-10 19:56 ` [PATCH 08/27] tools/lib/traceevent: Man page for host " Steven Rostedt
2019-05-18  9:04   ` [tip:perf/core] tools lib traceevent: " tip-bot for Tzvetomir Stoyanov
2019-05-10 19:56 ` [PATCH 09/27] tools/lib/traceevent: Man page for page size APIs Steven Rostedt
2019-05-18  9:05   ` [tip:perf/core] tools lib traceevent: " tip-bot for Tzvetomir Stoyanov
2019-05-10 19:56 ` [PATCH 10/27] tools/lib/traceevent: Man page for tep_strerror() Steven Rostedt
2019-05-18  9:05   ` [tip:perf/core] tools lib traceevent: " tip-bot for Tzvetomir Stoyanov
2019-05-10 19:56 ` [PATCH 11/27] tools/lib/traceevent: Man pages for event handler APIs Steven Rostedt
2019-05-18  9:06   ` [tip:perf/core] tools lib traceevent: " tip-bot for Tzvetomir Stoyanov
2019-05-10 19:56 ` [PATCH 12/27] tools/lib/traceevent: Man pages for function related libtraceevent APIs Steven Rostedt
2019-05-18  9:07   ` [tip:perf/core] tools lib traceevent: " tip-bot for Tzvetomir Stoyanov
2019-05-10 19:56 ` [PATCH 13/27] tools/lib/traceevent: Man pages for registering print function Steven Rostedt
2019-05-18  9:08   ` tip-bot for Tzvetomir Stoyanov [this message]
2019-05-10 19:56 ` [PATCH 14/27] tools/lib/traceevent: Man page for tep_read_number() Steven Rostedt
2019-05-18  9:08   ` [tip:perf/core] tools lib traceevent: " tip-bot for Tzvetomir Stoyanov
2019-05-10 19:56 ` [PATCH 15/27] tools/lib/traceevent: Man pages for event find APIs Steven Rostedt
2019-05-18  9:09   ` [tip:perf/core] tools lib traceevent: " tip-bot for Tzvetomir Stoyanov
2019-05-10 19:56 ` [PATCH 16/27] tools/lib/traceevent: Man page for list events APIs Steven Rostedt
2019-05-18  9:10   ` [tip:perf/core] tools lib traceevent: " tip-bot for Tzvetomir Stoyanov
2019-05-10 19:56 ` [PATCH 17/27] tools/lib/traceevent: Man pages for libtraceevent event get APIs Steven Rostedt
2019-05-18  9:10   ` [tip:perf/core] tools lib traceevent: " tip-bot for Tzvetomir Stoyanov
2019-05-10 19:56 ` [PATCH 18/27] tools/lib/traceevent: Man pages find field APIs Steven Rostedt
2019-05-18  9:11   ` [tip:perf/core] tools lib traceevent: Man pages for " tip-bot for Tzvetomir Stoyanov
2019-05-10 19:56 ` [PATCH 19/27] tools/lib/traceevent: Man pages get field value APIs Steven Rostedt
2019-05-18  9:12   ` [tip:perf/core] tools lib traceevent: Man pages for " tip-bot for Tzvetomir Stoyanov
2019-05-10 19:56 ` [PATCH 20/27] tools/lib/traceevent: Man pages for print field APIs Steven Rostedt
2019-05-18  9:13   ` [tip:perf/core] tools lib traceevent: " tip-bot for Tzvetomir Stoyanov
2019-05-10 19:56 ` [PATCH 21/27] tools/lib/traceevent: Man page for tep_read_number_field() Steven Rostedt
2019-05-18  9:13   ` [tip:perf/core] tools lib traceevent: " tip-bot for Tzvetomir Stoyanov
2019-05-10 19:56 ` [PATCH 22/27] tools/lib/traceevent: Man pages for event fields APIs Steven Rostedt
2019-05-18  9:14   ` [tip:perf/core] tools lib traceevent: " tip-bot for Tzvetomir Stoyanov
2019-05-10 19:56 ` [PATCH 23/27] tools/lib/traceevent: Man pages for event filter APIs Steven Rostedt
2019-05-18  9:15   ` [tip:perf/core] tools lib traceevent: " tip-bot for Tzvetomir Stoyanov
2019-05-10 19:56 ` [PATCH 24/27] tools/lib/traceevent: Man pages for parse event APIs Steven Rostedt
2019-05-18  9:16   ` [tip:perf/core] tools lib traceevent: " tip-bot for Tzvetomir Stoyanov
2019-05-10 19:56 ` [PATCH 25/27] tools/lib/traceevent: Man page for tep_parse_header_page() Steven Rostedt
2019-05-18  9:16   ` [tip:perf/core] tools lib traceevent: " tip-bot for Tzvetomir Stoyanov
2019-05-10 19:56 ` [PATCH 26/27] tools/lib/traceevent: Man pages for APIs, used to extract common fields from a record Steven Rostedt
2019-05-18  9:17   ` [tip:perf/core] tools lib traceevent: Man pages for APIs " tip-bot for Tzvetomir Stoyanov
2019-05-10 19:56 ` [PATCH 27/27] tools/lib/traceevent: Man pages for trace sequences APIs Steven Rostedt
2019-05-18  9:18   ` [tip:perf/core] tools lib traceevent: " tip-bot for Tzvetomir Stoyanov

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=tip-10e679751cde169434dffb6c87f9b93c02050bef@git.kernel.org \
    --to=tipbot@zytor.com \
    --cc=acme@redhat.com \
    --cc=akpm@linux-foundation.org \
    --cc=hpa@zytor.com \
    --cc=jolsa@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-tip-commits@vger.kernel.org \
    --cc=mingo@kernel.org \
    --cc=namhyung@kernel.org \
    --cc=rostedt@goodmis.org \
    --cc=tglx@linutronix.de \
    --cc=tstoyanov@vmware.com \
    /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.