Re: Commit 34d76c41 causes linker errors on ia64 with NR_CPUS=4096

From: Jeff Mahoney
Date: Tue Oct 20 2009 - 09:08:28 EST


On 10/20/2009 02:35 AM, Ingo Molnar wrote:
>
> * Jiri Kosina <jkosina@xxxxxxx> wrote:
>
>> On Tue, 20 Oct 2009, Ingo Molnar wrote:
>>
>>>> Commit 34d76c41 introduced percpu array update_shares_data, size of which
>>>> being proportional to NR_CPUS. Unfortunately this blows up ia64 for large
>>>> NR_CPUS configuration, as ia64 allows only 64k for .percpu section.
>>>>
>>>> Fix this by allocating this array dynamically and keep only pointer to it
>>>> percpu.
>>>>
>>>> Signed-off-by: Jiri Kosina <jkosina@xxxxxxx>
>>>> ---
>>>> kernel/sched.c | 15 +++++++--------
>>>> 1 files changed, 7 insertions(+), 8 deletions(-)
>>>
>>> Seems like an IA64 bug to me.
>>
>> IA64 guys actually use that as some kind of optimization for fast
>> access to the percpu data in their pagefault handler, as far as I
>> know.
>
> Still looks like a bug if it causes a breakage (linker error) on IA64,
> and if the 'fix' (i'd call it a workaround) causes a (small but nonzero)
> performance regression on other architectures.

The linker error isn't a bug, it's enforcement. The ia64 linker script
explicitly rewinds the location pointer back to the start of
.data.percpu + 64k to start the .data section to cause the error if
.data.percpu is larger than 64k.

-Jeff

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