[PATCH] ARM: Avoid discarding sections that might have SMP_ON_UP fixups

Dave Martin dave.martin at linaro.org
Fri Feb 11 04:33:56 EST 2011


On Thu, Feb 10, 2011 at 7:11 PM, Russell King - ARM Linux
<linux at arm.linux.org.uk> wrote:
> On Thu, Feb 10, 2011 at 06:29:41PM +0000, Dave Martin wrote:
>> On Thu, Feb 10, 2011 at 2:46 PM, Russell King - ARM Linux
>> <linux at arm.linux.org.uk> wrote:
>> > On Thu, Feb 10, 2011 at 02:13:13PM +0000, Dave Martin wrote:
>> >> Note that this tree contains some extra patches (though I believe
>> >> nothing is there which should cause the problem), and does not contain
>> >> everything from rmk/devel -- so it's possible this has been fixed in
>> >> the meantime or no longer occurs for some other reason...
>> >
>> > No need - I now have some modules which contain SMP alternatives, so we
>> > do need to fix the module loader for this, and keep the SMP alternatives
>> > replacement code around.  It's not worth eliminating the code as if we
>> > include an informative printk() to say why we're refusing to load the
>> > module, the string would be larger than the code it eliminates.  So, I
>> > think we need to merge the patch below to avoid run-time problems.
>>
>> I thought the problem was not caused by removal of the fixup code, but
>> rather by the removal of code referenced by fixups?
>
> It is.  But:
>
> arm-linux-objdump -h sound/core/snd-timer.ko
>
> sound/core/snd-timer.ko:     file format elf32-littlearm
>
> Sections:
> Idx Name          Size      VMA       LMA       File off  Algn
>  0 .text         00002f34  00000000  00000000  00000034  2**2
>                  CONTENTS, ALLOC, LOAD, RELOC, READONLY, CODE
>  1 .exit.text    00000070  00000000  00000000  00002f68  2**2
>                  CONTENTS, ALLOC, LOAD, RELOC, READONLY, CODE
>  2 .init.text    000001b4  00000000  00000000  00002fd8  2**2
>                  CONTENTS, ALLOC, LOAD, RELOC, READONLY, CODE
>  3 .rodata       000000bc  00000000  00000000  0000318c  2**2
>                  CONTENTS, ALLOC, LOAD, RELOC, READONLY, DATA
>  4 .rodata.str1.1 00000156  00000000  00000000  00003248  2**0
>                  CONTENTS, ALLOC, LOAD, READONLY, DATA
>  5 .alt.smp.init 00000088  00000000  00000000  0000339e  2**0
>                  CONTENTS, ALLOC, LOAD, RELOC, READONLY, DATA
> ...
>
> Here we have a module which contains the spin_unlock assembly, which
> contains the SMP alternatives.  If we insert that into a kernel also
> built with SMP alternatives support, but which is running on a UP
> system, we need to run these fixups as well when the module is loaded.
>

Agreed -- actually, I suspected we might need to support this.  But I
don't think solving this problem (= keeping the fixup implementation
in memory and enhancing the module loader) solved the
fixups-referencing-sections-discarded-from-vmlinux problem.  These
seem to be two separate issues.  I am filing to understand something?

Cheers
---Dave



More information about the linux-arm-kernel mailing list