2015-12-14 10:51:52

by Naveen N. Rao

[permalink] [raw]
Subject: [PATCH] perf: bpf: Fix build breakage due to libbpf

perf build is currently (v4.4-rc5) broken on powerpc:

bpf.c:28:4: error: #error __NR_bpf not defined. libbpf does not support
your arch.
# error __NR_bpf not defined. libbpf does not support your arch.
^

Fix this by including tools/perf/config/Makefile.arch for the proper
$ARCH macro. While at it, remove redundant LP64 macro definition.

Signed-off-by: Naveen N. Rao <[email protected]>
---
tools/lib/bpf/Makefile | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/tools/lib/bpf/Makefile b/tools/lib/bpf/Makefile
index 636e3dd..050e0e8 100644
--- a/tools/lib/bpf/Makefile
+++ b/tools/lib/bpf/Makefile
@@ -31,7 +31,8 @@ INSTALL = install
DESTDIR ?=
DESTDIR_SQ = '$(subst ','\'',$(DESTDIR))'

-LP64 := $(shell echo __LP64__ | ${CC} ${CFLAGS} -E -x c - | tail -n 1)
+include $(srctree)/tools/perf/config/Makefile.arch
+
ifeq ($(LP64), 1)
libdir_relative = lib64
else
--
2.6.2


2015-12-14 11:36:14

by Wang Nan

[permalink] [raw]
Subject: [PATCH] tools lib bpf: Support libbpf on PowerPC

Support basic PowerPC compiling.

Checks BPF syscall number, turn off libbpf building on platform doesn't
support sys_bpf instead of blocking compiling.

Reported-by: Naveen N. Rao <[email protected]>
Signed-off-by: Wang Nan <[email protected]>
Cc: Arnaldo Carvalho de Melo <[email protected]>
Cc: Alexei Starovoitov <[email protected]>
Cc: Jiri Olsa <[email protected]>
Cc: Sukadev Bhattiprolu <[email protected]>
---

Hi Naveen,

I don't have PPC environtment. Could you please help me check this patch?

Thank you.

---
tools/build/feature/test-bpf.c | 23 ++++++++++++++++++++++-
tools/lib/bpf/bpf.c | 6 ++++--
2 files changed, 26 insertions(+), 3 deletions(-)

diff --git a/tools/build/feature/test-bpf.c b/tools/build/feature/test-bpf.c
index 062bac8..dc119ec 100644
--- a/tools/build/feature/test-bpf.c
+++ b/tools/build/feature/test-bpf.c
@@ -1,9 +1,26 @@
+#include <asm/unistd.h>
#include <linux/bpf.h>
+#include <unistd.h>
+
+#ifndef __NR_bpf
+# if defined(__i386__)
+# define __NR_bpf 357
+# elif defined(__x86_64__)
+# define __NR_bpf 321
+# elif defined(__aarch64__)
+# define __NR_bpf 280
+# elif defined(__powerpc64__)
+# define __NR_bpf 361
+# else
+# error __NR_bpf not defined. libbpf does not support your arch.
+# endif
+#endif

int main(void)
{
union bpf_attr attr;

+ /* Check fields in attr */
attr.prog_type = BPF_PROG_TYPE_KPROBE;
attr.insn_cnt = 0;
attr.insns = 0;
@@ -14,5 +31,9 @@ int main(void)
attr.kern_version = 0;

attr = attr;
- return 0;
+ /*
+ * Test existance of __NR_bpf and BPF_PROG_LOAD.
+ * This call should fail.
+ */
+ return syscall(__NR_bpf, BPF_PROG_LOAD, attr, sizeof(attr));
}
diff --git a/tools/lib/bpf/bpf.c b/tools/lib/bpf/bpf.c
index 5bdc6ea..b68c9e2 100644
--- a/tools/lib/bpf/bpf.c
+++ b/tools/lib/bpf/bpf.c
@@ -14,8 +14,8 @@
#include "bpf.h"

/*
- * When building perf, unistd.h is override. Define __NR_bpf is
- * required to be defined.
+ * When building perf, unistd.h is overrided. __NR_bpf is
+ * required to be defined explicitly.
*/
#ifndef __NR_bpf
# if defined(__i386__)
@@ -24,6 +24,8 @@
# define __NR_bpf 321
# elif defined(__aarch64__)
# define __NR_bpf 280
+# elif defined(__powerpc64__)
+# define __NR_bpf 361
# else
# error __NR_bpf not defined. libbpf does not support your arch.
# endif
--
1.8.3.4

2015-12-14 11:54:25

by Wang Nan

[permalink] [raw]
Subject: Re: [PATCH] perf: bpf: Fix build breakage due to libbpf

Hi Naveen,

On 2015/12/14 18:50, Naveen N. Rao wrote:
> perf build is currently (v4.4-rc5) broken on powerpc:
>
> bpf.c:28:4: error: #error __NR_bpf not defined. libbpf does not support
> your arch.
> # error __NR_bpf not defined. libbpf does not support your arch.
> ^
>
> Fix this by including tools/perf/config/Makefile.arch for the proper
> $ARCH macro. While at it, remove redundant LP64 macro definition.
>
> Signed-off-by: Naveen N. Rao <[email protected]>
> ---
> tools/lib/bpf/Makefile | 3 ++-
> 1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/tools/lib/bpf/Makefile b/tools/lib/bpf/Makefile
> index 636e3dd..050e0e8 100644
> --- a/tools/lib/bpf/Makefile
> +++ b/tools/lib/bpf/Makefile
> @@ -31,7 +31,8 @@ INSTALL = install
> DESTDIR ?=
> DESTDIR_SQ = '$(subst ','\'',$(DESTDIR))'
>
> -LP64 := $(shell echo __LP64__ | ${CC} ${CFLAGS} -E -x c - | tail -n 1)
> +include $(srctree)/tools/perf/config/Makefile.arch
> +
> ifeq ($(LP64), 1)
> libdir_relative = lib64
> else

