All of lore.kernel.org
 help / color / mirror / Atom feed
From: Alexandre Vicenzi <alexandre.vicenzi@suse.com>
To: linux-trace-devel@vger.kernel.org
Cc: rostedt@goodmis.org, Alexandre Vicenzi <alexandre.vicenzi@suse.com>
Subject: [PATCH 1/3] libtracefs: Add tracefs_tracer_available helper
Date: Fri, 26 Aug 2022 16:24:18 +0200	[thread overview]
Message-ID: <20220826142420.29911-1-alexandre.vicenzi@suse.com> (raw)

Add tracefs_tracer_available helper function to check if a giver tracer is available.

Signed-off-by: Alexandre Vicenzi <alexandre.vicenzi@suse.com>
---
 Documentation/libtracefs-utils.txt | 11 +++++++++--
 Documentation/libtracefs.txt       |  1 +
 include/tracefs.h                  |  2 ++
 src/tracefs-utils.c                | 28 ++++++++++++++++++++++++++++
 utest/tracefs-utest.c              |  3 +++
 5 files changed, 43 insertions(+), 2 deletions(-)

diff --git a/Documentation/libtracefs-utils.txt b/Documentation/libtracefs-utils.txt
index ddbd675..ab16cc6 100644
--- a/Documentation/libtracefs-utils.txt
+++ b/Documentation/libtracefs-utils.txt
@@ -3,8 +3,8 @@ libtracefs(3)
 
 NAME
 ----
-tracefs_tracers, tracefs_get_clock, tracefs_list_free, tracefs_list_add,
-tracefs_list_size - Helper functions for working with trace file system.
+tracefs_tracers, tracefs_tracer_available, tracefs_get_clock, tracefs_list_free,
+tracefs_list_add, tracefs_list_size - Helper functions for working with trace file system.
 
 SYNOPSIS
 --------
@@ -13,6 +13,7 @@ SYNOPSIS
 *#include <tracefs.h>*
 
 char pass:[*]pass:[*]*tracefs_tracers*(const char pass:[*]_tracing_dir_);
+bool *tracefs_tracer_available*(const char pass:[*]_tracing_dir_, const char pass:[*]_tracer_);
 char pass:[*]*tracefs_get_clock*(struct tracefs_instance pass:[*]_instance_);
 void *tracefs_list_free*(char pass:[*]pass:[*]_list_);
 char pass:[**]*tracefs_list_add*(char **_list_, const char *_string_);
@@ -30,6 +31,9 @@ for the trace systems of the local machine, or it may be a path to a copy
 of the tracefs directory from another machine. The last entry in the array
 as a NULL pointer. The array must be freed with *tracefs_list_free()* API.
 
+The *tracefs_tracer_available()* returns true if the _tracer_ is available
+in the given _tracing_dir_director_, and false otherwise.
+
 The *tracefs_get_clock()* function returns name of the current trace clock,
 used in the given _instance_. If _instance_ is NULL, the clock of the main
 trace instance is returned. The returned string must be freed with free().
@@ -56,6 +60,9 @@ The *tracefs_tracers()* returns array of strings. The last element in that
 array is a NULL pointer. The array must be freed with *tracefs_list_free()* API.
 In case of an error, NULL is returned.
 
+The *tracefs_tracer_available()* returns true if the _tracer_ is available,
+and false otherwise.
+
 The *tracefs_get_clock()* returns string, that must be freed with free(), or NULL
 in case of an error.
 
diff --git a/Documentation/libtracefs.txt b/Documentation/libtracefs.txt
index 82cb574..4f016f7 100644
--- a/Documentation/libtracefs.txt
+++ b/Documentation/libtracefs.txt
@@ -112,6 +112,7 @@ Trace options:
 
 Ftrace tracers:
 	char pass:[*]pass:[*]*tracefs_tracers*(const char pass:[*]_tracing_dir_);
+	bool *tracefs_tracer_available*(const char pass:[*]_tracing_dir_, const char pass:[*]_tracer_);
 	int *tracefs_tracer_set*(struct tracefs_instance pass:[*]_instance_, enum tracefs_tracers _tracer_);
 	int *tracefs_tracer_set*(struct tracefs_instance pass:[*]_instance_, enum tracefs_tracers _tracer_, const char pass:[*]_name_);
 	int *tracefs_tracer_clear*(struct tracefs_instance pass:[*]_instance_);
diff --git a/include/tracefs.h b/include/tracefs.h
index 693860d..ffa6842 100644
--- a/include/tracefs.h
+++ b/include/tracefs.h
@@ -77,6 +77,8 @@ void tracefs_list_free(char **list);
 char **tracefs_list_add(char **list, const char *string);
 int tracefs_list_size(char **list);
 
+bool tracefs_tracer_available(const char *tracing_dir, const char *tracer);
+
 /**
  * tracefs_trace_on_get_fd - Get a file descriptor of "tracing_on" in given instance
  * @instance: ftrace instance, can be NULL for the top instance
diff --git a/src/tracefs-utils.c b/src/tracefs-utils.c
index 22f82af..766ed1b 100644
--- a/src/tracefs-utils.c
+++ b/src/tracefs-utils.c
@@ -514,3 +514,31 @@ int tracefs_list_size(char **list)
 	list--;
 	return (int)*(unsigned long *)list;
 }
+
+/**
+ * tracefs_tracer_available - test if a tracer is available
+ * @tracing_dir: The directory that contains the tracing directory
+ * @tracer: The name of the tracer
+ *
+ * Return true if the tracer is available
+ */
+bool tracefs_tracer_available(const char *tracing_dir, const char *tracer)
+{
+	bool ret = false;
+	char **tracers = NULL;
+	int i;
+
+	tracers = tracefs_tracers(tracing_dir);
+	if (!tracers)
+		return false;
+
+	for (i = 0; tracers[i]; i++) {
+		if (strcmp(tracer, tracers[i]) == 0) {
+			ret = true;
+			break;
+		}
+	}
+
+	tracefs_list_free(tracers);
+	return ret;
+}
diff --git a/utest/tracefs-utest.c b/utest/tracefs-utest.c
index 3f63837..1ab43d2 100644
--- a/utest/tracefs-utest.c
+++ b/utest/tracefs-utest.c
@@ -1404,6 +1404,9 @@ static void test_instance_tracers(struct tracefs_instance *instance)
 	tracers = tracefs_tracers(tdir);
 	CU_TEST(tracers != NULL);
 
+	for (i = 0; tracers[i]; i++)
+		CU_TEST(tracefs_tracer_available(tdir, tracers[i]));
+
 	tfile = tracefs_instance_file_read(NULL, ALL_TRACERS, NULL);
 
 	tracer = strtok(tfile, " ");
-- 
2.34.1


             reply	other threads:[~2022-08-26 14:25 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-08-26 14:24 Alexandre Vicenzi [this message]
2022-08-26 14:24 ` [PATCH 2/3] libtracefs: Fix test suite typo Alexandre Vicenzi
2022-08-26 14:24 ` [PATCH 3/3] libtracefs: Add test instructions for openSUSE Alexandre Vicenzi
2022-09-08 23:32 ` [PATCH 1/3] libtracefs: Add tracefs_tracer_available helper Steven Rostedt

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=20220826142420.29911-1-alexandre.vicenzi@suse.com \
    --to=alexandre.vicenzi@suse.com \
    --cc=linux-trace-devel@vger.kernel.org \
    --cc=rostedt@goodmis.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.