2015-12-17 01:44:37

by Wang Nan

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

Fix PowerPC build breakage found by Naveen.

Perf building should not be blocked if BPF syscall is broken in some
platform.

In v3 a problem in 3/3 is found and fixed, but I only sent v4 of 3/3.
Send all 3 patches together again.

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 | 9 ++++++++-
tools/lib/bpf/bpf.c | 4 ++--
tools/perf/config/Makefile | 2 +-
tools/perf/config/Makefile.arch | 18 ------------------
tools/perf/tests/make | 2 +-
tools/scripts/Makefile.arch | 18 ++++++++++++++++++
7 files changed, 49 insertions(+), 24 deletions(-)
delete mode 100644 tools/perf/config/Makefile.arch
create mode 100644 tools/scripts/Makefile.arch

--
1.8.3.4


2015-12-17 01:44:33

by Wang Nan

[permalink] [raw]
Subject: [RESEND PATCH v4 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]>
Acked-by: Jiri Olsa <[email protected]>
Tested-by: Naveen N. Rao <[email protected]>
Signed-off-by: Wang Nan <[email protected]>
Cc: Arnaldo Carvalho de Melo <[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-17 01:49:51

by Wang Nan

[permalink] [raw]
Subject: [RESEND PATCH v4 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]>
Acked-by: Jiri Olsa <[email protected]>
Tested-by: Naveen N. Rao <[email protected]>
Cc: Arnaldo Carvalho de Melo <[email protected]>
Cc: Naveen N. Rao <[email protected]>
Cc: Sukadev Bhattiprolu <[email protected]>
---
tools/perf/config/Makefile | 2 +-
tools/perf/config/Makefile.arch | 18 ------------------
tools/perf/tests/make | 2 +-
tools/scripts/Makefile.arch | 18 ++++++++++++++++++
4 files changed, 20 insertions(+), 20 deletions(-)
delete mode 100644 tools/perf/config/Makefile.arch
create mode 100644 tools/scripts/Makefile.arch

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/config/Makefile.arch b/tools/perf/config/Makefile.arch
deleted file mode 100644
index e11fbd6..0000000
--- a/tools/perf/config/Makefile.arch
+++ /dev/null
@@ -1,18 +0,0 @@
-ifndef ARCH
-ARCH := $(shell uname -m 2>/dev/null || echo not)
-endif
-
-ARCH := $(shell echo $(ARCH) | sed -e s/i.86/x86/ -e s/x86_64/x86/ \
- -e s/sun4u/sparc/ -e s/sparc64/sparc/ \
- -e /arm64/!s/arm.*/arm/ -e s/sa110/arm/ \
- -e s/s390x/s390/ -e s/parisc64/parisc/ \
- -e s/ppc.*/powerpc/ -e s/mips.*/mips/ \
- -e s/sh[234].*/sh/ -e s/aarch64.*/arm64/ \
- -e s/tile.*/tile/ )
-
-LP64 := $(shell echo __LP64__ | ${CC} ${CFLAGS} -E -x c - | tail -n 1)
-ifeq ($(LP64), 1)
- IS_64_BIT := 1
-else
- IS_64_BIT := 0
-endif
diff --git a/tools/perf/tests/make b/tools/perf/tests/make
index c1fbb8e..a8ede37 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/scripts/Makefile.arch b/tools/scripts/Makefile.arch
new file mode 100644
index 0000000..e11fbd6
--- /dev/null
+++ b/tools/scripts/Makefile.arch
@@ -0,0 +1,18 @@
+ifndef ARCH
+ARCH := $(shell uname -m 2>/dev/null || echo not)
+endif
+
+ARCH := $(shell echo $(ARCH) | sed -e s/i.86/x86/ -e s/x86_64/x86/ \
+ -e s/sun4u/sparc/ -e s/sparc64/sparc/ \
+ -e /arm64/!s/arm.*/arm/ -e s/sa110/arm/ \
+ -e s/s390x/s390/ -e s/parisc64/parisc/ \
+ -e s/ppc.*/powerpc/ -e s/mips.*/mips/ \
+ -e s/sh[234].*/sh/ -e s/aarch64.*/arm64/ \
+ -e s/tile.*/tile/ )
+
+LP64 := $(shell echo __LP64__ | ${CC} ${CFLAGS} -E -x c - | tail -n 1)
+ifeq ($(LP64), 1)
+ IS_64_BIT := 1
+else
+ IS_64_BIT := 0
+endif
--
1.8.3.4

2015-12-17 01:44:43

by Wang Nan

[permalink] [raw]
Subject: [RESEND PATCH v4 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/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]>
[Use tools/scripts/Makefile.arch]
Acked-by: Jiri Olsa <[email protected]>
Cc: Arnaldo Carvalho de Melo <[email protected]>
Cc: Sukadev Bhattiprolu <[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-17 05:11:21

by Naveen N. Rao

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

On 2015/12/17 01:43AM, Wang Nan wrote:
> 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]>
> Acked-by: Jiri Olsa <[email protected]>
> Tested-by: Naveen N. Rao <[email protected]>
> Cc: Arnaldo Carvalho de Melo <[email protected]>
> Cc: Naveen N. Rao <[email protected]>
> Cc: Sukadev Bhattiprolu <[email protected]>
> ---
> tools/perf/config/Makefile | 2 +-
> tools/perf/config/Makefile.arch | 18 ------------------
> tools/perf/tests/make | 2 +-
> tools/scripts/Makefile.arch | 18 ++++++++++++++++++
> 4 files changed, 20 insertions(+), 20 deletions(-)
> delete mode 100644 tools/perf/config/Makefile.arch
> create mode 100644 tools/scripts/Makefile.arch
^^^^^^
This is different from your previous version. This should be a file
rename.

- Naveen

2015-12-17 06:02:48

by Wang Nan

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



On 2015/12/17 13:10, Naveen N. Rao wrote:
> On 2015/12/17 01:43AM, Wang Nan wrote:
>> 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]>
>> Acked-by: Jiri Olsa <[email protected]>
>> Tested-by: Naveen N. Rao <[email protected]>
>> Cc: Arnaldo Carvalho de Melo <[email protected]>
>> Cc: Naveen N. Rao <[email protected]>
>> Cc: Sukadev Bhattiprolu <[email protected]>
>> ---
>> tools/perf/config/Makefile | 2 +-
>> tools/perf/config/Makefile.arch | 18 ------------------
>> tools/perf/tests/make | 2 +-
>> tools/scripts/Makefile.arch | 18 ++++++++++++++++++
>> 4 files changed, 20 insertions(+), 20 deletions(-)
>> delete mode 100644 tools/perf/config/Makefile.arch
>> create mode 100644 tools/scripts/Makefile.arch
> ^^^^^^
> This is different from your previous version. This should be a file
> rename.

Forget to use git format -M. The content is identical. Should I send it
again?

Thank you.