Are you doing cross compiling? In this case you should provide an 'ARCH'
to make
through cmdline. For example, this is how yocto help me build perf on
aarch64:

$ make -C /patch/to/kernel/tools/perf O=/path/to/output \
CROSS_COMPILE=aarch64-oe-linux- ARCH=arm64 \
CC=aarch64-oe-linux-gcc --sysroot=...
AR=aarch64-oe-linux-ar ...

If you include Makefile.arch, I think you are seeking for a 'uname -m'
result,
then you are not doing cross compiling, right? In this case what you
need is providing
a __NR_bpf entry for your platform, because in some cases that value is
overrided because
we have

$ find ./tools/ -name "unistd*"
./tools/perf/util/include/asm/unistd_64.h
./tools/perf/util/include/asm/unistd_32.h

You can find the reason of these two files through:
eae7a755ee81129370c8f555b0d5672e6673735d

I posted a patch by replying this mail. I think you can find it through
[1] soon.
I don't have PPC environment to check it. Could you please help me check
this patch
in your environment?

[1]
http://lkml.kernel.org/g/[email protected]

2015-12-14 11:58:15

by Wang Nan

[permalink] [raw]
Subject: [PATCH v2] tools lib bpf: Support libbpf on PowerPC

Support basic PowerPC compiling.

Checks BPF syscall number, turn off libbpf building on platform doesn't
support sys_bpf instead of blocking compiling.

Reported-by: Naveen N. Rao <[email protected]>
Signed-off-by: Wang Nan <[email protected]>
Cc: Arnaldo Carvalho de Melo <[email protected]>
Cc: Alexei Starovoitov <[email protected]>
Cc: Jiri Olsa <[email protected]>
Cc: Sukadev Bhattiprolu <[email protected]>
---

v1 -> v2: __powerpc64__ -> __powerpc__. Code is from
./tools/perf/perf-sys.h, but not tested yet.

Naveen, please help me try this patch on PPC.

Thank you.

---
tools/build/feature/test-bpf.c | 23 ++++++++++++++++++++++-
tools/lib/bpf/bpf.c | 6 ++++--
2 files changed, 26 insertions(+), 3 deletions(-)

diff --git a/tools/build/feature/test-bpf.c b/tools/build/feature/test-bpf.c
index 062bac8..19497f7 100644
--- a/tools/build/feature/test-bpf.c
+++ b/tools/build/feature/test-bpf.c
@@ -1,9 +1,26 @@
+#include <asm/unistd.h>
#include <linux/bpf.h>
+#include <unistd.h>
+
+#ifndef __NR_bpf
+# if defined(__i386__)
+# define __NR_bpf 357
+# elif defined(__x86_64__)
+# define __NR_bpf 321
+# elif defined(__aarch64__)
+# define __NR_bpf 280
+# elif defined(__powerpc__)
+# define __NR_bpf 361
+# else
+# error __NR_bpf not defined. libbpf does not support your arch.
+# endif
+#endif

int main(void)
{
union bpf_attr attr;

+ /* Check fields in attr */
attr.prog_type = BPF_PROG_TYPE_KPROBE;
attr.insn_cnt = 0;
attr.insns = 0;
@@ -14,5 +31,9 @@ int main(void)
attr.kern_version = 0;

attr = attr;
- return 0;
+ /*
+ * Test existance of __NR_bpf and BPF_PROG_LOAD.
+ * This call should fail if we run the testcase.
+ */
+ return syscall(__NR_bpf, BPF_PROG_LOAD, attr, sizeof(attr));
}
diff --git a/tools/lib/bpf/bpf.c b/tools/lib/bpf/bpf.c
index 5bdc6ea..fd25c58 100644
--- a/tools/lib/bpf/bpf.c
+++ b/tools/lib/bpf/bpf.c
@@ -14,8 +14,8 @@
#include "bpf.h"

/*
- * When building perf, unistd.h is override. Define __NR_bpf is
- * required to be defined.
+ * When building perf, unistd.h is overrided. __NR_bpf is
+ * required to be defined explicitly.
*/
#ifndef __NR_bpf
# if defined(__i386__)
@@ -24,6 +24,8 @@
# define __NR_bpf 321
# elif defined(__aarch64__)
# define __NR_bpf 280
+# elif defined(__powerpc__)
+# define __NR_bpf 361
# else
# error __NR_bpf not defined. libbpf does not support your arch.
# endif
--
1.8.3.4

2015-12-14 15:18:49

by Naveen N. Rao

[permalink] [raw]
Subject: Re: [PATCH] perf: bpf: Fix build breakage due to libbpf

On 2015/12/14 07:53PM, Wang Nan wrote:
> Hi Naveen,
>
> On 2015/12/14 18:50, Naveen N. Rao wrote:
> >perf build is currently (v4.4-rc5) broken on powerpc:
> >
> >bpf.c:28:4: error: #error __NR_bpf not defined. libbpf does not support
> >your arch.
> > # error __NR_bpf not defined. libbpf does not support your arch.
> > ^
> >
> >Fix this by including tools/perf/config/Makefile.arch for the proper
> >$ARCH macro. While at it, remove redundant LP64 macro definition.
> >
> >Signed-off-by: Naveen N. Rao <[email protected]>
> >---
> > tools/lib/bpf/Makefile | 3 ++-
> > 1 file changed, 2 insertions(+), 1 deletion(-)
> >
> >diff --git a/tools/lib/bpf/Makefile b/tools/lib/bpf/Makefile
> >index 636e3dd..050e0e8 100644
> >--- a/tools/lib/bpf/Makefile
> >+++ b/tools/lib/bpf/Makefile
> >@@ -31,7 +31,8 @@ INSTALL = install
> > DESTDIR ?=
> > DESTDIR_SQ = '$(subst ','\'',$(DESTDIR))'
> >-LP64 := $(shell echo __LP64__ | ${CC} ${CFLAGS} -E -x c - | tail -n 1)
> >+include $(srctree)/tools/perf/config/Makefile.arch
> >+
> > ifeq ($(LP64), 1)
> > libdir_relative = lib64
> > else
>
> Are you doing cross compiling? In this case you should provide an 'ARCH' to
> make
> through cmdline. For example, this is how yocto help me build perf on
> aarch64:
>
> $ make -C /patch/to/kernel/tools/perf O=/path/to/output \
> CROSS_COMPILE=aarch64-oe-linux- ARCH=arm64 \
> CC=aarch64-oe-linux-gcc --sysroot=... AR=aarch64-oe-linux-ar ...

