Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

linux-next: build failure after merge of the tip tree

0 views
Skip to first unread message

Stephen Rothwell

unread,
Mar 11, 2010, 11:00:26 PM3/11/10
to Thomas Gleixner, Ingo Molnar, H. Peter Anvin, Peter Zijlstra, linux...@vger.kernel.org, linux-...@vger.kernel.org, Frederic Weisbecker
Hi all,

After merging the tip tree, today's linux-next build (powerpc
ppc64_defconfig) failed like this:

ERROR: ".perf_arch_fetch_caller_regs" [fs/xfs/xfs.ko] undefined!
ERROR: ".perf_arch_fetch_caller_regs" [arch/powerpc/platforms/cell/spufs/spufs.ko] undefined!

Caused by commit 5331d7b84613b8325362dde53dc2bff2fb87d351 ("perf:
Introduce new perf_fetch_caller_regs() for hot regs snapshot") from the
tip tree. Presumably commit 639fe4b12f92b54c9c3b38c82cdafaa38cfd3e63
("perf: export perf_trace_regs and perf_arch_fetch_caller_regs") should
have exported the weak version as well as the x86 one.

I have used the version of the tip tree from next-20100311 for today.

--
Cheers,
Stephen Rothwell s...@canb.auug.org.au
http://www.canb.auug.org.au/~sfr/

Frederic Weisbecker

unread,
Mar 12, 2010, 12:50:57 AM3/12/10
to Stephen Rothwell, Ingo Molnar, Thomas Gleixner, H. Peter Anvin, Peter Zijlstra, linux...@vger.kernel.org, linux-...@vger.kernel.org
On Fri, Mar 12, 2010 at 03:00:03PM +1100, Stephen Rothwell wrote:
> Hi all,
>
> After merging the tip tree, today's linux-next build (powerpc
> ppc64_defconfig) failed like this:
>
> ERROR: ".perf_arch_fetch_caller_regs" [fs/xfs/xfs.ko] undefined!
> ERROR: ".perf_arch_fetch_caller_regs" [arch/powerpc/platforms/cell/spufs/spufs.ko] undefined!
>
> Caused by commit 5331d7b84613b8325362dde53dc2bff2fb87d351 ("perf:
> Introduce new perf_fetch_caller_regs() for hot regs snapshot") from the
> tip tree. Presumably commit 639fe4b12f92b54c9c3b38c82cdafaa38cfd3e63
> ("perf: export perf_trace_regs and perf_arch_fetch_caller_regs") should
> have exported the weak version as well as the x86 one.
>
> I have used the version of the tip tree from next-20100311 for today.


Does that fixes the issue? Sorry I can not test for now...

Thanks!

---
From 0b21e01edb23b4725d20a9e5fddb6df7fedd16e1 Mon Sep 17 00:00:00 2001
From: Frederic Weisbecker <fwei...@gmail.com>
Date: Fri, 12 Mar 2010 06:23:22 +0100
Subject: [PATCH] perf: Also export the weak version of perf_arch_fetch_caller_regs

perf_arch_fetch_caller_regs() is exported in x86 but not for
other archs that use the weak version.

Export it only once from the generic code, it will apply to
either weak/overriden version.

Signed-off-by: Frederic Weisbecker <fwei...@gmail.com>
---
arch/x86/kernel/cpu/perf_event.c | 1 -
kernel/perf_event.c | 1 +
2 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/arch/x86/kernel/cpu/perf_event.c b/arch/x86/kernel/cpu/perf_event.c
index a6d92c3..a3aff76 100644
--- a/arch/x86/kernel/cpu/perf_event.c
+++ b/arch/x86/kernel/cpu/perf_event.c
@@ -1691,4 +1691,3 @@ void perf_arch_fetch_caller_regs(struct pt_regs *regs, unsigned long ip, int ski
regs->cs = __KERNEL_CS;
local_save_flags(regs->flags);
}
-EXPORT_SYMBOL_GPL(perf_arch_fetch_caller_regs);
diff --git a/kernel/perf_event.c b/kernel/perf_event.c
index 8bf6127..7aea58d 100644
--- a/kernel/perf_event.c
+++ b/kernel/perf_event.c
@@ -2794,6 +2794,7 @@ __weak
void perf_arch_fetch_caller_regs(struct pt_regs *regs, unsigned long ip, int skip)
{
}
+EXPORT_SYMBOL_GPL(perf_arch_fetch_caller_regs);

/*
* Output
--
1.6.2.3

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majo...@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/

Stephen Rothwell

unread,
Mar 12, 2010, 1:21:09 AM3/12/10
to Frederic Weisbecker, Ingo Molnar, Thomas Gleixner, H. Peter Anvin, Peter Zijlstra, linux...@vger.kernel.org, linux-...@vger.kernel.org
Hi Frederic,

On Fri, 12 Mar 2010 06:50:44 +0100 Frederic Weisbecker <fwei...@gmail.com> wrote:
>
> Does that fixes the issue? Sorry I can not test for now...

I can't test it right now, sorry, but I have heard that EXPORT_SYMBOL's
for weak symbols must be in a different file from the actual symbol
definition.

Stephen Rothwell

unread,
Mar 12, 2010, 1:26:54 AM3/12/10
to Frederic Weisbecker, Ingo Molnar, Thomas Gleixner, H. Peter Anvin, Peter Zijlstra, linux...@vger.kernel.org, linux-...@vger.kernel.org
Hi Frederic,

On Fri, 12 Mar 2010 17:20:43 +1100 Stephen Rothwell <s...@canb.auug.org.au> wrote:
>
> On Fri, 12 Mar 2010 06:50:44 +0100 Frederic Weisbecker <fwei...@gmail.com> wrote:
> >
> > Does that fixes the issue? Sorry I can not test for now...
>
> I can't test it right now, sorry, but I have heard that EXPORT_SYMBOL's
> for weak symbols must be in a different file from the actual symbol
> definition.

See http://lkml.org/lkml/2010/2/17/467

Frederic Weisbecker

unread,
Mar 14, 2010, 5:23:55 AM3/14/10
to Stephen Rothwell, Ingo Molnar, Thomas Gleixner, H. Peter Anvin, Peter Zijlstra, linux...@vger.kernel.org, linux-...@vger.kernel.org
On Fri, Mar 12, 2010 at 05:20:43PM +1100, Stephen Rothwell wrote:
> Hi Frederic,
>
> On Fri, 12 Mar 2010 06:50:44 +0100 Frederic Weisbecker <fwei...@gmail.com> wrote:
> >
> > Does that fixes the issue? Sorry I can not test for now...
>
> I can't test it right now, sorry, but I have heard that EXPORT_SYMBOL's
> for weak symbols must be in a different file from the actual symbol
> definition.

Hmm. Ok, kernel/trace/trace_event_perf.c must be the right place then,
as the only users of this helper are trace events.

Will send a fix once I get this tested, thanks for the pointer!

Frederic Weisbecker

unread,
Mar 15, 2010, 5:00:16 PM3/15/10
to Ingo Molnar, LKML, Frederic Weisbecker, \ " H . Peter Anvin \ ", Thomas Gleixner, Linux Next, Stephen Rothwell, Peter Zijlstra, Xiao Guangrong, Paul Mackerras
perf_arch_fetch_caller_regs() is exported for the overriden x86
version, but not for the generic weak version.
As a general rule, weak functions should have their symbol exported
in the same file they are defined.

So let's export it on trace_event_perf.c as it is used by trace
events only.

This fixes:


ERROR: ".perf_arch_fetch_caller_regs" [fs/xfs/xfs.ko] undefined!
ERROR: ".perf_arch_fetch_caller_regs" [arch/powerpc/platforms/cell/spufs/spufs.ko] undefined!

And also only build it if trace events are enabled.

Reported-by: Stephen Rothwell <s...@canb.auug.org.au>
Signed-off-by: Frederic Weisbecker <fwei...@gmail.com>
Cc: Peter Zijlstra <pet...@infradead.org>
Cc: Xiao Guangrong <xiaogu...@cn.fujitsu.com>
Cc: Paul Mackerras <pau...@samba.org>
---
arch/x86/kernel/cpu/perf_event.c | 1 -
kernel/trace/trace_event_perf.c | 2 ++
2 files changed, 2 insertions(+), 1 deletions(-)

diff --git a/arch/x86/kernel/cpu/perf_event.c b/arch/x86/kernel/cpu/perf_event.c
index 7645fae..5fb490c 100644
--- a/arch/x86/kernel/cpu/perf_event.c
+++ b/arch/x86/kernel/cpu/perf_event.c
@@ -1713,4 +1713,3 @@ void perf_arch_fetch_caller_regs(struct pt_regs *regs, unsigned long ip, int ski


regs->cs = __KERNEL_CS;
local_save_flags(regs->flags);
}
-EXPORT_SYMBOL_GPL(perf_arch_fetch_caller_regs);

diff --git a/kernel/trace/trace_event_perf.c b/kernel/trace/trace_event_perf.c
index 0709e4f..7d79a10 100644
--- a/kernel/trace/trace_event_perf.c
+++ b/kernel/trace/trace_event_perf.c
@@ -12,6 +12,8 @@
DEFINE_PER_CPU(struct pt_regs, perf_trace_regs);
EXPORT_PER_CPU_SYMBOL_GPL(perf_trace_regs);

+EXPORT_SYMBOL_GPL(perf_arch_fetch_caller_regs);
+
static char *perf_trace_buf;
static char *perf_trace_buf_nmi;

--
1.6.2.3

Frederic Weisbecker

unread,
Mar 15, 2010, 6:17:33 PM3/15/10
to Ingo Molnar, LKML, Frederic Weisbecker, \ " H . Peter Anvin \ ", Thomas Gleixner, Linux Next, Stephen Rothwell, Peter Zijlstra, Xiao Guangrong, Paul Mackerras
perf_arch_fetch_caller_regs() is exported for the overriden x86
version, but not for the generic weak version.
As a general rule, weak functions should have their symbol exported
in the same file they are defined.

So let's export it on trace_event_perf.c as it is used by trace
events only.

This fixes:
ERROR: ".perf_arch_fetch_caller_regs" [fs/xfs/xfs.ko] undefined!
ERROR: ".perf_arch_fetch_caller_regs" [arch/powerpc/platforms/cell/spufs/spufs.ko] undefined!

v2: And also only build it if trace events are enabled.

Reported-by: Stephen Rothwell <s...@canb.auug.org.au>
Signed-off-by: Frederic Weisbecker <fwei...@gmail.com>
Cc: Peter Zijlstra <pet...@infradead.org>
Cc: Xiao Guangrong <xiaogu...@cn.fujitsu.com>
Cc: Paul Mackerras <pau...@samba.org>
---

arch/x86/kernel/cpu/perf_event.c | 3 ++-
kernel/perf_event.c | 2 ++
kernel/trace/trace_event_perf.c | 2 ++
3 files changed, 6 insertions(+), 1 deletions(-)

diff --git a/arch/x86/kernel/cpu/perf_event.c b/arch/x86/kernel/cpu/perf_event.c
index 7645fae..60398a0 100644
--- a/arch/x86/kernel/cpu/perf_event.c
+++ b/arch/x86/kernel/cpu/perf_event.c
@@ -1702,6 +1702,7 @@ struct perf_callchain_entry *perf_callchain(struct pt_regs *regs)
return entry;
}

+#ifdef CONFIG_EVENT_TRACING
void perf_arch_fetch_caller_regs(struct pt_regs *regs, unsigned long ip, int skip)
{
regs->ip = ip;
@@ -1713,4 +1714,4 @@ void perf_arch_fetch_caller_regs(struct pt_regs *regs, unsigned long ip, int ski


regs->cs = __KERNEL_CS;
local_save_flags(regs->flags);
}
-EXPORT_SYMBOL_GPL(perf_arch_fetch_caller_regs);

+#endif
diff --git a/kernel/perf_event.c b/kernel/perf_event.c
index fb3031c..574ee58 100644
--- a/kernel/perf_event.c
+++ b/kernel/perf_event.c
@@ -2786,10 +2786,12 @@ __weak struct perf_callchain_entry *perf_callchain(struct pt_regs *regs)
return NULL;
}

+#ifdef CONFIG_EVENT_TRACING
__weak
void perf_arch_fetch_caller_regs(struct pt_regs *regs, unsigned long ip, int skip)
{
}
+#endif

/*
* Output

Stephen Rothwell

unread,
Mar 15, 2010, 6:34:14 PM3/15/10
to Frederic Weisbecker, Ingo Molnar, LKML, \ " H . Peter Anvin \ ", Thomas Gleixner, Linux Next, Peter Zijlstra, Xiao Guangrong, Paul Mackerras
Hi Frederic,

On Mon, 15 Mar 2010 23:17:22 +0100 Frederic Weisbecker <fwei...@gmail.com> wrote:
>
> perf_arch_fetch_caller_regs() is exported for the overriden x86
> version, but not for the generic weak version.
> As a general rule, weak functions should have their symbol exported

^
"not"

> in the same file they are defined.
>
> So let's export it on trace_event_perf.c as it is used by trace
> events only.

Otherwise, looks good (though I haven't tested it).

Frederic Weisbecker

unread,
Mar 15, 2010, 7:55:02 PM3/15/10
to Stephen Rothwell, Ingo Molnar, LKML, H . Peter Anvin, Thomas Gleixner, Linux Next, Peter Zijlstra, Xiao Guangrong, Paul Mackerras
On Tue, Mar 16, 2010 at 09:33:55AM +1100, Stephen Rothwell wrote:
> Hi Frederic,
>
> On Mon, 15 Mar 2010 23:17:22 +0100 Frederic Weisbecker <fwei...@gmail.com> wrote:
> >
> > perf_arch_fetch_caller_regs() is exported for the overriden x86
> > version, but not for the generic weak version.
> > As a general rule, weak functions should have their symbol exported
> ^
> "not"


Ooh, right.



> > in the same file they are defined.
> >
> > So let's export it on trace_event_perf.c as it is used by trace
> > events only.
>
> Otherwise, looks good (though I haven't tested it).

I've tested with some trace event built as module and it looks
fine so far.

Thanks.

Frederic Weisbecker

unread,
Mar 15, 2010, 8:05:13 PM3/15/10
to Ingo Molnar, LKML, Frederic Weisbecker, \ " H . Peter Anvin \ ", Thomas Gleixner, Linux Next, Stephen Rothwell, Peter Zijlstra, Xiao Guangrong, Paul Mackerras
perf_arch_fetch_caller_regs() is exported for the overriden x86
version, but not for the generic weak version.
As a general rule, weak functions should not have their symbol
exported in the same file they are defined.

So let's export it on trace_event_perf.c as it is used by trace
events only.

This fixes:


ERROR: ".perf_arch_fetch_caller_regs" [fs/xfs/xfs.ko] undefined!
ERROR: ".perf_arch_fetch_caller_regs" [arch/powerpc/platforms/cell/spufs/spufs.ko] undefined!

v2: And also only build it if trace events are enabled.

v3: Fix changelog mistake

--

tip-bot for Frederic Weisbecker

unread,
Mar 16, 2010, 10:46:34 AM3/16/10
to linux-ti...@vger.kernel.org, linux-...@vger.kernel.org, pau...@samba.org, h...@zytor.com, mi...@redhat.com, pet...@infradead.org, xiaogu...@cn.fujitsu.com, fwei...@gmail.com, tg...@linutronix.de, s...@canb.auug.org.au, mi...@elte.hu
Commit-ID: 1d199b1ad606ae8b88acebd295b101c4e1cf2a57
Gitweb: http://git.kernel.org/tip/1d199b1ad606ae8b88acebd295b101c4e1cf2a57
Author: Frederic Weisbecker <fwei...@gmail.com>
AuthorDate: Tue, 16 Mar 2010 01:05:02 +0100
Committer: Ingo Molnar <mi...@elte.hu>
CommitDate: Tue, 16 Mar 2010 09:27:27 +0100

perf: Fix unexported generic perf_arch_fetch_caller_regs

perf_arch_fetch_caller_regs() is exported for the overriden x86
version, but not for the generic weak version.

As a general rule, weak functions should not have their symbol
exported in the same file they are defined.

So let's export it on trace_event_perf.c as it is used by trace
events only.

This fixes:

ERROR: ".perf_arch_fetch_caller_regs" [fs/xfs/xfs.ko] undefined!
ERROR: ".perf_arch_fetch_caller_regs" [arch/powerpc/platforms/cell/spufs/spufs.ko] undefined!

-v2: And also only build it if trace events are enabled.
-v3: Fix changelog mistake

Reported-by: Stephen Rothwell <s...@canb.auug.org.au>
Signed-off-by: Frederic Weisbecker <fwei...@gmail.com>
Cc: Peter Zijlstra <pet...@infradead.org>
Cc: Xiao Guangrong <xiaogu...@cn.fujitsu.com>
Cc: Paul Mackerras <pau...@samba.org>

LKML-Reference: <1268697902-9518-1-git-s...@gmail.com>
Signed-off-by: Ingo Molnar <mi...@elte.hu>


---
arch/x86/kernel/cpu/perf_event.c | 3 ++-
kernel/perf_event.c | 2 ++
kernel/trace/trace_event_perf.c | 2 ++
3 files changed, 6 insertions(+), 1 deletions(-)

diff --git a/arch/x86/kernel/cpu/perf_event.c b/arch/x86/kernel/cpu/perf_event.c
index 978d297..0d3466c 100644
--- a/arch/x86/kernel/cpu/perf_event.c
+++ b/arch/x86/kernel/cpu/perf_event.c
@@ -1695,6 +1695,7 @@ struct perf_callchain_entry *perf_callchain(struct pt_regs *regs)


return entry;
}

+#ifdef CONFIG_EVENT_TRACING
void perf_arch_fetch_caller_regs(struct pt_regs *regs, unsigned long ip, int skip)
{
regs->ip = ip;

@@ -1706,4 +1707,4 @@ void perf_arch_fetch_caller_regs(struct pt_regs *regs, unsigned long ip, int ski


regs->cs = __KERNEL_CS;
local_save_flags(regs->flags);
}
-EXPORT_SYMBOL_GPL(perf_arch_fetch_caller_regs);
+#endif
diff --git a/kernel/perf_event.c b/kernel/perf_event.c

index 8bf6127..455393e 100644
--- a/kernel/perf_event.c
+++ b/kernel/perf_event.c
@@ -2790,10 +2790,12 @@ __weak struct perf_callchain_entry *perf_callchain(struct pt_regs *regs)


return NULL;
}

+#ifdef CONFIG_EVENT_TRACING
__weak
void perf_arch_fetch_caller_regs(struct pt_regs *regs, unsigned long ip, int skip)
{
}
+#endif

/*
* Output
diff --git a/kernel/trace/trace_event_perf.c b/kernel/trace/trace_event_perf.c
index 0709e4f..7d79a10 100644
--- a/kernel/trace/trace_event_perf.c
+++ b/kernel/trace/trace_event_perf.c
@@ -12,6 +12,8 @@
DEFINE_PER_CPU(struct pt_regs, perf_trace_regs);
EXPORT_PER_CPU_SYMBOL_GPL(perf_trace_regs);

+EXPORT_SYMBOL_GPL(perf_arch_fetch_caller_regs);
+
static char *perf_trace_buf;
static char *perf_trace_buf_nmi;

--

tip-bot for Frederic Weisbecker

unread,
Mar 17, 2010, 5:49:53 AM3/17/10
to linux-ti...@vger.kernel.org, linux-...@vger.kernel.org, pau...@samba.org, h...@zytor.com, mi...@redhat.com, pet...@infradead.org, xiaogu...@cn.fujitsu.com, fwei...@gmail.com, tg...@linutronix.de, s...@canb.auug.org.au, mi...@elte.hu
Commit-ID: a6b84574eed7e4fd8cb8dac2d0926fe2cf34b941
Gitweb: http://git.kernel.org/tip/a6b84574eed7e4fd8cb8dac2d0926fe2cf34b941

Author: Frederic Weisbecker <fwei...@gmail.com>
AuthorDate: Tue, 16 Mar 2010 01:05:02 +0100
Committer: Ingo Molnar <mi...@elte.hu>
CommitDate: Wed, 17 Mar 2010 10:44:42 +0100

perf: Fix unexported generic perf_arch_fetch_caller_regs

perf_arch_fetch_caller_regs() is exported for the overriden x86


version, but not for the generic weak version.

As a general rule, weak functions should not have their symbol
exported in the same file they are defined.

So let's export it on trace_event_perf.c as it is used by trace
events only.

This fixes:

ERROR: ".perf_arch_fetch_caller_regs" [fs/xfs/xfs.ko] undefined!
ERROR: ".perf_arch_fetch_caller_regs" [arch/powerpc/platforms/cell/spufs/spufs.ko] undefined!

-v2: And also only build it if trace events are enabled.
-v3: Fix changelog mistake

Reported-by: Stephen Rothwell <s...@canb.auug.org.au>
Signed-off-by: Frederic Weisbecker <fwei...@gmail.com>
Cc: Peter Zijlstra <pet...@infradead.org>
Cc: Xiao Guangrong <xiaogu...@cn.fujitsu.com>
Cc: Paul Mackerras <pau...@samba.org>

LKML-Reference: <1268697902-9518-1-git-s...@gmail.com>
Signed-off-by: Ingo Molnar <mi...@elte.hu>

0 new messages