[1/1] perf augmented_raw_syscalls.bpf: Move 'struct timespec64' to vmlinux.h

Message ID Zb1EBzpBn4s-mIa8@x1
State New
Headers
Series [1/1] perf augmented_raw_syscalls.bpf: Move 'struct timespec64' to vmlinux.h |

Commit Message

Arnaldo Carvalho de Melo Feb. 2, 2024, 7:35 p.m. UTC
  If we instead decide to generate vmlinux.h from BTF info, it will be
there:

  $ pahole timespec64
  struct timespec64 {
  	time64_t                   tv_sec;               /*     0     8 */
  	long int                   tv_nsec;              /*     8     8 */

  	/* size: 16, cachelines: 1, members: 2 */
  	/* last cacheline: 16 bytes */
  };

  $

pahole manages to find it from /sys/kernel/btf/vmlinux, that is
generated from the kernel types.

Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Ian Rogers <irogers@google.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Namhyung Kim <namhyung@kernel.org>
Link: https://lore.kernel.org/lkml/
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 .../util/bpf_skel/augmented_raw_syscalls.bpf.c     | 14 +-------------
 tools/perf/util/bpf_skel/vmlinux/vmlinux.h         |  7 +++++++
 2 files changed, 8 insertions(+), 13 deletions(-)
  

Comments

Namhyung Kim Feb. 3, 2024, 2:01 a.m. UTC | #1
On Fri, Feb 2, 2024 at 11:35 AM Arnaldo Carvalho de Melo
<acme@kernel.org> wrote:
>
> If we instead decide to generate vmlinux.h from BTF info, it will be
> there:
>
>   $ pahole timespec64
>   struct timespec64 {
>         time64_t                   tv_sec;               /*     0     8 */
>         long int                   tv_nsec;              /*     8     8 */
>
>         /* size: 16, cachelines: 1, members: 2 */
>         /* last cacheline: 16 bytes */
>   };
>
>   $
>
> pahole manages to find it from /sys/kernel/btf/vmlinux, that is
> generated from the kernel types.
>
> Cc: Adrian Hunter <adrian.hunter@intel.com>
> Cc: Ian Rogers <irogers@google.com>
> Cc: Jiri Olsa <jolsa@kernel.org>
> Cc: Namhyung Kim <namhyung@kernel.org>
> Link: https://lore.kernel.org/lkml/
> Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>

Acked-by: Namhyung Kim <namhyung@kernel.org>

Thanks,
Namhyung

