2012-11-27 12:16:40

by Mark Rutland

[permalink] [raw]
Subject: [PATCH] perf tools: fix build for various architectures

The UAPI changes broke the perf tool, and as of 3.7-rc7, it
still won't build for arm:

In file included from util/../perf.h:81:0,
from util/cache.h:7,
from perf.c:12:
util/../../../arch/arm/include/asm/unistd.h:16:29: fatal error: uapi/asm/unistd.h: No such file or directory
compilation terminated.
make: *** [perf.o] Error 1

It seems the perf tool build infrastructure can't map <uapi/*> paths,
and several architectures (arm, arm64, ia64, mips, parisc, powerpc,
s390) include <uapi/asm/unistd.h> from their <asm/unistd.h>.

This patch copies 77626081: "perf tools: Fix build on sparc." in simply
changing the path to use arch/arm/include/uapi/asm/unistd.h directly for
all of these cases.

I've tested this on arm, but I don't have the necessary toolchains to
check the other cases.

Signed-off-by: Mark Rutland <[email protected]>
Cc: Arnaldo Carvalho de Melo <[email protected]>
Cc: David Howells <[email protected]>
Cc: Deng-Cheng Zhu <[email protected]>
Cc: Ingo Molnar <[email protected]>
Cc: Kyle McMartin <[email protected]>
Cc: Martin Schwidefsky <[email protected]>
Cc: Paul Mackerras <[email protected]>
Cc: Peter Zijlstra <[email protected]>
Cc: Tony Luck <[email protected]>
Cc: Will Deacon <[email protected]>
---
tools/perf/perf.h | 14 +++++++-------
1 files changed, 7 insertions(+), 7 deletions(-)

diff --git a/tools/perf/perf.h b/tools/perf/perf.h
index c50985e..b42fd6a 100644
--- a/tools/perf/perf.h
+++ b/tools/perf/perf.h
@@ -26,14 +26,14 @@ void get_term_dimensions(struct winsize *ws);
#endif

#ifdef __powerpc__
-#include "../../arch/powerpc/include/asm/unistd.h"
+#include "../../arch/powerpc/include/uapi/asm/unistd.h"
#define rmb() asm volatile ("sync" ::: "memory")
#define cpu_relax() asm volatile ("" ::: "memory");
#define CPUINFO_PROC "cpu"
#endif

#ifdef __s390__
-#include "../../arch/s390/include/asm/unistd.h"
+#include "../../arch/s390/include/uapi/asm/unistd.h"
#define rmb() asm volatile("bcr 15,0" ::: "memory")
#define cpu_relax() asm volatile("" ::: "memory");
#endif
@@ -50,7 +50,7 @@ void get_term_dimensions(struct winsize *ws);
#endif

#ifdef __hppa__
-#include "../../arch/parisc/include/asm/unistd.h"
+#include "../../arch/parisc/include/uapi/asm/unistd.h"
#define rmb() asm volatile("" ::: "memory")
#define cpu_relax() asm volatile("" ::: "memory");
#define CPUINFO_PROC "cpu"
@@ -71,14 +71,14 @@ void get_term_dimensions(struct winsize *ws);
#endif

#ifdef __ia64__
-#include "../../arch/ia64/include/asm/unistd.h"
+#include "../../arch/ia64/include/uapi/asm/unistd.h"
#define rmb() asm volatile ("mf" ::: "memory")
#define cpu_relax() asm volatile ("hint @pause" ::: "memory")
#define CPUINFO_PROC "model name"
#endif

