2024-02-12 22:02:40

by Steven Rostedt

[permalink] [raw]
Subject: [GIT PULL] tracing/tooling: Fixes for v6.8-rc4


Linus,

Tracing tooling updates for 6.8-rc4:

RTLA:
- rtla tools are exiting with a positive value when usage()
is called. Make them return 0 if the usage was called via
-h/--help.

- the -P priority sets the sched priority for rtla workload.
When the SCHED_OTHER scheduler is selected, it sets
the rt_priority instead of the nice parameter. Setting
the nice value is the correct thing, so fix it.

- rtla is failing to compile with clang due to unsupported
options from gcc. Adjusting the compiler/linker options
makes clang work properly.

- Remove the sched_getattr() unused function on utils.c.

- Fixes on variable initialization and size, reported by
clang.

Verification:
- rv is failing to compile with clang due to unsupported
options from gcc. Adjusting the compiler/linker options
makes clang work properly.

- Fix an uninitialized variable on in_kernel.c reported by
clang.


Please pull the latest trace-tools-v6.8-rc4 tree, which can be found at:


git://git.kernel.org/pub/scm/linux/kernel/git/trace/linux-trace.git
trace-tools-v6.8-rc4

Tag SHA1: 43f245e8613c3a071441ab907842c1b9b7812ee1
Head SHA1: b5f319360371087d52070d8f3fc7789e80ce69a6


Daniel Bristot de Oliveira (6):
tools/rtla: Fix Makefile compiler options for clang
tools/rtla: Fix uninitialized bucket/data->bucket_size warning
tools/rtla: Fix clang warning about mount_point var size
tools/rtla: Remove unused sched_getattr() function
tools/rv: Fix Makefile compiler options for clang
tools/rv: Fix curr_reactor uninitialized variable

John Kacur (1):
tools/rtla: Exit with EXIT_SUCCESS when help is invoked

limingming3 (1):
tools/rtla: Replace setting prio with nice for SCHED_OTHER

----
tools/tracing/rtla/Makefile | 7 ++++++-
tools/tracing/rtla/src/osnoise_hist.c | 9 ++++++---
tools/tracing/rtla/src/osnoise_top.c | 6 +++++-
tools/tracing/rtla/src/timerlat_hist.c | 9 ++++++---
tools/tracing/rtla/src/timerlat_top.c | 6 +++++-
tools/tracing/rtla/src/utils.c | 14 ++++----------
tools/tracing/rtla/src/utils.h | 2 ++
tools/verification/rv/Makefile | 7 ++++++-
tools/verification/rv/src/in_kernel.c | 2 +-
9 files changed, 41 insertions(+), 21 deletions(-)
---------------------------
diff --git a/tools/tracing/rtla/Makefile b/tools/tracing/rtla/Makefile
index 2456a399eb9a..afd18c678ff5 100644
--- a/tools/tracing/rtla/Makefile
+++ b/tools/tracing/rtla/Makefile
@@ -28,10 +28,15 @@ FOPTS := -flto=auto -ffat-lto-objects -fexceptions -fstack-protector-strong \
-fasynchronous-unwind-tables -fstack-clash-protection
WOPTS := -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -Wno-maybe-uninitialized

+ifeq ($(CC),clang)
+ FOPTS := $(filter-out -ffat-lto-objects, $(FOPTS))
+ WOPTS := $(filter-out -Wno-maybe-uninitialized, $(WOPTS))
+endif
+
TRACEFS_HEADERS := $$($(PKG_CONFIG) --cflags libtracefs)

CFLAGS := -O -g -DVERSION=\"$(VERSION)\" $(FOPTS) $(MOPTS) $(WOPTS) $(TRACEFS_HEADERS) $(EXTRA_CFLAGS)
-LDFLAGS := -ggdb $(EXTRA_LDFLAGS)
+LDFLAGS := -flto=auto -ggdb $(EXTRA_LDFLAGS)
LIBS := $$($(PKG_CONFIG) --libs libtracefs)

