From: Helge Deller <deller@gmx.de>
To: Rusty Russell <rusty@rustcorp.com.au>
Cc: linux-parisc <linux-parisc@vger.kernel.org>,
Linux Kernel Development <linux-kernel@vger.kernel.org>,
Kyle McMartin <kyle@mcmartin.ca>,
Randolph Chung <randolph@tausq.org>,
Linus <torvalds@linux-foundation.org>,
Andrew Morton <akpm@linux-foundation.org>,
Sam Ravnborg <sam@ravnborg.org>,
John David Anglin <dave@hiauly1.hia.nrc.ca>
Subject: Re: [PATCH] parisc: fix module loading failure of large kernel modules (take 4)
Date: Wed, 31 Dec 2008 12:31:18 +0100 [thread overview]
Message-ID: <495B5806.3080505@gmx.de> (raw)
In-Reply-To: <200812310915.41693.rusty@rustcorp.com.au>
[PATCH 1/2] module.c: fix module loading failure of large kernel modules
When creating the final layout of a kernel module in memory, allow the
module loader to reserve some additional memory in front of a given section.
This is currently only needed for the parisc port which needs to put the
stub entries there to fulfill the 17/22bit PCREL relocations with large
kernel modules like xfs.
Differences of this patch to previous versions:
- added weak funtion arch_module_section_size()
- no kernel config options needed
- no overloading of sh_entsize
Signed-off-by: Helge Deller <deller@gmx.de>
diffstat:
include/linux/moduleloader.h | 4 ++++
kernel/module.c | 16 +++++++++++++---
2 files changed, 17 insertions(+), 3 deletions(-)
diff --git a/include/linux/moduleloader.h b/include/linux/moduleloader.h
index eb10339..f2b1b62 100644
--- a/include/linux/moduleloader.h
+++ b/include/linux/moduleloader.h
@@ -13,6 +13,10 @@ int module_frob_arch_sections(Elf_Ehdr *hdr,
char *secstrings,
struct module *mod);
+/* Additional bytes needed by arch in front of individual sections */
+unsigned int arch_module_section_size(struct module *mod,
+ unsigned int section);
+
/* Allocator used for allocating struct module, core sections and init
sections. Returns NULL on failure. */
void *module_alloc(unsigned long size);
diff --git a/kernel/module.c b/kernel/module.c
index 1f4cc00..5b91b17 100644
--- a/kernel/module.c
+++ b/kernel/module.c
@@ -1578,11 +1578,21 @@ static int simplify_symbols(Elf_Shdr *sechdrs,
return ret;
}
+/* Additional bytes needed by arch in front of individual sections */
+unsigned int __attribute__ ((weak)) arch_module_section_size(
+ struct module *mod, unsigned int section)
+{
+ /* default implementation just returns zero */
+ return 0;
+}
+
/* Update size with this section: return offset. */
-static long get_offset(unsigned int *size, Elf_Shdr *sechdr)
+static long get_offset(struct module *mod, unsigned int *size,
+ Elf_Shdr *sechdr, unsigned int section)
{
long ret;
+ *size += arch_module_section_size(mod, section);
ret = ALIGN(*size, sechdr->sh_addralign ?: 1);
*size = ret + sechdr->sh_size;
return ret;
@@ -1622,7 +1632,7 @@ static void layout_sections(struct module *mod,
|| strncmp(secstrings + s->sh_name,
".init", 5) == 0)
continue;
- s->sh_entsize = get_offset(&mod->core_size, s);
+ s->sh_entsize = get_offset(mod, &mod->core_size, s, i);
DEBUGP("\t%s\n", secstrings + s->sh_name);
}
if (m == 0)
@@ -1640,7 +1650,7 @@ static void layout_sections(struct module *mod,
|| strncmp(secstrings + s->sh_name,
".init", 5) != 0)
continue;
- s->sh_entsize = (get_offset(&mod->init_size, s)
+ s->sh_entsize = (get_offset(mod, &mod->init_size, s, i)
| INIT_OFFSET_MASK);
DEBUGP("\t%s\n", secstrings + s->sh_name);
}
next prev parent reply other threads:[~2008-12-31 11:31 UTC|newest]
Thread overview: 65+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-12-29 20:34 [PATCH] parisc: fix module loading failure of large kernel modules (take 2) Helge Deller
2008-12-29 20:34 ` Helge Deller
2008-12-29 20:43 ` [PATCH 1/2] module.c: fix module loading failure of large " Helge Deller
2008-12-29 20:43 ` Helge Deller
[not found] ` <20081230180724.GA15235@bombadil.infradead.org>
2008-12-30 18:10 ` Kyle McMartin
2008-12-30 18:18 ` Helge Deller
2008-12-30 19:42 ` [PATCH 1/2] module.c: fix module loading failure of large modules (take 3) Helge Deller
2008-12-29 20:45 ` [PATCH 2/2] parisc: fix module loading failure of large modules (take 2) Helge Deller
2008-12-29 20:45 ` Helge Deller
2008-12-30 19:55 ` [PATCH 2/2] parisc: fix module loading failure of large modules (take 3) Helge Deller
2008-12-30 19:55 ` Helge Deller
2008-12-30 22:45 ` [PATCH] parisc: fix module loading failure of large kernel modules (take 2) Rusty Russell
2008-12-30 23:02 ` Helge Deller
2008-12-31 4:08 ` Rusty Russell
2008-12-31 11:31 ` Helge Deller [this message]
2008-12-31 11:36 ` [PATCH 2/2] parisc: fix module loading failure of large modules Helge Deller
2008-12-31 13:32 ` [PATCH] parisc: fix module loading failure of large kernel modules (take 4) Rusty Russell
2008-12-31 14:13 ` Helge Deller
2009-01-01 0:52 ` Rusty Russell
2009-01-01 12:02 ` Helge Deller
2008-12-31 17:29 ` Linus Torvalds
2008-12-31 17:36 ` Roland Dreier
2008-12-31 17:47 ` Linus Torvalds
2008-12-31 18:02 ` Linus Torvalds
2008-12-31 18:11 ` Sam Ravnborg
2009-01-02 11:31 ` Ingo Molnar
2008-12-31 18:54 ` Andrew Morton
2008-12-31 21:22 ` Linus Torvalds
2008-12-31 22:14 ` David Miller
2009-01-02 11:55 ` [PATCH] kbuild: Disallow GCC 4.1.0 / 4.1.1 Ingo Molnar
2009-01-02 13:43 ` Bartlomiej Zolnierkiewicz
2009-01-02 15:21 ` [PATCH] kbuild: Remove gcc 4.1.0 quirk from init/main.c Ingo Molnar
2009-01-02 15:21 ` Ingo Molnar
2009-01-02 18:05 ` Sam Ravnborg
2009-01-02 16:49 ` [PATCH] kbuild: Disallow GCC 4.1.0 / 4.1.1 Linus Torvalds
2009-01-02 17:38 ` Linus Torvalds
2009-01-02 17:46 ` Ingo Molnar
2009-01-02 17:54 ` [PATCH] Disallow gcc versions 3.{0,1} Ingo Molnar
2009-01-02 17:58 ` [PATCH] kbuild: Disallow GCC 4.1.0 / 4.1.1 Linus Torvalds
2009-01-02 18:01 ` Ingo Molnar
2009-01-02 18:05 ` Linus Torvalds
2009-01-02 18:08 ` Linus Torvalds
2009-01-02 19:54 ` Willy Tarreau
2009-01-02 20:18 ` Linus Torvalds
2009-01-02 17:57 ` Sam Ravnborg
2009-01-02 18:04 ` Linus Torvalds
2009-01-02 18:27 ` Sam Ravnborg
2009-01-02 18:28 ` Randy Dunlap
2009-01-02 18:51 ` Al Viro
2009-01-02 19:14 ` Andi Kleen
2009-01-02 22:52 ` Al Viro
2009-01-03 14:03 ` Krzysztof Halasa
2009-01-02 18:22 ` Ingo Molnar
2009-01-02 18:29 ` Sam Ravnborg
2009-01-02 18:33 ` Ingo Molnar
2009-01-02 19:05 ` Detlef Riekenberg
2009-01-02 22:27 ` Benjamin Herrenschmidt
2009-01-02 22:37 ` Sam Ravnborg
2009-01-02 17:44 ` Ingo Molnar
2009-01-01 14:24 ` [PATCH] parisc: fix module loading failure of large kernel modules (take 4) Ingo Molnar
2009-01-01 16:37 ` Andrew Morton
2008-12-31 17:39 ` Helge Deller
2008-12-31 18:24 ` James Bottomley
2008-12-31 22:16 ` Rusty Russell
2009-01-01 7:12 ` Jeremy Fitzhardinge
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=495B5806.3080505@gmx.de \
--to=deller@gmx.de \
--cc=akpm@linux-foundation.org \
--cc=dave@hiauly1.hia.nrc.ca \
--cc=kyle@mcmartin.ca \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-parisc@vger.kernel.org \
--cc=randolph@tausq.org \
--cc=rusty@rustcorp.com.au \
--cc=sam@ravnborg.org \
--cc=torvalds@linux-foundation.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.