I am not cross-compiling - the build error was with trying to build perf
on ppc64le. Even with cross-compiling (and explicitly specifying $ARCH),
Makefile.arch should still work.

>
> If you include Makefile.arch, I think you are seeking for a 'uname -m'
> result,
> then you are not doing cross compiling, right? In this case what you need is
> providing
> a __NR_bpf entry for your platform, because in some cases that value is
> overrided because
> we have
>
> $ find ./tools/ -name "unistd*"
> ./tools/perf/util/include/asm/unistd_64.h
> ./tools/perf/util/include/asm/unistd_32.h
>
> You can find the reason of these two files through:
> eae7a755ee81129370c8f555b0d5672e6673735d

I thought of just defining __NR_bpf for powerpc, but it will still break
perf build for most other architectures. Moreover,
tools/lib/bpf/Makefile explicitly includes headers from the linux kernel
build tree (rather than the system headers) and I thought this was
specifically to pull in __NR_bpf, among others -- just that we were not
properly including the right headers since $ARCH was not defined. More
specifically:

$ make V=1
<snip>
gcc -Wp,-MD,./.bpf.o.d,-MT,bpf.o -g -Wall -DHAVE_LIBELF_MMAP_SUPPORT
-DHAVE_ELF_GETPHDRNUM_SUPPORT -Wbad-function-cast
-Wdeclaration-after-statement -Wformat-security -Wformat-y2k
-Winit-self -Wmissing-declarations -Wmissing-prototypes
-Wnested-externs -Wno-system-headers -Wold-style-definition -Wpacked
-Wredundant-decls -Wshadow -Wstrict-aliasing=3 -Wstrict-prototypes
-Wswitch-default -Wswitch-enum -Wundef -Wwrite-strings -Wformat
-Werror -Wall -fPIC -I. -I/root/linux/tools/include
-I/root/linux/arch//include/uapi -I/root/linux/include/uapi
-D"BUILD_STR(s)=#s" -c -o bpf.o bpf.c

Notice // in -I/root/linux/arch//include/uapi. Hence, my patch to ensure
the right headers get included.

I'm thinking the explicit __NR_bpf definitions are only needed for x86
-- since I don't see the definitions in the kernel tree headers.


Regards,
Naveen

>
> I posted a patch by replying this mail. I think you can find it through [1]
> soon.
> I don't have PPC environment to check it. Could you please help me check
> this patch
> in your environment?
>
> [1] http://lkml.kernel.org/g/[email protected]
>
>
> _______________________________________________
> Linuxppc-dev mailing list
> [email protected]
> https://lists.ozlabs.org/listinfo/linuxppc-dev

2015-12-14 15:44:19

by Naveen N. Rao

[permalink] [raw]
Subject: Re: [PATCH v2] tools lib bpf: Support libbpf on PowerPC

On 2015/12/14 11:57AM, Wang Nan wrote:
> Support basic PowerPC compiling.
>
> Checks BPF syscall number, turn off libbpf building on platform doesn't
> support sys_bpf instead of blocking compiling.
>
> Reported-by: Naveen N. Rao <[email protected]>
> Signed-off-by: Wang Nan <[email protected]>
> Cc: Arnaldo Carvalho de Melo <[email protected]>
> Cc: Alexei Starovoitov <[email protected]>
> Cc: Jiri Olsa <[email protected]>
> Cc: Sukadev Bhattiprolu <[email protected]>
> ---
>
> v1 -> v2: __powerpc64__ -> __powerpc__. Code is from
> ./tools/perf/perf-sys.h, but not tested yet.
>
> Naveen, please help me try this patch on PPC.

Thanks, this works. However...

>
> Thank you.
>
> ---
> tools/build/feature/test-bpf.c | 23 ++++++++++++++++++++++-
> tools/lib/bpf/bpf.c | 6 ++++--
> 2 files changed, 26 insertions(+), 3 deletions(-)
>
> diff --git a/tools/build/feature/test-bpf.c b/tools/build/feature/test-bpf.c
> index 062bac8..19497f7 100644
> --- a/tools/build/feature/test-bpf.c
> +++ b/tools/build/feature/test-bpf.c
> @@ -1,9 +1,26 @@
> +#include <asm/unistd.h>
> #include <linux/bpf.h>
> +#include <unistd.h>
> +
> +#ifndef __NR_bpf
> +# if defined(__i386__)
> +# define __NR_bpf 357
> +# elif defined(__x86_64__)
> +# define __NR_bpf 321
> +# elif defined(__aarch64__)
> +# define __NR_bpf 280
> +# elif defined(__powerpc__)
> +# define __NR_bpf 361

I think we should drop __aarch64__ and __powerpc__ here since this
builds fine on ppc without these hunks.