SRC := $(wildcard src/*.c)
diff --git a/tools/tracing/rtla/src/osnoise_hist.c b/tools/tracing/rtla/src/osnoise_hist.c
index 8f81fa007364..01870d50942a 100644
--- a/tools/tracing/rtla/src/osnoise_hist.c
+++ b/tools/tracing/rtla/src/osnoise_hist.c
@@ -135,8 +135,7 @@ static void osnoise_hist_update_multiple(struct osnoise_tool *tool, int cpu,
if (params->output_divisor)
duration = duration / params->output_divisor;

- if (data->bucket_size)
- bucket = duration / data->bucket_size;
+ bucket = duration / data->bucket_size;

total_duration = duration * count;

@@ -480,7 +479,11 @@ static void osnoise_hist_usage(char *usage)

for (i = 0; msg[i]; i++)
fprintf(stderr, "%s\n", msg[i]);
- exit(1);
+
+ if (usage)
+ exit(EXIT_FAILURE);
+
+ exit(EXIT_SUCCESS);
}

/*
diff --git a/tools/tracing/rtla/src/osnoise_top.c b/tools/tracing/rtla/src/osnoise_top.c
index f7c959be8677..457360db0767 100644
--- a/tools/tracing/rtla/src/osnoise_top.c
+++ b/tools/tracing/rtla/src/osnoise_top.c
@@ -331,7 +331,11 @@ static void osnoise_top_usage(struct osnoise_top_params *params, char *usage)

for (i = 0; msg[i]; i++)
fprintf(stderr, "%s\n", msg[i]);
- exit(1);
+
+ if (usage)
+ exit(EXIT_FAILURE);
+
+ exit(EXIT_SUCCESS);
}

/*
diff --git a/tools/tracing/rtla/src/timerlat_hist.c b/tools/tracing/rtla/src/timerlat_hist.c
index 47d3d8b53cb2..dbf154082f95 100644
--- a/tools/tracing/rtla/src/timerlat_hist.c
+++ b/tools/tracing/rtla/src/timerlat_hist.c
@@ -178,8 +178,7 @@ timerlat_hist_update(struct osnoise_tool *tool, int cpu,
if (params->output_divisor)
latency = latency / params->output_divisor;

- if (data->bucket_size)
- bucket = latency / data->bucket_size;
+ bucket = latency / data->bucket_size;

if (!context) {
hist = data->hist[cpu].irq;
@@ -546,7 +545,11 @@ static void timerlat_hist_usage(char *usage)

for (i = 0; msg[i]; i++)
fprintf(stderr, "%s\n", msg[i]);
- exit(1);
+
+ if (usage)
+ exit(EXIT_FAILURE);
+
+ exit(EXIT_SUCCESS);
}

/*
diff --git a/tools/tracing/rtla/src/timerlat_top.c b/tools/tracing/rtla/src/timerlat_top.c
index 1640f121baca..3e9af2c38688 100644
--- a/tools/tracing/rtla/src/timerlat_top.c
+++ b/tools/tracing/rtla/src/timerlat_top.c
@@ -375,7 +375,11 @@ static void timerlat_top_usage(char *usage)

for (i = 0; msg[i]; i++)
fprintf(stderr, "%s\n", msg[i]);
- exit(1);
+
+ if (usage)
+ exit(EXIT_FAILURE);
+
+ exit(EXIT_SUCCESS);
}

/*
diff --git a/tools/tracing/rtla/src/utils.c b/tools/tracing/rtla/src/utils.c
index c769d7b3842c..9ac71a66840c 100644
--- a/tools/tracing/rtla/src/utils.c
+++ b/tools/tracing/rtla/src/utils.c
@@ -238,12 +238,6 @@ static inline int sched_setattr(pid_t pid, const struct sched_attr *attr,
return syscall(__NR_sched_setattr, pid, attr, flags);
}

-static inline int sched_getattr(pid_t pid, struct sched_attr *attr,
- unsigned int size, unsigned int flags)
-{
- return syscall(__NR_sched_getattr, pid, attr, size, flags);
-}
-
int __set_sched_attr(int pid, struct sched_attr *attr)
{
int flags = 0;
@@ -479,13 +473,13 @@ int parse_prio(char *arg, struct sched_attr *sched_param)
if (prio == INVALID_VAL)
return -1;

- if (prio < sched_get_priority_min(SCHED_OTHER))
+ if (prio < MIN_NICE)
return -1;
- if (prio > sched_get_priority_max(SCHED_OTHER))
+ if (prio > MAX_NICE)
return -1;

sched_param->sched_policy = SCHED_OTHER;
- sched_param->sched_priority = prio;
+ sched_param->sched_nice = prio;
break;
default:
return -1;
@@ -536,7 +530,7 @@ int set_cpu_dma_latency(int32_t latency)
*/
static const int find_mount(const char *fs, char *mp, int sizeof_mp)
{
- char mount_point[MAX_PATH];
+ char mount_point[MAX_PATH+1];
char type[100];
int found = 0;
FILE *fp;
diff --git a/tools/tracing/rtla/src/utils.h b/tools/tracing/rtla/src/utils.h
index 04ed1e650495..d44513e6c66a 100644
--- a/tools/tracing/rtla/src/utils.h
+++ b/tools/tracing/rtla/src/utils.h
@@ -9,6 +9,8 @@
*/
#define BUFF_U64_STR_SIZE 24
#define MAX_PATH 1024
+#define MAX_NICE 20
+#define MIN_NICE -19

#define container_of(ptr, type, member)({ \
const typeof(((type *)0)->member) *__mptr = (ptr); \
diff --git a/tools/verification/rv/Makefile b/tools/verification/rv/Makefile
index 3d0f3888a58c..485f8aeddbe0 100644
--- a/tools/verification/rv/Makefile
+++ b/tools/verification/rv/Makefile
@@ -28,10 +28,15 @@ FOPTS := -flto=auto -ffat-lto-objects -fexceptions -fstack-protector-strong \
-fasynchronous-unwind-tables -fstack-clash-protection
WOPTS := -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -Wno-maybe-uninitialized

+ifeq ($(CC),clang)
+ FOPTS := $(filter-out -ffat-lto-objects, $(FOPTS))
+ WOPTS := $(filter-out -Wno-maybe-uninitialized, $(WOPTS))
+endif
+
TRACEFS_HEADERS := $$($(PKG_CONFIG) --cflags libtracefs)

CFLAGS := -O -g -DVERSION=\"$(VERSION)\" $(FOPTS) $(MOPTS) $(WOPTS) $(TRACEFS_HEADERS) $(EXTRA_CFLAGS) -I include
-LDFLAGS := -ggdb $(EXTRA_LDFLAGS)
+LDFLAGS := -flto=auto -ggdb $(EXTRA_LDFLAGS)
LIBS := $$($(PKG_CONFIG) --libs libtracefs)

SRC := $(wildcard src/*.c)
diff --git a/tools/verification/rv/src/in_kernel.c b/tools/verification/rv/src/in_kernel.c
index ad28582bcf2b..f04479ecc96c 100644
--- a/tools/verification/rv/src/in_kernel.c
+++ b/tools/verification/rv/src/in_kernel.c
@@ -210,9 +210,9 @@ static char *ikm_read_reactor(char *monitor_name)
static char *ikm_get_current_reactor(char *monitor_name)
{
char *reactors = ikm_read_reactor(monitor_name);
+ char *curr_reactor = NULL;
char *start;
char *end;
- char *curr_reactor;

if (!reactors)
return NULL;


2024-02-13 17:34:43

by pr-tracker-bot

[permalink] [raw]
Subject: Re: [GIT PULL] tracing/tooling: Fixes for v6.8-rc4

The pull request you sent on Mon, 12 Feb 2024 17:01:07 -0500:

> git://git.kernel.org/pub/scm/linux/kernel/git/trace/linux-trace.git trace-tools-v6.8-rc4

has been merged into torvalds/linux.git:
https://git.kernel.org/torvalds/c/7e90b5c295ec1e47c8ad865429f046970c549a66

Thank you!

--
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/prtracker.html

2024-02-13 17:41:53

by Linus Torvalds

[permalink] [raw]
Subject: Re: [GIT PULL] tracing/tooling: Fixes for v6.8-rc4

On Mon, 12 Feb 2024 at 14:00, Steven Rostedt <[email protected]> wrote:
>
> Tracing tooling updates for 6.8-rc4:

Bah. I've pulled this, but since I did a new system install due to a
disk upgrade some time ago, I once again don't have libtracefs-devel
installed.

And guess what? The dependency rules are - once again - completely
broken, and trying to build this gets the bad old unhelpful error

latency-collector.c:26:10: fatal error: tracefs.h: No such file or directory

with no help for the user.

Yes, I know what to do. That isn't the point. And no, this isn't new
to this pull request, it's just that on this machine I haven't tried
building the tracing tools in a while.

Let's not make the user experience for people who want to do kernel
builds any worse than it has to be.

Side note: instead of the (clearly broken) special Makefile rules, can
you please just take a look at the perf code instead? In fact, maybe
it's time for the kernel tooling people to try to unify and come to an
agreement about these things, and share more of the code.

Because unlike the tracing tools, the perf tools seem to generally get
this part of the build system right, despite (or probably due to)
having a lot *more* (and more complex) library dependencies.

Linus

Subject: Re: [GIT PULL] tracing/tooling: Fixes for v6.8-rc4

On 2/13/24 18:48, Steven Rostedt wrote:
> On Tue, 13 Feb 2024 09:32:26 -0800
> Linus Torvalds <[email protected]> wrote:
>
>> On Mon, 12 Feb 2024 at 14:00, Steven Rostedt <[email protected]> wrote:
>>>
>>> Tracing tooling updates for 6.8-rc4:
>>
>> Bah. I've pulled this, but since I did a new system install due to a
>> disk upgrade some time ago, I once again don't have libtracefs-devel
>> installed.
>>
>> And guess what? The dependency rules are - once again - completely
>> broken, and trying to build this gets the bad old unhelpful error
>>
>> latency-collector.c:26:10: fatal error: tracefs.h: No such file or directory
>>
>
> Hmm, that's not from this pull request. But still needs to be fixed.

I did not catch that because it is in the tracing dir, but not on rtla. It is an old
sample code, still... bad it was not covered. Sorry for that :-(.

>
>> with no help for the user.
>>
>> Yes, I know what to do. That isn't the point. And no, this isn't new
>> to this pull request, it's just that on this machine I haven't tried
>> building the tracing tools in a while.
>>
>> Let's not make the user experience for people who want to do kernel
>> builds any worse than it has to be.
>>
>> Side note: instead of the (clearly broken) special Makefile rules, can
>> you please just take a look at the perf code instead? In fact, maybe
>> it's time for the kernel tooling people to try to unify and come to an
>> agreement about these things, and share more of the code.
>>
>> Because unlike the tracing tools, the perf tools seem to generally get
>> this part of the build system right, despite (or probably due to)
>> having a lot *more* (and more complex) library dependencies.
>
> Daniel is mostly maintaining this work.
>
> Daniel, can you talk with Arnaldo and be able to collaborate with him on
> consolidating the build process?

Sure, I have a good relation with Arnaldo, and he is aware of my work as well.

-- Daniel


2024-02-13 18:08:45

by Steven Rostedt

[permalink] [raw]
Subject: Re: [GIT PULL] tracing/tooling: Fixes for v6.8-rc4

On Tue, 13 Feb 2024 09:32:26 -0800
Linus Torvalds <[email protected]> wrote:

> On Mon, 12 Feb 2024 at 14:00, Steven Rostedt <[email protected]> wrote:
> >
> > Tracing tooling updates for 6.8-rc4:
>
> Bah. I've pulled this, but since I did a new system install due to a
> disk upgrade some time ago, I once again don't have libtracefs-devel
> installed.
>
> And guess what? The dependency rules are - once again - completely
> broken, and trying to build this gets the bad old unhelpful error
>
> latency-collector.c:26:10: fatal error: tracefs.h: No such file or directory
>

Hmm, that's not from this pull request. But still needs to be fixed.

> with no help for the user.
>
> Yes, I know what to do. That isn't the point. And no, this isn't new
> to this pull request, it's just that on this machine I haven't tried
> building the tracing tools in a while.
>
> Let's not make the user experience for people who want to do kernel
> builds any worse than it has to be.
>
> Side note: instead of the (clearly broken) special Makefile rules, can
> you please just take a look at the perf code instead? In fact, maybe
> it's time for the kernel tooling people to try to unify and come to an
> agreement about these things, and share more of the code.
>
> Because unlike the tracing tools, the perf tools seem to generally get
> this part of the build system right, despite (or probably due to)
> having a lot *more* (and more complex) library dependencies.

Daniel is mostly maintaining this work.

Daniel, can you talk with Arnaldo and be able to collaborate with him on
consolidating the build process?

I'm even fine if this starts going through Arnaldo's tree as I'm not really
using it for my work anymore. I just did a smoke test, but as I have the
necessary libraries, it didn't fail for me.

Thanks!

-- Steve