#ifdef __arm__
-#include "../../arch/arm/include/asm/unistd.h"
+#include "../../arch/arm/include/uapi/asm/unistd.h"
/*
* Use the __kuser_memory_barrier helper in the CPU helper page. See
* arch/arm/kernel/entry-armv.S in the kernel source for details.
@@ -89,13 +89,13 @@ void get_term_dimensions(struct winsize *ws);
#endif

#ifdef __aarch64__
-#include "../../arch/arm64/include/asm/unistd.h"
+#include "../../arch/arm64/include/uapi/asm/unistd.h"
#define rmb() asm volatile("dmb ld" ::: "memory")
#define cpu_relax() asm volatile("yield" ::: "memory")
#endif

#ifdef __mips__
-#include "../../arch/mips/include/asm/unistd.h"
+#include "../../arch/mips/include/uapi/asm/unistd.h"
#define rmb() asm volatile( \
".set mips2\n\t" \
"sync\n\t" \
--
1.7.0.4


2012-11-27 14:13:25

by Will Deacon

[permalink] [raw]
Subject: Re: [PATCH] perf tools: fix build for various architectures

On Tue, Nov 27, 2012 at 12:16:31PM +0000, Mark Rutland wrote:
> The UAPI changes broke the perf tool, and as of 3.7-rc7, it
> still won't build for arm:
>
> In file included from util/../perf.h:81:0,
> from util/cache.h:7,
> from perf.c:12:
> util/../../../arch/arm/include/asm/unistd.h:16:29: fatal error: uapi/asm/unistd.h: No such file or directory
> compilation terminated.
> make: *** [perf.o] Error 1
>
> It seems the perf tool build infrastructure can't map <uapi/*> paths,
> and several architectures (arm, arm64, ia64, mips, parisc, powerpc,
> s390) include <uapi/asm/unistd.h> from their <asm/unistd.h>.
>
> This patch copies 77626081: "perf tools: Fix build on sparc." in simply
> changing the path to use arch/arm/include/uapi/asm/unistd.h directly for
> all of these cases.
>
> I've tested this on arm, but I don't have the necessary toolchains to
> check the other cases.

For the arm/arm64 parts:

Acked-by: Will Deacon <[email protected]>

Cheers,

Will

2012-11-27 14:20:45

by Kyle McMartin

[permalink] [raw]
Subject: Re: [PATCH] perf tools: fix build for various architectures

On Tue, Nov 27, 2012 at 12:16:31PM +0000, Mark Rutland wrote:
> Signed-off-by: Mark Rutland <[email protected]>
> Cc: Arnaldo Carvalho de Melo <[email protected]>
> Cc: David Howells <[email protected]>
> Cc: Deng-Cheng Zhu <[email protected]>
> Cc: Ingo Molnar <[email protected]>
> Cc: Kyle McMartin <[email protected]>

Looks obviously right.

Acked-by: Kyle McMartin <[email protected]>

> Cc: Martin Schwidefsky <[email protected]>
> Cc: Paul Mackerras <[email protected]>
> Cc: Peter Zijlstra <[email protected]>
> Cc: Tony Luck <[email protected]>
> Cc: Will Deacon <[email protected]>

2012-11-27 14:41:20

by Josh Boyer

[permalink] [raw]
Subject: Re: [PATCH] perf tools: fix build for various architectures

On Tue, Nov 27, 2012 at 7:16 AM, Mark Rutland <[email protected]> wrote:
> The UAPI changes broke the perf tool, and as of 3.7-rc7, it
> still won't build for arm:
>
> In file included from util/../perf.h:81:0,
> from util/cache.h:7,
> from perf.c:12:
> util/../../../arch/arm/include/asm/unistd.h:16:29: fatal error: uapi/asm/unistd.h: No such file or directory
> compilation terminated.
> make: *** [perf.o] Error 1
>
> It seems the perf tool build infrastructure can't map <uapi/*> paths,
> and several architectures (arm, arm64, ia64, mips, parisc, powerpc,
> s390) include <uapi/asm/unistd.h> from their <asm/unistd.h>.
>
> This patch copies 77626081: "perf tools: Fix build on sparc." in simply
> changing the path to use arch/arm/include/uapi/asm/unistd.h directly for
> all of these cases.
>
> I've tested this on arm, but I don't have the necessary toolchains to
> check the other cases.
>
> Signed-off-by: Mark Rutland <[email protected]>
> Cc: Arnaldo Carvalho de Melo <[email protected]>
> Cc: David Howells <[email protected]>
> Cc: Deng-Cheng Zhu <[email protected]>
> Cc: Ingo Molnar <[email protected]>
> Cc: Kyle McMartin <[email protected]>
> Cc: Martin Schwidefsky <[email protected]>
> Cc: Paul Mackerras <[email protected]>
> Cc: Peter Zijlstra <[email protected]>
> Cc: Tony Luck <[email protected]>
> Cc: Will Deacon <[email protected]>
> ---
> tools/perf/perf.h | 14 +++++++-------
> 1 files changed, 7 insertions(+), 7 deletions(-)

This is correct, but it shouldn't be needed. Arnaldo has a pull request
out to Ingo that should fix the build issues on all architectures in a
more generic way. See:

http://article.gmane.org/gmane.linux.kernel.cross-arch/15974

I'm really hoping that gets into Linus' tree ASAP or 3.7 will ship with
a broken perf on non-x86.

josh

2012-11-30 16:17:35

by Arnaldo Carvalho de Melo

[permalink] [raw]
Subject: Re: [PATCH] perf tools: fix build for various architectures

Em Tue, Nov 27, 2012 at 12:16:31PM +0000, Mark Rutland escreveu:
> The UAPI changes broke the perf tool, and as of 3.7-rc7, it
> still won't build for arm:
>
> util/../../../arch/arm/include/asm/unistd.h:16:29: fatal error: uapi/asm/unistd.h: No such file or directory
> compilation terminated.

> I've tested this on arm, but I don't have the necessary toolchains to
> check the other cases.

Can you try with my perf/urgent branch?

git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux perf/urgent

I tested it with raspbian on a raspberry pi system and also with a cross
compiler on a x86_64 workstation.

I already sent the pull request to Ingo, that should process it and push
to Linus soon.

- Arnaldo

2012-11-30 16:40:54

by Mark Rutland

[permalink] [raw]
Subject: Re: [PATCH] perf tools: fix build for various architectures

On Tue, Nov 27, 2012 at 01:41:16PM +0000, Arnaldo Carvalho de Melo wrote:
> Em Tue, Nov 27, 2012 at 12:16:31PM +0000, Mark Rutland escreveu:
> > The UAPI changes broke the perf tool, and as of 3.7-rc7, it
> > still won't build for arm:
> >
> > util/../../../arch/arm/include/asm/unistd.h:16:29: fatal error: uapi/asm/unistd.h: No such file or directory
> > compilation terminated.
>
> > I've tested this on arm, but I don't have the necessary toolchains to
> > check the other cases.
>
> Can you try with my perf/urgent branch?
>
> git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux perf/urgent

It builds and runs fine for me on my A9x4 coretile.

> I tested it with raspbian on a raspberry pi system and also with a cross
> compiler on a x86_64 workstation.
>
> I already sent the pull request to Ingo, that should process it and push
> to Linus soon.

Let's hope it gets merged before v3.7 is tagged.

Thanks,
Mark