Compare commits
No commits in common. 'i8c' and 'c9' have entirely different histories.
@ -1 +1 @@
|
|||||||
SOURCES/trace-cmd-v2.7.tar.gz
|
SOURCES/trace-cmd-v2.9.2.tar.gz
|
||||||
|
@ -1 +1 @@
|
|||||||
f95c34b6d9090b81f5c91e97ef71e6b6d835147b SOURCES/trace-cmd-v2.7.tar.gz
|
46cdc142262b2e4f7a4eb8aa192b601bbc6238eb SOURCES/trace-cmd-v2.9.2.tar.gz
|
||||||
|
@ -1,33 +0,0 @@
|
|||||||
From 7e8a6e3d03c0a6a7a5014ce488be1e16f99db006 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Zamir SUN <sztsian@gmail.com>
|
|
||||||
Date: Sat, 11 Nov 2017 10:28:32 +0800
|
|
||||||
Subject: [PATCH] trace-cmd: Figure out the arch and install library to the
|
|
||||||
right place
|
|
||||||
|
|
||||||
Signed-off-by: Zamir SUN <sztsian@gmail.com>
|
|
||||||
---
|
|
||||||
Makefile | 8 +++++++-
|
|
||||||
1 file changed, 7 insertions(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/Makefile b/Makefile
|
|
||||||
index 5c35143..d10e547 100644
|
|
||||||
--- a/Makefile
|
|
||||||
+++ b/Makefile
|
|
||||||
@@ -47,7 +47,13 @@ html_install = $(prefix)/share/kernelshark/html
|
|
||||||
html_install_SQ = '$(subst ','\'',$(html_install))'
|
|
||||||
img_install = $(prefix)/share/kernelshark/html/images
|
|
||||||
img_install_SQ = '$(subst ','\'',$(img_install))'
|
|
||||||
-libdir ?= $(prefix)/lib
|
|
||||||
+
|
|
||||||
+# figure out what arch we are on and install to the right place
|
|
||||||
+ARCH = $(shell getconf LONG_BIT)
|
|
||||||
+LIBDIR_32 = /lib
|
|
||||||
+LIBDIR_64 = /lib64
|
|
||||||
+
|
|
||||||
+libdir ?= $(prefix)/$(LIBDIR_$(ARCH))
|
|
||||||
libdir_SQ = '$(subst ','\'',$(libdir))'
|
|
||||||
includedir = $(prefix)/include/trace-cmd
|
|
||||||
includedir_SQ = '$(subst ','\'',$(includedir))'
|
|
||||||
--
|
|
||||||
2.13.4
|
|
||||||
|
|
@ -0,0 +1 @@
|
|||||||
|
SUBSYSTEM=="module", ACTION=="add", PROGRAM="/usr/bin/systemctl is-active trace-cmd.service", PROGRAM="/usr/bin/systemctl reload trace-cmd.service"
|
@ -1,53 +0,0 @@
|
|||||||
From a57b906f58c8d293a1a353dbc5dabea237875759 Mon Sep 17 00:00:00 2001
|
|
||||||
From: John Kacur <jkacur@redhat.com>
|
|
||||||
Date: Thu, 4 Jun 2015 21:02:13 +0200
|
|
||||||
Subject: [PATCH] Add trace-cmd flightrecorder service
|
|
||||||
|
|
||||||
Make it possible to start and stop trace-cmd commands at start-up time.
|
|
||||||
|
|
||||||
Signed-off-by: John Kacur <jkacur@redhat.com>
|
|
||||||
---
|
|
||||||
98-trace-cmd.rules | 1 +
|
|
||||||
trace-cmd.conf | 4 ++++
|
|
||||||
trace-cmd.service | 10 ++++++++++
|
|
||||||
3 files changed, 15 insertions(+)
|
|
||||||
create mode 100644 98-trace-cmd.rules
|
|
||||||
create mode 100644 trace-cmd.conf
|
|
||||||
create mode 100644 trace-cmd.service
|
|
||||||
|
|
||||||
diff --git a/98-trace-cmd.rules b/98-trace-cmd.rules
|
|
||||||
new file mode 100644
|
|
||||||
index 000000000000..7c073692a0ab
|
|
||||||
--- /dev/null
|
|
||||||
+++ b/98-trace-cmd.rules
|
|
||||||
@@ -0,0 +1 @@
|
|
||||||
+SUBSYSTEM=="module", ACTION=="add", PROGRAM="/usr/bin/systemctl try-restart trace-cmd.service"
|
|
||||||
diff --git a/trace-cmd.conf b/trace-cmd.conf
|
|
||||||
new file mode 100644
|
|
||||||
index 000000000000..22896d961d64
|
|
||||||
--- /dev/null
|
|
||||||
+++ b/trace-cmd.conf
|
|
||||||
@@ -0,0 +1,4 @@
|
|
||||||
+# ftrace based flightrecorder configuration file.
|
|
||||||
+
|
|
||||||
+# trace-cmd options
|
|
||||||
+OPTS="-b 2048 -i -e block -e irq -e mce -e module -e power -e sched -e signal -e sys_enter -e sys_exit -e timer -e workqueue -e kvm -e net"
|
|
||||||
diff --git a/trace-cmd.service b/trace-cmd.service
|
|
||||||
new file mode 100644
|
|
||||||
index 000000000000..6439b490f8f4
|
|
||||||
--- /dev/null
|
|
||||||
+++ b/trace-cmd.service
|
|
||||||
@@ -0,0 +1,10 @@
|
|
||||||
+[Unit]
|
|
||||||
+Description=trace-cmd Flightrecorder
|
|
||||||
+
|
|
||||||
+[Service]
|
|
||||||
+Type=oneshot
|
|
||||||
+RemainAfterExit=yes
|
|
||||||
+EnvironmentFile=/etc/sysconfig/trace-cmd.conf
|
|
||||||
+ExecStart=/usr/bin/trace-cmd start $OPTS
|
|
||||||
+ExecStop=/usr/bin/trace-cmd reset
|
|
||||||
+ExecReload=/usr/bin/trace-cmd reset; /usr/bin/trace-cmd start $OPTS
|
|
||||||
--
|
|
||||||
1.8.3.1
|
|
||||||
|
|
@ -1,170 +0,0 @@
|
|||||||
From 1132270594314acb2eed250f1690d5b10d0fb47c Mon Sep 17 00:00:00 2001
|
|
||||||
From: John Kacur <jkacur@redhat.com>
|
|
||||||
Date: Tue, 30 Jun 2015 14:30:47 +0200
|
|
||||||
Subject: [PATCH] Various fixes for trace-cmd flightrecorder - systemd files
|
|
||||||
|
|
||||||
1) Allow systemctl enable trace-cmd.service to start trace-cmd.service automatically at system boot
|
|
||||||
2) Don't stop trace-cmd.service at system shutdown
|
|
||||||
3) Don't stop trace-cmd.service at each kernel module loading
|
|
||||||
4) Start trace-cmd.service before any normal services
|
|
||||||
1) Allow systemctl enable trace-cmd.service to start trace-cmd.service automatically at system boot
|
|
||||||
|
|
||||||
I added [Install] section in trace-cmd.service. This is necessary to
|
|
||||||
make trace-cmd.service automatically get started at system
|
|
||||||
boot. Without the [Install] section, systemctl enable
|
|
||||||
trace-cmd.service fails as below:
|
|
||||||
|
|
||||||
~]# systemctl enable trace-cmd.service
|
|
||||||
The unit files have no [Install] section. They are not meant to be enabled
|
|
||||||
using systemctl.
|
|
||||||
Possible reasons for having this kind of units are:
|
|
||||||
1) A unit may be statically enabled by being symlinked from another unit's
|
|
||||||
.wants/ or .requires/ directory.
|
|
||||||
2) A unit's purpose may be to act as a helper for some other unit which has
|
|
||||||
a requirement dependency on it.
|
|
||||||
3) A unit may be started when needed via activation (socket, path, timer,
|
|
||||||
D-Bus, udev, scripted systemctl call, ...).
|
|
||||||
|
|
||||||
WantedBy=multi-user.target in trace-cmd.service means that
|
|
||||||
trace-cmd.service is started if multi-user.target, traditional
|
|
||||||
runlevel 3, is active.
|
|
||||||
|
|
||||||
2) Don't stop trace-cmd.service at system shutdown
|
|
||||||
|
|
||||||
In the current configuration, trace-cmd reset is executed when
|
|
||||||
trace-cmd.service is stopped at system shutdown. Then, trace buffer is
|
|
||||||
cleared. This could become a problem if system crash happens at system
|
|
||||||
shutdown. Even if we get a crash dump at the crash during system
|
|
||||||
shutdown, the crash dump doesn't contain useful trace data.
|
|
||||||
|
|
||||||
To fix the issue, it's necessary to make trace-cmd.service not stop at
|
|
||||||
system shutdown.
|
|
||||||
|
|
||||||
To achieve this, I added DefaultDependencies=no into trace-cmd.service.
|
|
||||||
|
|
||||||
To understand this, first you need to understand how systemd achieves
|
|
||||||
system shutdown. Look at the description of shutdown.target in man 7
|
|
||||||
systemd.special.
|
|
||||||
|
|
||||||
shutdown.target
|
|
||||||
A special target unit that terminates the services on
|
|
||||||
system shutdown.
|
|
||||||
|
|
||||||
Services that shall be terminated on system shutdown
|
|
||||||
shall add Conflicts= dependencies to this unit for their
|
|
||||||
service unit, which is implicitly done when
|
|
||||||
DefaultDependencies=yes is set (the default).
|
|
||||||
|
|
||||||
As this explains, systemd adds Conflicts=shutdown.target dependency to
|
|
||||||
all the unit files by default. By this, if we shutdown system for
|
|
||||||
example by systemctl poweroff, then all the currently active services
|
|
||||||
with the default dependency get stopped when shutdown.target is pulled
|
|
||||||
in.
|
|
||||||
|
|
||||||
Thus, in order not to stop trace-cmd.service at system shutdown, it's
|
|
||||||
necessary to remove the default Conflicts=shutdown.target
|
|
||||||
dependency. This is achieved by DefaultDependencies=no.
|
|
||||||
|
|
||||||
Also, we need to consider a default dependency around basic.target
|
|
||||||
that is explained in man 7 systemd.special as follows:
|
|
||||||
|
|
||||||
basic.target
|
|
||||||
A special target unit covering basic boot-up.
|
|
||||||
|
|
||||||
systemd automatically adds dependencies of the types
|
|
||||||
Requires= and After= for this target unit to all
|
|
||||||
services (except for those with DefaultDependencies=no).
|
|
||||||
|
|
||||||
Usually this should pull-in all mount points, swap
|
|
||||||
devices, sockets, timers, and path units and other basic
|
|
||||||
initialization necessary for general purpose daemons.
|
|
||||||
|
|
||||||
As this explains, Requires=basic.target is assigned to each service by
|
|
||||||
default.
|
|
||||||
|
|
||||||
Requires=basic.target means that the service tries to pull in the
|
|
||||||
basic.target when it's pulled in and gets stopped if the basic.target
|
|
||||||
gets stopped.
|
|
||||||
|
|
||||||
This means that trace-cmd.service gets stopped at system shutdown via
|
|
||||||
Requires=basic.target when basic.target is stopped.
|
|
||||||
|
|
||||||
Thus, not to stop trace-cmd.service at system shutdown, it's necessary
|
|
||||||
to remove the default Requires=basic.target dependency. This is again
|
|
||||||
achieved by DefaultDependencies=no.
|
|
||||||
|
|
||||||
3) Don't stop trace-cmd.service at each kernel module loading
|
|
||||||
|
|
||||||
We have now udev configuration that restarts trace-cmd.service each
|
|
||||||
time some kernel module is loaded. However, systemctl restart
|
|
||||||
trace-cmd.service means that systemctl stop trace-cmd.service and then
|
|
||||||
systemctl start trace-cmd.service. trace data gets lost when the
|
|
||||||
systemctl stop trace-cmd.service is executed as I explained above.
|
|
||||||
|
|
||||||
To fix the issue, we remove trace-cmd reset from ExecReload= in
|
|
||||||
trace-cmd.service and use systemctl reload trace-cmd.service in the
|
|
||||||
udev script instead of systemctl try-restart trace-cmd.service.
|
|
||||||
|
|
||||||
Note that it's enough to trace-cmd start to enable trace events of
|
|
||||||
newly loaded kernel modules.
|
|
||||||
|
|
||||||
Also note that systemctl is-active trace-cmd.service in the udev
|
|
||||||
script is needed to avoid executing systemctl reload trace-cmd.service
|
|
||||||
when trace-cmd.service is inactive. Without systemctl is-active
|
|
||||||
trace-cmd.service, systemctl reload trace-cmd.service is executed even
|
|
||||||
when trace-cmd.service is inactive and then logs the following
|
|
||||||
message:
|
|
||||||
|
|
||||||
Jun 12 20:24:25 localhost systemd: Unit trace-cmd.service cannot be reloaded because it is inactive.
|
|
||||||
|
|
||||||
4) Start trace-cmd.service before any normal services
|
|
||||||
|
|
||||||
trace-cmd.service needs to start early enough to collect useful kernel
|
|
||||||
event information. It's too late if any of the normal services has
|
|
||||||
started.
|
|
||||||
|
|
||||||
To achieve this, DefaultDependencies=no is again needed to remove
|
|
||||||
After=basic.target dependency assigned by default that is explained in
|
|
||||||
man 7 systemd.special.
|
|
||||||
|
|
||||||
Also, we need Before=basic.target to start trace-cmd.service *before*
|
|
||||||
any normal services, i.e. any services with the default
|
|
||||||
After=basic.target dependency.
|
|
||||||
|
|
||||||
Signed-off-by: John Kacur <jkacur@redhat.com>
|
|
||||||
---
|
|
||||||
98-trace-cmd.rules | 2 +-
|
|
||||||
trace-cmd.service | 7 ++++++-
|
|
||||||
2 files changed, 7 insertions(+), 2 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/98-trace-cmd.rules b/98-trace-cmd.rules
|
|
||||||
index 7c073692a0ab..9575bd819a8e 100644
|
|
||||||
--- a/98-trace-cmd.rules
|
|
||||||
+++ b/98-trace-cmd.rules
|
|
||||||
@@ -1 +1 @@
|
|
||||||
-SUBSYSTEM=="module", ACTION=="add", PROGRAM="/usr/bin/systemctl try-restart trace-cmd.service"
|
|
||||||
+SUBSYSTEM=="module", ACTION=="add", PROGRAM="/usr/bin/systemctl is-active trace-cmd.service", PROGRAM="/usr/bin/systemctl reload trace-cmd.service"
|
|
||||||
diff --git a/trace-cmd.service b/trace-cmd.service
|
|
||||||
index 6439b490f8f4..a5cdd046ca0c 100644
|
|
||||||
--- a/trace-cmd.service
|
|
||||||
+++ b/trace-cmd.service
|
|
||||||
@@ -1,5 +1,7 @@
|
|
||||||
[Unit]
|
|
||||||
Description=trace-cmd Flightrecorder
|
|
||||||
+DefaultDependencies=no
|
|
||||||
+Before=basic.target
|
|
||||||
|
|
||||||
[Service]
|
|
||||||
Type=oneshot
|
|
||||||
@@ -7,4 +9,7 @@ RemainAfterExit=yes
|
|
||||||
EnvironmentFile=/etc/sysconfig/trace-cmd.conf
|
|
||||||
ExecStart=/usr/bin/trace-cmd start $OPTS
|
|
||||||
ExecStop=/usr/bin/trace-cmd reset
|
|
||||||
-ExecReload=/usr/bin/trace-cmd reset; /usr/bin/trace-cmd start $OPTS
|
|
||||||
+ExecReload=/usr/bin/trace-cmd start $OPTS
|
|
||||||
+
|
|
||||||
+[Install]
|
|
||||||
+WantedBy=multi-user.target
|
|
||||||
--
|
|
||||||
1.8.3.1
|
|
||||||
|
|
@ -1,7 +0,0 @@
|
|||||||
[Desktop Entry]
|
|
||||||
Name=Kernelshark
|
|
||||||
Comment=Analyze data output by trace-cmd
|
|
||||||
Exec=kernelshark
|
|
||||||
Type=Application
|
|
||||||
Categories=Development;Profiling;
|
|
||||||
Icon=applications-development
|
|
@ -1,65 +0,0 @@
|
|||||||
From 8e8f12df7500f501447a2926a9e1db9ff42d882c Mon Sep 17 00:00:00 2001
|
|
||||||
From: Rikard Falkeborn <rikard.falkeborn@gmail.com>
|
|
||||||
Date: Fri, 12 Apr 2019 11:22:49 -0300
|
|
||||||
Subject: [PATCH] tools lib traceevent: Fix missing equality check for strcmp
|
|
||||||
|
|
||||||
There was a missing comparison with 0 when checking if type is "s64" or
|
|
||||||
"u64". Therefore, the body of the if-statement was entered if "type" was
|
|
||||||
"u64" or not "s64", which made the first strcmp() redundant since if
|
|
||||||
type is "u64", it's not "s64".
|
|
||||||
|
|
||||||
If type is "s64", the body of the if-statement is not entered but since
|
|
||||||
the remainder of the function consists of if-statements which will not
|
|
||||||
be entered if type is "s64", we will just return "val", which is
|
|
||||||
correct, albeit at the cost of a few more calls to strcmp(), i.e., it
|
|
||||||
will behave just as if the if-statement was entered.
|
|
||||||
|
|
||||||
If type is neither "s64" or "u64", the body of the if-statement will be
|
|
||||||
entered incorrectly and "val" returned. This means that any type that is
|
|
||||||
checked after "s64" and "u64" is handled the same way as "s64" and
|
|
||||||
"u64", i.e., the limiting of "val" to fit in for example "s8" is never
|
|
||||||
reached.
|
|
||||||
|
|
||||||
This was introduced in the kernel tree when the sources were copied from
|
|
||||||
trace-cmd in commit f7d82350e597 ("tools/events: Add files to create
|
|
||||||
libtraceevent.a"), and in the trace-cmd repo in 1cdbae6035cei
|
|
||||||
("Implement typecasting in parser") when the function was introduced,
|
|
||||||
i.e., it has always behaved the wrong way.
|
|
||||||
|
|
||||||
Detected by cppcheck.
|
|
||||||
|
|
||||||
Link: http://lkml.kernel.org/r/20190412142250.20595-7-acme@kernel.org
|
|
||||||
|
|
||||||
Signed-off-by: Rikard Falkeborn <rikard.falkeborn@gmail.com>
|
|
||||||
Reviewed-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
|
|
||||||
Cc: Ingo Molnar <mingo@kernel.org>
|
|
||||||
Cc: Thomas Gleixner <tglx@linutronix.de>
|
|
||||||
Cc: Jiri Olsa <jolsa@kernel.org>
|
|
||||||
Cc: Namhyung Kim <namhyung@kernel.org>
|
|
||||||
Cc: Clark Williams <williams@redhat.com>
|
|
||||||
Cc: Tzvetomir Stoyanov <tstoyanov@vmware.com>
|
|
||||||
Fixes: f7d82350e597 ("tools/events: Add files to create libtraceevent.a")
|
|
||||||
Link: http://lkml.kernel.org/r/20190409091529.2686-1-rikard.falkeborn@gmail.com
|
|
||||||
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
|
|
||||||
Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
|
|
||||||
Signed-off-by: John Kacur <jkacur@redhat.com>
|
|
||||||
---
|
|
||||||
event-parse.c | 2 +-
|
|
||||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/event-parse.c b/event-parse.c
|
|
||||||
index e5f2acbb70cc..7dba02bd19fe 100644
|
|
||||||
--- a/event-parse.c
|
|
||||||
+++ b/event-parse.c
|
|
||||||
@@ -2206,7 +2206,7 @@ eval_type_str(unsigned long long val, const char *type, int pointer)
|
|
||||||
return val & 0xffffffff;
|
|
||||||
|
|
||||||
if (strcmp(type, "u64") == 0 ||
|
|
||||||
- strcmp(type, "s64"))
|
|
||||||
+ strcmp(type, "s64") == 0)
|
|
||||||
return val;
|
|
||||||
|
|
||||||
if (strcmp(type, "s8") == 0)
|
|
||||||
--
|
|
||||||
2.20.1
|
|
||||||
|
|
@ -1,105 +0,0 @@
|
|||||||
From c4936880059251b28b7049f01bbfddb1882bda0e Mon Sep 17 00:00:00 2001
|
|
||||||
From: Slavomir Kaslev <kaslevs@vmware.com>
|
|
||||||
Date: Wed, 17 Apr 2019 21:31:57 +0300
|
|
||||||
Subject: [PATCH 2/2] trace-cmd: Add --no-filter option to not filter out
|
|
||||||
recording processes
|
|
||||||
|
|
||||||
Add trace-cmd --no-filter option that disables filtering out of trace-cmd
|
|
||||||
recording processes from the trace.
|
|
||||||
|
|
||||||
Link: http://lore.kernel.org/linux-trace-devel/20190417183157.8776-2-kaslevs@vmware.com
|
|
||||||
|
|
||||||
Tested-by: Phil Auld <pauld@redhat.com>
|
|
||||||
Suggested-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
|
|
||||||
Signed-off-by: Slavomir Kaslev <kaslevs@vmware.com>
|
|
||||||
Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
|
|
||||||
---
|
|
||||||
Documentation/trace-cmd-record.1.txt | 5 +++++
|
|
||||||
trace-record.c | 14 +++++++++++---
|
|
||||||
trace-usage.c | 1 +
|
|
||||||
3 files changed, 17 insertions(+), 3 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/Documentation/trace-cmd-record.1.txt b/Documentation/trace-cmd-record.1.txt
|
|
||||||
index 68afa161ac32..26a8299cd860 100644
|
|
||||||
--- a/Documentation/trace-cmd-record.1.txt
|
|
||||||
+++ b/Documentation/trace-cmd-record.1.txt
|
|
||||||
@@ -83,6 +83,11 @@ OPTIONS
|
|
||||||
|
|
||||||
The above are usually safe to use to compare fields.
|
|
||||||
|
|
||||||
+*--no-filter*::
|
|
||||||
+ Do not filter out the trace-cmd threads. By default, the threads are
|
|
||||||
+ filtered out to not be traced by events. This option will have the trace-cmd
|
|
||||||
+ threads also be traced.
|
|
||||||
+
|
|
||||||
*-R* 'trigger'::
|
|
||||||
Specify a trigger for the previous event. This must come after a *-e*.
|
|
||||||
This will add a given trigger to the given event. To only enable the trigger
|
|
||||||
diff --git a/trace-record.c b/trace-record.c
|
|
||||||
index e636c97d701d..ef4c4c873fd4 100644
|
|
||||||
--- a/trace-record.c
|
|
||||||
+++ b/trace-record.c
|
|
||||||
@@ -99,6 +99,7 @@ static int do_ptrace;
|
|
||||||
|
|
||||||
static int filter_task;
|
|
||||||
static int filter_pid = -1;
|
|
||||||
+static bool no_filter = false;
|
|
||||||
|
|
||||||
static int local_cpu_count;
|
|
||||||
|
|
||||||
@@ -1018,6 +1019,9 @@ static void update_task_filter(void)
|
|
||||||
struct buffer_instance *instance;
|
|
||||||
int pid = getpid();
|
|
||||||
|
|
||||||
+ if (no_filter)
|
|
||||||
+ return;
|
|
||||||
+
|
|
||||||
if (filter_task)
|
|
||||||
add_filter_pid(pid, 0);
|
|
||||||
|
|
||||||
@@ -4343,9 +4347,9 @@ void update_first_instance(struct buffer_instance *instance, int topt)
|
|
||||||
}
|
|
||||||
|
|
||||||
enum {
|
|
||||||
-
|
|
||||||
- OPT_quiet = 246,
|
|
||||||
- OPT_debug = 247,
|
|
||||||
+ OPT_quiet = 245,
|
|
||||||
+ OPT_debug = 246,
|
|
||||||
+ OPT_no_filter = 247,
|
|
||||||
OPT_max_graph_depth = 248,
|
|
||||||
OPT_tsoffset = 249,
|
|
||||||
OPT_bycomm = 250,
|
|
||||||
@@ -4592,6 +4596,7 @@ static void parse_record_options(int argc,
|
|
||||||
{"by-comm", no_argument, NULL, OPT_bycomm},
|
|
||||||
{"ts-offset", required_argument, NULL, OPT_tsoffset},
|
|
||||||
{"max-graph-depth", required_argument, NULL, OPT_max_graph_depth},
|
|
||||||
+ {"no-filter", no_argument, NULL, OPT_no_filter},
|
|
||||||
{"debug", no_argument, NULL, OPT_debug},
|
|
||||||
{"quiet", no_argument, NULL, OPT_quiet},
|
|
||||||
{"help", no_argument, NULL, '?'},
|
|
||||||
@@ -4866,6 +4871,9 @@ static void parse_record_options(int argc,
|
|
||||||
if (!ctx->max_graph_depth)
|
|
||||||
die("Could not allocate option");
|
|
||||||
break;
|
|
||||||
+ case OPT_no_filter:
|
|
||||||
+ no_filter = true;
|
|
||||||
+ break;
|
|
||||||
case OPT_debug:
|
|
||||||
debug = 1;
|
|
||||||
break;
|
|
||||||
diff --git a/trace-usage.c b/trace-usage.c
|
|
||||||
index 10f737b340df..dc73d4d90688 100644
|
|
||||||
--- a/trace-usage.c
|
|
||||||
+++ b/trace-usage.c
|
|
||||||
@@ -56,6 +56,7 @@ static struct usage_help usage_help[] = {
|
|
||||||
" --func-stack perform a stack trace for function tracer\n"
|
|
||||||
" (use with caution)\n"
|
|
||||||
" --max-graph-depth limit function_graph depth\n"
|
|
||||||
+ " --no-filter include trace-cmd threads in the trace\n"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"start",
|
|
||||||
--
|
|
||||||
2.20.1
|
|
||||||
|
|
@ -1,174 +0,0 @@
|
|||||||
From b206acf0f4bb4a8aff22b14139b6d5fdcb110b77 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Nicolas Saenz Julienne <nsaenzju@redhat.com>
|
|
||||||
Date: Wed, 2 Jun 2021 11:08:03 +0200
|
|
||||||
Subject: [PATCH] trace-cmd: Add option to poll trace buffers
|
|
||||||
|
|
||||||
Waiting for data to be available on the trace ring-buffers may trigger
|
|
||||||
IPIs. This might generate unacceptable trace noise when debugging low
|
|
||||||
latency or real time systems. So introduce the poll option. When
|
|
||||||
enabled, it forces trace-cmd to use O_NONBLOCK. The drawback to using it
|
|
||||||
is that traces will be extracted by busy waiting, which will
|
|
||||||
unnecessarily hog the CPUs, so only use when really needed.
|
|
||||||
|
|
||||||
Link: https://lore.kernel.org/linux-trace-devel/20210602090803.12233-1-nsaenzju@redhat.com
|
|
||||||
|
|
||||||
Signed-off-by: Nicolas Saenz Julienne <nsaenzju@redhat.com>
|
|
||||||
Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
|
|
||||||
---
|
|
||||||
Documentation/trace-cmd-record.1.txt | 7 +++++++
|
|
||||||
trace-cmd.h | 4 +++-
|
|
||||||
trace-record.c | 9 ++++++++-
|
|
||||||
trace-recorder.c | 29 +++++++++++++++-------------
|
|
||||||
trace-usage.c | 1 +
|
|
||||||
5 files changed, 35 insertions(+), 15 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/Documentation/trace-cmd-record.1.txt b/Documentation/trace-cmd-record.1.txt
|
|
||||||
index 26a8299c..2b3ce636 100644
|
|
||||||
--- a/Documentation/trace-cmd-record.1.txt
|
|
||||||
+++ b/Documentation/trace-cmd-record.1.txt
|
|
||||||
@@ -331,6 +331,13 @@ OPTIONS
|
|
||||||
executed will not be changed. This is useful if you want to monitor the
|
|
||||||
output of the command being executed, but not see the output from trace-cmd.
|
|
||||||
|
|
||||||
+*--poll*::
|
|
||||||
+ Waiting for data to be available on the trace ring-buffers may trigger
|
|
||||||
+ IPIs. This might generate unacceptable trace noise when tracing low latency
|
|
||||||
+ or real time systems. The poll option forces trace-cmd to use O_NONBLOCK.
|
|
||||||
+ Traces are extracted by busy waiting, which will hog the CPUs, so only use
|
|
||||||
+ when really needed.
|
|
||||||
+
|
|
||||||
EXAMPLES
|
|
||||||
--------
|
|
||||||
|
|
||||||
diff --git a/trace-cmd.h b/trace-cmd.h
|
|
||||||
index 75951b5e..4cc9db2a 100644
|
|
||||||
--- a/trace-cmd.h
|
|
||||||
+++ b/trace-cmd.h
|
|
||||||
@@ -279,7 +279,9 @@ int tracecmd_attach_cpu_data_fd(int fd, int cpus, char * const *cpu_data_files);
|
|
||||||
enum {
|
|
||||||
TRACECMD_RECORD_NOSPLICE = (1 << 0), /* Use read instead of splice */
|
|
||||||
TRACECMD_RECORD_SNAPSHOT = (1 << 1), /* extract from snapshot */
|
|
||||||
- TRACECMD_RECORD_BLOCK = (1 << 2), /* Block on splice write */
|
|
||||||
+ TRACECMD_RECORD_BLOCK_SPLICE = (1 << 2), /* Block on splice write */
|
|
||||||
+ TRACECMD_RECORD_NOBRASS = (1 << 3), /* Splice directly without a brass pipe */
|
|
||||||
+ TRACECMD_RECORD_POLL = (1 << 4), /* Use O_NONBLOCK, poll trace buffers */
|
|
||||||
};
|
|
||||||
|
|
||||||
void tracecmd_free_recorder(struct tracecmd_recorder *recorder);
|
|
||||||
diff --git a/trace-record.c b/trace-record.c
|
|
||||||
index ef4c4c87..1872e3c4 100644
|
|
||||||
--- a/trace-record.c
|
|
||||||
+++ b/trace-record.c
|
|
||||||
@@ -2622,7 +2622,7 @@ create_recorder_instance_pipe(struct buffer_instance *instance,
|
|
||||||
int cpu, int *brass)
|
|
||||||
{
|
|
||||||
struct tracecmd_recorder *recorder;
|
|
||||||
- unsigned flags = recorder_flags | TRACECMD_RECORD_BLOCK;
|
|
||||||
+ unsigned flags = recorder_flags | TRACECMD_RECORD_BLOCK_SPLICE;
|
|
||||||
char *path;
|
|
||||||
|
|
||||||
if (instance->name)
|
|
||||||
@@ -4359,6 +4359,9 @@ enum {
|
|
||||||
OPT_funcstack = 254,
|
|
||||||
OPT_date = 255,
|
|
||||||
OPT_module = 256,
|
|
||||||
+ OPT_nofifos = 257,
|
|
||||||
+ OPT_cmdlines_size = 258,
|
|
||||||
+ OPT_poll = 259,
|
|
||||||
};
|
|
||||||
|
|
||||||
void trace_stop(int argc, char **argv)
|
|
||||||
@@ -4601,6 +4604,7 @@ static void parse_record_options(int argc,
|
|
||||||
{"quiet", no_argument, NULL, OPT_quiet},
|
|
||||||
{"help", no_argument, NULL, '?'},
|
|
||||||
{"module", required_argument, NULL, OPT_module},
|
|
||||||
+ {"poll", no_argument, NULL, OPT_poll},
|
|
||||||
{NULL, 0, NULL, 0}
|
|
||||||
};
|
|
||||||
|
|
||||||
@@ -4884,6 +4888,9 @@ static void parse_record_options(int argc,
|
|
||||||
ctx->instance->filter_mod = optarg;
|
|
||||||
ctx->filtered = 0;
|
|
||||||
break;
|
|
||||||
+ case OPT_poll:
|
|
||||||
+ recorder_flags |= TRACECMD_RECORD_POLL;
|
|
||||||
+ break;
|
|
||||||
case OPT_quiet:
|
|
||||||
case 'q':
|
|
||||||
quiet = 1;
|
|
||||||
diff --git a/trace-recorder.c b/trace-recorder.c
|
|
||||||
index 75290285..97dceccf 100644
|
|
||||||
--- a/trace-recorder.c
|
|
||||||
+++ b/trace-recorder.c
|
|
||||||
@@ -115,6 +115,18 @@ void tracecmd_free_recorder(struct tracecmd_recorder *recorder)
|
|
||||||
free(recorder);
|
|
||||||
}
|
|
||||||
|
|
||||||
+static void set_nonblock(struct tracecmd_recorder *recorder)
|
|
||||||
+{
|
|
||||||
+ long flags;
|
|
||||||
+
|
|
||||||
+ /* Do not block on reads for flushing */
|
|
||||||
+ flags = fcntl(recorder->trace_fd, F_GETFL);
|
|
||||||
+ fcntl(recorder->trace_fd, F_SETFL, flags | O_NONBLOCK);
|
|
||||||
+
|
|
||||||
+ /* Do not block on streams for write */
|
|
||||||
+ recorder->fd_flags |= 2; /* NON_BLOCK */
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
struct tracecmd_recorder *
|
|
||||||
tracecmd_create_buffer_recorder_fd2(int fd, int fd2, int cpu, unsigned flags,
|
|
||||||
const char *buffer, int maxkb)
|
|
||||||
@@ -133,7 +145,7 @@ tracecmd_create_buffer_recorder_fd2(int fd, int fd2, int cpu, unsigned flags,
|
|
||||||
|
|
||||||
recorder->fd_flags = 1; /* SPLICE_F_MOVE */
|
|
||||||
|
|
||||||
- if (!(recorder->flags & TRACECMD_RECORD_BLOCK))
|
|
||||||
+ if (!(recorder->flags & TRACECMD_RECORD_BLOCK_SPLICE))
|
|
||||||
recorder->fd_flags |= 2; /* and NON_BLOCK */
|
|
||||||
|
|
||||||
/* Init to know what to free and release */
|
|
||||||
@@ -192,6 +204,9 @@ tracecmd_create_buffer_recorder_fd2(int fd, int fd2, int cpu, unsigned flags,
|
|
||||||
recorder->pipe_size = pipe_size;
|
|
||||||
}
|
|
||||||
|
|
||||||
+ if (recorder->flags & TRACECMD_RECORD_POLL)
|
|
||||||
+ set_nonblock(recorder);
|
|
||||||
+
|
|
||||||
free(path);
|
|
||||||
|
|
||||||
return recorder;
|
|
||||||
@@ -421,18 +436,6 @@ static long read_data(struct tracecmd_recorder *recorder)
|
|
||||||
return r;
|
|
||||||
}
|
|
||||||
|
|
||||||
-static void set_nonblock(struct tracecmd_recorder *recorder)
|
|
||||||
-{
|
|
||||||
- long flags;
|
|
||||||
-
|
|
||||||
- /* Do not block on reads for flushing */
|
|
||||||
- flags = fcntl(recorder->trace_fd, F_GETFL);
|
|
||||||
- fcntl(recorder->trace_fd, F_SETFL, flags | O_NONBLOCK);
|
|
||||||
-
|
|
||||||
- /* Do not block on streams for write */
|
|
||||||
- recorder->fd_flags |= 2; /* NON_BLOCK */
|
|
||||||
-}
|
|
||||||
-
|
|
||||||
long tracecmd_flush_recording(struct tracecmd_recorder *recorder)
|
|
||||||
{
|
|
||||||
char buf[recorder->page_size];
|
|
||||||
diff --git a/trace-usage.c b/trace-usage.c
|
|
||||||
index dc73d4d9..a9474ad3 100644
|
|
||||||
--- a/trace-usage.c
|
|
||||||
+++ b/trace-usage.c
|
|
||||||
@@ -57,6 +57,7 @@ static struct usage_help usage_help[] = {
|
|
||||||
" (use with caution)\n"
|
|
||||||
" --max-graph-depth limit function_graph depth\n"
|
|
||||||
" --no-filter include trace-cmd threads in the trace\n"
|
|
||||||
+ " --poll don't block while reading from the trace buffer\n"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"start",
|
|
||||||
--
|
|
||||||
2.31.1
|
|
||||||
|
|
@ -0,0 +1,35 @@
|
|||||||
|
From 7e12e8ba4001f51869f28770246f0ac3dbfb9999 Mon Sep 17 00:00:00 2001
|
||||||
|
From: "Tzvetomir Stoyanov (VMware)" <tz.stoyanov@gmail.com>
|
||||||
|
Date: Fri, 14 May 2021 10:52:41 +0300
|
||||||
|
Subject: [PATCH] trace-cmd: Fix broken profile command
|
||||||
|
|
||||||
|
Recent changes in creating trace.dat files broke the streams, used
|
||||||
|
internaly by the trace-cmd profile command.
|
||||||
|
|
||||||
|
Link: https://lore.kernel.org/linux-trace-devel/20210514075241.65418-1-tz.stoyanov@gmail.com
|
||||||
|
|
||||||
|
Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=213045
|
||||||
|
Reported-by: Jerome Marchand <jmarchan@redhat.com>
|
||||||
|
Fixes: 1762536da ("trace-cmd: Have tracecmd_read_headers() specify the state to read up to")
|
||||||
|
Signed-off-by: Tzvetomir Stoyanov (VMware) <tz.stoyanov@gmail.com>
|
||||||
|
Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
|
||||||
|
---
|
||||||
|
tracecmd/trace-stream.c | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/tracecmd/trace-stream.c b/tracecmd/trace-stream.c
|
||||||
|
index f503bf7..b47b208 100644
|
||||||
|
--- a/tracecmd/trace-stream.c
|
||||||
|
+++ b/tracecmd/trace-stream.c
|
||||||
|
@@ -59,7 +59,7 @@ trace_stream_init(struct buffer_instance *instance, int cpu, int fd, int cpus,
|
||||||
|
goto fail;
|
||||||
|
}
|
||||||
|
|
||||||
|
- if (tracecmd_read_headers(trace_input, 0) < 0)
|
||||||
|
+ if (tracecmd_read_headers(trace_input, TRACECMD_FILE_PRINTK) < 0)
|
||||||
|
goto fail_free_input;
|
||||||
|
|
||||||
|
if (handle_init)
|
||||||
|
--
|
||||||
|
2.31.1
|
||||||
|
|
@ -1,35 +0,0 @@
|
|||||||
From 34762bbe9ecd4913bd4a8d04a3ef24cfac6c3d54 Mon Sep 17 00:00:00 2001
|
|
||||||
From: John Kacur <jkacur@redhat.com>
|
|
||||||
Date: Mon, 11 Jun 2018 14:41:22 +0200
|
|
||||||
Subject: [PATCH] trace-cmd: Force no build of python2 plugin
|
|
||||||
|
|
||||||
Force no build of python2 plugin
|
|
||||||
|
|
||||||
Signed-off-by: John Kacur <jkacur@redhat.com>
|
|
||||||
---
|
|
||||||
Makefile | 7 ++++---
|
|
||||||
1 file changed, 4 insertions(+), 3 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/Makefile b/Makefile
|
|
||||||
index a5d2c384415b..62c469393a76 100644
|
|
||||||
--- a/Makefile
|
|
||||||
+++ b/Makefile
|
|
||||||
@@ -92,11 +92,12 @@ ifndef VERBOSE
|
|
||||||
VERBOSE = 0
|
|
||||||
endif
|
|
||||||
|
|
||||||
-SWIG_DEFINED := $(shell if swig -help &> /dev/null; then echo 1; else echo 0; fi)
|
|
||||||
-ifeq ($(SWIG_DEFINED), 0)
|
|
||||||
+# SWIG_DEFINED := $(shell if swig -help &> /dev/null; then echo 1; else echo 0; fi)
|
|
||||||
+# Don't build python2 plugin
|
|
||||||
+#ifeq ($(SWIG_DEFINED), 0)
|
|
||||||
BUILD_PYTHON := report_noswig
|
|
||||||
NO_PYTHON = 1
|
|
||||||
-endif
|
|
||||||
+#endif
|
|
||||||
|
|
||||||
ifndef NO_PYTHON
|
|
||||||
PYTHON := ctracecmd.so
|
|
||||||
--
|
|
||||||
2.14.4
|
|
||||||
|
|
@ -1,32 +0,0 @@
|
|||||||
From a7f654a1fa9087312e77be82574abc1fe10c2ab6 Mon Sep 17 00:00:00 2001
|
|
||||||
From: John Kacur <jkacur@redhat.com>
|
|
||||||
Date: Tue, 31 Jul 2018 14:53:31 +0200
|
|
||||||
Subject: [PATCH] trace-cmd: Makefile: Consistent ELF application hardening
|
|
||||||
build flags
|
|
||||||
|
|
||||||
These are the recommend build changes for Redhat
|
|
||||||
|
|
||||||
Signed-off-by: John Kacur <jkacur@redhat.com>
|
|
||||||
---
|
|
||||||
Makefile | 4 ++--
|
|
||||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/Makefile b/Makefile
|
|
||||||
index 62c469393a76..17eacc114450 100644
|
|
||||||
--- a/Makefile
|
|
||||||
+++ b/Makefile
|
|
||||||
@@ -243,9 +243,9 @@ INCLUDES = -I. -I ./include -I $(srctree)/../../include $(CONFIG_INCLUDES)
|
|
||||||
include $(src)/features.mk
|
|
||||||
|
|
||||||
# Set compile option CFLAGS if not set elsewhere
|
|
||||||
-CFLAGS ?= -g -Wall
|
|
||||||
+CFLAGS ?= -g -Wall -fPIE -fstack-protector-strong --param=ssp-buffer-size=4 -fstack-clash-protection -fexceptions
|
|
||||||
CPPFLAGS ?=
|
|
||||||
-LDFLAGS ?=
|
|
||||||
+LDFLAGS ?= -pie -Wl,-z,now
|
|
||||||
|
|
||||||
# Required CFLAGS
|
|
||||||
override CFLAGS += -D_GNU_SOURCE
|
|
||||||
--
|
|
||||||
2.14.4
|
|
||||||
|
|
@ -1,182 +0,0 @@
|
|||||||
From db8893838433972feafe545117b60dca8c7318df Mon Sep 17 00:00:00 2001
|
|
||||||
From: Slavomir Kaslev <kaslevs@vmware.com>
|
|
||||||
Date: Wed, 17 Apr 2019 16:09:58 +0300
|
|
||||||
Subject: [PATCH 1/2] trace-cmd: Optimize how pid filters are expressed
|
|
||||||
|
|
||||||
Express pid filters as allowed/disallowed filter ranges
|
|
||||||
|
|
||||||
(pid>=100&&pid<=103)
|
|
||||||
|
|
||||||
instead of specifying them per pid
|
|
||||||
|
|
||||||
(pid==100||pid==101||pid==102||pid==103)
|
|
||||||
|
|
||||||
This makes the size of the resulting filter smaller (and faster) and avoids
|
|
||||||
overflowing the filter size limit of one page which we can hit on bigger
|
|
||||||
machines (say >160 CPUs).
|
|
||||||
|
|
||||||
Link: http://lore.kernel.org/linux-trace-devel/20190417130959.10064-2-kaslevs@vmware.com
|
|
||||||
|
|
||||||
Reported-by: Phil Auld <pauld@redhat.com>
|
|
||||||
Tested-by: Phil Auld <pauld@redhat.com>
|
|
||||||
Suggested-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
|
|
||||||
Signed-off-by: Slavomir Kaslev <kaslevs@vmware.com>
|
|
||||||
Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
|
|
||||||
---
|
|
||||||
trace-record.c | 117 ++++++++++++++++++++++++++++++++++---------------
|
|
||||||
1 file changed, 81 insertions(+), 36 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/trace-record.c b/trace-record.c
|
|
||||||
index 9479f5f8073c..e636c97d701d 100644
|
|
||||||
--- a/trace-record.c
|
|
||||||
+++ b/trace-record.c
|
|
||||||
@@ -903,10 +903,63 @@ static void update_ftrace_pids(int reset)
|
|
||||||
static void update_event_filters(struct buffer_instance *instance);
|
|
||||||
static void update_pid_event_filters(struct buffer_instance *instance);
|
|
||||||
|
|
||||||
+static void append_filter_pid_range(char **filter, int *curr_len,
|
|
||||||
+ const char *field,
|
|
||||||
+ int start_pid, int end_pid, bool exclude)
|
|
||||||
+{
|
|
||||||
+ const char *op = "", *op1, *op2, *op3;
|
|
||||||
+ int len;
|
|
||||||
+
|
|
||||||
+ if (*filter && **filter)
|
|
||||||
+ op = exclude ? "&&" : "||";
|
|
||||||
+
|
|
||||||
+ /* Handle thus case explicitly so that we get `pid==3` instead of
|
|
||||||
+ * `pid>=3&&pid<=3` for singleton ranges
|
|
||||||
+ */
|
|
||||||
+ if (start_pid == end_pid) {
|
|
||||||
+#define FMT "%s(%s%s%d)"
|
|
||||||
+ len = snprintf(NULL, 0, FMT, op,
|
|
||||||
+ field, exclude ? "!=" : "==", start_pid);
|
|
||||||
+ *filter = realloc(*filter, *curr_len + len + 1);
|
|
||||||
+ if (!*filter)
|
|
||||||
+ die("realloc");
|
|
||||||
+
|
|
||||||
+ len = snprintf(*filter + *curr_len, len + 1, FMT, op,
|
|
||||||
+ field, exclude ? "!=" : "==", start_pid);
|
|
||||||
+ *curr_len += len;
|
|
||||||
+
|
|
||||||
+ return;
|
|
||||||
+#undef FMT
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ if (exclude) {
|
|
||||||
+ op1 = "<";
|
|
||||||
+ op2 = "||";
|
|
||||||
+ op3 = ">";
|
|
||||||
+ } else {
|
|
||||||
+ op1 = ">=";
|
|
||||||
+ op2 = "&&";
|
|
||||||
+ op3 = "<=";
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+#define FMT "%s(%s%s%d%s%s%s%d)"
|
|
||||||
+ len = snprintf(NULL, 0, FMT, op,
|
|
||||||
+ field, op1, start_pid, op2,
|
|
||||||
+ field, op3, end_pid);
|
|
||||||
+ *filter = realloc(*filter, *curr_len + len + 1);
|
|
||||||
+ if (!*filter)
|
|
||||||
+ die("realloc");
|
|
||||||
+
|
|
||||||
+ len = snprintf(*filter + *curr_len, len + 1, FMT, op,
|
|
||||||
+ field, op1, start_pid, op2,
|
|
||||||
+ field, op3, end_pid);
|
|
||||||
+ *curr_len += len;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
/**
|
|
||||||
* make_pid_filter - create a filter string to all pids against @field
|
|
||||||
* @curr_filter: Append to a previous filter (may realloc). Can be NULL
|
|
||||||
- * @field: The fild to compare the pids against
|
|
||||||
+ * @field: The field to compare the pids against
|
|
||||||
*
|
|
||||||
* Creates a new string or appends to an existing one if @curr_filter
|
|
||||||
* is not NULL. The new string will contain a filter with all pids
|
|
||||||
@@ -916,54 +969,46 @@ static void update_pid_event_filters(struct buffer_instance *instance);
|
|
||||||
*/
|
|
||||||
static char *make_pid_filter(char *curr_filter, const char *field)
|
|
||||||
{
|
|
||||||
+ int start_pid = -1, last_pid = -1;
|
|
||||||
+ int last_exclude = -1;
|
|
||||||
struct filter_pids *p;
|
|
||||||
- char *filter;
|
|
||||||
- char *orit;
|
|
||||||
- char *match;
|
|
||||||
- char *str;
|
|
||||||
+ char *filter = NULL;
|
|
||||||
int curr_len = 0;
|
|
||||||
- int len;
|
|
||||||
|
|
||||||
/* Use the new method if possible */
|
|
||||||
if (have_set_event_pid)
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
- len = len_filter_pids + (strlen(field) + strlen("(==)||")) * nr_filter_pids;
|
|
||||||
-
|
|
||||||
- if (curr_filter) {
|
|
||||||
- curr_len = strlen(curr_filter);
|
|
||||||
- filter = realloc(curr_filter, curr_len + len + strlen("(&&())"));
|
|
||||||
- if (!filter)
|
|
||||||
- die("realloc");
|
|
||||||
- memmove(filter+1, curr_filter, curr_len);
|
|
||||||
- filter[0] = '(';
|
|
||||||
- strcat(filter, ")&&(");
|
|
||||||
- curr_len = strlen(filter);
|
|
||||||
- } else
|
|
||||||
- filter = malloc(len);
|
|
||||||
- if (!filter)
|
|
||||||
- die("Failed to allocate pid filter");
|
|
||||||
-
|
|
||||||
- /* Last '||' that is not used will cover the \0 */
|
|
||||||
- str = filter + curr_len;
|
|
||||||
+ if (!filter_pids)
|
|
||||||
+ return curr_filter;
|
|
||||||
|
|
||||||
for (p = filter_pids; p; p = p->next) {
|
|
||||||
- if (p->exclude) {
|
|
||||||
- match = "!=";
|
|
||||||
- orit = "&&";
|
|
||||||
- } else {
|
|
||||||
- match = "==";
|
|
||||||
- orit = "||";
|
|
||||||
+ /*
|
|
||||||
+ * PIDs are inserted in `filter_pids` from the front and that's
|
|
||||||
+ * why we expect them in descending order here.
|
|
||||||
+ */
|
|
||||||
+ if (p->pid == last_pid - 1 && p->exclude == last_exclude) {
|
|
||||||
+ last_pid = p->pid;
|
|
||||||
+ continue;
|
|
||||||
}
|
|
||||||
- if (p == filter_pids)
|
|
||||||
- orit = "";
|
|
||||||
|
|
||||||
- len = sprintf(str, "%s(%s%s%d)", orit, field, match, p->pid);
|
|
||||||
- str += len;
|
|
||||||
+ if (start_pid != -1)
|
|
||||||
+ append_filter_pid_range(&filter, &curr_len, field,
|
|
||||||
+ last_pid, start_pid,
|
|
||||||
+ last_exclude);
|
|
||||||
+
|
|
||||||
+ start_pid = last_pid = p->pid;
|
|
||||||
+ last_exclude = p->exclude;
|
|
||||||
+
|
|
||||||
}
|
|
||||||
+ append_filter_pid_range(&filter, &curr_len, field,
|
|
||||||
+ last_pid, start_pid, last_exclude);
|
|
||||||
|
|
||||||
- if (curr_len)
|
|
||||||
- sprintf(str, ")");
|
|
||||||
+ if (curr_filter) {
|
|
||||||
+ char *save = filter;
|
|
||||||
+ asprintf(&filter, "(%s)&&(%s)", curr_filter, filter);
|
|
||||||
+ free(save);
|
|
||||||
+ }
|
|
||||||
|
|
||||||
return filter;
|
|
||||||
}
|
|
||||||
--
|
|
||||||
2.20.1
|
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,28 @@
|
|||||||
|
From 31385f8933f00ddecfd4a00a578d7936186f75da Mon Sep 17 00:00:00 2001
|
||||||
|
From: Jerome Marchand <jmarchan@redhat.com>
|
||||||
|
Date: Thu, 11 Nov 2021 18:22:09 +0100
|
||||||
|
Subject: [PATCH] utils.mk: don't ignore LDFLAGS when linking the shared libs
|
||||||
|
|
||||||
|
do_compile_shared_library should't ignore LDFLAGS. That makes it
|
||||||
|
difficult for packager to follow their distribution packaging
|
||||||
|
guidelines.
|
||||||
|
---
|
||||||
|
scripts/utils.mk | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/scripts/utils.mk b/scripts/utils.mk
|
||||||
|
index ae8c9e77..4a594a9c 100644
|
||||||
|
--- a/scripts/utils.mk
|
||||||
|
+++ b/scripts/utils.mk
|
||||||
|
@@ -72,7 +72,7 @@ do_build_static_lib = \
|
||||||
|
|
||||||
|
do_compile_shared_library = \
|
||||||
|
($(print_shared_lib_compile) \
|
||||||
|
- $(CC) --shared $^ '-Wl,-soname,$(@F),-rpath=$$ORIGIN' -o $@ $(LIBS))
|
||||||
|
+ $(CC) --shared $^ '-Wl,-soname,$(@F),-rpath=$$ORIGIN' -o $@ $(LDFLAGS) $(LIBS))
|
||||||
|
|
||||||
|
do_compile_plugin_obj = \
|
||||||
|
($(print_plugin_obj_compile) \
|
||||||
|
--
|
||||||
|
2.31.1
|
||||||
|
|
@ -0,0 +1,4 @@
|
|||||||
|
# ftrace based flightrecorder configuration file.
|
||||||
|
|
||||||
|
# trace-cmd options
|
||||||
|
OPTS="-b 2048 -i -e block -e irq -e mce -e module -e power -e sched -e signal -e timer -e workqueue -e kvm -e net"
|
@ -0,0 +1,15 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=trace-cmd Flightrecorder
|
||||||
|
DefaultDependencies=no
|
||||||
|
Before=sysinit.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=oneshot
|
||||||
|
RemainAfterExit=yes
|
||||||
|
EnvironmentFile=/etc/sysconfig/trace-cmd.conf
|
||||||
|
ExecStart=/usr/bin/trace-cmd start $OPTS
|
||||||
|
ExecStop=/usr/bin/trace-cmd reset
|
||||||
|
ExecReload=/usr/bin/trace-cmd start $OPTS
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
Loading…
Reference in new issue