> +# else
> +# error __NR_bpf not defined. libbpf does not support your arch.
> +# endif
> +#endif
>
> int main(void)
> {
> union bpf_attr attr;
>
> + /* Check fields in attr */
> attr.prog_type = BPF_PROG_TYPE_KPROBE;
> attr.insn_cnt = 0;
> attr.insns = 0;
> @@ -14,5 +31,9 @@ int main(void)
> attr.kern_version = 0;
>
> attr = attr;
> - return 0;
> + /*
> + * Test existance of __NR_bpf and BPF_PROG_LOAD.

Nit... 'for existence'.

> + * This call should fail if we run the testcase.
> + */
> + return syscall(__NR_bpf, BPF_PROG_LOAD, attr, sizeof(attr));
> }
> diff --git a/tools/lib/bpf/bpf.c b/tools/lib/bpf/bpf.c
> index 5bdc6ea..fd25c58 100644
> --- a/tools/lib/bpf/bpf.c
> +++ b/tools/lib/bpf/bpf.c
> @@ -14,8 +14,8 @@
> #include "bpf.h"
>
> /*
> - * When building perf, unistd.h is override. Define __NR_bpf is
> - * required to be defined.
> + * When building perf, unistd.h is overrided. __NR_bpf is
> + * required to be defined explicitly.
> */
> #ifndef __NR_bpf
> # if defined(__i386__)
> @@ -24,6 +24,8 @@
> # define __NR_bpf 321
> # elif defined(__aarch64__)
> # define __NR_bpf 280
> +# elif defined(__powerpc__)
> +# define __NR_bpf 361

And, I think we should drop this hunk, but include the patch I sent.
That ensures that the proper headers from the kernel source tree are
included, so there won't be a need to explicitly define __NR_bpf for
each architecture.


Regards,
Naveen

2015-12-15 03:37:15

by Wang Nan

[permalink] [raw]
Subject: [PATCH v3 0/3] perf build: PowerPC: Fix build breakage due to libbpf

Hi Naveen,

Now I know your problem is in native building and the reason is
missing proper $(ARCH). I think other than that there's another problem
in libbpf's building: if your problem is unable to compile libbpf,
feature checker should find it and set NO_LIBBPF=1 for perf, so perf
building won't be blocked, only BPF related features should be turned
off. Also, I think including Makefile.arch from tools/scripts would be
better, because libbpf is at the same level with perf. So I separate
them into 3 patches. Please help me test it on PowerPC.

Cc: Arnaldo Carvalho de Melo <[email protected]>
Cc: Jiri Olsa <[email protected]>
Cc: Naveen N. Rao <[email protected]>
Cc: Sukadev Bhattiprolu <[email protected]>

Naveen N. Rao (1):
perf: bpf: Fix build breakage due to libbpf

Wang Nan (2):
perf tools: Fix PowerPC native building
tools: Move Makefile.arch from perf/config to tools/scripts

tools/build/feature/test-bpf.c | 20 +++++++++++++++++++-
tools/lib/bpf/Makefile | 3 ++-
tools/lib/bpf/bpf.c | 4 ++--
tools/perf/config/Makefile | 2 +-
tools/perf/tests/make | 2 +-
tools/{perf/config => scripts}/Makefile.arch | 0
6 files changed, 25 insertions(+), 6 deletions(-)
rename tools/{perf/config => scripts}/Makefile.arch (100%)

--
1.8.3.4

2015-12-15 03:36:45

by Wang Nan

[permalink] [raw]
Subject: [PATCH v3 1/3] perf tools: Fix PowerPC native building

Checks BPF syscall number, turn off libbpf building on platform doesn't
correctly support sys_bpf instead of blocking compiling.

Reported-by: Naveen N. Rao <[email protected]>
Signed-off-by: Wang Nan <[email protected]>
Cc: Arnaldo Carvalho de Melo <[email protected]>
Cc: Jiri Olsa <[email protected]>
Cc: Sukadev Bhattiprolu <[email protected]>
---
tools/build/feature/test-bpf.c | 20 +++++++++++++++++++-
tools/lib/bpf/bpf.c | 4 ++--
2 files changed, 21 insertions(+), 3 deletions(-)

diff --git a/tools/build/feature/test-bpf.c b/tools/build/feature/test-bpf.c
index 062bac8..b389026 100644
--- a/tools/build/feature/test-bpf.c
+++ b/tools/build/feature/test-bpf.c
@@ -1,9 +1,23 @@
+#include <asm/unistd.h>
#include <linux/bpf.h>
+#include <unistd.h>
+
+#ifndef __NR_bpf
+# if defined(__i386__)
+# define __NR_bpf 357
+# elif defined(__x86_64__)
+# define __NR_bpf 321
+# elif defined(__aarch64__)
+# define __NR_bpf 280
+# error __NR_bpf not defined. libbpf does not support your arch.
+# endif
+#endif

int main(void)
{
union bpf_attr attr;

+ /* Check fields in attr */
attr.prog_type = BPF_PROG_TYPE_KPROBE;
attr.insn_cnt = 0;
attr.insns = 0;
@@ -14,5 +28,9 @@ int main(void)
attr.kern_version = 0;

attr = attr;
- return 0;
+ /*
+ * Test existence of __NR_bpf and BPF_PROG_LOAD.
+ * This call should fail if we run the testcase.
+ */
+ return syscall(__NR_bpf, BPF_PROG_LOAD, attr, sizeof(attr));
}
diff --git a/tools/lib/bpf/bpf.c b/tools/lib/bpf/bpf.c
index 5bdc6ea..1f91cc9 100644
--- a/tools/lib/bpf/bpf.c
+++ b/tools/lib/bpf/bpf.c
@@ -14,8 +14,8 @@
#include "bpf.h"

/*
- * When building perf, unistd.h is override. Define __NR_bpf is
- * required to be defined.
+ * When building perf, unistd.h is overrided. __NR_bpf is
+ * required to be defined explicitly.
*/
#ifndef __NR_bpf
# if defined(__i386__)
--
1.8.3.4

2015-12-15 03:36:53

by Wang Nan

[permalink] [raw]
Subject: [PATCH v3 2/3] tools: Move Makefile.arch from perf/config to tools/scripts

After this patch other directories can use this architecture detector
without directly including it from perf's directory. Libbpf would
utilize it to get proper $(ARCH) so it can receive correct uapi include
directory.