> ---
>  .../util/bpf_skel/augmented_raw_syscalls.bpf.c     | 14 +-------------
>  tools/perf/util/bpf_skel/vmlinux/vmlinux.h         |  7 +++++++
>  2 files changed, 8 insertions(+), 13 deletions(-)
>
> diff --git a/tools/perf/util/bpf_skel/augmented_raw_syscalls.bpf.c b/tools/perf/util/bpf_skel/augmented_raw_syscalls.bpf.c
> index baecffbece14fb68..d3b672593c540259 100644
> --- a/tools/perf/util/bpf_skel/augmented_raw_syscalls.bpf.c
> +++ b/tools/perf/util/bpf_skel/augmented_raw_syscalls.bpf.c
> @@ -6,6 +6,7 @@
>   * payload expected by the 'perf trace' beautifiers.
>   */
>
> +#include "vmlinux.h"
>  #include <linux/bpf.h>
>  #include <bpf/bpf_helpers.h>
>  #include <linux/limits.h>
> @@ -22,19 +23,6 @@
>
>  #define MAX_CPUS  4096
>
> -// FIXME: These should come from system headers
> -#ifndef bool
> -typedef char bool;
> -#endif
> -typedef int pid_t;
> -typedef long long int __s64;
> -typedef __s64 time64_t;
> -
> -struct timespec64 {
> -       time64_t        tv_sec;
> -       long int        tv_nsec;
> -};
> -
>  /* bpf-output associated map */
>  struct __augmented_syscalls__ {
>         __uint(type, BPF_MAP_TYPE_PERF_EVENT_ARRAY);
> diff --git a/tools/perf/util/bpf_skel/vmlinux/vmlinux.h b/tools/perf/util/bpf_skel/vmlinux/vmlinux.h
> index ab84a6e1da5eedb3..e9028235d7717b59 100644
> --- a/tools/perf/util/bpf_skel/vmlinux/vmlinux.h
> +++ b/tools/perf/util/bpf_skel/vmlinux/vmlinux.h
> @@ -20,6 +20,13 @@ typedef __s64 s64;
>
>  typedef int pid_t;
>
> +typedef __s64 time64_t;
> +
> +struct timespec64 {
> +        time64_t        tv_sec;
> +        long int        tv_nsec;
> +};
> +
>  enum cgroup_subsys_id {
>         perf_event_cgrp_id  = 8,
>  };
> --
> 2.43.0
>
  
Namhyung Kim Feb. 5, 2024, 11:16 p.m. UTC | #2
On Fri, Feb 2, 2024 at 6:01 PM Namhyung Kim <namhyung@kernel.org> wrote:
>
> On Fri, Feb 2, 2024 at 11:35 AM Arnaldo Carvalho de Melo
> <acme@kernel.org> wrote:
> >
> > If we instead decide to generate vmlinux.h from BTF info, it will be
> > there:
> >
> >   $ pahole timespec64
> >   struct timespec64 {
> >         time64_t                   tv_sec;               /*     0     8 */
> >         long int                   tv_nsec;              /*     8     8 */
> >
> >         /* size: 16, cachelines: 1, members: 2 */
> >         /* last cacheline: 16 bytes */
> >   };
> >
> >   $
> >
> > pahole manages to find it from /sys/kernel/btf/vmlinux, that is
> > generated from the kernel types.
> >
> > Cc: Adrian Hunter <adrian.hunter@intel.com>
> > Cc: Ian Rogers <irogers@google.com>
> > Cc: Jiri Olsa <jolsa@kernel.org>
> > Cc: Namhyung Kim <namhyung@kernel.org>
> > Link: https://lore.kernel.org/lkml/
> > Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
>
> Acked-by: Namhyung Kim <namhyung@kernel.org>

Hmm.. but it makes it fail to build with GEN_VMLINUX_H=1.

Thanks,
Namhyung


  CLANG   linux/tools/perf/util/bpf_skel/.tmp/augmented_raw_syscalls.bpf.o
In file included from util/bpf_skel/augmented_raw_syscalls.bpf.c:10:
linux/tools/include/uapi/linux/bpf.h:55:2: error: redefinition of
enumerator 'BPF_REG_0'
        BPF_REG_0 = 0,
        ^
linux/tools/perf/util/bpf_skel/.tmp/../vmlinux.h:46833:2: note:
previous definition is here
        BPF_REG_0 = 0,
        ^
  
Arnaldo Carvalho de Melo Feb. 16, 2024, 5:48 p.m. UTC | #3
On Mon, Feb 05, 2024 at 03:16:25PM -0800, Namhyung Kim wrote:
> On Fri, Feb 2, 2024 at 6:01 PM Namhyung Kim <namhyung@kernel.org> wrote:
> > On Fri, Feb 2, 2024 at 11:35 AM Arnaldo Carvalho de Melo <acme@kernel.org> wrote:
> > > If we instead decide to generate vmlinux.h from BTF info, it will be
> > > there:

> > >   $ pahole timespec64
> > >   struct timespec64 {
> > >         time64_t                   tv_sec;               /*     0     8 */
> > >         long int                   tv_nsec;              /*     8     8 */
> > >   };

> > Acked-by: Namhyung Kim <namhyung@kernel.org>
 
> Hmm.. but it makes it fail to build with GEN_VMLINUX_H=1.
 
>   CLANG   linux/tools/perf/util/bpf_skel/.tmp/augmented_raw_syscalls.bpf.o
> In file included from util/bpf_skel/augmented_raw_syscalls.bpf.c:10:
> linux/tools/include/uapi/linux/bpf.h:55:2: error: redefinition of
> enumerator 'BPF_REG_0'
>         BPF_REG_0 = 0,
>         ^
> linux/tools/perf/util/bpf_skel/.tmp/../vmlinux.h:46833:2: note:
> previous definition is here
>         BPF_REG_0 = 0,
>         ^

Right, the following oneliner fixes it (the minimalistic pre-built
vmlinux.h we carry when not using GEN_VMLINUX_H=1 already has it), I'll
squash it, do some container test builds and resend.

- Arnaldo

diff --git a/tools/perf/util/bpf_skel/augmented_raw_syscalls.bpf.c b/tools/perf/util/bpf_skel/augmented_raw_syscalls.bpf.c
index d3b672593c540259..0acbd74e8c760956 100644
--- a/tools/perf/util/bpf_skel/augmented_raw_syscalls.bpf.c
+++ b/tools/perf/util/bpf_skel/augmented_raw_syscalls.bpf.c
@@ -7,7 +7,6 @@
  */
 
 #include "vmlinux.h"
-#include <linux/bpf.h>
 #include <bpf/bpf_helpers.h>
 #include <linux/limits.h>
  

Patch

diff --git a/tools/perf/util/bpf_skel/augmented_raw_syscalls.bpf.c b/tools/perf/util/bpf_skel/augmented_raw_syscalls.bpf.c
index baecffbece14fb68..d3b672593c540259 100644
--- a/tools/perf/util/bpf_skel/augmented_raw_syscalls.bpf.c
+++ b/tools/perf/util/bpf_skel/augmented_raw_syscalls.bpf.c
@@ -6,6 +6,7 @@ 
  * payload expected by the 'perf trace' beautifiers.
  */
 
+#include "vmlinux.h"
 #include <linux/bpf.h>
 #include <bpf/bpf_helpers.h>
 #include <linux/limits.h>
@@ -22,19 +23,6 @@ 
 
 #define MAX_CPUS  4096
 
-// FIXME: These should come from system headers
-#ifndef bool
-typedef char bool;
-#endif
-typedef int pid_t;
-typedef long long int __s64;
-typedef __s64 time64_t;
-
-struct timespec64 {
-	time64_t	tv_sec;
-	long int	tv_nsec;
-};
-
 /* bpf-output associated map */
 struct __augmented_syscalls__ {
 	__uint(type, BPF_MAP_TYPE_PERF_EVENT_ARRAY);
diff --git a/tools/perf/util/bpf_skel/vmlinux/vmlinux.h b/tools/perf/util/bpf_skel/vmlinux/vmlinux.h
index ab84a6e1da5eedb3..e9028235d7717b59 100644
--- a/tools/perf/util/bpf_skel/vmlinux/vmlinux.h
+++ b/tools/perf/util/bpf_skel/vmlinux/vmlinux.h
@@ -20,6 +20,13 @@  typedef __s64 s64;
 
 typedef int pid_t;
 
+typedef __s64 time64_t;
+
+struct timespec64 {
+        time64_t        tv_sec;
+        long int        tv_nsec;
+};
+
 enum cgroup_subsys_id {
 	perf_event_cgrp_id  = 8,
 };