From: "Tzvetomir Stoyanov (VMware)" <tz.stoyanov@gmail.com>
To: rostedt@goodmis.org
Cc: linux-trace-devel@vger.kernel.org
Subject: [PATCH v2 53/87] trace-cmd library: Initialize CPU data for reading from version 7 trace files
Date: Thu, 29 Jul 2021 08:09:25 +0300 [thread overview]
Message-ID: <20210729050959.12263-54-tz.stoyanov@gmail.com> (raw)
In-Reply-To: <20210729050959.12263-1-tz.stoyanov@gmail.com>
In version 7 trace files, CPU trace data is written in slightly
different way than in version 6 files. Added new CPU data initialization
flow, to handle version 7 files:
- the top trace instance is saved in the same way as the other trace
instances.
- per CPU trace metadata is stored in the buffer option.
- trace data section has section header.
- trace data can be compressed.
Signed-off-by: Tzvetomir Stoyanov (VMware) <tz.stoyanov@gmail.com>
---
lib/trace-cmd/trace-input.c | 178 +++++++++++++++++++++++++-----------
1 file changed, 124 insertions(+), 54 deletions(-)
diff --git a/lib/trace-cmd/trace-input.c b/lib/trace-cmd/trace-input.c
index f3783a98..3b58cb0a 100644
--- a/lib/trace-cmd/trace-input.c
+++ b/lib/trace-cmd/trace-input.c
@@ -3327,34 +3327,18 @@ static int read_options_type(struct tracecmd_input *handle)
return 0;
}
-static int read_cpu_data(struct tracecmd_input *handle)
+static int init_cpu_data(struct tracecmd_input *handle)
{
- struct tep_handle *pevent = handle->pevent;
enum kbuffer_long_size long_size;
enum kbuffer_endian endian;
- unsigned long long size;
unsigned long long max_size = 0;
unsigned long long pages;
- int cpus;
int cpu;
- /*
- * Check if this is a latency report or not.
- */
- if (handle->file_state == TRACECMD_FILE_CPU_LATENCY)
- return 1;
-
/* We expect this to be flyrecord */
if (handle->file_state != TRACECMD_FILE_CPU_FLYRECORD)
return -1;
- cpus = handle->cpus;
-
- handle->cpu_data = malloc(sizeof(*handle->cpu_data) * handle->cpus);
- if (!handle->cpu_data)
- return -1;
- memset(handle->cpu_data, 0, sizeof(*handle->cpu_data) * handle->cpus);
-
if (force_read)
handle->read_page = true;
@@ -3369,32 +3353,15 @@ static int read_cpu_data(struct tracecmd_input *handle)
endian = KBUFFER_ENDIAN_LITTLE;
for (cpu = 0; cpu < handle->cpus; cpu++) {
- unsigned long long offset;
-
- handle->cpu_data[cpu].cpu = cpu;
handle->cpu_data[cpu].compress.fd = -1;
handle->cpu_data[cpu].kbuf = kbuffer_alloc(long_size, endian);
if (!handle->cpu_data[cpu].kbuf)
goto out_free;
- if (tep_is_old_format(pevent))
+ if (tep_is_old_format(handle->pevent))
kbuffer_set_old_format(handle->cpu_data[cpu].kbuf);
- read8(handle, &offset);
- read8(handle, &size);
-
- handle->cpu_data[cpu].file_offset = offset;
- handle->cpu_data[cpu].file_size = size;
- if (size > max_size)
- max_size = size;
-
- if (size && (offset + size > handle->total_file_size)) {
- /* this happens if the file got truncated */
- printf("File possibly truncated. "
- "Need at least %llu, but file size is %zu.\n",
- offset + size, handle->total_file_size);
- errno = EINVAL;
- goto out_free;
- }
+ if (handle->cpu_data[cpu].file_size > max_size)
+ max_size = handle->cpu_data[cpu].file_size;
}
/* Calculate about a meg of pages for buffering */
@@ -3412,6 +3379,102 @@ static int read_cpu_data(struct tracecmd_input *handle)
goto out_free;
}
+ return 0;
+
+ out_free:
+ for ( ; cpu >= 0; cpu--) {
+ free_page(handle, cpu);
+ kbuffer_free(handle->cpu_data[cpu].kbuf);
+ handle->cpu_data[cpu].kbuf = NULL;
+ }
+ return -1;
+}
+
+static int init_buffer_cpu_data(struct tracecmd_input *handle, struct input_buffer_instance *buffer)
+{
+ unsigned long long offset;
+ unsigned long long size;
+ unsigned short id, flags;
+ int cpu;
+
+ if (handle->cpu_data)
+ return -1;
+
+ if (lseek64(handle->fd, buffer->offset, SEEK_SET) == (off_t)-1)
+ return -1;
+ if (read_section_header(handle, &id, &flags, NULL, NULL))
+ return -1;
+ if (flags & TRACECMD_SEC_FL_COMPRESS)
+ handle->cpu_compressed = true;
+ handle->file_state = TRACECMD_FILE_CPU_FLYRECORD;
+ handle->cpus = buffer->cpus;
+ if (handle->max_cpu < handle->cpus)
+ handle->max_cpu = handle->cpus;
+
+ handle->cpu_data = calloc(handle->cpus, sizeof(*handle->cpu_data));
+ if (!handle->cpu_data)
+ return -1;
+
+ for (cpu = 0; cpu < handle->cpus; cpu++) {
+ handle->cpu_data[cpu].cpu = buffer->cpu_data[cpu].cpu;
+ offset = buffer->cpu_data[cpu].offset;
+ size = buffer->cpu_data[cpu].size;
+ handle->cpu_data[cpu].file_offset = offset;
+ handle->cpu_data[cpu].file_size = size;
+ if (size && (offset + size > handle->total_file_size)) {
+ /* this happens if the file got truncated */
+ printf("File possibly truncated. "
+ "Need at least %llu, but file size is %zu.\n",
+ offset + size, handle->total_file_size);
+ errno = EINVAL;
+ return -1;
+ }
+ }
+
+ return init_cpu_data(handle);
+}
+
+static int read_cpu_data(struct tracecmd_input *handle)
+{
+ unsigned long long size;
+ int cpus;
+ int cpu;
+
+ /*
+ * Check if this is a latency report or not.
+ */
+ if (handle->file_state == TRACECMD_FILE_CPU_LATENCY)
+ return 1;
+
+ /* We expect this to be flyrecord */
+ if (handle->file_state != TRACECMD_FILE_CPU_FLYRECORD)
+ return -1;
+
+ cpus = handle->cpus;
+
+ handle->cpu_data = malloc(sizeof(*handle->cpu_data) * handle->cpus);
+ if (!handle->cpu_data)
+ return -1;
+ memset(handle->cpu_data, 0, sizeof(*handle->cpu_data) * handle->cpus);
+
+ for (cpu = 0; cpu < handle->cpus; cpu++) {
+ unsigned long long offset;
+
+ handle->cpu_data[cpu].cpu = cpu;
+ read8(handle, &offset);
+ read8(handle, &size);
+ handle->cpu_data[cpu].file_offset = offset;
+ handle->cpu_data[cpu].file_size = size;
+ if (size && (offset + size > handle->total_file_size)) {
+ /* this happens if the file got truncated */
+ printf("File possibly truncated. "
+ "Need at least %llu, but file size is %zu.\n",
+ offset + size, handle->total_file_size);
+ errno = EINVAL;
+ return -1;
+ }
+ }
+
/*
* It is possible that an option changed the number of CPUs.
* If that happened, then there's "empty" cpu data saved for
@@ -3431,15 +3494,7 @@ static int read_cpu_data(struct tracecmd_input *handle)
}
}
- return 0;
-
- out_free:
- for ( ; cpu >= 0; cpu--) {
- free_page(handle, cpu);
- kbuffer_free(handle->cpu_data[cpu].kbuf);
- handle->cpu_data[cpu].kbuf = NULL;
- }
- return -1;
+ return init_cpu_data(handle);
}
static int read_data_and_size(struct tracecmd_input *handle,
@@ -3542,14 +3597,7 @@ static int read_and_parse_trace_clock(struct tracecmd_input *handle,
return 0;
}
-/**
- * tracecmd_init_data - prepare reading the data from trace.dat
- * @handle: input handle for the trace.dat file
- *
- * This prepares reading the data from trace.dat. This is called
- * after tracecmd_read_headers() and before tracecmd_read_data().
- */
-int tracecmd_init_data(struct tracecmd_input *handle)
+static int init_data_v6(struct tracecmd_input *handle)
{
struct tep_handle *pevent = handle->pevent;
int ret;
@@ -3571,7 +3619,29 @@ int tracecmd_init_data(struct tracecmd_input *handle)
tracecmd_parse_trace_clock(handle, clock, 8);
}
}
+ return ret;
+}
+
+static int init_data_v7(struct tracecmd_input *handle)
+{
+ return init_buffer_cpu_data(handle, &handle->top_buffer);
+}
+
+/**
+ * tracecmd_init_data - prepare reading the data from trace.dat
+ * @handle: input handle for the trace.dat file
+ *
+ * This prepares reading the data from trace.dat. This is called
+ * after tracecmd_read_headers() and before tracecmd_read_data().
+ */
+int tracecmd_init_data(struct tracecmd_input *handle)
+{
+ int ret;
+ if (handle->file_version < 7)
+ ret = init_data_v6(handle);
+ else
+ ret = init_data_v7(handle);
tracecmd_blk_hack(handle);
return ret;
--
2.31.1
next prev parent reply other threads:[~2021-07-29 5:10 UTC|newest]
Thread overview: 118+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-07-29 5:08 [PATCH v2 00/87] Trace file version 7 Tzvetomir Stoyanov (VMware)
2021-07-29 5:08 ` [PATCH v2 01/87] trace-cmd library: Read option id with correct endian Tzvetomir Stoyanov (VMware)
2021-07-29 5:08 ` [PATCH v2 02/87] trace-cmd report: Fix typos in error messages Tzvetomir Stoyanov (VMware)
2021-07-29 5:08 ` [PATCH v2 03/87] tarce-cmd library: Fix version string memory leak Tzvetomir Stoyanov (VMware)
2021-07-29 5:08 ` [PATCH v2 04/87] trace-cmd library: Fixed a memory leak on input handler close Tzvetomir Stoyanov (VMware)
2021-07-29 19:36 ` Steven Rostedt
2021-07-29 5:08 ` [PATCH v2 05/87] trace-cmd library: Fix possible memory corruption on processing a trace buffer Tzvetomir Stoyanov (VMware)
2021-07-29 19:39 ` Steven Rostedt
2021-07-29 19:52 ` Steven Rostedt
2021-07-29 5:08 ` [PATCH v2 06/87] trace-cmd library: Add constructor and destructor Tzvetomir Stoyanov (VMware)
2021-07-29 20:06 ` Steven Rostedt
2021-07-29 5:08 ` [PATCH v2 07/87] trace-cmd library: Add cache functionality to network message handler Tzvetomir Stoyanov (VMware)
2021-07-29 20:33 ` Steven Rostedt
2021-07-29 5:08 ` [PATCH v2 08/87] trace-cmd library: Add support for compression algorithms Tzvetomir Stoyanov (VMware)
2021-07-29 21:02 ` Steven Rostedt
2021-07-29 5:08 ` [PATCH v2 09/87] trace-cmd list: Show supported " Tzvetomir Stoyanov (VMware)
2021-07-29 5:08 ` [PATCH v2 10/87] trace-cmd library: Internal helpers for compressing data Tzvetomir Stoyanov (VMware)
2021-07-29 5:08 ` [PATCH v2 11/87] trace-cmd library: Internal helpers for uncompressing data Tzvetomir Stoyanov (VMware)
2021-07-29 5:08 ` [PATCH v2 12/87] trace-cmd library: Define trace file version 7 Tzvetomir Stoyanov (VMware)
2021-07-29 5:08 ` [PATCH v2 13/87] trace-cmd library: Refactor APIs for creating output handler Tzvetomir Stoyanov (VMware)
2021-07-29 5:08 ` [PATCH v2 14/87] trace-cmd library: Reuse within the library the function that checks file state Tzvetomir Stoyanov (VMware)
2021-07-29 5:08 ` [PATCH v2 15/87] trace-cmd library: New API to get the version of output handler Tzvetomir Stoyanov (VMware)
2021-07-29 5:08 ` [PATCH v2 16/87] trace-cmd library: Inherit compression algorithm from input file Tzvetomir Stoyanov (VMware)
2021-07-29 5:08 ` [PATCH v2 17/87] trace-cmd library: New API to configure compression on an output handler Tzvetomir Stoyanov (VMware)
2021-08-05 21:15 ` Steven Rostedt
2021-07-29 5:08 ` [PATCH v2 18/87] trace-cmd record: Add compression to the trace context Tzvetomir Stoyanov (VMware)
2021-07-29 5:08 ` [PATCH v2 19/87] trace-cmd library: Write compression header in the trace file Tzvetomir Stoyanov (VMware)
2021-07-29 5:08 ` [PATCH v2 20/87] trace-cmd library: Compress part of " Tzvetomir Stoyanov (VMware)
2021-08-05 21:27 ` Steven Rostedt
2021-07-29 5:08 ` [PATCH v2 21/87] trace-cmd library: Add internal helper functon for writing headers before file sections Tzvetomir Stoyanov (VMware)
2021-07-29 5:08 ` [PATCH v2 22/87] trace-cmd library: Write header " Tzvetomir Stoyanov (VMware)
2021-07-29 5:08 ` [PATCH v2 23/87] trace-cmd library: Refactor the logic for writing trace data in the file Tzvetomir Stoyanov (VMware)
2021-07-29 5:08 ` [PATCH v2 24/87] trace-cmd library: Add local helper function for data compression Tzvetomir Stoyanov (VMware)
2021-08-17 14:53 ` Steven Rostedt
2021-07-29 5:08 ` [PATCH v2 25/87] trace-cmd library: Compress the trace data Tzvetomir Stoyanov (VMware)
2021-07-29 5:08 ` [PATCH v2 26/87] tarce-cmd library: Add multiple options sections in trace file version 7 Tzvetomir Stoyanov (VMware)
2021-07-29 5:08 ` [PATCH v2 27/87] trace-cmd library: Do not write CPU count section in trace files " Tzvetomir Stoyanov (VMware)
2021-07-29 5:09 ` [PATCH v2 28/87] trace-cmd library: Move CPU flyrecord trace metadata into the buffer option, for trace file " Tzvetomir Stoyanov (VMware)
2021-08-17 15:40 ` Steven Rostedt
2021-09-02 13:20 ` Tzvetomir Stoyanov
2021-07-29 5:09 ` [PATCH v2 29/87] trace-cmd record: Append trace options after the trace data are written Tzvetomir Stoyanov (VMware)
2021-07-29 5:09 ` [PATCH v2 30/87] trace-cmd library: Add section header before flyrecord trace data Tzvetomir Stoyanov (VMware)
2021-07-29 5:09 ` [PATCH v2 31/87] trace-cmd library: Fit CPU latency trace data in the new trace file version 7 format Tzvetomir Stoyanov (VMware)
2021-08-17 15:44 ` Steven Rostedt
2021-09-02 12:48 ` Tzvetomir Stoyanov
2021-08-19 19:10 ` Steven Rostedt
2021-07-29 5:09 ` [PATCH v2 32/87] trace-cmd library: Do not write CPUs with empty trace data Tzvetomir Stoyanov (VMware)
2021-07-29 5:09 ` [PATCH v2 33/87] trace-cmd library: Add macro to check file state on reading Tzvetomir Stoyanov (VMware)
2021-07-29 5:09 ` [PATCH v2 34/87] trace-cmd library: Introduce sections in trace file reading logic Tzvetomir Stoyanov (VMware)
2021-08-19 17:53 ` Steven Rostedt
2021-07-29 5:09 ` [PATCH v2 35/87] trace-cmd library: Initialize internal sections database on file read Tzvetomir Stoyanov (VMware)
2021-08-19 17:57 ` Steven Rostedt
2021-07-29 5:09 ` [PATCH v2 36/87] trace-cmd library: Use sections database when reading parts of the trace file Tzvetomir Stoyanov (VMware)
2021-07-29 5:09 ` [PATCH v2 37/87] trace-cmd library: Set log size to the input tep handler when it is read from the file Tzvetomir Stoyanov (VMware)
2021-08-19 18:01 ` Steven Rostedt
2021-07-29 5:09 ` [PATCH v2 38/87] trace-cmd library: Fix possible memory leak in read_ftrace_files() Tzvetomir Stoyanov (VMware)
2021-08-19 18:07 ` Steven Rostedt
2021-08-19 18:08 ` Steven Rostedt
2021-07-29 5:09 ` [PATCH v2 39/87] trace-cmd library: Fix possible memory leak in read_event_files() Tzvetomir Stoyanov (VMware)
2021-07-29 5:09 ` [PATCH v2 40/87] trace-cmd library: Fix possible memory leak in read_proc_kallsyms() Tzvetomir Stoyanov (VMware)
2021-07-29 5:09 ` [PATCH v2 41/87] trace-cmd library: Fix possible memory leak in read_ftrace_printk() Tzvetomir Stoyanov (VMware)
2021-07-29 5:09 ` [PATCH v2 42/87] trace-cmd library: Fix possible memory leak in read_and_parse_cmdlines() Tzvetomir Stoyanov (VMware)
2021-07-29 5:09 ` [PATCH v2 43/87] trace-cmd library: Track maximum CPUs count in input handler Tzvetomir Stoyanov (VMware)
2021-07-29 5:09 ` [PATCH v2 44/87] trace-cmd library: Set input handler default values in allocation function Tzvetomir Stoyanov (VMware)
2021-08-19 18:11 ` Steven Rostedt
2021-07-29 5:09 ` [PATCH v2 45/87] trace-cmd library: Read headers from trace file version 7 Tzvetomir Stoyanov (VMware)
2021-07-29 5:09 ` [PATCH v2 46/87] tarce-cmd library: Do not use local variables when reading CPU stat option Tzvetomir Stoyanov (VMware)
2021-07-29 5:09 ` [PATCH v2 47/87] trace-cmd library: Read handle header and compression of the option section Tzvetomir Stoyanov (VMware)
2021-07-29 5:09 ` [PATCH v2 48/87] trace-cmd library: Read extended BUFFER option Tzvetomir Stoyanov (VMware)
2021-08-19 18:54 ` Steven Rostedt
2021-07-29 5:09 ` [PATCH v2 49/87] trace-cmd library: Handle the extended DONE option Tzvetomir Stoyanov (VMware)
2021-08-19 19:13 ` Steven Rostedt
2021-07-29 5:09 ` [PATCH v2 50/87] trace-cmd library: Read compression header Tzvetomir Stoyanov (VMware)
2021-08-19 19:15 ` Steven Rostedt
2021-07-29 5:09 ` [PATCH v2 51/87] trace-cmd library: Extend the input handler with trace data decompression context Tzvetomir Stoyanov (VMware)
2021-08-19 19:18 ` Steven Rostedt
2021-09-02 12:46 ` Tzvetomir Stoyanov
2021-07-29 5:09 ` [PATCH v2 52/87] trace-cmd library: Initialize CPU data decompression logic Tzvetomir Stoyanov (VMware)
2021-07-29 5:09 ` Tzvetomir Stoyanov (VMware) [this message]
2021-07-29 5:09 ` [PATCH v2 54/87] trace-cmd library: Add logic for in-memory decompression Tzvetomir Stoyanov (VMware)
2021-07-29 5:09 ` [PATCH v2 55/87] trace-cmd library: Handle latency trace in version 7 files Tzvetomir Stoyanov (VMware)
2021-07-29 5:09 ` [PATCH v2 56/87] trace-cmd library: Handle buffer trace data init for " Tzvetomir Stoyanov (VMware)
2021-07-29 5:09 ` [PATCH v2 57/87] trace-cmd report: Use the new latency API to read data Tzvetomir Stoyanov (VMware)
2021-07-29 5:09 ` [PATCH v2 58/87] trace-cmd report: Close input file handlers on exit Tzvetomir Stoyanov (VMware)
2021-07-29 5:09 ` [PATCH v2 59/87] trace-cmd report: Do not print empty buffer name Tzvetomir Stoyanov (VMware)
2021-08-19 19:21 ` Steven Rostedt
2021-07-29 5:09 ` [PATCH v2 60/87] trace-cmd report: Init the top trace instance earlier Tzvetomir Stoyanov (VMware)
2021-08-19 19:22 ` Steven Rostedt
2021-07-29 5:09 ` [PATCH v2 61/87] trace-cmd: Call additional APIs when creating trace file Tzvetomir Stoyanov (VMware)
2021-07-29 5:09 ` [PATCH v2 62/87] trace-cmd dump: Add helpers for processing trace file version 7 Tzvetomir Stoyanov (VMware)
2021-07-29 5:09 ` [PATCH v2 63/87] trace-cmd dump: Print compression header Tzvetomir Stoyanov (VMware)
2021-07-29 5:09 ` [PATCH v2 64/87] trace-cmd dump: Add helpers for processing trace file sections Tzvetomir Stoyanov (VMware)
2021-07-29 5:09 ` [PATCH v2 65/87] trace-cmd dump: Read recursively all options sections Tzvetomir Stoyanov (VMware)
2021-07-29 5:09 ` [PATCH v2 66/87] trace-cmd dump: Read extended BUFFER option Tzvetomir Stoyanov (VMware)
2021-07-29 5:09 ` [PATCH v2 67/87] trace-cmd dump: Dump sections Tzvetomir Stoyanov (VMware)
2021-07-29 5:09 ` [PATCH v2 68/87] trace-cmd dump: Dump trace file version 7 Tzvetomir Stoyanov (VMware)
2021-07-29 5:09 ` [PATCH v2 69/87] trace-cmd dump: Dump sections content Tzvetomir Stoyanov (VMware)
2021-07-29 5:09 ` [PATCH v2 70/87] trace-cmd dump: Add new argument --sections Tzvetomir Stoyanov (VMware)
2021-07-29 5:09 ` [PATCH v2 71/87] trace-cmd dump: Align better the output of flyrecord dump Tzvetomir Stoyanov (VMware)
2021-07-29 5:09 ` [PATCH v2 72/87] trace-cmd library: Add zlib compression algorithm Tzvetomir Stoyanov (VMware)
2021-07-29 5:09 ` [PATCH v2 73/87] trace-cmd library: Reuse local function that writes to output handler Tzvetomir Stoyanov (VMware)
2021-07-29 5:09 ` [PATCH v2 74/87] trace-cmd library: Use output handler when copying data from input file Tzvetomir Stoyanov (VMware)
2021-07-29 5:09 ` [PATCH v2 75/87] trace-cmd library: Handle version 7 files when copying headers between files Tzvetomir Stoyanov (VMware)
2021-07-29 5:09 ` [PATCH v2 76/87] tarce-cmd library: Copy CPU count between trace files Tzvetomir Stoyanov (VMware)
2021-07-29 5:09 ` [PATCH v2 77/87] tarce-cmd library: New API to copy buffer description " Tzvetomir Stoyanov (VMware)
2021-07-29 5:09 ` [PATCH v2 78/87] tarce-cmd library: New API to copy options " Tzvetomir Stoyanov (VMware)
2021-07-29 5:09 ` [PATCH v2 79/87] tarce-cmd library: New API to copy trace data " Tzvetomir Stoyanov (VMware)
2021-07-29 5:09 ` [PATCH v2 80/87] trace-cmd library: Extend tracecmd_copy() API Tzvetomir Stoyanov (VMware)
2021-07-29 5:09 ` [PATCH v2 81/87] trace-cmd library: Set correct CPU to the record, retrieved with tracecmd_peek_data Tzvetomir Stoyanov (VMware)
2021-07-29 5:09 ` [PATCH v2 82/87] trace-cmd: Add new subcommand "convert" Tzvetomir Stoyanov (VMware)
2021-07-29 5:09 ` [PATCH v2 83/87] trace-cmd report: Add new parameters for version 7 trace files Tzvetomir Stoyanov (VMware)
2021-08-19 19:26 ` Steven Rostedt
2021-07-29 5:09 ` [PATCH v2 84/87] trace-cmd: Update bash completion Tzvetomir Stoyanov (VMware)
2021-07-29 5:09 ` [PATCH v2 85/87] tarce-cmd: Man page for "trace-cmd convert" Tzvetomir Stoyanov (VMware)
2021-07-29 5:09 ` [PATCH v2 86/87] tarce-cmd: Update record man page Tzvetomir Stoyanov (VMware)
2021-07-29 5:09 ` [PATCH v2 87/87] trace-cmd: Document trace file version 7 Tzvetomir Stoyanov (VMware)
2021-08-19 19:33 ` Steven Rostedt
2021-09-02 13:07 ` 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=20210729050959.12263-54-tz.stoyanov@gmail.com \
--to=tz.stoyanov@gmail.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).