Re: [PATCH] x86-32: Fix __per_cpu_load relocation

James Bottomley
2009-01-27T05:03:40Z

On Tue, 2009-01-27 at 13:03 +0900, Tejun Heo wrote:
> (cc'ing James Bottomley.)
>
> Tejun Heo wrote:
> > Ingo Molnar wrote:
> >> * Brian Gerst <brgerst@gmail.com> wrote:
> >>
> >>> This patch fixes this error:
> >>> WARNING: Absolute relocations present
> >>> Offset Info Type Sym.Value Sym.Name
> >>> c0a4e07d 00e78001 R_386_32 c0ab0000 __per_cpu_load
> >>>
> >>> Now, __per_cpu_load is a section-relative symbol:
> >>> c0aa4000 D __per_cpu_load
> >>> c0aa4000 A __per_cpu_load_abs
> >>>
> >>> Signed-off-by: Brian Gerst <brgerst@gmail.com>
> >> Applied to tip/core/percpu, thanks Brian!
> >
> > Heh.. Thanks. Sorry about lack of response. It's lunar new year's
> > day here and I'm off till tomorrow. I'll start reviewing and
> > integrating posted patches from tomorrow.
>
> Well, I just had time to do it. All the patches look fine to me.
> Very nice cleanup. The git tree is at the following URL.
>
> http://git.kernel.org/?p=linux/kernel/git/tj/misc.git;a=shortlog;h=tj-percpu
> git://git.kernel.org/pub/scm/linux/kernel/git/tj/misc.git tj-percpu
>
> The head commit is 2697fbd5faf19c84c17441b1752bdcbdcfd1248c. James,
> this patchset converts voyager to share generic x86 percpu code. Can
> you please review whether the change looks good for voyager?

Erm ... it's a bit difficult to tell from the tree what is specific to
voyager and what isn't.

I ran across a simple build failure:

LD .tmp_vmlinux1
arch/x86/kernel/built-in.o: In function `setup_per_cpu_areas':
/home/jejb/git/BUILD-voyager/arch/x86/kernel/setup_percpu.c:128: undefined reference to `x86_cpu_to_apicid_early_ptr'
/home/jejb/git/BUILD-voyager/arch/x86/kernel/setup_percpu.c:129: undefined reference to `x86_bios_cpu_apicid_early_ptr'
make: *** [.tmp_vmlinux1] Error 1

which is easily fixed below.

Not sure about the GDT changes, but will boot test them tomorrow.

James

---

diff --git a/arch/x86/kernel/setup_percpu.c b/arch/x86/kernel/setup_percpu.c
index 4caa78d..42b3b35 100644
--- a/arch/x86/kernel/setup_percpu.c
+++ b/arch/x86/kernel/setup_percpu.c
@@ -125,8 +125,10 @@ void __init setup_per_cpu_areas(void)
}

/* indicate the early static arrays will soon be gone */
+#ifdef X86_LOCAL_APIC
early_per_cpu_ptr(x86_cpu_to_apicid) = NULL;
early_per_cpu_ptr(x86_bios_cpu_apicid) = NULL;
+#endif
#if defined(CONFIG_X86_64) && defined(CONFIG_NUMA)
early_per_cpu_ptr(x86_cpu_to_node_map) = NULL;
#endif