Signed-off-by: Wang Nan <[email protected]>
Cc: Arnaldo Carvalho de Melo <[email protected]>
Cc: Naveen N. Rao <[email protected]>
Cc: Jiri Olsa <[email protected]>
Cc: Sukadev Bhattiprolu <[email protected]>
---
tools/perf/config/Makefile | 2 +-
tools/perf/tests/make | 2 +-
tools/{perf/config => scripts}/Makefile.arch | 0
3 files changed, 2 insertions(+), 2 deletions(-)
rename tools/{perf/config => scripts}/Makefile.arch (100%)

diff --git a/tools/perf/config/Makefile b/tools/perf/config/Makefile
index a552417..34717e4 100644
--- a/tools/perf/config/Makefile
+++ b/tools/perf/config/Makefile
@@ -17,7 +17,7 @@ detected_var = $(shell echo "$(1)=$($(1))" >> $(OUTPUT).config-detected)

CFLAGS := $(EXTRA_CFLAGS) $(EXTRA_WARNINGS)

-include $(src-perf)/config/Makefile.arch
+include $(srctree)/tools/scripts/Makefile.arch

$(call detected_var,ARCH)

diff --git a/tools/perf/tests/make b/tools/perf/tests/make
index 8ea3dff..cd9c3ce 100644
--- a/tools/perf/tests/make
+++ b/tools/perf/tests/make
@@ -12,7 +12,7 @@ endif
else
PERF := .

-include config/Makefile.arch
+include $(srctree)/scripts/Makefile.arch

# FIXME looks like x86 is the only arch running tests ;-)
# we need some IS_(32/64) flag to make this generic
diff --git a/tools/perf/config/Makefile.arch b/tools/scripts/Makefile.arch
similarity index 100%
rename from tools/perf/config/Makefile.arch
rename to tools/scripts/Makefile.arch
--
1.8.3.4

2015-12-15 03:36:47

by Wang Nan

[permalink] [raw]
Subject: [PATCH v3 3/3] perf: bpf: Fix build breakage due to libbpf

From: "Naveen N. Rao" <[email protected]>

perf build is currently (v4.4-rc5) broken on powerpc:

bpf.c:28:4: error: #error __NR_bpf not defined. libbpf does not support
your arch.
# error __NR_bpf not defined. libbpf does not support your arch.
^

Fix this by including tools/perf/config/Makefile.arch for the proper
$ARCH macro. While at it, remove redundant LP64 macro definition.

Signed-off-by: Naveen N. Rao <[email protected]>
Signed-off-by: Wang Nan <[email protected]>
Cc: Arnaldo Carvalho de Melo <[email protected]>
Cc: Jiri Olsa <[email protected]>
Cc: Sukadev Bhattiprolu <[email protected]>
---
tools/lib/bpf/Makefile | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/tools/lib/bpf/Makefile b/tools/lib/bpf/Makefile
index 636e3dd..3d34a8c 100644
--- a/tools/lib/bpf/Makefile
+++ b/tools/lib/bpf/Makefile
@@ -31,7 +31,8 @@ INSTALL = install
DESTDIR ?=
DESTDIR_SQ = '$(subst ','\'',$(DESTDIR))'

-LP64 := $(shell echo __LP64__ | ${CC} ${CFLAGS} -E -x c - | tail -n 1)
+include $(srctree)/tools/scripts/Makefile.arch
+
ifeq ($(LP64), 1)
libdir_relative = lib64
else
--
1.8.3.4

2015-12-15 08:05:21

by Jiri Olsa

[permalink] [raw]
Subject: Re: [PATCH v3 0/3] perf build: PowerPC: Fix build breakage due to libbpf

On Tue, Dec 15, 2015 at 03:35:54AM +0000, Wang Nan wrote:
> Hi Naveen,
>
> Now I know your problem is in native building and the reason is
> missing proper $(ARCH). I think other than that there's another problem
> in libbpf's building: if your problem is unable to compile libbpf,
> feature checker should find it and set NO_LIBBPF=1 for perf, so perf
> building won't be blocked, only BPF related features should be turned
> off. Also, I think including Makefile.arch from tools/scripts would be
> better, because libbpf is at the same level with perf. So I separate
> them into 3 patches. Please help me test it on PowerPC.
>
> Cc: Arnaldo Carvalho de Melo <[email protected]>
> Cc: Jiri Olsa <[email protected]>
> Cc: Naveen N. Rao <[email protected]>
> Cc: Sukadev Bhattiprolu <[email protected]>
>
> Naveen N. Rao (1):
> perf: bpf: Fix build breakage due to libbpf
>
> Wang Nan (2):
> perf tools: Fix PowerPC native building
> tools: Move Makefile.arch from perf/config to tools/scripts

for the patchset:

Acked-by: Jiri Olsa <[email protected]>

thanks,
jirka

2015-12-15 08:51:54

by Wang Nan

[permalink] [raw]
Subject: Re: [PATCH v3 3/3] perf: bpf: Fix build breakage due to libbpf

This patch contains a problem.

On 2015/12/15 11:35, Wang Nan wrote:
> From: "Naveen N. Rao" <[email protected]>
>
> perf build is currently (v4.4-rc5) broken on powerpc:
>
> bpf.c:28:4: error: #error __NR_bpf not defined. libbpf does not support
> your arch.
> # error __NR_bpf not defined. libbpf does not support your arch.
> ^
>
> Fix this by including tools/perf/config/Makefile.arch for the proper
> $ARCH macro. While at it, remove redundant LP64 macro definition.
>
> Signed-off-by: Naveen N. Rao <[email protected]>
> Signed-off-by: Wang Nan <[email protected]>
> Cc: Arnaldo Carvalho de Melo <[email protected]>
> Cc: Jiri Olsa <[email protected]>
> Cc: Sukadev Bhattiprolu <[email protected]>
> ---
> tools/lib/bpf/Makefile | 3 ++-
> 1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/tools/lib/bpf/Makefile b/tools/lib/bpf/Makefile
> index 636e3dd..3d34a8c 100644
> --- a/tools/lib/bpf/Makefile
> +++ b/tools/lib/bpf/Makefile
> @@ -31,7 +31,8 @@ INSTALL = install
> DESTDIR ?=
> DESTDIR_SQ = '$(subst ','\'',$(DESTDIR))'
>
> -LP64 := $(shell echo __LP64__ | ${CC} ${CFLAGS} -E -x c - | tail -n 1)
> +include $(srctree)/tools/scripts/Makefile.arch
> +

