linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
From: linux@arm.linux.org.uk (Russell King - ARM Linux)
To: linux-arm-kernel@lists.infradead.org
Subject: ARM: relocation out of range (when loading a module)
Date: Wed, 12 Jan 2011 16:23:08 +0000	[thread overview]
Message-ID: <20110112162308.GC11039@n2100.arm.linux.org.uk> (raw)
In-Reply-To: <AANLkTimAFp7ORrJLw2d8-i5pK0MZGTyAN5kmRR37ky1v@mail.gmail.com>

On Wed, Jan 12, 2011 at 10:05:19AM -0600, Dave Martin wrote:
> In general, do we expect always to be able to avoid the situation
> where branches in the kernel may need to cover too large a range ...
> and is there any strategy for working aroung it?

It's not that big a problem - 99.999999% of setups never run into the
problem.  It's only those who use large initramfs's built into their
kernel image at present, and that is ultimately solvable.

I don't think we need to litter code with TODO comments.

> If we have problems branching from the modules area into vmlinux, we
> could possibly build modules with -fPIC : this would remove the
> restriction on branch range, though there would also be some
> performance impact for the modules...

That also brings in issues with GOT tables and the like, and also requires
different build options for modules and the main kernel.  I don't think
kbuild is setup to do that - and I'd argue that it's unnecessary if we
fix the layout of the kernel image.

As I said a few emails ago, shuffling sections around in the image is
not as trivial as it looks on the face of it as we make assumptions
about what is in _stext.._etext, _sdata.._edata, whether there's anything
between _etext.._sdata, and other symbolic ranges.

At the moment, _stext.._etext + _sdata.._edata covers the entire kernel
image - with the init sections at the start of _stext.  Putting the init
sections between _etext and _sdata makes a hole in the middle of that,
which may be suboptimal for page allocation.  It also means that the
range no longer covers all kernel stuff.  Also whether _stext = _text,
_sdata = _data, etc.

Another technicality is that some of these ranges are used for stuff like
DMA API debugging:

        if (overlap(addr, len, _text, _etext) ||
            overlap(addr, len, __start_rodata, __end_rodata))
                err_printk(dev, NULL, "DMA-API: device driver maps memory from kernel text or rodata [addr=%p] [len=%lu]\n", addr, len);

The last pieces of the puzzle is whether we have anything that implicitly
relies on the init section being low down and freeing its pages (eg, as
a way of stopping that memory being used for non-DMA stuff.)

I do have a patch which shuffles some of this stuff around, but I'm not
entirely happy with it yet.

  reply	other threads:[~2011-01-12 16:23 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <4D2B4CE4.9080309@ahsoftware.de>
     [not found] ` <alpine.LFD.2.00.1101101722470.9794@xanadu.home>
     [not found]   ` <4D2BFA08.5030104@ahsoftware.de>
2011-01-11 15:46     ` ARM: relocation out of range (when loading a module) Rabin Vincent
2011-01-11 15:59       ` Russell King - ARM Linux
2011-01-12  3:00         ` Alexander Holler
2011-01-12 16:05           ` Dave Martin
2011-01-12 16:23             ` Russell King - ARM Linux [this message]
2011-01-12 18:28             ` Nicolas Pitre
2011-01-12 18:42               ` Russell King - ARM Linux
2011-01-12 18:55                 ` Nicolas Pitre
2011-01-25  8:44                   ` Sachin Verma
2011-01-25 13:23                     ` Catalin Marinas
2011-01-27  5:43                     ` Nicolas Pitre
2011-02-10 15:43                       ` Russell King - ARM Linux
2011-02-10 19:41                         ` Nicolas Pitre
2011-02-11  9:31                           ` Dave Martin
2011-02-11  9:38                             ` Russell King - ARM Linux
2011-02-11  9:45                               ` Dave Martin
2011-02-11 13:55                                 ` Nicolas Pitre
2011-02-11 13:51                             ` Nicolas Pitre
2011-02-11 14:25                               ` Dave Martin
2011-02-11 14:42                                 ` Russell King - ARM Linux
2011-02-12 19:52                                   ` Nicolas Pitre
2011-01-13  5:50                 ` Alexander Holler
2011-01-13 10:04                   ` Russell King - ARM Linux
2011-01-13 14:36                     ` Alexander Holler
2011-01-12 16:25         ` Matthieu CASTET
2011-01-12 16:38           ` Russell King - ARM Linux

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20110112162308.GC11039@n2100.arm.linux.org.uk \
    --to=linux@arm.linux.org.uk \
    --cc=linux-arm-kernel@lists.infradead.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).