Thread (34 messages) flat view 34 messages, 7 authors, 2021-07-23

Re: [PATCH v4 10/11] perf env: Set flag for kernel is 64-bit mode

From: Arnaldo Carvalho de Melo <acme@kernel.org>
Date: 2021-07-14 13:59:54
Also in: linux-arm-kernel, linux-perf-users

Em Tue, Jul 13, 2021 at 05:31:03PM +0000, Hunter, Adrian escreveu:
quoted
On Mon, Jul 12, 2021 at 03:14:35PM -0300, Arnaldo Carvalho de Melo wrote:
quoted
Em Sun, Jul 11, 2021 at 06:41:04PM +0800, Leo Yan escreveu:
quoted
+++ b/tools/perf/util/env.c
@@ -11,6 +11,7 @@
 #include <stdlib.h>
 #include <string.h>
quoted
quoted
quoted
+int kernel_is_64_bit;
 struct perf_env perf_env;
quoted
quoted
Why can't this be in 'struct perf_env'?
quoted
Good question.  I considered to add it in struct perf_env but finally I used this
way; the reason is this variable "kernel_is_64_bit" is only used during
recording phase for AUX ring buffer, and don't use it for report.  So seems to
me it's over complexity to add a new field and just wander if it's necessary to
save this field as new feature in the perf header.
I think we store the arch, so if the "kernel_is_64_bit" calculation depends only on arch
then I guess we don't need a new feature at the moment.
So, I wasn't suggesting to add this info to the perf.data file header,
just to the in-memory 'struct perf_env'.

And also we should avoid unconditionally initializing things that we may
never need, please structure it as:

static void perf_env__init_kernel_mode(struct perf_env *env)
{
       const char *arch = perf_env__raw_arch(env);

       if (!strncmp(arch, "x86_64", 6)   || !strncmp(arch, "aarch64", 7) ||
           !strncmp(arch, "arm64", 5)    || !strncmp(arch, "mips64", 6) ||
           !strncmp(arch, "parisc64", 8) || !strncmp(arch, "riscv64", 7) ||
           !strncmp(arch, "s390x", 5)    || !strncmp(arch, "sparc64", 7))
               kernel_is_64_bit = 1;
       else
               kernel_is_64_bit = 0;
}


void perf_env__init(struct perf_env *env)
{
	...
	env->kernel_is_64_bit = -1;
	...
}

bool perf_env__kernel_is_64_bit(struct perf_env *env)
{
	if (env->kernel_is_64_bit == -1)
		perf_env__init_kernel_mode(env);

	return env->kernel_is_64_bit;
}

One thing in my TODO is to crack down on the tons of initializations
perf does unconditionally, last time I looked there are lots :-\

- Arnaldo
 
quoted
Combining the comment from Adrian in another email, I think it's good to add
a new field "compat_mode" in the struct perf_env, and this field will be
initialized in build-record.c.  Currently we don't need to save this value into
the perf file, if later we need to use this value for decoding phase, then we
can add a new feature item to save "compat_mode"
into the perf file's header.
quoted
If you have any different idea, please let me know.  Thanks!
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help