Here we depend on $(srctree), but libbpf's Makefile doesn't automatically
detect it. Directly 'make' in libbpf directory causes an error.

Will post a v4 for it.

Thank you.

2015-12-15 08:52:07

by Wang Nan

[permalink] [raw]
Subject: [PATCH v4] perf: bpf: Fix build breakage due to libbpf

From: "Naveen N. Rao" <[email protected]>

perf build is currently (v4.4-rc5) broken on powerpc:

bpf.c:28:4: error: #error __NR_bpf not defined. libbpf does not support
your arch.
# error __NR_bpf not defined. libbpf does not support your arch.
^

Fix this by including tools/scripts/Makefile.arch for the proper
$ARCH macro. While at it, remove redundant LP64 macro definition.

Also, since libbpf require $(srctree) now, detect the path of
srctree like perf.

Signed-off-by: Naveen N. Rao <[email protected]>
Signed-off-by: Wang Nan <[email protected]>
Acked-by: Jiri Olsa <[email protected]>
Cc: Arnaldo Carvalho de Melo <[email protected]>
Cc: Sukadev Bhattiprolu <[email protected]>
---

v3 -> v4: Add srctree detector code so directly run 'make' in libbpf
directory would not cause error.

---
tools/lib/bpf/Makefile | 9 ++++++++-
1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/tools/lib/bpf/Makefile b/tools/lib/bpf/Makefile
index 636e3dd..0b6e013 100644
--- a/tools/lib/bpf/Makefile
+++ b/tools/lib/bpf/Makefile
@@ -6,6 +6,12 @@ BPF_EXTRAVERSION = 1

MAKEFLAGS += --no-print-directory

+ifeq ($(srctree),)
+srctree := $(patsubst %/,%,$(dir $(shell pwd)))
+srctree := $(patsubst %/,%,$(dir $(srctree)))
+srctree := $(patsubst %/,%,$(dir $(srctree)))
+#$(info Determined 'srctree' to be $(srctree))
+endif

# Makefiles suck: This macro sets a default value of $(2) for the
# variable named by $(1), unless the variable has been set by
@@ -31,7 +37,8 @@ INSTALL = install
DESTDIR ?=
DESTDIR_SQ = '$(subst ','\'',$(DESTDIR))'

-LP64 := $(shell echo __LP64__ | ${CC} ${CFLAGS} -E -x c - | tail -n 1)
+include $(srctree)/tools/scripts/Makefile.arch
+
ifeq ($(LP64), 1)
libdir_relative = lib64
else
--
1.8.3.4

2015-12-15 11:31:18

by Naveen N. Rao

[permalink] [raw]
Subject: Re: [PATCH v3 0/3] perf build: PowerPC: Fix build breakage due to libbpf

On 2015/12/15 03:35AM, Wang Nan wrote:
> Hi Naveen,
>
> Now I know your problem is in native building and the reason is
> missing proper $(ARCH). I think other than that there's another problem
> in libbpf's building: if your problem is unable to compile libbpf,
> feature checker should find it and set NO_LIBBPF=1 for perf, so perf
> building won't be blocked, only BPF related features should be turned
> off. Also, I think including Makefile.arch from tools/scripts would be
> better, because libbpf is at the same level with perf. So I separate
> them into 3 patches. Please help me test it on PowerPC.

Hi Wang,
Thanks for putting this together. Entire series:

Tested-by: Naveen N. Rao <[email protected]>


>
> Cc: Arnaldo Carvalho de Melo <[email protected]>
> Cc: Jiri Olsa <[email protected]>
> Cc: Naveen N. Rao <[email protected]>
> Cc: Sukadev Bhattiprolu <[email protected]>
>
> Naveen N. Rao (1):
> perf: bpf: Fix build breakage due to libbpf
>
> Wang Nan (2):
> perf tools: Fix PowerPC native building
> tools: Move Makefile.arch from perf/config to tools/scripts
>
> tools/build/feature/test-bpf.c | 20 +++++++++++++++++++-
> tools/lib/bpf/Makefile | 3 ++-
> tools/lib/bpf/bpf.c | 4 ++--
> tools/perf/config/Makefile | 2 +-
> tools/perf/tests/make | 2 +-
> tools/{perf/config => scripts}/Makefile.arch | 0
> 6 files changed, 25 insertions(+), 6 deletions(-)
> rename tools/{perf/config => scripts}/Makefile.arch (100%)
>
> --
> 1.8.3.4
>

2015-12-15 11:41:37

by Naveen N. Rao

[permalink] [raw]
Subject: Re: [PATCH v4] perf: bpf: Fix build breakage due to libbpf

On 2015/12/15 08:51AM, Wang Nan wrote:
> From: "Naveen N. Rao" <[email protected]>
>
> perf build is currently (v4.4-rc5) broken on powerpc:
>
> bpf.c:28:4: error: #error __NR_bpf not defined. libbpf does not support
> your arch.
> # error __NR_bpf not defined. libbpf does not support your arch.
> ^
>
> Fix this by including tools/scripts/Makefile.arch for the proper
> $ARCH macro. While at it, remove redundant LP64 macro definition.
>
> Also, since libbpf require $(srctree) now, detect the path of
> srctree like perf.
>
> Signed-off-by: Naveen N. Rao <[email protected]>
> Signed-off-by: Wang Nan <[email protected]>
> Acked-by: Jiri Olsa <[email protected]>
> Cc: Arnaldo Carvalho de Melo <[email protected]>
> Cc: Sukadev Bhattiprolu <[email protected]>
> ---
>
> v3 -> v4: Add srctree detector code so directly run 'make' in libbpf
> directory would not cause error.

Good catch!

Tested-by: Naveen N. Rao <[email protected]>


