public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH] parisc: fix module loading failure of large kernel modules
@ 2008-12-29 14:07 Helge Deller
  2008-12-29 14:09 ` [PATCH 1/2] module.c: fix module loading failure of large modules Helge Deller
  2008-12-29 14:10 ` [PATCH 2/2] parisc: " Helge Deller
  0 siblings, 2 replies; 8+ messages in thread
From: Helge Deller @ 2008-12-29 14:07 UTC (permalink / raw)
  To: linux-parisc, Linux Kernel Development, Kyle McMartin,
	Randolph Chung, Moritz Muehlenhoff, Linus, Andrew Morton
  Cc: Helge Deller

The parisc port (esp. the 32bit kernel) currently lacks the ability to
load large kernel modules like xfs or ipv6. This is a long outstanding
bug and has already been reported a few times, e.g.:
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=350482,
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=401439,
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=508489

The symptom is like this:
# modprobe xfs
FATAL: Error inserting xfs
(/lib/modules/2.6.26-1-parisc/kernel/fs/xfs/xfs.ko): Invalid module
format

In dmesg:
module xfs relocation of symbol xfs_btree_read_bufs is out of range
(0x3ffefffe in 17 bits)

The reason for the failure is, that the architecture only provides the
R_PARISC_PCREL17F (for 32bit kernels) and R_PARISC_PCREL22F (for PA2.0
and 64bit kernels) relocations, which sometimes can't reach the target
address of the stub entry if the kernel module is too large. Currently
parisc (like other architectures) creates one big PLT section for all
stubs at the beginning of the init and core sections.

The following two patches changes the parisc module loader to put stubs
in between the code sections instead, so that the distance to the stubs
more easily fits into the available 17/22 bits.

The first patch touches the generic module loader and adds a call to the
new module_additional_section_size() function to get_offset() if
CONFIG_ARCH_WANTS_STUBS_BEHIND_SECTIONS is defined. On parisc this
function returns the additional bytes for the stub area of a given section.

The second patch implements the parisc-specific changes.

Tested with 32- and 64bit parisc kernels.

Helge

^ permalink raw reply	[flat|nested] 8+ messages in thread
* [PATCH] parisc: fix module loading failure of large kernel modules (take 2)
@ 2008-12-29 20:34 Helge Deller
  2008-12-30 22:45 ` Rusty Russell
  0 siblings, 1 reply; 8+ messages in thread
From: Helge Deller @ 2008-12-29 20:34 UTC (permalink / raw)
  To: linux-parisc, Linux Kernel Development, Kyle McMartin,
	Randolph Chung, Linus, Andrew Morton, Sam Ravnborg,
	John David Anglin

This is the second take of the patch series.
Changes to previous version:
- new CONFIG_HAVE_MODULE_SECTION_STUBS config option
- put stub entries of a code section in front of the section

____________
The parisc port (esp. the 32bit kernel) currently lacks the ability to
load large kernel modules like xfs or ipv6. This is a long outstanding
bug and has already been reported a few times, e.g.:
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=350482,
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=401439,
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=508489

The symptom is like this:
# modprobe xfs
FATAL: Error inserting xfs
(/lib/modules/2.6.26-1-parisc/kernel/fs/xfs/xfs.ko): Invalid module
format

In dmesg:
module xfs relocation of symbol xfs_btree_read_bufs is out of range
(0x3ffefffe in 17 bits)

The reason for the failure is, that the architecture only provides the
R_PARISC_PCREL17F (for 32bit kernels) and R_PARISC_PCREL22F (for PA2.0
and 64bit kernels) relocations, which sometimes can't reach the target
address of the stub entry if the kernel module is too large. Currently
parisc (like other architectures) creates one big PLT section for all
stubs at the beginning of the init and core sections.

The following two patches changes the parisc module loader to put stubs
for the code sections in front of each section, so that the distance to
the stubs more easily fits into the available 17/22 bits.

The first patch touches the generic module loader and adds a call to the
new module_additional_section_size() function to get_offset() if
CONFIG_HAVE_MODULE_SECTION_STUBS is defined. On parisc this
function returns the additional bytes for the stub area of a given section.

The second patch implements the parisc-specific changes.

Tested with 32- and 64bit parisc kernels.

Helge


^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2008-12-31 11:37 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-12-29 14:07 [PATCH] parisc: fix module loading failure of large kernel modules Helge Deller
2008-12-29 14:09 ` [PATCH 1/2] module.c: fix module loading failure of large modules Helge Deller
2008-12-29 14:10 ` [PATCH 2/2] parisc: " Helge Deller
2008-12-29 15:46   ` Sam Ravnborg
2008-12-29 16:09     ` Helge Deller
2008-12-29 16:14   ` John David Anglin
2008-12-29 17:56     ` Helge Deller
  -- strict thread matches above, loose matches on Subject: below --
2008-12-29 20:34 [PATCH] parisc: fix module loading failure of large kernel modules (take 2) Helge Deller
2008-12-30 22:45 ` Rusty Russell
2008-12-31 11:31   ` [PATCH] parisc: fix module loading failure of large kernel modules (take 4) Helge Deller
2008-12-31 11:36     ` [PATCH 2/2] parisc: fix module loading failure of large modules Helge Deller

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox