Subject: ARM: mm: Could I change module space size or place modules in vmalloc area?

From: [email-masked] (Jianguo Wu)
Date: Sat, 26 Apr 2014 10:12:40 +0800

On 2014/1/3 8:47, Russell King - ARM Linux wrote:

> On Fri, Jan 03, 2014 at 09:39:31AM +0900, Gioh Kim wrote:
>> Thank you for reply.
>>
>>> -----Original Message-----
>>> From: Baruch Siach [mailto:baruch at tkos.co.il]
>>> Sent: Thursday, January 02, 2014 7:14 PM
>>> To: Gioh Kim
>>> Cc: Russell King; linux-mm at kvack.org; linux-arm-kernel; HyoJun Im
>>> Subject: Re: ARM: mm: Could I change module space size or place modules in
>>> vmalloc area?
>>>
>>> Hi Gioh,
>>>
>>> On Thu, Jan 02, 2014 at 07:04:13PM +0900, Gioh Kim wrote:
>>>> I run out of module space because I have several big driver modules.
>>>> I know I can strip the modules to decrease size but I need debug info
>>> now.
>>>
>>> Are you sure you need the debug info in kernel memory? I don't think the
>>> kernel is actually able to parse DWARF. You can load stripped binaries
>>> into the kernel, and still use the debug info with whatever tool you have.
>>
>> I agree you but driver developers of another team don't agree.
>> I don't know why but they say they will strip drivers later :-(
>> So I need to increase modules space size.
> 
> ARM can only branch relatively within +/- 32MB.  Hence, with a module
> space of 16MB, modules can reach up to a maximum 16MB into the direct-
> mapped kernel image.  As module space increases in size, so that figure
> decreases.  So, if module space were to be 40MB, the maximum size of the
> kernel binary would be 8MB.
> 

Hi Russell ,Arnd or Will,

I encountered the same situation in arm64, I loaded 80+ modules in arm64, and
run out of module address space(64M). Why the module space is restricted to 64M,
can it be expanded?  

In commit 257cb2519(arm64: Loadable modules), it mentioned that " Loadable modules
are loaded 64MB below the kernel image due to branch relocation restrictions",
"branch relocation restrictions" is a AArch64 instruction set restrictions?

Thanks,
Jianguo Wu.

> You want to look at a line similar to this:
> 
>       .text : 0xc0008000 - 0xc031eda0   (3164 kB)
> 
> Also, note this:
> 
>     modules : 0xbf000000 - 0xc0000000   (  16 MB)
> 
> If the difference between the lowest module address (0xbf000000) and the
> highest of .text is greater than 32MB, it's impossible to load modules -
> they will fail to link.
> 
> What is the size of your kernel text? (show us the line(s) like the above.)
> 
> Thanks.
>