>
> ---
> tools/lib/bpf/Makefile | 9 ++++++++-
> 1 file changed, 8 insertions(+), 1 deletion(-)
>
> diff --git a/tools/lib/bpf/Makefile b/tools/lib/bpf/Makefile
> index 636e3dd..0b6e013 100644
> --- a/tools/lib/bpf/Makefile
> +++ b/tools/lib/bpf/Makefile
> @@ -6,6 +6,12 @@ BPF_EXTRAVERSION = 1
>
> MAKEFLAGS += --no-print-directory
>
> +ifeq ($(srctree),)
> +srctree := $(patsubst %/,%,$(dir $(shell pwd)))
> +srctree := $(patsubst %/,%,$(dir $(srctree)))
> +srctree := $(patsubst %/,%,$(dir $(srctree)))
> +#$(info Determined 'srctree' to be $(srctree))
> +endif
>
> # Makefiles suck: This macro sets a default value of $(2) for the
> # variable named by $(1), unless the variable has been set by
> @@ -31,7 +37,8 @@ INSTALL = install
> DESTDIR ?=
> DESTDIR_SQ = '$(subst ','\'',$(DESTDIR))'
>
> -LP64 := $(shell echo __LP64__ | ${CC} ${CFLAGS} -E -x c - | tail -n 1)
> +include $(srctree)/tools/scripts/Makefile.arch
> +
> ifeq ($(LP64), 1)
> libdir_relative = lib64
> else
> --
> 1.8.3.4
>

2015-12-16 19:42:40

by Arnaldo Carvalho de Melo

[permalink] [raw]
Subject: Re: [PATCH v4] perf: bpf: Fix build breakage due to libbpf

Em Tue, Dec 15, 2015 at 05:10:46PM +0530, Naveen N. Rao escreveu:
> On 2015/12/15 08:51AM, Wang Nan wrote:
> > From: "Naveen N. Rao" <[email protected]>
> >
> > perf build is currently (v4.4-rc5) broken on powerpc:
> >
> > bpf.c:28:4: error: #error __NR_bpf not defined. libbpf does not support
> > your arch.
> > # error __NR_bpf not defined. libbpf does not support your arch.
> > ^
> >
> > Fix this by including tools/scripts/Makefile.arch for the proper
> > $ARCH macro. While at it, remove redundant LP64 macro definition.
> >
> > Also, since libbpf require $(srctree) now, detect the path of
> > srctree like perf.
> >
> > Signed-off-by: Naveen N. Rao <[email protected]>
> > Signed-off-by: Wang Nan <[email protected]>
> > Acked-by: Jiri Olsa <[email protected]>
> > Cc: Arnaldo Carvalho de Melo <[email protected]>
> > Cc: Sukadev Bhattiprolu <[email protected]>
> > ---
> >
> > v3 -> v4: Add srctree detector code so directly run 'make' in libbpf
> > directory would not cause error.
>
> Good catch!
>
> Tested-by: Naveen N. Rao <[email protected]>

Trying to apply the patchkit:

[acme@zoo linux]$ make -C tools clean > /dev/null 2>&1
[acme@zoo linux]$ make -C tools/perf build-test
make: Entering directory '/home/git/linux/tools/perf'
Testing Makefile
tests/make:15: /scripts/Makefile.arch: No such file or directory
make[2]: *** No rule to make target '/scripts/Makefile.arch'. Stop.
tests/make:5: recipe for target 'all' failed
make[1]: *** [all] Error 2
Makefile:81: recipe for target 'build-test' failed
make: *** [build-test] Error 2
make: Leaving directory '/home/git/linux/tools/perf'
[acme@zoo linux]$

What am I doing wrong?

- Arnaldo

2015-12-17 01:31:16

by Wang Nan

[permalink] [raw]
Subject: Re: [PATCH v4] perf: bpf: Fix build breakage due to libbpf



On 2015/12/17 3:42, Arnaldo Carvalho de Melo wrote:
> Em Tue, Dec 15, 2015 at 05:10:46PM +0530, Naveen N. Rao escreveu:
>> On 2015/12/15 08:51AM, Wang Nan wrote:
>>> From: "Naveen N. Rao" <[email protected]>
>>>
>>> perf build is currently (v4.4-rc5) broken on powerpc:
>>>
>>> bpf.c:28:4: error: #error __NR_bpf not defined. libbpf does not support
>>> your arch.
>>> # error __NR_bpf not defined. libbpf does not support your arch.
>>> ^
>>>
>>> Fix this by including tools/scripts/Makefile.arch for the proper
>>> $ARCH macro. While at it, remove redundant LP64 macro definition.
>>>
>>> Also, since libbpf require $(srctree) now, detect the path of
>>> srctree like perf.
>>>
>>> Signed-off-by: Naveen N. Rao <[email protected]>
>>> Signed-off-by: Wang Nan <[email protected]>
>>> Acked-by: Jiri Olsa <[email protected]>
>>> Cc: Arnaldo Carvalho de Melo <[email protected]>
>>> Cc: Sukadev Bhattiprolu <[email protected]>
>>> ---
>>>
>>> v3 -> v4: Add srctree detector code so directly run 'make' in libbpf
>>> directory would not cause error.
>> Good catch!
>>
>> Tested-by: Naveen N. Rao <[email protected]>
> Trying to apply the patchkit:
>
> [acme@zoo linux]$ make -C tools clean > /dev/null 2>&1
> [acme@zoo linux]$ make -C tools/perf build-test
> make: Entering directory '/home/git/linux/tools/perf'
> Testing Makefile
> tests/make:15: /scripts/Makefile.arch: No such file or directory
> make[2]: *** No rule to make target '/scripts/Makefile.arch'. Stop.
> tests/make:5: recipe for target 'all' failed
> make[1]: *** [all] Error 2
> Makefile:81: recipe for target 'build-test' failed
> make: *** [build-test] Error 2
> make: Leaving directory '/home/git/linux/tools/perf'
> [acme@zoo linux]$
>
> What am I doing wrong?

