aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSteven Rostedt (Google) <rostedt@goodmis.org>2023-12-24 14:15:58 -0500
committerSteven Rostedt (Google) <rostedt@goodmis.org>2023-12-24 14:28:01 -0500
commitafead9a7df92770eff62275b9336c497c3d25767 (patch)
treea2aee75cd48d982d4e9e79f77ea07e5b01b83c41
parent3152506f546ff760b93b7c13bf43fa93b8547276 (diff)
downloadlibtraceevent-afead9a7df92770eff62275b9336c497c3d25767.tar.gz
libtraceevent: Add tep_get_sub_buffer_commit_offset()
Add a function that retrieves the offset on the sub-buffer to find where the "commit" variable of the sub buffer is located. Link: https://lore.kernel.org/linux-trace-devel/20231224191813.1076074-2-rostedt@goodmis.org Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
-rw-r--r--Documentation/libtraceevent-page_size.txt9
-rw-r--r--Documentation/libtraceevent.txt1
-rw-r--r--include/traceevent/event-parse.h1
-rw-r--r--src/event-parse-api.c15
4 files changed, 26 insertions, 0 deletions
diff --git a/Documentation/libtraceevent-page_size.txt b/Documentation/libtraceevent-page_size.txt
index 6d0dd36..0264e52 100644
--- a/Documentation/libtraceevent-page_size.txt
+++ b/Documentation/libtraceevent-page_size.txt
@@ -15,6 +15,7 @@ SYNOPSIS
int *tep_get_page_size*(struct tep_handle pass:[*]_tep_);
void *tep_set_page_size*(struct tep_handle pass:[*]_tep_, int _page_size_);
int *tep_get_sub_buffer_size*(struct tep_handle pass:[*]_tep_);
+int *tep_get_sub_buffer_commit_offset*(struct tep_handle pass:[*]_tep_);
--
DESCRIPTION
@@ -32,6 +33,11 @@ The *tep_get_sub_buffer_size()* returns the size of each "sub buffer" of the
ring buffer. The Linux kernel ring buffer is broken up into sections called
sub buffers. This returns the size of those buffers.
+The *tep_get_sub_buffer_commit_offset()* returns the offset on the sub buffer
+that holds the committed portion of data. This number contains the index from
+the data portion of the sub buffer that is the end of the last element on the
+sub buffer.
+
RETURN VALUE
------------
The *tep_get_page_size()* function returns size of the memory page, in bytes.
@@ -39,6 +45,9 @@ The *tep_get_page_size()* function returns size of the memory page, in bytes.
The *tep_get_sub_buffer_size()* function returns the number of bytes each sub
buffer is made up of.
+The *tep_get_sub_buffer_commit_offset()* function returns the location on the
+sub buffer that contains the index of the last element.
+
EXAMPLE
-------
[source,c]
diff --git a/Documentation/libtraceevent.txt b/Documentation/libtraceevent.txt
index 2ae6628..07b9a2d 100644
--- a/Documentation/libtraceevent.txt
+++ b/Documentation/libtraceevent.txt
@@ -27,6 +27,7 @@ Management of tep handler data structure and access of its members:
int *tep_get_page_size*(struct tep_handle pass:[*]_tep_);
void *tep_set_page_size*(struct tep_handle pass:[*]_tep_, int _page_size_);
int *tep_get_sub_buffer_size*(struct tep_handle pass:[*]_tep_);
+ int *tep_get_sub_buffer_commit_offset*(struct tep_handle pass:[*]_tep_);
int *tep_get_header_page_size*(struct tep_handle pass:[*]_tep_);
int *tep_get_header_timestamp_size*(struct tep_handle pass:[*]_tep_);
bool *tep_is_old_format*(struct tep_handle pass:[*]_tep_);
diff --git a/include/traceevent/event-parse.h b/include/traceevent/event-parse.h
index e0785f7..adfb770 100644
--- a/include/traceevent/event-parse.h
+++ b/include/traceevent/event-parse.h
@@ -588,6 +588,7 @@ int tep_get_long_size(struct tep_handle *tep);
void tep_set_long_size(struct tep_handle *tep, int long_size);
int tep_get_page_size(struct tep_handle *tep);
int tep_get_sub_buffer_size(struct tep_handle *tep);
+int tep_get_sub_buffer_commit_offset(struct tep_handle *tep);
void tep_set_page_size(struct tep_handle *tep, int _page_size);
bool tep_is_file_bigendian(struct tep_handle *tep);
void tep_set_file_bigendian(struct tep_handle *tep, enum tep_endian endian);
diff --git a/src/event-parse-api.c b/src/event-parse-api.c
index 268a586..1a94573 100644
--- a/src/event-parse-api.c
+++ b/src/event-parse-api.c
@@ -278,6 +278,21 @@ int tep_get_sub_buffer_size(struct tep_handle *tep)
}
/**
+ * tep_get_sub_buffer_commit_offset - return offset of the commit location
+ * @tep: the handle to the tep_handle
+ *
+ * Returns the offset of where to find the "commit" field of the offset.
+ * Use tep_get_header_page_size() to find the size of the commit field.
+ */
+int tep_get_sub_buffer_commit_offset(struct tep_handle *tep)
+{
+ if (!tep)
+ return -1;
+
+ return tep->header_page_size_offset;
+}
+
+/**
* tep_is_file_bigendian - return the endian of the file
* @tep: a handle to the tep_handle
*