You need all 3 patches. This v4 patch is a fix for previous v3 3/3 and I
send
this patch by replying that one. I thought your email client is sorted
by thread
so you can easily find it but it seems I was wrong...

The whole thread is:

[PATCH v3 0/3] perf build: PowerPC: Fix build breakage due to libbpf:
http://lkml.kernel.org/g/[email protected]

[PATCH v3 1/3] perf tools: Fix PowerPC native building
http://lkml.kernel.org/g/[email protected]

[PATCH v3 2/3] tools: Move Makefile.arch from perf/config to tools/scripts
http://lkml.kernel.org/g/[email protected]

[PATCH v3 3/3] perf: bpf: Fix build breakage due to libbpf
http://lkml.kernel.org/g/[email protected]

and [PATCH v3 3/3] breaks local building because the usage of "srctree", and
I fix it in this one.

Thanks.

2015-12-17 05:08:09

by Naveen N. Rao

[permalink] [raw]
Subject: Re: [PATCH v4] perf: bpf: Fix build breakage due to libbpf

On 2015/12/17 09:29AM, Wang Nan wrote:
>
>
> On 2015/12/17 3:42, Arnaldo Carvalho de Melo wrote:
> >Em Tue, Dec 15, 2015 at 05:10:46PM +0530, Naveen N. Rao escreveu:
> >>On 2015/12/15 08:51AM, Wang Nan wrote:
> >>>From: "Naveen N. Rao" <[email protected]>
> >>>
> >>>perf build is currently (v4.4-rc5) broken on powerpc:
> >>>
> >>>bpf.c:28:4: error: #error __NR_bpf not defined. libbpf does not support
> >>>your arch.
> >>> # error __NR_bpf not defined. libbpf does not support your arch.
> >>> ^
> >>>
> >>>Fix this by including tools/scripts/Makefile.arch for the proper
> >>>$ARCH macro. While at it, remove redundant LP64 macro definition.
> >>>
> >>>Also, since libbpf require $(srctree) now, detect the path of
> >>>srctree like perf.
> >>>
> >>>Signed-off-by: Naveen N. Rao <[email protected]>
> >>>Signed-off-by: Wang Nan <[email protected]>
> >>>Acked-by: Jiri Olsa <[email protected]>
> >>>Cc: Arnaldo Carvalho de Melo <[email protected]>
> >>>Cc: Sukadev Bhattiprolu <[email protected]>
> >>>---
> >>>
> >>>v3 -> v4: Add srctree detector code so directly run 'make' in libbpf
> >>> directory would not cause error.
> >>Good catch!
> >>
> >>Tested-by: Naveen N. Rao <[email protected]>
> >Trying to apply the patchkit:
> >
> >[acme@zoo linux]$ make -C tools clean > /dev/null 2>&1
> >[acme@zoo linux]$ make -C tools/perf build-test
> >make: Entering directory '/home/git/linux/tools/perf'
> >Testing Makefile
> >tests/make:15: /scripts/Makefile.arch: No such file or directory
> >make[2]: *** No rule to make target '/scripts/Makefile.arch'. Stop.
> >tests/make:5: recipe for target 'all' failed
> >make[1]: *** [all] Error 2
> >Makefile:81: recipe for target 'build-test' failed
> >make: *** [build-test] Error 2
> >make: Leaving directory '/home/git/linux/tools/perf'
> >[acme@zoo linux]$
> >
> >What am I doing wrong?
>
> You need all 3 patches. This v4 patch is a fix for previous v3 3/3 and I
> send
> this patch by replying that one. I thought your email client is sorted by
> thread
> so you can easily find it but it seems I was wrong...

Arrgh! I see the confusion - your v4 didn't explicitly mention patch
number 3, so that must have made Arnaldo think that this patch alone is
enough. Perhaps [PATCH v4 3/3] would have been clearer.

>
> The whole thread is:
>
> [PATCH v3 0/3] perf build: PowerPC: Fix build breakage due to libbpf:
> http://lkml.kernel.org/g/[email protected]
>
> [PATCH v3 1/3] perf tools: Fix PowerPC native building
> http://lkml.kernel.org/g/[email protected]
>
> [PATCH v3 2/3] tools: Move Makefile.arch from perf/config to tools/scripts
> http://lkml.kernel.org/g/[email protected]
>
> [PATCH v3 3/3] perf: bpf: Fix build breakage due to libbpf
> http://lkml.kernel.org/g/[email protected]
>
> and [PATCH v3 3/3] breaks local building because the usage of "srctree", and
^^
You mean v4 here.

Anyway, now that you've sent v4, it should be much clearer.

Thanks,
Naveen

2015-12-17 12:19:45

by Arnaldo Carvalho de Melo

[permalink] [raw]
Subject: Re: [PATCH v4] perf: bpf: Fix build breakage due to libbpf

Em Thu, Dec 17, 2015 at 10:37:14AM +0530, Naveen N. Rao escreveu:
> On 2015/12/17 09:29AM, Wang Nan wrote:
> > The whole thread is:
> >
> > [PATCH v3 0/3] perf build: PowerPC: Fix build breakage due to libbpf:
> > http://lkml.kernel.org/g/[email protected]
> >
> > [PATCH v3 1/3] perf tools: Fix PowerPC native building
> > http://lkml.kernel.org/g/[email protected]
> >
> > [PATCH v3 2/3] tools: Move Makefile.arch from perf/config to tools/scripts
> > http://lkml.kernel.org/g/[email protected]
> >
> > [PATCH v3 3/3] perf: bpf: Fix build breakage due to libbpf
> > http://lkml.kernel.org/g/[email protected]
> >
> > and [PATCH v3 3/3] breaks local building because the usage of "srctree", and
^^
> You mean v4 here.

> Anyway, now that you've sent v4, it should be much clearer.

Right, I should've read it more thoroughly, but anyway, I'll process it
today.

- Arnaldo